Управляем шаговым двигателем с помощью Arduino UNO и uln2003a
- Шаговый двигатель.
Шаговый электродвиигатель — это синхронный бесщёточный электродвигатель с несколькими обмотками, в котором ток, подаваемый в одну из обмоток статора, вызывает фиксацию ротора. Последовательная активация обмоток двигателя вызывает дискретные угловые перемещения (шаги) ротора. Одним прекрасным днём, попался мне в руки как-то, шаговый двигатель БМГ — 200 — 265 Ф.
И сразу же захотелось немного с ним поиграть, повертеть его туда-сюда. Сначала, я полез в интернет искать manual (datasheet) какой-нибудь на него (нашел, но не тот, цветовая гамма проводов не совпадала). После некоторого хождения по google, я понял, что искать нет смысла и надо добрым дедовским методом звонить обмотки. Раскрутил это чудо, а там вот.
Начал звонить обмотки,
получилось что первая пара: черный — желтый — синий (общий черный) и вторая пара: белый — красный — зеленый (общий белый), двигатель оказался униполярный.
- ULN2003a
Дальше стало интереснее была у меня микросхема ULN2003a, и конечно было хорошо, что данная микросхема была в Proteus-е, запустил я протеус и немного про симулировав и получил следующее.
- ARDUINO UNO
После программирования AVR, я как-то купил ARDUINO UNO и честно говоря, мне понравилось, легко в программирования плюс несколько проводков и breadboard и итого: быстрая разработка, удобство и простота.
Загрузив Arduino, приступил сразу к программированию и вот что получилось.
// void unStepMotor(int pin_1, int pin_2,int pin_3,int pin_4,int speedMotor){ digitalWrite(pin_1,HIGH); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,HIGH); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,LOW); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,HIGH); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,LOW); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,HIGH); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // digitalWrite(pin_1,LOW); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // digitalWrite(pin_1,HIGH); digitalWrite(pin_2,LOW); digitalWrite(pin_3,LOW); digitalWrite(pin_4,HIGH); delay(speedMotor + 1); // } void setup(){ pinMode(8,OUTPUT); pinMode(7,OUTPUT); pinMode(4,OUTPUT); pinMode(2,OUTPUT); } // void loop(){ for(int i = 0; i <= 60; i++) unStepMotor(8,7,4,2,0); for(int j = 0; j <= 60; j++) unStepMotor(2,4,7,8,0); }
Описание функции: unStepMotor(PIN-1, PIN-2, PIN-3, PIN-4, скорость в мс). Необходима выбрать пины для подключения, у меня это 8, 7, 4, 2 и соответственно для реверса меняем порядок чередования 2, 4, 7, 8. В цикле тоже все понятно, 60 – это количество тактов для вращения, в частности зависит от количества шагов движка.