Решил написать о полушаговом режиме управления шаговым двигателем. Да. Ещё один способ управления двигателем.
Приведенные ранее программы управления позволяют установить вал моего шагового двигателя в сорок восемь фиксированных точек.
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 // ////////////////////////
Железо как в первой части. Подключается всё как описано во второй части.
Комментариев нет:
Отправить комментарий