Silnik krokowy i Arduino

Zastanawialiście się kiedyś jak podłączyć silnik krokowy do Arduino? Zapewne wielu z was posiada takie silniki wśród swoich elektronicznych materiałów. Takie silniczki popularne były i są w napędach CD/DVD, drukarkach, czy skanerach. W związku z tym, niewielkim kosztem możemy wejść w posiadanie takiego silniczka, ale co dalej.

Silnik połączony ze sterownikiem
Silnik połączony ze sterownikiem

W internecie można się natknąć na różne sposoby podłączania silników do mikrokontrolerów. Na początku należałoby powiedzieć parę słów o tym czym są silniki krokowe. Moim celem nie jest wprowadzenie czytelnika w tajniki i teorię budowy silników krokowych, ale naświetlenie mu z czym to się je. Generalnie silnik krokowy to silnik elektryczny, w którym impulsowe zasilanie prądem elektrycznym powoduje, że jego wirnik nie obraca się ruchem ciągłym, lecz wykonuje za każdym razem ruch obrotowy o ściśle ustalonym kącie. Dzięki temu kąt obrotu wirnika jest ściśle zależny od liczby dostarczonych impulsów prądowych, a prędkość kątowa wirnika jest dokładnie równa częstotliwości impulsów pomnożonej przez wartość kąta obrotu wirnika w jednym cyklu pracy silnika.

Nas, na chwilę obecną interesuje tylko ta informacja, że rotor silnika będzie się przekręcał o ustalony przez nas kąt lub krok. Dlatego też silniki krokowe wykorzystywane są w automatyce, robotyce i wszędzie tam gdzie potrzebna jest dokładność.

Sterownik i jego podłączenie

Do naszego pierwszego uruchomienia użyjemy gotowego zestawu składającego się z silnika krokowego i sterownika opartego na ULN2003A. Oczywiście można samemu wykonać taki sterownik korzystając ze schematów dostępnych w sieci.

Sterownik silnika krokowego
Sterownik silnika krokowego

Przyjrzyjmy się płytce sterownika. Jak widać oprócz wspomnianego wcześniej układu ULN2003A znajdują się jeszcze rezystory i diody LED, służące do informowania nas o aktualnej pracy sterownika. Po jednej stronie znajduje się gniazdo XH do którego podłączamy nasz silnik, natomiast po drugiej stronie widać listwę goldpin służącą do połączenia z arduino i podłączenia zasilania z zakresu 5-12V.

 Biblioteka

 Z uruchomieniem nie będzie najmniejszych problemów. W tym przykładzie wykorzystaliśmy wbudowaną w IDE bibliotekę stepper. Sterownik podłączyliśmy zgodnie z kodem (wejścia IN1…4 na sterowniku do wyjść Digital 10…8 w Arduino). Potencjometr został podłączony do Analog 0 i zasilania 5V i GND. Tak podłączony układ jest gotowy do uruchomienia.

Sterownik silnika krokowego, widok od tyłu
Sterownik silnika krokowego, widok od tyłu

Do testów użyliśmy kodu, w którym za pomocą potencjometru możemy regulować prędkość obrotową naszego silnika.

 /*

 Stepper Motor Control - speed control

 This program drives a unipolar or bipolar stepper motor.
 The motor is attached to digital pins 8 - 11 of the Arduino.
 A potentiometer is connected to analog input 0.

 The motor will rotate in a clockwise direction. The higher the 
 potentiometer value, the faster the motor speed. Because setSpeed()
 sets the delay between steps,  you may notice the motor is less 
 responsive to changes in the sensor value at low speeds.

 Created 30 Nov. 2009
 Modified 28 Oct 2010
 by Tom Igoe

 */

#include <Stepper.h>

const int stepsPerRevolution = 140;  // change this to fit the number
                             //of steps per revolution for your motor

// initialize the stepper library on pins 8 through 11:
Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

int stepCount = 0;  // number of steps the motor has taken

void setup() {
  // nothing to do inside the setup
}

void loop() {
  // read the sensor value:
  int sensorReading = analogRead(A0);
  // map it to a range from 0 to 100:
  int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
  // set the motor speed:
  if (motorSpeed > 0) {
    myStepper.setSpeed(motorSpeed);
    // step 1/100 of a revolution:
    myStepper.step(stepsPerRevolution / 100);
  }
}

 

W niektórych przypadkach może się okazać, że nasz silnik nie będzie reagował zbyt dobrze przy małych wartościach ustawionych potencjometrem. Odpowiada za to funkcja setSpeed() określająca opóźnienia pomiędzy kolejnymi krokami.

Kolejną rzeczą jest wartość stepsPerRevolution, określająca ilość kroków dla jednego obrotu. Wartość ta powinna odpowiadać wartości naszego silnika. Oczywiście możemy tego na samym początku nie zmieniać, ale musimy się liczyć z tym, że silnik może dostać czkawki, szczególnie przy wyższych obrotach. Dla naszego silnika liczba kroków na pełen obrót wyniosła 140. Wartość ta została dobrana eksperymentalnie, liczba była zwiększana do momentu wspomnianej wcześniej czkawki na wysokich obrotach.

Silnik krokowy
Silnik krokowy

 

Jak to wygląda w praktyce możecie zobaczyć na poniższym filmiku.

 

 

Uwaga: Proszę się nie martwić tym, że silnik jest ciepły. W przypadku silników krokowych jest to normalna sprawa, ponieważ jego zadaniem jest obrócenie się o pewien kąt i utrzymanie tej pozycji. Tak więc przez cały czas przez silnik przepływa prąd powodując grzanie się obudowy silnika. Oczywiście są metody na redukcje grzania się silnika, możemy go przykręcić do metalowej obudowy, bądź zmienić soft. Sądzę jednak, że na nasze potrzeby i eksperymentowanie z Arduino, grzanie się silnika nie będzie wielkim problemem.