Управление шаговым двигателем сиспользованием микроконтроллера ATmega16 иLabVIEW
Шибеко Роман Владимирович, старший преподаватель;
Ульянов Александр Владимирович, старший преподаватель
Комсомольский-на-Амуре государственный технический университет
В настоящей статье рассмотрен один из множества вариантов управления шаговым двигателем (ШД) Nanotec ST5918M1008. Статья будет полезна разработчикам столкнувшихся с реализацией управляющей программы для разработки алгоритмов связанных с шаговыми двигателями.
Ключевые слова: шаговый двигатель, управление, драйвер шагового двигателя, микроконтроллер, Atmel, AVR, ATmega 16, L297, L298N, LabVIEW.
В современной технике, в качестве исполнительного устройства для различных систем управления часто используют ШД. В качестве примера будет рассмотрен восьми- проводной ШД модели Nanotec ST5918M1008. Данный ШД будем подключать по схеме подключения 8-ми проводного ШД с последовательным соединением обмоток (см. рисунок 1).
Рис. 1. Схема подключения ШДNanotec ST5918M1008
В качестве драйвера ШД будем использовать распространенную связку микросхем L297 + L298N схема включения, которых взята с технической документации показана на рисунке 2.
Рис. 2. Драйвер для управления ШД на базе связки микросхем L297 + L298N
Причина выбора такой комбинации драйвера (рисунок 2) послужила повсеместное широкое распространение данной связки для задачи с вязанной с управлением ШД.
CLOCK (CLK, pin 18): тактовая частота вращения ротора ШД;
CW/CCW (DIR, pin 17): задается направление вращения ротора ШД (условно — при лог. «1», присутствующей на данном входе, ротор ШД будет вращаться по часовой стрелке, при лог. «0» — против часовой стрелки);
Vref (pin 15): управление максимальным током обмотки ШД. Если напряжение на токосчитывающих резисторах R15 и R16 превысит напряжение на входе Vref, соответствующая обмотка отключается до того момента, пока напряжение на R15/R16 не станет меньше Vref;
HALF/FULL (H/F, pin 19): выбор между полношаговым и полушаговым режимами вращения ротора ШД. Если на этом входе логический 0 — выбран полношаговый режим работы, если единица-полушаговый;
CONTROL (CTRL, pin 11): по этой линии можно выбрать группу сигналов управления ШД, которые будут промодулированы («изрезаны») сигналом от внутренних «токовых» компараторов (это которые осуществляют контроль тока обмотки). Если на данной линии логический нуль — модулируются сигналы INH1 и INH2, если единица — сигналы A, B, C, D.
На имеющимся отладочном стенде для изучения основ микропроцессорной техники установлен 8 — разрядный микроконтроллер семейства Atmel AVR модель ATmega 16A, его мы и будем использовать в качестве микроконтроллера для рассматриваемой задачи управления ШД.
Отладочный стенд подключен к ПК, на ПК написана программа управления ШД, программа посылает команды на наш МК, а тот в подает нужные управляющие сигналы на драйвер ШД такой подход применялся за частою во всех проектах где требуется участие ПК [1–3].
Функция приема команд от ПК:
// USART Receiver buffer
#define RX_BUFFER_SIZE 2
char rx_buffer[RX_BUFFER_SIZE];
#if RX_BUFFER_SIZE <= 256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
// USART Receiver interrupt service routine
interrupt [USART_RXC] void usart_rx_isr(void)
{
char status,data;
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer[rx_wr_index++]=data;
#if RX_BUFFER_SIZE == 256
// special case for receiver buffer size=256
if (++rx_counter == 0) rx_buffer_overflow=1;
#else
if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
if (++rx_counter == RX_BUFFER_SIZE)
{
rx_counter=0;
rx_buffer_overflow=1;
}
#endif
}
}
Прием команды происходит по прерыванию от USART.
Основная функция управления ШД :
void FSM_MOTOR (void)
{
typedef enum {StInit,Steps,Full,Frr} State_Type;
static State_Type state = StInit;
switch(state){
case StInit:
if (rx_buffer[0]==0x41)
{
PORTA.1=0;
state = Steps;
break;
}
else
if (rx_buffer[0]==0x42)
{
PORTA.1=1;
state = Steps;
break;
}
else
if (rx_buffer[0]==0x46)
{
PORTA.1=1;
state = Full;
break;
}
else
if (rx_buffer[0]==0x52)
{
state = Frr;
break;
}
state = StInit;
break;
case Steps:
for (i = 0; i < rx_buffer[1]; i++)
{
PORTA.0 = 0;
delay_us (1000);
PORTA.0 = 1;
delay_us (1000);
}
rx_buffer[0]=0;
state = StInit;
break;
case Full:
FULL ();
state = StInit;
break;
case Frr:
FRR ();
state = StInit;
break;
default: StInit;
break;
}
}
Функция void FSM_MOTOR (void) работает следующим образом, у нее есть четыре состояния StInit — инициализация, Steps — шаг, Full — вращение, Frr — поворот на угол. По приходу кодового сигнала работы, например 0x41 (ASCII код буквы А) состояние функции void FSM_MOTOR (void) переключается на case Steps и т. д.
Пример программы оправки кода 0x41 приведен в среде графического программирования LabVIEW и показан на рисунке 3.
Рис. 3. Блок диаграмма программы оправки кода 0x41
Для удобства работы с ШД был разработан дружественный интерфейс программы управления ШД в LabVIEW рисунок 4.
Рис. 4. Интерфейс программы управления ШД в LabVIEW
Разработанный программно аппаратный комплекс позволяет непосредственно управлять работой ШД с ПК. Пользователь без особых усилий сможет разобраться с дружественным интерфейсом.
Подведя итог можно сделать следующие выводы:
Использую связку L297 + L298N можно разработать не дорогой драйвер управления ШД.
Если требуется быстрая разработка программного обеспечения под ПК можно использовать распространенный язык графического программирования в LabVIEW.
Использования микроконтроллеров позволяет разнообразить алгоритмы управления ШД причем для связи с ПК требуется один USART.
Литература:
- Ульянов, А.В., Коваленко М. В. Использование СПК207 для управления привода ОВЕН ПЧВ3 по протоколу Modbus RTU / А. В. Ульянов // Молодой ученый. — 2016. — № 5. — С. 86–91.
- Ульянов, А. В. Совершенствование электромеханических систем газомагнитных опор высокоскоростных роторов для повышения эффективности их работы / А. В. Ульянов // Молодые ученые — Хабаровскому краю материалы ХVII краевого конкурса молодых ученых и аспирантов. — Хабаровск: 2015. — С. 254–257.
- Ульянов, А. В. Система управления активно управляемой газомагнитной опорой / А. В. Ульянов // Современные тенденции технических наук Материалы III Международной научной конференции. — Казань: Молодой ученый, 2014. — С. 49–52.
- Ульянов, А. В. Математическая модель управляемой газомагнитной опоры / А. В. Ульянов, С. М. Копытов, С. В. Стельмащук // Электротехнические комплексы и системы управления. — 2014. — № 3. — С. 16–20.