Рубрики
Схемы на AVR

Подключение двигателя постоянного тока к микроконтроллеру AVR ATmega16

Двигатели постоянного тока относятся к числу наиболее часто используемых двигателей. Их можно встретить где угодно – начиная от простейших конструкций до продвинутой робототехники. В этой статье мы рассмотрим подключение двигателя постоянного тока к микроконтроллеру ATmega16 (семейство AVR). Но сначала немного ознакомимся с принципами работы подобных двигателей.

Что представляет собой двигатель постоянного тока

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

Внешний вид двигателей постоянного тока приведен на следующем рисунке.

Как правило, двигатель постоянного тока состоит из трех основных частей, которые показаны на рисунке ниже: внешнюю (неподвижную) часть двигателя, которая представляет собой стационарный магнит (статор), а на валу внутри статора располагается подвижная часть двигателя, состоящая из ротора и коллектора.

Ротор несет на себе проволочные катушки (обмотки) — на рисунке показаны три такие катушки , намотанные вокруг трех фасонных фрагментов ротора и подсоединенные к коллектору. Назначение коллектора — поочередно возбуждать по мере вращения ротора в его обмотках магнитное поле с тем, чтобы следующая обмотка всегда подтягивалась к постоянным магнитам статора, в результате чего ротор бы вращался.

Коллектор представляет собой сегментированное кольцо (на рисунке показаны три сегмента), а щетки служат для подключения питающих контактов к отдельным сегментам коллектора по мере того, как коллектор вращается вместе с ротором.

Необходимые компоненты

  1. Микроконтроллер ATmega16 (купить на AliExpress).
  2. Источник питания с напряжением 5 Вольт.
  3. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  4. Двигатель постоянного тока (на напряжение 5 В).
  5. Драйвер двигателей L293D (купить на AliExpress).
  6. Кварцевый генератор на 16 МГц.
  7. Конденсатор 100 нФ (2 шт.) (купить на AliExpress).
  8. Конденсатор 22 пФ (2 шт.) (купить на AliExpress).
  9. Кнопка (2 шт.)
  10. Соединительные провода.
  11. Макетная плата.
  12. Светодиод (купить на AliExpress).

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Работа схемы

Схема устройства приведена на следующем рисунке.

Программирование микроконтроллера Atmega16 для управления двигателем постоянного тока

Мы будем программировать микроконтроллер Atmega16 с помощью программатора USBASP и программы Atmel Studio7.0. Полный текст программы приведен в конце данной статьи. Две кнопки в приведенной схеме используются для задания направления вращения двигателя – по часовой стрелке или против часовой стрелки. Двигатель постоянного тока подключается к микроконтроллеру при помощи драйвера мотора L293D. Двигатель постоянного тока будет вращаться в одном из направлений в зависимости от того какая кнопка нажата.

Но сначала необходимо подключить все нужные нам библиотеки и задать частоту работы микроконтроллера.

#define F_CPU 16000000UL
#include<avr/io.h>
#include<util/delay.h>

Затем определим переменную, которая будет задавать направление вращения двигателя в зависимости от того, какая кнопка будет нажата.

int i;

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

DDRA = 03;
PORTA &= ~(1<<1);
PORTA &= ~(1<<0);

Проверяем нажата ли 1-я кнопка, подключенная к PORTA4 микроконтроллера Atmega16, и сохраняем статус этой кнопки в соответствующей переменной.

if(!bit_is_clear(PINA,4))
{
i = 1;
PORTA &= ~(1<<1);
_delay_ms(1000);
}

Аналогично поступаем и со второй кнопкой.

else if (!bit_is_clear(PINA,5))
{
i = 2;
PORTA &= ~(1<<0);
_delay_ms(1000);
}

Если статус 1-й кнопки равен «1» (то есть она нажата), то вращаем двигатель по часовой стрелке, а если нажата вторая кнопка – то тогда вращаем двигатель против часовой стрелки.

if (i == 1)
{
PORTA |= (1<<0);
PORTA &= ~(1<<1);
}
else if (i == 2)
{
PORTA |= (1<<1);
PORTA &= ~(1<<0);
}

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

Исходный код программы на языке С (Си) с пояснениями

Программа для рассматриваемой схемы управления двигателем постоянного тока с помощью микроконтроллера AVR ATmega16 представлена следующим фрагментом кода на языке С (Си). Комментарии к коду программу поясняют принцип работы отдельных команд.

Видео, демонстрирующее работу схемы

4 ответа к “Подключение двигателя постоянного тока к микроконтроллеру AVR ATmega16”

Здравствуйте. Скажите пожалуйста как можно с вами связаться? У меня есть вопросы касаемо этой темы и предложение которое вас возможно заинтересует. Мой Email: vitali.kulikov87 @gmail.com
Благодарю заранее.

Здравствуйте! Спасибо за интересный урок. Нельзя ли расширить тематику с двигателями постоянного тока. Меня очень интересует создание защиты двигателя, например, отключение мотор-редуктора при превышении поднимаемого веса. Срабатывание защиты не от механики, а именно по параметру тока.
Еще интересует создание информационного табло с высвечиванием ошибки в зависимости от принятого сигнала(например, от концевика).

Здравствуйте, спасибо за то, что оценили мой труд. К сожалению я сам пока не могу самостоятельно проектировать подобные системы. Статьи я перевожу с авторитетных иностранных сайтов — считаю что это тоже полезный труд потому что в англоязычном интернете информации на тему микроконтроллеров значительно больше чем в русскоязычном сегменте интернета. Да, я обладаю определенными знаниями и в электронике, и в принципах работы микроконтроллеров, и в программировании и я понимаю те статьи, которые я перевожу, но пока уровня чтобы самостоятельно проектировать подобные схемы, я не достиг, потому что плотно начал заниматься этой тематикой всего несколько месяцев назад.
Если вы найдете ту статью, которая вам нужна, в англоязычном сегменте интернета, то я могу перевести ее и разместить здесь на сайте. К сожалению, пока могу оказать только подобную помощь в вашей проблеме. Ну или хотя бы название на английском укажите что примерно искать, я попробую сам найти статью на такую тему

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *