- Какво е DC двигател?
- Необходими компоненти
- Електрическа схема
- Програмиране на Atmega16 за управление на DC двигател
Двигателите с постоянен ток са най-широко използваните двигатели. Тези двигатели могат да бъдат намерени почти навсякъде - от малки проекти до модерна роботика. Преди това свързвахме DC Motor с много други микроконтролери като Arduino, Raspberry pi и го използвахме в много роботизирани проекти. Днес се научаваме да управляваме DC мотор с AVR микроконтролер Atmega16. Но преди да продължим, нека да знаем повече за DC мотора.
Какво е DC двигател?
DC Motor е устройство, което преобразува електрическата енергия в механична. По-конкретно, двигателят с постоянен ток използва постоянен ток, за да преобразува електрическата енергия в механична енергия. Основният принцип на двигателя е взаимодействието между магнитното поле и тока, за да се създаде сила в двигателя, която помага на двигателя да се върти. Така че, когато електрическият ток се предава през намотка в магнитно поле, се генерира магнитна сила, която произвежда въртящ момент, водещ до движението на двигателя. Посоката на двигателя се контролира чрез обръщане на тока. Също така скоростта му може да варира чрез промяна на подаваното напрежение. Тъй като микроконтролерите имат PWM щифтове, той може да се използва за управление на скоростта на двигателя.
В този урок работата на мотора с постоянен ток ще бъде демонстрирана с Atmega16. Двигателят на двигателя L293D ще се използва за обръщане на посоката на тока, като по този начин посоката на движение. Двигателят на двигателя L293D използва конфигурация на веригата H-Bridge, която извежда необходимия ток към двигателя. Два бутона се използват за избор на посоката на двигателя. Единият от бутоните се използва за избор на въртене по часовниковата стрелка, а другият се използва за избор на анти-тактовата работа на DC мотора.
Необходими компоненти
- DC мотор (5V)
- L293D Двигател на двигателя
- IC микроконтролер Atmega16
- 16Mhz кристален осцилатор
- Два кондензатора 100nF
- Два кондензатора 22pF
- Натисни бутона
- Джъмперни проводници
- Макет
- USBASP v2.0
- LED (всеки цвят)
Електрическа схема
Програмиране на Atmega16 за управление на DC двигател
Тук Atmega16 е програмиран с помощта на USBASP и Atmel Studio7.0. Ако не знаете как да програмирате Atmega16 с помощта на USBASP, посетете връзката. Пълна програма е дадена в края на проекта, просто качете програмата в Atmega16 и използвайте двата бутона за завъртане на DC двигателя по посока на часовниковата стрелка и обратно на часовниковата стрелка.Двигателят с постоянен ток е свързан с помощта на драйвер за двигател L293D. Двигателят с постоянен ток ще се завърти в две посоки при натискане на съответния бутон. Единият бутон ще се използва за завъртане на мотора с постоянен ток в посока Clock Wise, а другият бутон ще се използва за завъртане на мотора с постоянен ток в посока на брояча. Първо определете честотата на процесора на микроконтролера и включете всички необходими библиотеки.
#define F_CPU 16000000UL #include #include
След това използвайте една променлива, за да следите състоянието на натиснат бутон. Тази променлива ще се използва за определяне на посоката на двигателя.
int i;
Изберете режим на вход / изход на GPIO, като използвате регистър за посока на данни. Първоначално направете изхода на щифта на двигателя толкова нисък, за да избегнете пускането на двигателя без натискане на бутон.
DDRA = 03; ПОРТА & = ~ (1 << 1); ПОРТА & = ~ (1 << 0);
Проверете дали е натиснат 1- ви бутон, свързан към PORTA4 на Atmega16, и запазете състоянието на бутона в променлива.
if (! bit_is_clear (PINA, 4)) { i = 1; ПОРТА & = ~ (1 << 1); _delay_ms (1000); }
По същия начин проверете дали 2- ри бутон е натиснат, свързан към PORTA5 на Atmega16 и запазете състоянието на бутона в променлива.
иначе if (! bit_is_clear (PINA, 5)) { i = 2; ПОРТА & = ~ (1 << 0); _delay_ms (1000); }
Ако състоянието на 1- ви бутон е вярно, завъртете DC мотора в посока по часовник и ако състоянието на втория бутон е вярно, завъртете DC мотора в посока, протичаща на часовниковата стрелка.
ако (i == 1) { PORTA - = (1 << 0); ПОРТА & = ~ (1 << 1); } иначе ако (i == 2) { PORTA - = (1 << 1); ПОРТА & = ~ (1 << 0); }
Можете да свържете моторни щифтове към всеки GPIO щифт в зависимост от използвания GPIO. Също така е важно да се използва IC на драйвера на двигателя, за да се намали натоварването на микроконтролера, тъй като микроконтролерите не са в състояние да осигурят необходимия ток за работа на постояннотокови двигатели. За повече подробности и други проекти, базирани на постояннотокови двигатели, моля, посетете дадената връзка.
Пълният код и демонстрационното видео е дадено по-долу.