Dzisiaj opiszę wam, jak można stworzyć prosty algorytm służący do sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino. W moich poprzednich poradnikach stworzyłem algorytm do sterowania kierunkiem obrotu silnika prądu stałego za pomocą Arduino, sterowania kierunkiem silnika prądu stałego przy użyciu Matlaba, kontroli prędkości obrotu silnika prądu stałego przy użyciu Arduino oraz sterowania prędkością silnika prądu stałego przy użyciu Matlab. W tym poradniku będę sterował silnikiem krokowym za pomocą Arduino, wprowadzając różne komendy przez port szeregowy.
Zanim przejdziemy do szczegółów tego poradnika, musimy znać podstawową różnicę pomiędzy silnikami krokowymi a silnikami prądu stałego. Silniki prądu stałego mają tylko dwa zaciski wejściowe – jeden jest dodatni, a drugi ujemny. Musimy tylko dostarczyć zasilanie i zacznie się obracać. Nie dzieje się tak jednak w przypadku silnika krokowego. Silnik krokowy, którego będziemy używać w tym poradniku, posiada sześć pinów, z których cztery dostarczają impulsy lub kroki, a pozostałe dwa są pinami zasilania. Tak więc, w tym poradniku będziemy kontrolować wspomniany sześciopinowy silnik krokowy przy użyciu kontrolera silnika L298 i płytki Arduino UNO. Zasadniczo możemy użyć silnika krokowego tam, gdzie wymagana jest precyzja. Silnik krokowy ma szeroki zakres zastosowań np. w robotyce, maszynach CNC, automatyce domowej itp. Najprościej mówiąc, możemy powiedzieć, że silnik krokowy może być stosowany tam, gdzie istnieje potrzeba poruszania się o określony kąt. Zacznijmy więc od sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino:
Sterowanie kierunkiem obrotu silnika krokowego za pomocą Arduino
W tym poradniku dowiemy się jak stworzyć program do sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino poprzez wysyłanie różnych komend z portu szeregowego. Na początek podzielę się listą komponentów użytych do tego mini projektu.
Chcę opowiedzieć trochę o silniku krokowym, ponieważ wszystkie inne komponenty zostały już szczegółowo omówione w sterowaniu kierunkiem obrotów silnika prądu stałego za pomocą Arduino.
Silnik krokowy
Zasadniczo, silniki krokowe są jak silniki prądu stałego, które obracają się w dyskretnych krokach. Mają one ułożonych wiele cewek, które są zwykle znane jako fazy. Silnik będzie się obracał krok po kroku, jeśli zasilimy każdą z faz po kolei.
Wysoki poziom precyzji można osiągnąć poprzez sterowanie silnikiem krokowym za pomocą komputera. Silniki krokowe dostępne są na rynku w wielu różnych rozmiarach. Prędkość silnika krokowego jest kontrolowana przez częstotliwość generowanych impulsów. Mają one szeroki zakres zastosowań, takich jak dyski twarde, robotyka, teleskopy, anteny, zabawki itp. Na poniższym zdjęciu pokazany jest sześcioprzewodowy silnik krokowy.
Zaprojektowałem obwód napędu silnika krokowego przy użyciu Proteus ISIS. Zrzut ekranu z oprogramowania jest pokazany na poniższym rysunku.
Można pobrać kompletny kod źródłowy dla sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino - link na końcu artykułu.
Dobór przewodów
Użyłem sześcioprzewodowego silnika krokowy. Każdy przewód ma swoją własną funkcję.
Najpierw podzieliłem te sześć przewodów na dwie pary.
Każda para składa się z trzech przewodów, z których jeden jest wspólny, a dwa pozostałe generują impulsy.
Dwie pary trzech przewodów pokazane są na poniższym zdjęciu.
Następnie w każdej parze wybrałem wspólny przewód, z którego rezystancja dla pozostałych dwóch przewodów jest wspólna.
Sprawdziłem rezystancję od przewodu wspólnego do obu pozostałych przewodów tej samej pary.
Stwierdziłem, że opór od przewodu wspólnego do obu pozostałych przewodów jest taki sam.
Na powyższym rysunku widzimy, że niebieski, różowy oraz biały należą do tej samej pary, z której biały jest przewodem wspólnym.
Na poniższym zdjęciu pokazane jest jak znalazłem opór pomiędzy białym a niebieskim przewodem i okazało się, że wynosi on 8,0 Ω.
Opisane powyżej czynności są przedstawione na poniższym zdjęciu.
Następnie sprawdziłem rezystancję pomiędzy białym a różowym przewodem i okazało się, że wynosi ona 8,1 czyli prawie tyle samo co 8,0 więc pokazuje to, że biały przewód jest wspólny dla przewodu niebieskiego i różowego.
Poniżej znajduje się zdjęcie przedstawiające powyższy krok.
Następnie znalazłem opór pomiędzy różowym a niebieskim przewodem i wynosił on 15,6, czyli dokładnie dwukrotność wcześniejszej rezystancji.
Jest to pokazane na poniższym zdjęciu.
Połączyłem oba wspólne przewody, jak pokazano na fotografii poniżej.
Oto film, w którym w szczegółach omówiłem jak zidentyfikować przewody silnika krokowego:
Pozostałe cztery przewody służą do generowania impulsów, które nazywane są również krokami
Podłączyłem te cztery przewody do pinów wyjściowych OUT1, OUT2, OUT3 oraz OUT4 mikrokontrolera L298.
Piny wejściowe mikrokontrolera L298 In1, In2, In3 oraz In4 są podłączone do pinów nr 7, 6, 5 oraz 4 płytki Arduino UNO.
Sterowanie silnikiem krokowym za pomocą mikrokontrolera PIC
Schemat blokowy
Zrobiłem prosty schemat blokowy dla sterowania kierunkiem obrotów silnika krokowego za pomocą Arduino, który będzie pomocny w jasnym zrozumieniu algorytmu i montażu elementów sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino.
Rzeczony schemat blokowy jest przedstawiony na poniższym rysunku.
Przede wszystkim, do poprawnego działania projektu potrzebujemy zasilacza.
Arduino odczytuje komendy z portu szeregowego i wysyła do sterownika silnika L298, aby obrócić silnik krokowy.
Komendy są wyświetlane na wyświetlaczu ciekłokrystalicznym (LCD – Liquid Crystal Display).
Opis kodu źródłowego Arduino
Poniżej podana jest główna funkcja sterowania kierunkiem silnika krokowego za pomocą Arduino.
#include <LiquidCrystal.h>//Biblioteka dla LCD
#include <Stepper.h> //Biblioteka dla silnika krokowego
const int stepsPerRevolution = 255;
// Inicjalizacja biblioteki silnika krokowego na pinach
Stepper myStepper(stepsPerRevolution, 4, 5, 6, 7);
char data;
//Przypisanie pinów LCD
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);
void setup() {
// ustawić prędkość obrotową na 60 obr
myStepper.setSpeed(60);
// inicjalizacja portu szeregowego:
Serial.begin(9600);
lcd.begin(20, 4);//Typ LCD
lcd.setCursor(3,0);//ustawienie kursora LCD i wyświetlanie na nim
lcd.print("Stepper Motor");
lcd.setCursor(5,1);
lcd.print("Direction");
lcd.setCursor(5,2);
lcd.print("Control");
lcd.setCursor(2,3);
lcd.print("via Arduino UNO");
delay(3000);
lcd.clear ();//Wyczyszczenie ekranu LCD
lcd.setCursor(0,2);
lcd.print("www.TheEngineering");
lcd.setCursor(4,3);
lcd.print("Projects.com");
}
void loop() {
if(Serial.available())
{
data = Serial.read(); //Odczyt danych z portu szeregowego
}
if(data == 'C'){Clockwise();}//Obrót zgodny z ruchem wskazówek zegara
if(data == 'A'){AntiClockwise();}//Obrót przeciwny do ruchu wskazówek zegara
if(data == 'S')//zatrzymanie silnika krokowego
{
data = 0;
lcd.setCursor(3,0);
lcd.print("No rotation");}
}
W kodzie podanym powyżej najpierw zainicjalizowaliśmy biblioteki LCD i silnika krokowego.
Następnie przypisałem silnikowi krokowemu piny, którymi jest on podłączony do Arduino.
Następnie zainicjalizowałem piny LCD, którymi jest on podłączony do Arduino UNO.
Następnie stworzyłem trzy różne wyrażenia if , C dla obrotu zgodnego z ruchem wskazówek zegara, A dla obrotu przeciwnego do ruchu wskazówek zegara i S dla braku obrotu.
Następnie, w pętli wywołałem funkcje clockwise i anticlockwise (zgodnie z i przeciwnie do ruchu wskazówek zegara), których kod źródłowy podam i wyjaśnię poniżej.
Następnie wyczyściłem dane szeregowe, aby zatrzymać obrót silnika.
Kod źródłowy funkcji clockwise (zgodnie z ruchem wskazówek zegara) jest podany poniżej.
void Clockwise()//funkcja do obrotu zgodnie z ruchem wskazówek zegara
{
Serial.println("clockwise"); //wyświetlanie na porcie szeregowym
Serial.println("”);//wyświetli pustą linię na porcie szeregowym
myStepper.step(stepsPerRevolution);//obrót w kierunku przeciwnym do ruchu wskazówek zegara
lcd.setCursor(3,0);//ustawienie kursora LCD
lcd.print("Clockwise"); //wyświetlanie na LCD
}
Kod źródłowy funkcji anticlockwise (przeciwnie do ruchu wskazówek zegara) jest podany poniżej.
void AntiClockwise()//funkcja do obrotu przeciwnego do ruchu wskazówek zegara
{
Serial.println("anti-clockwise");//wyświetl na porcie szeregowym
Serial.println("");//wyświetla pustą linię na serialu
myStepper.step(-stepsPerRevolution);//ruch w kierunku zgodnym z ruchem wskazówek zegara
lcd.setCursor(3,0);//ustawienie kursora LCD
lcd.print("Anti-clockwise");//wyświetlanie na LCD
}
Teraz otwórzmy oprogramowanie Arduino i po prostu skopiujmy i wklejmy kod źródłowy podany powyżej.
Uruchomimy program i otworzymy Port szeregowy w prawym górnym rogu oprogramowania Arduino.
Teraz, gdy wpiszemy komendę C silnik krokowy zacznie pracować w kierunku zgodnym z ruchem wskazówek zegara.
Jeśli wyślemy komendę A przez port szeregowy, silnik krokowy zacznie się obracać w kierunku przeciwnym do ruchu wskazówek zegara.
Po wysłaniu komendy S obroty silnika krokowego zostaną zatrzymane.
Faktyczna konfiguracja sprzętu
Faktyczna konfiguracja sprzętowa do sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino jest przedstawiona na poniższym zdjęciu:
Teraz, jeśli wyślemy komendę C przez port szeregowy, silnik krokowy zacznie się obracać w kierunku zgodnym z ruchem wskazówek zegara, a polecenie to zostanie również wyświetlone na LCD.
Na poniższym zdjęciu jest pokazana komenda wyświetlona na LCD.
Teraz, jeśli wyślemy komendę A przez port szeregowy, silnik krokowy zacznie się obracać w kierunku przeciwnym do ruchu wskazówek zegara, a polecenie to zostanie również wyświetlone na LCD.
Na poniższym zdjęciu jest pokazana komenda wyświetlona na LCD.
Teraz, jeśli wyślemy komendę S przez port szeregowy, silnik krokowy nie będzie się już obracał, a polecenie zostanie również wyświetlone na LCD.
Na poniższym zdjęciu jest pokazana komenda wyświetlona na LCD.
Oto kompletna demonstracja wideo sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino. Mam nadzieję, że będzie pomocna:
To wszystko jeśli chodzi o poradnik sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino. Mam nadzieję, że poradnik się podobał. W wypadku napotkania jakichkolwiek problemów, można mnie w każdej chwili bez wahania pytać.
Postaram się jak najlepiej rozwiązać nadsyłane problemy, w lepszy sposób, jeśli to możliwe. Będę poznawał Arduino poprzez tworzenie na nim różnych projektów.