Решил написать о полушаговом режиме управления шаговым двигателем. Да. Ещё один способ управления двигателем.
Приведенные ранее программы управления позволяют установить вал моего шагового двигателя в сорок восемь фиксированных точек.
360.0 / 7.5 = 48
Программы из предыдущих статей перемещали вал шагового двигателя по шагам. Однако существует способ уменьшения перемещения вала шагового двигателя в два раза. Иначе говоря, можно перемещать вал на половину шага.
7.5 / 2.0 = 3.75
При этом число фиксированных положений в которые можно установить вал двигателя увеличивается до девяносто шести.
360.0 / 3.75 = 96
Это позволяет позиционировать вал двигателя с большей точностью.
Программа
Железо как в первой части. Подключается всё как описано во второй части.
Приведенные ранее программы управления позволяют установить вал моего шагового двигателя в сорок восемь фиксированных точек.
360.0 / 7.5 = 48
Программы из предыдущих статей перемещали вал шагового двигателя по шагам. Однако существует способ уменьшения перемещения вала шагового двигателя в два раза. Иначе говоря, можно перемещать вал на половину шага.
7.5 / 2.0 = 3.75
При этом число фиксированных положений в которые можно установить вал двигателя увеличивается до девяносто шести.
360.0 / 3.75 = 96
Это позволяет позиционировать вал двигателя с большей точностью.
Программа
////////////////////////
//
// 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 = 8;
if ( step == 9 ) step = 1;
if ( step == 1 )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
}
if ( step == 2 )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
}
if ( step == 3 )
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
}
if ( step == 4 )
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
if ( step == 5 )
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
}
if ( step == 6 )
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
}
if ( step == 7 )
{
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
if ( step == 8 )
{
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
}
_delay_ms(20);
}
//
// End
//
////////////////////////
Железо как в первой части. Подключается всё как описано во второй части.
Комментариев нет:
Отправить комментарий