Pull to refresh

Управляем шаговым двигателем с помощью Arduino UNO и uln2003a

Шаговый двигатель

Одним прекрасным днём, попался мне в руки как-то шаговый двигатель БМГ — 200 — 265 Ф,

image

и сразу же хотелось немного с ним поиграть, повертить его туда сюда. Сначала, как стандартный человек я полез в интернет искать ман (даташит) какой-нибудь на него (нашел, но не то, цветовая гамма проводов не совпадала). После некоторого хождения по гуглу я понял, что искать нету смысла и надо добрым дедовским методом звонить обмотки. Раскрутил это чудо, а там вот.

image image

Начал звонить обмотки,

image image

получилось что первая пара: черный — желтый — синий (общий черный) и вторая пара: белый — красный — зеленый (общий белый), двигатель оказался униполярный.

ULN2003a

Дальше стало интереснее была у меня микруха ULN2003a (ман), и конечно было хорошо, что данная микруха была в Proteus-е, запустил я протеус и немного про симулировав и получил следующее.
image image

image image

image image

image

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-это количество тактов для вращения, в частности зависит от количества шагов движка.

image
Результат работы
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.