Двигатели постоянного тока являются наиболее широко используемыми электродвигателями. Эти моторы можно найти практически везде, от небольших проектов до продвинутой робототехники.

Сегодня мы научимся управлять двигателем постоянного тока с помощью микроконтроллера AVR Atmega16. Но прежде чем идти дальше, давайте узнаем больше о двигателе постоянного тока.
Двигатель постоянного тока – это устройство, которое преобразует электрическую энергию в механическую. В частности, двигатель постоянного тока использует постоянный ток для преобразования электрической энергии в механическую энергию. Основным принципом двигателя является взаимодействие между магнитным полем и током для создания силы внутри двигателя, которая помогает двигателю вращаться. Поэтому, когда электрический ток проходит через катушку в магнитном поле, генерируется магнитная сила, которая создает крутящий момент, приводящий к движению двигателя. Направление двигателя контролируется путем изменения направления тока. Также его скорость можно варьировать, изменяя подаваемое напряжение. Поскольку микроконтроллеры имеют выводы ШИМ, это можно использовать для управления скоростью двигателя.
В этом проекте работа двигателя постоянного тока будет продемонстрирована с помощью микроконтроллера Atmega16. Драйвер двигателя L293D будет использоваться для изменения направления тока и направления движения. Драйвер двигателя L293D использует конфигурацию цепи H-мост, которая выводит необходимый ток на двигатель. Две кнопки используются для выбора направления двигателя. Одна кнопка используется для выбора вращения по часовой стрелке, а другая – для выбора режима против часовой стрелки.

Схема подключения микроконтроллера ATmega, драйвера L293D и двигателя постоянного тока следующая.

Теперь перейдем к программированию микроконтроллера. В данном случае Atmega16 программировался с использованием USBASP и Atmel Studio7.0.
Двигатель постоянного тока подключается через драйвер двигателя L293D. Двигатель постоянного тока будет вращаться в двух направлениях при нажатии соответствующей кнопки. Одна кнопка будет использоваться для вращения двигателя постоянного тока в направлении по часовой стрелке, а другая кнопка будет использоваться для вращения двигателя постоянного тока в направлении против часовой стрелки. В данном случае у нас используются две библиотеки io.h и delay.h.
Полный код программы приводится далее, просто загрузите программу в Atmega16 и используйте две кнопки для вращения двигателя постоянного тока по часовой стрелке и против часовой стрелки.
#define F_CPU 16000000UL // определим частоту процессора
#include<avr/io.h>
#include<util/delay.h>
int i; // определим переменную для сравнения
int main(void)
{
//DDR Data Direction Register
DDRA = 03; // сделать вывод PORTA0,1 в качестве выхода и Rest в качестве ввода
PORTA &= ~(1<<1); // сначала установим низкий уровень PORTA1, чтобы избежать движения перед выбором кнопки
PORTA &= ~(1<<0); // сначала установим низкий уровень PORTA0, чтобы избежать движения перед выбором кнопки
while(1)
{
if(!bit_is_clear(PINA,4)) // проверить, нажата ли кнопка PORTA4
{
i = 1; // сохранить статус как 1
PORTA &= ~(1<<1);
_delay_ms(1000);
}
else if (!bit_is_clear(PINA,5)) // проверить, нажата ли кнопка PORTA5
{
i = 2; // сохранить статус как 2
PORTA &= ~(1<<0);
_delay_ms(1000);
}
if (i == 1) // если 1-я кнопка нажата
{
PORTA |= (1<<0); // вращаться по часовой стрелке
PORTA &= ~(1<<1);
}
else if (i == 2) // если 2-я кнопка нажата
{
PORTA |= (1<<1); // вращать против часовой стрелки
PORTA &= ~(1<<0);
}
}
}

При желании вы можете подключить контакты двигателя к любому контакту GPIO в зависимости от используемых GPIO. Также важно использовать драйвер двигателя для снижения нагрузки на микроконтроллер, так как микроконтроллеры не способны обеспечить необходимый ток для работы двигателей постоянного тока.
© digitrode.ru