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

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

Шаговые двигатели – это бесщеточные двигатели постоянного тока, которую могут вращаться от 00 до 3600 дискретными шагами. С каждым управляющим сигналом ось такого двигателя поворачивается на фиксированное значение (шаг). Управление вращением подобных двигателей осуществляется последовательностью специальных сигналов. В отличие от серводвигателей шаговые двигатели могут управляться контактами ввода-вывода общего назначения, а не только контактами ШИМ модуляции, и могут вращаться на (+3600) и (-3600). Последовательность следования управляющих сигналов определяет будет ли шаговый двигатель вращаться по часовой или против часовой стрелки. Для управления скоростью вращения такого двигателя необходимо просто изменять уровень управляющих сигналов. У шаговых двигателей есть несколько режимов шагового (дискретного) вращения – на полный шаг, на половину шага и на микрошаг.

В этом проекте мы будем подключать шаговый двигатель 28BYJ-48 к микроконтроллеру ATmega16 (семейство AVR), используя программу Atmel Studio 7.0. Шаговый двигатель будет работать при напряжении питания 5В. Мы будем подключать шаговый двигатель к микроконтроллеру с помощью драйверов электродвигателей ULN2003 и L293 (по отдельности). Оба будут запитываться напряжением 5В.

Примеры шаговых двигателей

Как следует из их названия, вращение шаговых электродвигателей представляет собой серию коротких шагов. В этом и состоит их отличие от двигателей свободного вращения — шаговый двигатель сделает столько шагов, сколько ему будет задано, и вы будете точно знать, сколько он их сделал. Это одна из причин, почему шаговые двигатели широко применяются как в обычных, так и в ЗD-принтерах. В обычных принтерах они точно позиционируют бумагу, а в ЗD — рабочий столик и сопло.

Внешний вид шаговых двигателей

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

Принцип работы биполярного шагового электродвигателя

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

Ротор шагового электродвигателя выполнен в форме намагниченных зубцов с чередующимися северным (С) и южным (Ю) полюсами (зубцов на роторе обычно гораздо больше, чем показано на представленном рисунке). Каждую катушку можно подключить так, что она будет намагничена или как северный полюс, или как южный, — в зависимости от направления тока в катушке. Катушки 1 и 3 работают совместно так, что когда катушка 1 будет южным полюсом, катушка 3 также будет южным полюсом. То же самое относится и к катушкам 2 и 4.

Принцип работы шагового двигателя

Начнем с варианта рисунка под буквой «а» — когда катушка 1 , а значит, и катушка 3 запитаны так, что становятся южными полюсами (Ю), вследствие того, что разноименные полюса притягиваются, а одноименные отталкиваются, ротор поворачивается против часовой стрелки до тех пор, пока ближайшие зубцы ротора с намагниченностью северного полюса (С) не поравняются с катушками 1 и 3 (как показано на «б»).
Чтобы продолжить вращение против часовой стрелки, на следующем шаге (рисунок «в») необходимо подать ток в катушки 2 и 4 так, чтобы они стали северными полюсами (С). Тогда ближайшие зубцы ротора с намагниченностью Ю подтянутся к катушкам 2 и 4 (рисунок «г»).

Каждое такое действие проворачивает ротор электродвигателя на один шаг. Для продолжения вращения против часовой стрелки в катушке 1 снова нужно создать намагниченность С (см. представленную таблицу).

Таблица 1. Последовательность действий при вращении шагового двигателя против часовой стрелки

Катушки 1 и 3 Катушки 2 и 4
Ю
С
С
Ю

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

Таблица 2. Уточненная последовательность переключения катушек при вращении шагового двигателя

Катушки 1 и 3 Катушки 2 и 4
Ю С
С С
С Ю
Ю Ю

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

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

Микроконтроллер ATmega16
Источник питания с напряжением 5 Вольт
Программатор AVR-ISP, USBASP или другой подобный
Кварцевый генератор 16 МГц
Шаговый двигатель 28BYJ-48
Драйвер двигателя ULN2003/ L293D
Конденсатор 100 нФ (2 шт.)
Конденсатор 22 пФ (2 шт.)
Кнопка
Соединительные провода
Макетная плата
Светодиод

Маркировка контактов шагового двигателя

Представлена на следующем рисунке.

Маркировка контактов шагового двигателя

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

Назначение контактов микросхемы ULN2003 (драйвера мотора) приведено на следующем рисунке.

Назначение контактов микросхемы ULN2003

Внешний вид этого драйвера мотора выглядит следующим образом:

Внешний вид драйвера мотора ULN2003

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

Внешний вид драйвера мотора L293D

Работа схемы

В следующих двух таблицах представлены схемы соединений входных и выходных контактов драйверов моторов ULN2003 или L293D с микроконтроллером AVR ATmega16 и шаговым электродвигателем.

Atmega16 ULN2003 L293D
A0 IN1(PIN1) IN1(PIN2)
A1 IN2(PIN2) IN2(PIN7)
A2 IN3(PIN3) IN3(PIN10)
A3 IN4(PIN4) IN4(PIN15)
Шаговый двигатель ULN2003 L293D
Orange OUT1(PIN16) OUT1(PIN3)
Yellow OUT2(PIN15) OUT2(PIN6)
Pink OUT3(PIN14) OUT3(PIN11)
Blue OUT4(PIN13) OUT4(PIN14)

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

Подключение шагового двигателя к ATmega16 с использованием ULN2003

Схема этой же самой конструкции, но с драйвером мотора L293D, будет выглядеть следующим образом.

Подключение шагового двигателя к ATmega16 с использованием  L293D

Внешний вид устройства с использованием ULN2003 приведен в начале статьи, а с использованием L293D он будет выглядеть следующим образом:

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

Соедините все компоненты устройства в соответствии с приведенной схемой соединений (одной из двух). Для управления шаговым двигателем мы будем использовать PORTA микроконтроллера Atmega16. К контактам шагового двигателя нет необходимости подключать питание – для управления им нам понадобятся только контакты его катушек (coil pins) – верно для ULN2003, для L293D немного по другому. Очень важен порядок контактов для того чтобы шаговый двигатель работал корректно. Для микросхемы ULN2003 используются четыре ее входа и четыре ее выхода – входы соединяются с контактами PORTA микроконтроллера, а выходы – с сигнальными контактами шагового двигателя. Также подсоедините кнопку к контакту сброса (Reset pin) чтобы иметь возможность осуществлять сброс микроконтроллера Atmega16 всегда, когда нам это понадобится. Подсоедините к микроконтроллеру кварцевый генератор. Все устройство должно быть запитано напряжением 5В.

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

Приведенный в этом разделе код программы демонстрирует вращение шагового двигателя под управлением микроконтроллера AVR в обе стороны: по часовой стрелке и против часовой стрелки. Если вы хотите вращать шаговый двигатель только в одну сторону – просто закомментируйте ненужную часть кода.

#define F_CPU 16000000UL /* Define CPU Frequency 1MHz */
#include <avr/io.h> /* подключаем стандартную библиотеку ввода/вывода */
#include <util/delay.h> /* задействуем функции задержки в программе */

int main(void)
{
DDRA = 0x0F; /* конфигурируем PORTA на выход */
int period = 6; /* устанавливаем период (задержку) между двумя шагами */
while (1)
{
/* вращаем шаговый двигатель по часовой стрелке */
for(int i=0;i<50;i++)
{
PORTA = 0x09;
_delay_ms(period);
PORTA = 0x08;
_delay_ms(period);
PORTA = 0x0C;
_delay_ms(period);
PORTA = 0x04;
_delay_ms(period);
PORTA = 0x06;
_delay_ms(period);
PORTA = 0x02;
_delay_ms(period);
PORTA = 0x03;
_delay_ms(period);
PORTA = 0x01;
_delay_ms(period);
}
PORTA = 0x09; /* последний шаг в начальную позицию */
_delay_ms(period);
_delay_ms(1000);

/* вращаем шаговый двигатель против часовой стрелки */
for(int i=0;i<50;i++)
{
PORTA = 0x01;
_delay_ms(period);
PORTA = 0x03;
_delay_ms(period);
PORTA = 0x02;
_delay_ms(period);
PORTA = 0x06;
_delay_ms(period);
PORTA = 0x04;
_delay_ms(period);
PORTA = 0x0C;
_delay_ms(period);
PORTA = 0x08;
_delay_ms(period);
PORTA = 0x09;
_delay_ms(period);
}
PORTA = 0x09;
_delay_ms(period);
_delay_ms(1000);
}
}

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

(Проголосуй первым!)
Загрузка...
10 просмотров


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

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