Это продолжение ранее опубликованной статьи. В этой части рассказывается о ещё одном способе управления шаговым двигателем.
Железо используется тоже, что и в прошлой статье. А вот в подключении есть отличия.
Настройки драйвера двигателя.
driver --- driver
EN1 --- VCC
EN2 --- VCC
Питается драйвер двигателя от 9 вольтового блока питания.
driver --- power supply (DC 9V)
VIN --- +9 V
GND --- GND
В подключении драйвера двигателя к ардуино также есть изменения.
driver --- arduino uno
GND --- GND
IN1 --- D11
IN2 --- D10
IN3 --- D9
IN4 --- D8
В подключении шагового двигателя к драйверу изменений нет.
stepper motor --- driver
A1 --- A+
A2 --- A-
B1 --- B+
B2 --- B-
VCC --- VIN
С кнопочками тоже всё без изменений.
arduino uno --- button module
VCC --- 5V
GND --- GND
A0 --- SW1
A1 --- SW2
Что же получилось? Ранее через USB разъем питались: ардуино, драйвер двигателя и шаговый двигатель. Теперь от USB питается только ардуино. Драйвер и двигатель получают энергию из своего источника (блок питания, аккумулятор). Напряжение на обмотках двигателя выше. Двигатель может выдать более высокий момент.
Всё будет работать и с ранее опубликованной программой. Но для этой статьи я написал новую программу. Собственно демонстрация этой программы и является основной целью статьи.
////////////////////////
//
// Arduino Uno
//
////////////////////////
//
// Sketch: Stepper Motor
//
#include <util/delay.h>
const unsigned char IN1 = 11; // Digital Pin 11
const unsigned char IN2 = 10; // Digital Pin 10
const unsigned char IN3 = 9; // Digital Pin 9
const unsigned char IN4 = 8; // Digital Pin 8
const unsigned char SW1 = 14; // Analog Pin 0
const unsigned char SW2 = 15; // Analog Pin 1
unsigned char step = 1;
void setup()
{
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
pinMode(SW1, INPUT);
pinMode(SW2, INPUT);
}
void loop()
{
if ( digitalRead(SW1) == LOW ) step -= 1;
if ( digitalRead(SW2) == LOW ) step += 1;
if ( step == 0 ) step = 4;
if ( step == 5 ) step = 1;
if ( step == 1 )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
}
if ( step == 2 )
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
}
if ( step == 3 )
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
if ( step == 4 )
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
_delay_ms(20);
}
//
// End
//
////////////////////////
Этот код существенно отличается от опубликованного ранее. На любом шаге питание подается лишь на одну обмотку. В программе из прошлой статьи питались сразу две обмотки.
У каждой программы есть свои плюсы и минусы. Под управлением программы опубликованной в этой статье шаговый двигатель расходует в два раза меньше энергии. Но и момент развиваемый двигателем практически в два раза ниже. Программа представленная в прошлой статье позволяет двигателю выдавать больший момент, но за счет более высокого расхода энергии.
У каждой программы есть свои плюсы и минусы. Под управлением программы опубликованной в этой статье шаговый двигатель расходует в два раза меньше энергии. Но и момент развиваемый двигателем практически в два раза ниже. Программа представленная в прошлой статье позволяет двигателю выдавать больший момент, но за счет более высокого расхода энергии.
Комментариев нет:
Отправить комментарий