Управление шаговым двигателем с использованием микроконтроллера ATmega16 и LabVIEW | Статья в журнале «Молодой ученый»

Отправьте статью сегодня! Журнал выйдет 4 мая, печатный экземпляр отправим 8 мая.

Опубликовать статью в журнале

Авторы: ,

Рубрика: Технические науки

Опубликовано в Молодой учёный №9 (113) май-1 2016 г.

Дата публикации: 14.04.2016

Статья просмотрена: 4106 раз

Библиографическое описание:

Шибеко, Р. В. Управление шаговым двигателем с использованием микроконтроллера ATmega16 и LabVIEW / Р. В. Шибеко, А. В. Ульянов. — Текст : непосредственный // Молодой ученый. — 2016. — № 9 (113). — С. 341-346. — URL: https://moluch.ru/archive/113/27780/ (дата обращения: 25.04.2024).



Управление шаговым двигателем сиспользованием микроконтроллера 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.

Литература:

  1. Ульянов, А.В., Коваленко М. В. Использование СПК207 для управления привода ОВЕН ПЧВ3 по протоколу Modbus RTU / А. В. Ульянов // Молодой ученый. — 2016. — № 5. — С. 86–91.
  2. Ульянов, А. В. Совершенствование электромеханических систем газомагнитных опор высокоскоростных роторов для повышения эффективности их работы / А. В. Ульянов // Молодые ученые — Хабаровскому краю материалы ХVII краевого конкурса молодых ученых и аспирантов. — Хабаровск: 2015. — С. 254–257.
  3. Ульянов, А. В. Система управления активно управляемой газомагнитной опорой / А. В. Ульянов // Современные тенденции технических наук Материалы III Международной научной конференции. — Казань: Молодой ученый, 2014. — С. 49–52.
  4. Ульянов, А. В. Математическая модель управляемой газомагнитной опоры / А. В. Ульянов, С. М. Копытов, С. В. Стельмащук // Электротехнические комплексы и системы управления. — 2014. — № 3. — С. 16–20.
Основные термины (генерируются автоматически): управления ШД, вращения ротора ШД, программы управления ШД, Молодой ученый, программы оправки кода, драйвер управления ШД, задачи управления ШД, сигналов управления ШД, программа управления ШД, алгоритмы управления ШД, Nanotec ST5918M1008, ШД модели nanotec, 8-ми проводного ШД, качестве драйвера ШД, током обмотки ШД, управления шаговым двигателем, микросхем l297, драйвер ШД, направление вращения ротора, ротор ШД.


Ключевые слова

управление, микроконтроллер, LabVIEW, шаговый двигатель, драйвер шагового двигателя, Atmel, AVR, ATmega 16, L297, L298N

Похожие статьи

Задать вопрос