Подключение шагового двигателя FL86STH65-2808A к микроконтроллеру.

Подключение шагового двигателя FL86STH65-2808A к микроконтроллеру.

Попал ко мне в руки на днях шаговый двигатель FL86STH65-2808A с драйвером SMD-4.2, задача была научиться управлять ним, используя микроконтроллер.

Первым делом надо подключить двигатель к драйверу, из двигателя выходит 8 проводов и их можно соединить двумя способами, как показано на картинке ниже.
Подключение шагового двигателя FL86STH65-2808A к микроконтроллеру.


При последовательном соединении обмоток максимального момента можно добиться только на низких скоростях, при этом энергопотребление будет низким, плюс параллельного соединения проявляется на высоких скоростях — момент падает медленнее чем при последовательном, минус — в более высоком энергопотреблении. Зависимость графика от момента показа на картинке ниже.
Подключение шагового двигателя FL86STH65-2808A к микроконтроллеру.

В моём случае важно чтобы двигатель обладал достаточным моментом на высоких скоростях, поэтому соединил обмотки параллельно.

Скручиваем провода между собой и зажимаем их в клеммнике.
Подключение шагового двигателя FL86STH65-2808A к микроконтроллеру.

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

Что имелось в виду под получением нужного тока?

Так как мы соединили обмотки двигателя параллельно, то ток, протекающий через двигатель, равен Iфазы * √2 или 1.4*Iфазы. Понять это очень просто,в документации указывается рабочий ток обмотки/фазы и её сопротивление. Максимальная мощность потребляемая двигателем, остаётся одинаковой при параллельном и последовательном включении обмоток и равна

P = (Iфазы)² *R


При параллельном соединении обмоток, полное сопротивление двигателя в 2 раза меньше сопротивления обмотки, давайте подставим его в формулу

(Iфазы)²*R = (I)²*½ R


I = Iфазы *√2


Что и требовалось доказать.

Силовые линии подключили, осталось подключить сигнальные. Для управления двигателем используются три сигнала: ENABLE, DIR и STEP, если перевести их названия, становится понятно какой за что отвечает. Для тех кто учил немецкий разъясню, уровень сигнала DIR определяет направление вращения, по каждому фронту сигнала STEP делается шаг. Отключение обмоток двигателя осуществляется при переходе сигнала ENABLE с низкого в высокое состояние. Ниже изображена осциллограмма управляющих сигналов.
Подключение шагового двигателя FL86STH65-2808A к микроконтроллеру.


Если посмотреть на драйвер, то можно увидеть, что под управляющие сигналы выделены 6 входов, вместо трёх, это сделано для того, чтобы можно было управлять вращением двигателя сигналами любой полярности.
Подключение шагового двигателя FL86STH65-2808A к микроконтроллеру.

Ток, протекающий через сигнальные линии может быть от 10 до 16mA, поэтому их можно напрямую подключать к выводам МК.

В качестве источника, управляющих сигналов, выберем схему с открытым коллектором, ниже изображена схема подключения драйвера к Atmega16.
Подключение шагового двигателя FL86STH65-2808A к микроконтроллеру.

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

#define F_CPU 8000000UL

#define en 0
#define dir 1
#define step 2
#define bt1 3
#define bt2 4

#define forward PORTA |= (1<<dir);
#define reverse PORTA &= ~(1<<dir);

#include <avr/io.h>
#include <avr/delay.h>

void spin_motor(void)
{
	uint8_t i;
	for (i = 0; i < 50; i++)
	{
		PORTA |= (1<<step);
		_delay_ms(2);
		PORTA &= ~(1<<step);
		_delay_ms(2);	
	}
	
}

int main(void)
{
	//сигнальные выводы на выход
	DDRA |= (1<<en) | (1<<dir) | (1<<step);
	//выводы к которым подключаются кнопки на вход
	DDRA &= ~(1<<bt1) | (1<<bt2);
	//с подтяжкой
	PORTA |= (1<<bt1) | (1<<bt2);
	//запитываем обмотки
	PORTA |= (1<<en);
	
	while(1)
	{
		if(!(PINA & (1<<bt1)))
		{
			forward;
			_delay_ms(5);
			spin_motor();
		}
		
		if (!(PINA & (1<<bt2)))
		{
			reverse;
			_delay_ms(5);
			spin_motor();
			
		}
	}
}

На осциллограмме управляющих сигналов, взятой из даташита, задержка между командами задаётся в микросекундах, но при такой задержке двигатель не вращался, поэтому пришлось увеличить её значение. Ещё хотелось бы отметить, что в режиме удержания двигатель издаёт громкое шипение при любом токе в обмотках, на форумах пишут, что это происходит из-за магнитострикции.
Вопрос по поводу шипения задавал консультанту с сайта http://electroprivod.ru, он сказал, что это нормально, но у меня в наличии есть другой двигатель, правда у него только 2 фазы и он не шипит. То есть выходит шипение в режиме удержания не обязательный атрибут шаговых двигателей, а дополнительная фича, от которой каждый бы рад избавиться)))
комментарии
0