Розробка робота для керування електродвигунами за допомогою програми

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информатика, ВТ, телекоммуникации
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    796,78 Кб
  • Опубликовано:
    2012-09-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Розробка робота для керування електродвигунами за допомогою програми














Розробка робота для керування електродвигунами за допомогою програми

ЗМІСТ

Завдання на проект

Реферат

Перелік умовних позначень, символів, одиниць, скорочень і термінів

Вступ

. Аналіз функціональної схеми мікроконтролера

. Призначення виводів мікроконтролера

. Розробка технічного завдання на пристрій

. Розробка функціональної схеми пристрою

. Розробка принципової схеми пристрою з вибором додаткових елементів

. Розробка алгоритму роботи пристрою з описом алгоритму

Висновки

ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ, СИМВОЛІВ, ОДИНИЦЬ, СКОРОЧЕНЬ І ТЕРМІНІВ

робот мікроконтролер електродвигун

Скорочення

Слово (словосполучення)

МК  ОС ПЗ ПК Рис. С.  табл. АЦП  ШД  БЖ

- мікроконтролер - операційна система - пояснювальна записка - персональний комп'ютер - рисунок - сторінка - таблиця - аналогово-цифровий перетворювач - шаговий двигун - блок живлення


ВСТУП

- найбільша виробнича лінія серед інших флеш-мікроконтролерів корпорації Atmel. Прогрес даної технології спостерігався в зниженні питомої енергії споживання (мА / МГц), розширення діапазону живлячих напруг (до 1.8 В) для продовження ресурсу батарейних систем, збільшення швидкодії до 16 млн. операцій в секунду, вбудовуванням емуляції в реальному масштабі часу, реалізації функції самопрограмування, вдосконалення і розширення кількості периферійних модулів, вбудовуванні спеціалізованих пристроїв (радіочастотний передавач, USB-контролер, драйвер ЖКИ, програмувальна логіка, контролер DVD, пристрої захисту даних) та ін.

Успіх AVR-мікроконтролерів пояснюється можливістю простого виконання проекту з досягненням необхідного результату в найкоротші терміни, чому сприяє доступність великої кількості інструментальних засобів проектування, що поставляються, як безпосередньо корпорацією Atmel, так і сторонніми виробниками. Провідні сторонні виробники випускають повний спектр компіляторів, програматорів, Асемблер, відладчиком, роз'ємів і адаптерів. Відмінною рисою інструментальних засобів від Atmel є їх невисока вартість.

Іншою особливістю AVR-мікроконтролерів, яка сприяла їх популяризації, це використання RISC-архітектури, що характеризуються потужним набором інструкцій, більшість яких виконуються за один машинний цикл. Це означає, що при рівній частоті тактового генератора вони забезпечують продуктивність в 12 (6) разів більше продуктивності попередніх мікроконтролерів на основі CISC-архітектури (наприклад, MCS51). З іншого боку, в рамках однієї програми з заданим швидкодією, AVR-мікроконтроллер може тактуватися в 12 (6) разів меншою тактовою частотою, забезпечуючи рівну швидкодію, але при цьому споживаючи набагато меншу потужність. Таким чином, AVR-мікроконтролери представляють більш широкі можливості щодо оптимізації продуктивності / енергоспоживання, що особливо важливо при розробці додатків з батарейним харчуванням. Мікроконтролери забезпечує продуктивність до 16 млн. оп. за секунду і підтримують флеш-пам'ять програм різної ємності: 1 ... 256 кбайт. AVR-архітектура оптимізована під мову високого рівня С, а більшість представників сімейства megaAVR містять 8-канальний 10-розрядний АЦП, а також сумісний з IEEE 1149.1 інтерфейс JTAG або debugWIRE для вбудованого налагодження.

1. АНАЛІЗ ФУНКЦІОНАЛЬНОЇ СХЕМИ МІКРОКОНТРОЛЕРА

У даному проекті використовується мікроконтролер ATMega8. Його функціональна схема зображена на рисунку 1.1.

Рисунок 1.1 - Функціональна схема мікроконтролера ATMega8

Мікроконтролер ATMega8 складається з таких основних блоків:

8-розрядний арифметично - логічний пристрій (АЛП);

внутрішня флеш-пам'ять програм обсягом 8 Кбайт з можливістю внутрішньосистемного програмування через послідовний інтерфейс;

32 регістра загального призначення;

внутрішню EEPROM пам'ять даних об'ємом 512 байт;

внутрішнє ОЗУ даних об'ємом 1 Кбайт;

6 паралельних 8-розрядних портів;

4 програмованих таймера-лічильника;

10-розрядний 8-канальний АЦП і аналоговий компаратор;

послідовні інтерфейси UART0, UART0, TWI і SPI;

блоки переривання і управління (включаючи сторожовий таймер);

вбудована периферія ;

два 8-розрядних таймера/лічильника з окремим попереднім дільником, один з режимом порівняння;

один 16-розрядний таймер / лічильник з окремим попередніми дільником і режимами захоплення і порівняння;

лічильник реального часу з окремим генератором;

три канали PWM;

8-канальний аналого-цифровий перетворювач (в корпусах TQFP і MLF);

6 каналів з 10-розрядної точністю;

2 канали з 8-розрядної точністю;

6-канальний аналого-цифровий перетворювач (в корпусі PDIP) ;

4 канали з 10-розрядної точністю;

2 канали з 8-розрядної точністю;

байт-орієнтований 2-проводний послідовний інтерфейс;

програмований послідовний USART;

послідовний інтерфейс SPI (ведучий / ведений);

програмований сторожовий таймер з окремим вбудованим генератором;

вбудований аналоговий компаратор.

2. ПРИЗНАЧЕННЯ ВИВОДІВ МІКРОКОНТРОЛЕРА

Мікроконтролер ATMega8 має 28 виводів у корпусі PDIP, які зображені на рисунку 2.1.

Рисунок 2.1 - Призначення виводів мікроконтролера ATMega8 у корпусі PDIP

Мікроконтролер ATMega8 має 32 виводи у корпусі TQFP, які зображені на рисунку 2.2.

Рисунок 2.2 - Призначення виводів мікроконтролера ATMega8 у корпусі TQFP

, GND напруга живлення та заземлення відповідно.

Порт B (PB7.. PB0) 8-розрядний двонаправлений порт з вбудованими навантажувальними резисторами. Вихідні буфери забезпечують струм 20 мА. При використанні виводів порту у якості входів та встановленні зовнішнього сигналу в низький стан, струм буде витікати тільки при увімкненних навантажувальних резисторах. Порт В використовується також при реалізації спеціальних функцій.

Порт C (PC5.. PC0) 8-розрядний вихідний порт. Вихідні буфери забезпечують струм 20 мА. Порт C за наявності зовнішньої пам’яті даних використовується для організації шини адреси.

#RESET Вхід скидання. Для виконання скидання необхідно утримувати низький рівень на вході більш ніж 50 нс.D (PD7..PD0) 8-розрядний двонаправлений порт з вбудованими навантажувальними резисторами. Вихідні буфери забезпечують струм 20 мА. При використанні портів у якості входів та встановленні зовнішнього сигналу в низький стан, струм буде витікати тільки при підключених вбудованих навантажувальних резисторах. Порт D використовується також при реалізації спеціальних функцій., XTAL2 Вхід та вихід інвертую чого підсилювача генератора тактової частоти. , TOSC2 Вхід та вихід інвертую чого підсилювача генератора

таймера/лічильника.напруга живлення аналого-цифрового перетворювача. Вивід під’єднується до VCC через низькочастотний фільтр.вхід опорної напруги для аналого-цифрового перетворювача. На цей вивід подається напруга у діапазоні між AGND и AVCC.цей вивід має бути під’єднаний до окремого аналогового заземлення, якщо воно є на платі. В іншому випадку вивід під’єднується до загального заземлення.

3. РОЗРОБКА ТЕХНІЧНОГО ЗАВДАННЯ НА ПРИСТРІЙ

Розробити робота на базі мікроконтролера ATMega8 з можливістю керування електродвигунами за допомогою програми. За допомогою фотодатчику реалізувати можливість руху роботу по прямій та кривій лініям. За допомогою програми реалізувати поворот робота на деякий кут. Вся інформація, що записується до внутрішньої пам’яті пристрою повинна зберігатися в ньому після вимкнення живлення, при чому схема повинна гарантувати повне збереження всієї інформації навіть у випадку непередбаченого вимкнення живлення. Забезпечити виявлення ліній пересічення. При русі робота по лінії можлива поява пересічення ліній. У такому випадку робот повинен призупинитися на цій лінії. Також за допомогою вбудованого динаміку робот повинен видати звуковий сигнал, при чому якщо пересічень декілька, то кількість звукових сигналів буде змінюватися лінійно.

4. РОЗРОБКА ФУНКЦІОНАЛЬНОЇ СХЕМИ ПРИСТРОЮ

Робот базується на одному мікроконтролері ATMega та драйвері двигунів L293D. Функціональна схема пристрою зображена на рисунку 4.1.

Рисунок 4.1- Функціональна схема пристрою

Фотодатчик 1 та фотодатчик 2 складаються з двох частин: світло діод, що є джерелом світла і самого фото транзистора, який сприймає відбите світло. Якщо поверхня світла, то відбитого світла достатньо для відкриття фототранзистори, в іншому випадку фототранзистори буде закрито (не буде пропускати струм).

Використання фототранзистора обумовлено тим, що швидкість його спрацьовування висока і достатня навіть при дуже швидкому русі робота. Використання фотодіодів також є недопустимим. Фоторезистори мають невисоку швидкість спрацьовування, і її може бути недостатньо при високій швидкості руху робота. Світлодіод і фото транзистор розділені перешкодою, щоб світло від джерела не потрапляло на фото транзистор та не спричиняло завад.

На фотодатчик 1 і фотодатчик 2 потрапляє світло,відбите від поверхні під деяким кутом (кути відбивання різних за кольором поверхонь - різні), а операційні підсилювачі ОУ1 і ОУ2 підсилюють сигнал з фотодатчика та передають його до АЦП. АЦПв свою чергу перетворює сигнал з фотодатчика на цифрові десятирозрядний дані D0-D10. Дані з обох датчиків обробляються в ядрі мікроконтроллера ATMega 8. Їх рівні порівнюються за допомогою логічних і арифметичних дій, і залежно від результату порівняння приймається рішення про напрямок руху всієї конструкції робота.

Крім того, на вирішення схеми управління впливає замикання контактів перешкоди, встановлених ззаду і спереду конструкції. Якщо робот натрапив на перешкоду, то він повинен від'їхати назад і повернути на деякий кут наліво або на право, залежно від програми, щоб об'їхати перешкоду. Схема управління через порти А і В подає код у драйвери обмоток D1-D4, які можуть комутувати струм через обмотку в обох напрямках. Драйвер побудований на базі контролера L293D.

По мірі протікання струму в обмотках збудження виникає обертаюче магнітне поле. Вал ШД1 і ШД2, у свою чергу, обертається згідно послідовності збудження магнітного поля. При подачі певної послідовності коду ШД1 і ШД2 обертаються, і конструкція рухається прямо або повертає вбік.

5. РОЗРОБКА ПРИНЦИПОВОЇ СХЕМИ ПРИСТРОЮ З ВИБОРОМ ДОДАТКОВИХ ЕЛЕМЕНТІВ

У якості драйвера двигунів використовується мікросхема L293D, входи якої приєднані до виводів мікроконтролера так, як показано на схемі. На схемі робота входи драйвера двигунів L293D підключені до виводів порту C мікроконтролера ATmega8, але їх можна підключити до будь-якого з портів мікроконтролера (при цьому буде необхідно внести зміни в програмну частину, вказавши порт і безпосередньо його виводи відповідних рядках програми). У схемі використовується мікросхема TL499A. Саме вона дає можливість працювати схемі з необхідним рівнем стабільності. Забезпечення стабілізації напруги - один з найважливіших аспектів проектування пристроїв на мікроконтролерах.

Принципова схема пристрою вказана на рисунку 5.1.

Далі приведений список елементів, що використовуються у проекті:

MOTOR A, MOTOR B - шагові двигуни;

CR1 - кварцовий генератор на 16 МГц;

20 резисторів 150Ом;

резистор 0,47Ом;

два резистори 47Ом;

два резистори 4,7кОм;

чотири резистори 1кОм;

резистор 30кОм;

резистор 10кОм;

мікроконтролери ATMega8, L293D, TL499A;

два конденсатори ємністю 1000мкФ/ 6,3В;

10 конденсаторів ємністю 0,1мкФ / 50В;

конденсатор ємністю 10 мкФ / 16В;

конденсатор ємністю 220 мкФ / 16В;

чотири кнопки;

п’ять світлодіодів;

катушка індуктивності 50 мГн.

Рисунок 5.1 - Принципова схема пристрою

. РОЗРОБКА АЛГОРИТМУ РОБОТИ ПРИСТРОЮ З ОПИСОМ АЛГОРИТМУ

Для керування роботом, його треба запрограмувати. Для цього створюється спеціальна програма, яка потім завантажується в мікроконтролер.

Для розробки програмного алгоритму використовується середа WINAVR. Дана середа розробки містить у собі наступні компоненти:Notepad - зручний редактор програміста та інтегрована середа розробки(IDE);GCC - компілятор мов C и C++ для AVR;libc - стандартна С бібліотека для використання з GCC;as - ассемблер для микроконтроллерів AVR;- программатор (программа для загрузки та вигрузки коду микроконтроллерів);gui - графічний інтерфейс користувача для AVRDUDE;- автоматичний генератор Make-файлів for AVR GCC;Binutils - утиліти для AVR (Debugger (GDB) - дебагер (відладчик) с інтерфейсом командного рядка; - дебагер (відладчик) с графичним інтерфейсом користувача;(JTAG ICE interface) - программа для інтерфейсів Atmel JTAG ICE;- симулятор GDB с подтримкою симулятора від AVR;

Нижче приведена програма для обертання двигунами вперед та назад

#include <avr/io.h>

/***************** Функція затримки ****************/delay(unsigned short ms) // Мінімальна затримка кварцем 8 МГц - 1 мс

{short i, j, k; // оголошення змінних

                   (i=0; i<ms; i++) // головний цикл формування затримки (j=0; j<185; j++) // побічний цикл формування затримки ++; // довільна дія

}

/****************************************************/main(void) // початок головної програми

{= 0xff; // всі виводи порту C сконфігурувати як виходи(1) { // Незкінченний цикл

// ---------- обертання двигунів вперед 1 сек ----------|= _BV(PC1); // встановити "1" на лінії 1 порту C&= ~_BV(PC2); // встановити "0" на лінії 2 порту C|= _BV(PC3); // встановити "1" на лінії 3 порту C&= ~_BV(PC4); // встановити "0" на лінії 4 порту C(1000); // затримка 1 сек.

// --------------------------------------------------

// ---------- обертання двигунів назад 1 сек ----------&= ~_BV(PC1); // встановити "0" на лінії 1 порту C|= _BV(PC2); // встановити "1" на лінії 2 порту C&= ~_BV(PC3); // встановити "0" на лінії 3 порту C|= _BV(PC4); // встановити "1" на лінії 4 порту C(1000); // затримка 1 сек.

// --------------------------------------------------

}

}

Рух прямо з поворотом

#include <avr/io.h>

/***************** Функція затримки ****************/delay(unsigned short ms) // // Мінімальна затримка кварцем 8 МГц - 1 мс

{short i, j, k; // оголошення змінних

                   (i=0; i<ms; i++) // головний цикл формування затримки(j=0; j<185; j++) // побічний цикл формування затримки++; // довільна дія

/****************************************************/main(void) // початок головної програми

{

= 0xff; // всі виводи порту C сконфігурувати як виходи

(1) { // Незкінченний цикл

// ---------- обертання двигунів вперед 1 сек ------------

|= _BV(PC1); // встановити "1" на лінії 1 порту C&= ~_BV(PC2); // встановити "0" на лінії 2 порту C|= _BV(PC3); // встановити "1" на лінії 3 порту C&= ~_BV(PC4); // встановити "0" на лінії 4 порту C

(1000); // ждем 1 сек.

// ----------------------------------------------------

// ---------- двигун M2 зупиняється на 0,5 сек ------

|= _BV(PC1); // встановити "1" на лінії 1 порту C|= _BV(PC2); // встановити "1" на лінії 2 порту C

(500); // затримка 0,5 сек.

// ----------------------------------------------------

}

}

Рух двигунами з використанням фотодатчика

#include <avr/io.h>main(void) // початок головної програми

{

= 0xff; // всі виводи порту C сконфігурувати як виходи= 0x00; // всі виводи порту D сконфігурувати як виходи

= 0xff; // встановити "1" на на всіх виводах порту D,

(1) { // нескінченний цикл

                   // перевірка сигналів низького рівня від фотодатчиків

                  if (!(PIND & (1<<PIND1))) // перевірка "0" на лінії 1 порту D

                   {

                   // ---------- обертання двигунів вперед ----------

                   PORTC |= _BV(PC1); // встановити "1" на лінії 1 порту C

                   PORTC &= ~_BV(PC2); // встановити "0" на лінії 2 порту C

                   PORTC |= _BV(PC3); // встановити "1" на лінії 3 порту C

                   PORTC &= ~_BV(PC4); // встановити "0" на лінії 4 порту C

                   // --------------------------------------------------

                   }

                   else

                   {

// ---------- обертання двигунів назад ----------

&= ~_BV(PC1); // встановити "0" на лінії 1 порту C|= _BV(PC2); // встановити "1" на лінії 2 порту C&= ~_BV(PC3); // встановити "0" на лінії 3 порту C|= _BV(PC4); // встановити "1" на лінії 4 порту C

// --------------------------------------------------

                   }

}

}

Програма для руху робота по лінії

#include <avr/io.h>main(void) // початок головної програми

{

= 0xff; // всі виводи порту C сконфігурувати як виходи= 0x00; // всі виводи порту D сконфігурувати як виходи

= 0xff; встановити "1" на на всіх виводах порту D,

                    // вмикаються підтягуючи резистори

(1) { // нескінченний цикл

                   // перевірка сигналів низького рівня від фотодатчиків

                   if (!(PIND & (1<<PIND1))) // перевірити "0" на лінії 1 порту D

                   {

                   // ---- вмикається лівий двигун, зупиняється правий -----

                   PORTC |= _BV(PC1); // встановити "1" на лінії 1 порту C

                   PORTC &= ~_BV(PC2); // встановити "0" на лінії 2 порту C

                   PORTC |= _BV(PC3); // встановити "1" на лінії 3 порту C

                   PORTC &= ~_BV(PC4); // встановити "1" на лінії 4 порту C

                   // -----------------------------------------------------

                   }

                   else

                   {

// ---- зупиняється лівий двигун, вмикається правий -----

&= ~_BV(PC1); // встановити "1" на лінії 1 порту C|= _BV(PC2); // встановити "1" на лінії 2 порту C&= ~_BV(PC3); // встановити "1" на лінії 3 порту C|= _BV(PC4); // встановити "0" на лінії 4 порту C

// -----------------------------------------------------

                   }

}

}

Робот для змагань в кегльрінг

#include <avr/io.h>

/***************** Функція затримки ****************/

delay(unsigned short ms) // Мінімальна затримка кварцем 8 МГц - 1 мс

{short i, j, k; // оголошення змінних

                   (i=0; i<ms; i++) // головний цикл формування затримки (j=0; j<185; j++) // допоміжний цикл формування затримки++; // довільна дія

}

/****************************************************/

main(void) // початок головної програми

{

= 0xff; // всі виводи порту C сконфігурувати як виходи= 0x00; // всі виводи порту D сконфігурувати як виходи

= 0xff; // встановлення "1" на на всіх виводах D,

                    // вмикаються підтягуючи резистори

(1) { // нескінченний цикл

                   // перевірка сигналів низького рівня від фотодатчиків

                   if (!(PIND & (1<<PIND1))) // перевірка "0" на лінії 1 порту D

                   {

                   // -------------- ввімкнення двигунів вперед ---------------

                   PORTC |= _BV(PC1); // встановити "1" на лінії 1 порту C

                   PORTC &= ~_BV(PC2); // встановити "0" на лінії 2 порту C

                   PORTC |= _BV(PC3); // встановити "1" на лінії 3 порту C

                   PORTC &= ~_BV(PC4); // встановити "0" на лінії 4 порту C

                   // -----------------------------------------------------

                   }

                   else

                   {

// -------- ввімкнення двигунів назад на 1,8 сек --------

&= ~_BV(PC1); // встановити "0" на лінії 1 порту C|= _BV(PC2); // встановити "1" на лінії 2 порту C&= ~_BV(PC3); // встановити "0" на лінії 3 порту C|= _BV(PC4); // встановити "1" на лінії 4 порту C

(1800); // затримка 1,8 сек.

// --------------------------------------------------

// --------------------- поворот --------------------

// правий мотор вперед, лівий мотор стоп на 0,6 сек

                   PORTC |= _BV(PC1); // встановити "1" на лінії 1 порту C

                   PORTC &= ~_BV(PC2); // встановити "0" на лінії 2 порту C

                   PORTC |= _BV(PC3); // встановити "1" на лінії 3 порту C

(600); // затримка 0,6 сек.

// --------------------------------------------------

                   }

}

}

Вимір дистанції

#include <stdlib.h> // перетворення типів даних

#include <soft_serout.h> // підтримка послідовного каналу

#include <sleep.h> // затримки

#include <analog.h> // підтримка АЛП

#define m 2933 // константа для перетворення дистанції в см

#define b 20

#define k 1main() // головна программа

{

char dec[4],dec2[4]; // для запису ascii після перетворенняint gp2=0,cm=0; // зчитування даних з АЛП(1000); // пауза 1 секунда_serout_init(2,9600); // настройка послідовного порту 9600 8N1(1)

{

= analog(0); // читання= (m/(gp2+b)) - k; // перетворення даних в см(gp2,dec,10); // перетворення Integer в десят. Ascii(cm,dec2,10); // перетворення Integer в десят. Ascii_byte(2,0xFE);serout_byte(2,0x00); // очищення дисплею_byte(2,0xFE);serout_byte(2,0x80); // задання адреси першого рядка_text(2,"RAW Data= ");_text(2,dec); // виведення даних Ascii_byte(2,0xFE);serout_byte(2,0xC0); // задання адреси другого рядка_text(2,"Distance= ");_text(2,dec2); // виведення даних в см_byte(2,0xFE);serout_byte(2,0xCE); //

// строки 14-й позиции_text(2,"CM");(500);

}

}

Безконтактне уникнення перешкод

#include <stdlib.h> // перетворення типів даних

#include <motor.h> // управління двигунами

#include <sleep.h> // затримки

#include <sound.h>

#include <analog.h> // підтримка АЛПmain() // головна программа

{int sensor=0;char i=0;(200); sound(4000,50); // запуск та звуковий сигнал(1)

{=0;(i=0;i<5;i++)

{=(sensor+analog(0)); // зчитування даних GP2D120 5 раз

}=(sensor/5); // усереднення(sensor>260) // до перешкоди < 8 см?

{(50);sleep(800); // оминання перешкоди_left(50);sleep(600);

}

{(50); // рух вперед

}

}

}

ВИСНОВКИ

В ході виконання даного курсового проекту було розроблено робота на базі мікроконтролера ATMega 8. Даний робот може рухатись по лінії, може використовуватись на змаганнях з «Кегльрінгу». Даний робот може бути вдосконалений в майбутньому.

Основними вдосконаленнями можуть бути підключення дистанційного пульту керування, також можна встановити датчики завад, а також можна змінювати програму керування роботом. Це дає можливість використовувати його у якості малюю чого робота, а також у якості танцюючого. Ці можливості можна реалізувати методом додання олівців до конструкції (для малюючого робота), а також підбору коду програми (для танцюючого робота).

Похожие работы на - Розробка робота для керування електродвигунами за допомогою програми

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!