Шаговый двигатель

Необходимые знания: [HW] Mootorite moodul, [AVR] Digitaalsed sisendid-väljundid,
[LIB] Mootorid, [LIB] Viide

Теория

Шаговый двигатель

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

  • С переменным магнитным сопротивлением (высокая точность, низкий крутящий момент, низкая цена)
  • С постоянным магнитом (низкая точность, высокий крутящий момент, низкая цена)
  • Гибридный (высокая точность, высокий крутящий момент, высокая цена)

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

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

 

Униполярный шаговый двигатель

Обмотки униполярного шагового двигателя

Униполярный шаговый двигатель имеет пять или шесть проводов. В соответствии со схемой привода запускается разом только одна четвертая обмоток. Линии Vcc обычно соединяются с положительным питающим напряжением двигателя. Концы обмоток 1a, 1b, 2a, и 2b соединяются при коммутации через транзисторы только с землей, в связи, с чем их управляющая электроника довольно простая.

Биполярный шаговый двигатель

Обмотки биполярного шагового двигателя

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

Необходимые коммутации полного шага и полушага шаговых двигателей с обоими видами обмоток отображает следующая таблица. Так как в случае драйвера униполярного шагового двигателя происходит только отпирание транзисторов, то эти шаги представлены логическими числами 0 и 1. Управление биполярным шаговым двигателем может потребовать больше сигналов, и его шаги представлены выходной полярностью драйвера.

Униполярный Биполярный
Шаг 1A 2A 1B 2B 1A 2A 1B 2B
Полный шаг
1 1 0 0 0 + - - -
2 0 1 0 0 - + - -
3 0 0 1 0 - - + -
4 0 0 0 1 - - - +
Полушаг
1 1 0 0 0 + - - -
2 1 1 0 0 + + - -
3 0 1 0 0 - + - -
4 0 1 1 0 - + + -
5 0 0 1 0 - - + -
6 0 0 1 1 - - + +
7 0 0 0 1 - - - +
8 1 0 0 1 + - - +

Практика

Цель упражнения запустить биполярный шаговый двигатель, вместо чего можно использовать по приведенному выше методу и униполярный двигатель. На плате модуля «Двигателя» имеются два драйвера L293D, которые управляются четырьмя входными выводами микроконтроллера. Каждый вывод обозначает один конец полярности обмотки. Напряжение конца обмотки положительное, если вывод высокий, и отрицательное, если вывод низкий. Концам 1A, 1B, 2A и 2B соответствуют выводы микроконтроллера PB0, PB1, PB2 и PB3.

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

//
// Подготовка управления биполярного шагового двигателя
//
void bipolar_init(void)
{
	DDRB |= 0x0F;
	PORTB &= 0xF0;
}
 
//
// Передвижение биполярного шагового двигателя полушагами
//
void bipolar_halfstep(signed char dir,
	unsigned short num_steps, unsigned char speed)
{
	unsigned short i;
	unsigned char pattern, state1 = 0, state2 = 1;
 
	// Утверждение направления +- 1
	dir = ((dir < 0) ? -1 : +1);
 
	// Осуществление полушагов
	for (i = 0; i < num_steps; i++)
	{		
		state1 += dir;
		state2 += dir;
 
		// Создание шаблона
		pattern = (1 << ((state1 % 8) >> 1)) |
		          (1 << ((state2 % 8) >> 1));
 
		// Обозначение выхода
		PORTB = (PORTB & 0xF0) | (pattern & 0x0F);
 
		// Создание паузы для ожидания выполнения шага
		sw_delay_ms(speed);
	}
 
	// Остановка двигателя
	PORTB &= 0xF0;
}

Использование функций демонстрирует пример программы, которая поворачивает двигатель попеременно в одну и другую сторону на 200 полушагов. Скорость вращения двигателя определяет длинна паузы, создаваемая между шагами. Если паузу настроить слишком маленькой, то двигатель не успевает осуществлять вращение в связи с инертностью ротора и вал не двигается.

//
// Тест-программа биполярного шагового двигателя
// модуля «Двигатели» Домашней Лаборатории
//
#include <homelab/module/motors.h>
 
//
// Основная программа
//
int main(void)
{
	// Настройка двигателя
	bipolar_init();
 
	// Бесконечный цикл
	while (true)
	{
		// Вращение в одну сторону 200 полушагов со скоростью 30 мс/шаг
		bipolar_halfstep(+1, 200, 30);
 
		// Вращение в другую сторону 200 полушагов со скоростью 30 мс/шаг
		bipolar_halfstep(-1, 200, 30);
	}
}
ru/examples/motor/stepper.txt · Last modified: 2020/07/20 09:00 by 127.0.0.1
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0