Міністерство освіти і науки, молоді та спорту України
Національний університет «Львівська політехніка»
/
КУРСОВА РОБОТА
з дисципліни
“Технології проектування компютерних систем”
на тему:
„ Розробка автономного робота”
Львів – 2012
Зміст
Завдання на проектування 3
Вступ 5
1. Розробка структури автоматизованого робота 6
1.1. Лінійка інфрачервоних детекторів лінії траси 7
1.2. Система бамперів 8
1.3. Система визначення положення повороту коліс 8
1.4. Драйвери двигунів 9
1.5. Приймач команд від суддів 10
1.6. Керуючий вузол 10
Висновки 10
2. Розробка керуючого модуля на базі мікроконтролера PSoC в середовищі проектування PSoC Designer 11
2.1. Система на кристалі PSoC 11
2.2. Цифрова конфігурована периферія PSoC 12
2.3. Аналогова конфігурована периферія PSoC 13
2.4. Методика розробки і засіб проектування PSoC Designer 14
2.5. Реалізація автономного управління робота 15
Висновок 17
Додатки 18
Завдання на проектування
Розробити мобільний гоночний робот, призначений для участі в змаганнях Roborace [http://www.roborace.te.ua/]. Основним завданням робота є проїхати певну кількість кіл траси за найкоротший термін. Траса представляє собою набір концентричних ліній чорного кольору на білому фоні, обмежених бортами. Основні функції, які повинен виконувати мобільний гоночний робот:
керування рухом повинне здійснюватися в автоматичному режимі;
під час руху забороняються зіткнення робота з іншими роботами та бортами траси;
об’їзд перешкод на трасі (інших роботів) може здійснюватися з будь якої сторони.
Мобільний гоночний робот будується за класичним, для автомобілів, компонуванням і складається з наступних підсистем:
виконавчі механізми;
вимірювальна підсистема;
підсистема керування.
Виконавчі механізми призначені для забезпечення керованого руху робота і складаються з:
курсового колекторного двигуна призначеного для забезпечення обертання ведучих коліс з заданою швидкістю та у заданому напрямку;
сервопривода або колекторного двигуна призначеного для встановлення направляючих коліс під заданим кутом до осі робота для забезпечення руху по заданій траєкторії.
Вимірювальна підсистема призначена для визначення параметрів руху робота, положення робота відносно смуг траси, її бортів та інших роботів і складається з:
курсового дальноміру (дальномірів) призначеного для визначення відстані до найближчої перешкоди розташованої по напрямку руху робота;
бокового дальноміру (дальномірів) призначених для визначення відстаней до бокових перешкод;
контактних вимикачів призначених для визначення зіткнень з перешкодами, які не були виявлені дальномірами;
спідометр призначений для вимірювання швидкості руху;
сенсор положення направляючих коліс призначений для визначення куту повороту направляючих коліс;
Вступ
Системам безпілотних автономних засобів пересування відводиться чільне місце в науковій розвідці та дослідженнях, це пов’язано як і з відсутністю можливості забезпечення керування людиною, так і нездатністю оператора об’єктивно реагувати на деякі ситуації. А оскільки таке керування набуває все більшого поширення, то і вимоги до таких систем стають вищими, що в свою чергу вимагає як більшої гнучкості, продуктивності та функціональності від вузлів обробки та управління, так і нових рішень в апаратній складовій.1. Розробка структури автоматизованого робота
Завданням розроблюваного гоночного робота є участь у змаганнях – перегонах роботів, виходячи з цього перед ним ставляться наступні вимоги: пересування в просторі, моніторинг зовнішнього середовища і реакція на подразники (наявність перешкоди, наявність доріжки).
Аналізуючи висунуті вимоги можна конкретизувати структурні одиниці робота та відповідальне за їх функціонування апаратне забезпечення. Перш за все це система приводів, які дозволяють пересуватися у горизонтальній площині в довільному напрямі. По-друге, це система виявлення перешкод, яка б дозволяла роботу своєчасно виявляти, отже, і оминати їх. По-третє, мусить бути система детектування доріжок траси, що дозволятиме безперервно слідкувати і слідувати по одній з них. По-четверте, необхідна наявність мусить бути IRDA приймача команд від суддів. Таким чином виділено такі апаратні складові робота: двигун приводу і відповідний йому драйвер; двигун керма і драйвер даного двигуна; система бамперів для виявлення перешкод; система відслідковування доріжок траси; IRDA приймач команд від суддів; вузол керування пересуванням і реагування на подразники. Загальна структурна схема робота представлена на рис.1.
/
Рис.1.1. Загальна структурна схема автоматизованого робота
Як базу для побудови робота був обраний іграшковий автомобіль, оскільки його платформа задовільняє висунутим вимогам функціональності в просторовому пересуванні. Із штатного обладнання іграшки використано:
механічна частина;
двигун приводу;
рульовий двигун;
акумуляторна батарея.
Для забезпечення автономності керування розроблено наступні засоби:
лінійка інфрачервоних детекторів лінії траси;
система бамперів;
керуючий вузол;
1.1. Лінійка інфрачервоних детекторів лінії траси
Лінійка інфрачервоних детекторів вказує поточне відносне місце розташування лінії траси, на якій знаходиться гоночний робот, шляхом визначення різниці відбивання світла на контрастних об’єктах(лініях розмітки).
/
Рис. 1.2. Паринципова схема оптопари детекторів розмітки траси
/
Рис. 1.3. Принципова схема системи детекторів розмітки траси
Вона складається з 7-ми пар фото-транзисторів і інфрачервоних випромінювачів, що дозволяє детектувати відповідну кількість положень пристрою відносно доріжки. Електрична принципова схема однієї пари показана на рис.2, на рис.3 зображена загальна структурна схема даної системи детекторів.
Ширина бампера більша ніж відстань між лініями розмітки, тому на трасі принаймні одна з оптопар гарантовано детектує лінію. Ширина однієї оптопари забезпечують гарантоване детектування лінії у випадку, коли лінія є між двома сусідніми оптопарами.
Вихідний сигнал кожної оптопари є лог. 1”, якщо лінія детектується, інакше лог. “0” .
1.2. Система бамперів
Система бамперів забезпечує інформування центрального вузла про наявність різноманітних об’єктів в зоні контакту. Вона складається з керуючого пристрою та необхідної кількості контактних вимикачів (кнопка).
Також до вищезгаданої системи входять боковий та курсовий дальноміри (оптичні інфрачервоні дальноміри фірми Sharp), які повідомлятимуть про перешкоду спереду та з боків авто.
1.3. Система визначення положення повороту коліс
Оскільки система керування переміщення пристрою в просторі передбачає використання рульового керування то постає необхідність моніторингу поточного положення рульового механізму. Оскільки для керування колесами ми використовуємо сервопривід, необхідно забезпечити відповідні керуючі сигнали.
Більшість наявних на ринку сервоприводів керуються ШІМ модульованими сигналами із мевною тривалістю позитивного імпульсу: 1мс – крайнє ліве положення,: 2мс – крайнє праве положення.
1.4. Драйвери двигунів
В базовій машині є два колекторних двигуна, які забезпечують рух вперед/назад та поворот коліс ліворуч/праворуч.
Для керування двигунами необхідно забезпечити подачу напруги живлення на 12В на двигуни. Крім того необхідно забезпечити режим реверсу(коли напруга -12В).
/
Рис. 1.4. Драйвер привідного мотору
Пускові струми двигунів складають 1.3А і 0.6А, робочі струми складають 0,4А та 0,3А. А тому для керування електричним приводом пристрою постає необхідність в потужному драйвері двигунів, який дозволяв би керувати частотою обертання. Для рульового двигуна можна задовільним є використання мікросхеми L298, яка цілком відповідає висунутим параметрам
1.5. Приймач команд від суддів
Для отримання команд від суддів використовується інфарчервоний приймач, який забезпечується організаторами змагань. Нам необхідно лише розмістити дану схему у коло живлення нашого робота.
1.6. Керуючий вузол
Основним алгоритмічним вузлом системи є керуючий вузол, який реалізований на PSoC фірми Cypress. Загальна структура взаємодії АЗ робота і керуючого пристрою показана на рис.10.
/
Рис. 1.5. Структура взаємодії модулів робота і вузла керування
Висновки
У даному розділі роглянута узагальнена структурна модель автоматизованого гоночного робота, а також апаратні рішення реалізації його основних вузлів.
2. Розробка керуючого модуля на базі мікроконтролера PSoC в середовищі проектування PSoC Designer
2.1. Система на кристалі PSoC
PSoC - це 8-розрядний мікроконтролер з ядром М8С, з конфігурованою цифровою периферією та конфігурованими аналоговими елементами. Назва розшифровується як «програмована система на кристалі» (Programmable SoC). Концепція PSoC була розроблена фахівцями Cypress (Cypress MicroSystems). PSoC має невеликий набір стандартної периферії та блок конфігурованих елементів, який виділяє ці мікроконтролери з пристроїв тієї ж цінової категорії. Конфігуровані елементи (блоки) розділені на дві групи:
аналогові, призначені для побудови ЦАП, АЦП, компараторів, активних фільтрів і т. п.;
цифрові, призначені для побудови лічильників, ШІМ, послідовних каналів передачі, послідовного інтерфейсу з периферією (SPI), універсальних асинхронних прийомопередатчиків (UART), зсувних регістрів із зворотними зв'язками для генерації псевдовипадкової послідовності та обчислення контролю з використанням циклічного надлишкового коду ( CRC) і т. п.
/
Рис. 2.1. Структурна схема PSoC
Дуже цікавою є процедура конфігурації блоків - біти управління розташовані в просторі вводу-виводу ядра, і тому конфігурація аналогової і цифрової периферії представляє собою запис відповідних значень в необхідні регістри під час виконання програми. Тобто під час виконання програми архітектура системи (набір периферії) може бути змінена! Це означає, що при розробці системи можна призначити один і той же конфігурований блок для виконання різних завдань (якщо завдання розділені за часом) і уникнути надлишкової витрати ресурсів.
2.2. Цифрова конфігурована периферія PSoC
Цифрова підсистема PSoC дозволяє реалізувати необхідні розробнику периферійні функції, задавши конфігурацію цифрових блоків PSoC та їх взаємозв'язок.
Конфігурована цифрова підсистема дозволяє реалізувати лічильники, таймери, ШІМ, генератори випадкових послідовностей, блоки CRC, а також контролери інтерфейсу SPI, інфрачервоний приймач-передавач і UART. До цифрової периферії PSoC відносяться також контролер шини I2C, помножувач і блок проріджування (Decimator), який використовується для створення АЦП. Однак, оскільки ці блоки є фіксованими апаратними модулями, то в структурі PSoC вони віднесені до системних ресурсів, а не до цифрової підсистеми.
2.3. Аналогова конфігурована периферія PSoC
Аналогова підсистема PSoC включає в себе:
масив аналогових блоків, оточених лініями зв'язку;
мультиплексори вхідних сигналів;
систему аналогового інтерфейсу;
прискорювач операції послідовного наближення;
джерело опорних напруг для аналогових схем.
Завдяки конфігуровані аналоговим блокам, їх комбінації або комбінації аналогових і цифрових блоків стає можливим створення усередині мікросхеми PSoC наступних функцій:
дельта-сигма АЦП;
АЦП послідовного наближення;
інтегруючий АЦП;
ЦАП;
програмований підсилювач;
аналоговий компаратор;
детектор нуля;
вибірка-зберігання;
смуговий фільтр;
загороджувальний фільтр;
амплітудний модулятор і демодулятор;
генератор синусоїди;
детектор синусоїдального сигналу;
детектування бічних частот (Sideband Detection);
видалення бічних частот (Sideband Stripping);
температурний датчик;
аудіо вихід;
DTMF-генератор;
FSK-модулятор;
вбудований модем.
Більшість цих функцій доступні у вигляді готових модулів в бібліотеці середовища проектування PSoC Designer. Однак завдяки достатньо розвинутій системі комутації всередині кристалу, а також тому, що аналогову периферію можна конфігурувати вручну, перелік перерахованих функцій які можна реалізувати може бути розширений самим користувачем.
Аналогові блоки архітектурно розділені на три типи. Перший тип - блок, побудований на базі операційного підсилювача з програмованою матрицею резисторів в зворотніх зв'язках (Continuous Time PSoC Block - CT). Два інших побудовані на базі операційного підсилювача з комутованими конденсаторами (Switched Capacitor PSoC Block - SC). Як приклад, на Рис. 3. наведена структура аналогового блоку з матрицею резисторів.
В системі управління розробленого безпілотного гоночного робота з аналогової периферії використано АЦП, на базі якого побудований омметр.
2.4. Методика розробки і засіб проектування PSoC Designer
Для проектування систем на базі мікроконтролерів PSoC використовується інтегроване середовище розробки програмного забезпечення PSoC Designer. Спочатку при роботі над проектом користувач вибирає з бібліотеки готові користувальницькі модулі, які можуть розміщуватися в одному або декількох блоках. Кожен блок має документацію і опис API, тобто набору функцій, які слід викликати для роботи з модулем. Також серед користувальницьких модулів є модулі, які є звичайними бібліотечними функціями і не змінюють конфігурацію блоків і міжблокових з'єднань. Потім користувач переходить до етапу проектування, в якому вибрані модулі розміщуються в блоках і з'єднуються між собою і входами-виходами.
Після цього запускається процес генерації програми, який створює бібліотеки та заголовочні файли. Також створюється «скелет» програми, який буде використовуватися при написанні програми для роботи з отриманою периферією. Конфігурація, як процес, являє собою програму завантаження відповідних значень в регістри конфігураційного простору.
Наступним кроком є розробка програми користувача, яка ведеться так само, як і в пристрої з «жорсткою» периферією. Після цього виконується процедура складання коду «make».
2.5. Реалізація автономного управління робота
Автономне управління робота реалізоване на базі мікроконтролера PSoC.
/
Рис. 2.2. Внутрішнє представлення периферії яку використовує МК PSoC.
МК PSoC приймає інформацію про перешкоди від контактних бамперів (кнопок) та інфрачервоних бамперів (дальномірів), обробляє інформацію отриману з вищеописаного детектора смуг і здійснює керування двигунами гоночного авто – робота. Реалізація роботи МК організована таким чином: мікроконтролер приймає бітову маску (7 біт, так як на детекторі смуг ми розмістили 7 фототранзисторів на певній відстані один від одного) з детектора смуг; паралельно відбувається обробка даних які поступають від бамперів; відповідно до отриманих даних здійснюється управління двигунами для коректного пересування по трасі.
Код управління мікроконтролером див. у дод. 1.
Висновок
У даній курсовій роботі було розглянуто основні принципи побудови автономного мобільного робота на базі іграшкової моделі автомобіля. Було розглянуто сенсорні та керуючі підсистеми необхідні для повноцінного функціонування робота, які забезпечують виконання основного завдання: проїхати певну кількість кіл, яка представляє собою набір концентричних ліній чорного кольору на білому фоні, обмежених бортами.
Елемнети системи, які встановлюються як готові покупні модулі:
смуга давачів на відбиття;
оптичні інфрачервоні дальноміри;
контактні бампери – кнопки;
рульовий сервопривід;
драйвер колекторного двигуна.
Відповідно до завдання були розроблені електрична функціональна та принципова схеми.
Керуючий елемент (мікроконтролер) PSoC дозволяє реалізувати всю периферію всередині самого мікроконтролера, що дозволило зменшити витрати на такі елементи периферії як ШІМ модулятори та АЦП. Відповідно для розробки використовувалась система проектування PSoC Designer, особливістю якої є можливість емуляції роботи мікроконтролера.
Додатки
Додаток 1. Код керування
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h> // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules
#define SPEED_MAX 220
#define SPEED_MIDD 190
#define SPEED_MIDDLE 190
#define SPEED_LOW 190
#define SPEED_LOW_LOW 190
#define SPEED_STOP 0
#define LEFT_MID 30
#define LEFT_MAX 28#define RIGHT_MID 36
#define RIGHT_MAX 40
#define CENTER 35
short int status;
char tc,tl,tr,tll,trr,t,key_l,key_r;
int obs_r,obs_l,obs_c;
void TURN(short int direction); //Функція повороту
int FindLine(); //пошук найближчої до центру лінії
void SPEED(char sp);
void wait();
void wait_s();
int reload();
void stabilization();
void INIT();
// Function to print the welcome screen
void welcomeScreen(void);
void left_obstacle();
void right_obstacle();
void center_obstacle();
void left_key();
void right_key();void STOP()
{
PWM_SPEED_WritePulseWidth(0);
PWM8_BACK_WritePulseWidth(0);
}void goForward(char sp)
{
PWM8_BACK_WritePulseWidth(0);
PWM_SPEED_WritePulseWidth(sp);
}void goBack(char sp)
{
PWM_SPEED_WritePulseWidth(0);
PWM8_BACK_WritePulseWidth(sp);
}void main(void){
int angle = 0;
int speed = 0, q;
char st;
// Parameter pointer
char *strPtr;
char command;
INIT();
//Clear the screen in Hyper terminal window
UART_CmdReset();
//Turn on interrupts
M8C_EnableGInt ;
UART_IntCntl(UART_ENABLE_RX_INT);
//set parity as zero and start the UART
UART_Start(UART_PARITY_NONE); TURN(50);
goForward(10);
//Clear the screen in Hyper terminal window
UART_PutChar(13);
welcomeScreen();
for(q=0;q<500;q++);
// Print welcome screen
//welcomeScreen();
while(1) {
if (UART_bCmdCheck()) { // Wait for command Terminator
if(strPtr = UART_szGetParam()) { // More than delimiter?
UART_CPutString("\n\rFound valid command\r\nCommand =>");
UART_PutString(strPtr); // Print out command
UART_CPutString("<\r\nParameters:\r\n");
command=strPtr[0];
if(command == 's')
{
UART_CPutString("\n STOP()\n");
STOP();
}
else if(command == 'd')
{
// loop on each parameter till a null pointer is returned
strPtr = UART_szGetParam();
UART_CPutString(" <");
UART_PutString(strPtr); // Print each parameter
// Speed:
speed = atoi(strPtr);
UART_CPutString(">\r\n");
// loop on each parameter till a null pointer is returned
strPtr = UART_szGetParam();
UART_CPutString(" <");
UART_PutString(strPtr); // Print each parameter
// Angle:
angle = atoi(strPtr);
UART_CPutString(">\r\n");
TURN(angle);
if(speed > 0)
{
UART_CPutString("Forward");
goForward((char)speed);
}
else
{
UART_CPutString("Back");
goBack((char)speed);
}
}
else
{
UART_CPutString("\n\rUnsupported command=>");
}
}
//Reset command buffer and flags
UART_CmdReset();
// Print Welcome String
welcomeScreen();
}
}
}// Function to print the welcome screen
void welcomeScreen(void)
UART_CPutString("\nConnected. Ready to run");
UART_CPutString("\n\r");
}void SPEED(char sp){
PWM_SPEED_WritePulseWidth(sp);
}void TURN(short int direction){
if (direction<12)
{
PWM_TURN_WritePulseWidth(LEFT_MAX);
UART_CPutString("Turn LEFT MAX \n");
}
else if (direction<37)
{
PWM_TURN_WritePulseWidth(LEFT_MID);
UART_CPutString("Turn LEFT MID \n");
}
else if (direction<62)
{
PWM_TURN_WritePulseWidth(CENTER);
UART_CPutString("Turn CENTER \n");
}
else if (direction<87)
{
PWM_TURN_WritePulseWidth(RIGHT_MID);
ART_CPutString("Turn RIGHT MID \n");
}
else {
PWM_TURN_WritePulseWidth(RIGHT_MAX);
UART_CPutString("Turn RIGHT MAX /n");
}
}void wait(){
int j=0;
for(j=0;j<1000;j++);
}void wait_s(){
int j=0;
for(j=0;j<800;j++);
}void INIT(){
PWM_TURN_DisableInt();
PWM_TURN_Start();
PWM_SPEED_DisableInt();
PWM8_BACK_DisableInt();
PWM_SPEED_Start();
PWM8_BACK_Start();
PGA_1_Start(PGA_1_HIGHPOWER);
SAR6_1_Start(SAR6_1_HIGHPOWER);}
Додаток 2. Друкована плата
/