Serwisy partnerskie:
Close icon
Serwisy partnerskie

Sterowanie prędkością obrotów silnika krokowego za pomocą Arduino

Kompletny poradnik, pokazujący krok po kroku sterowanie prędkością obrotów silnika krokowego przy użyciu Arduino.
Article Image
1. Praktyczny Kurs Arduino - przewodnik po artykułach składających się na kurs 2. Czym jest Arduino? 3. Porównanie Arduino z Raspberry Pi 4. Instalacja sterownika Arduino w systemie Windows 5. Generowanie pliku hex w Arduino 6. Jak wgrać bootloader w Atmega328? 7. Rozpoczęcie pracy z oprogramowaniem Arduino 8. Rozpoczęcie programowania w Arduino 9. Programowe resetowanie Arduino 10. Wprowadzenie do Arduino UNO 11. Wprowadzenie do Arduino NANO 12. Wprowadzenie do Arduino Pro Mini 13. Wprowadzenie do Arduino Mega 2560 14. Wprowadzenie do Arduino Due 15. Wprowadzenie do Arduino Lilypad 16. Wprowadzenie do ATmega328 17. Biblioteka Arduino dla Proteusa 18. Projekt płytki drukowanej Arduino UNO dla Proteus ARES 19. Biblioteka Arduino Lilypad dla Proteusa 20. Odczyt z portu szeregowego Arduino 21. Projektowanie układów LCD z Arduino 22. Łączenie klawiatury z Arduino 23. Wartość ADC na LCD przy użyciu Arduino 24. Symulacja czujnika ultradźwiękowego w Proteusie 25. Połączenie czujnika ultradźwiękowego z Arduino 26. Wiele czujników ultradźwiękowych z Arduino 27. Czujnik temperatury 18B20 z Arduino 28. Jak używać 18B20 w Proteus ISIS? 29. Łączenie LM35 z Arduino w Proteusie 30. Współpraca siedmiosegmentowego wyświetlacza z Arduino w Proteusie 31. Łączenie czujnika PIR z Arduino 32. Współpraca czujnika płomienia z Arduino 33. Interfejs NRF24L01 z Arduino 34. NRF24L01+ i Arduino - Response Timed Out 35. Połączenie RFID RC522 z Arduino 36. Komunikacja Bluetooth z Arduino przy użyciu HC05 37. Sterowanie serwomotorem za pomocą Arduino w Proteusie 38. Projekt sterowania sygnalizacją świetlną przy użyciu Arduino 39. Przewijanie tekstu na matrycy LED 8×8 z użyciem Arduino 40. Inteligentny system oszczędzania energii 41. Komunikacja USB pomiędzy Androidem i Arduino 42. Automatyka domowa z użyciem XBee i Arduino 43. Domowy system bezpieczeństwa oparty na GSM 44. Wysyłanie SMS-ów za pomocą Arduino UNO i SIM900 45. Odbieranie SMS-ów za pomocą komend AT przy użyciu Arduino 46. Projekt rozpoznawania głosu przy użyciu EasyVR Shield 47. Rozpoczęcie pracy z programem EasyVR Commander 48. Połączenie EasyVR z Arduino UNO 49. Błąd szkolenia - niepowodzenie rozpoznawania w EasyVR 50. Połączenie XBee z komputerem 51. Wprowadzenie do modułu XBee 52. Interfejs XBee z Arduino 53. Rozpoczęcie pracy z kamerą Pixy 54. Jak zainstalować oprogramowanie kamery Pixy - PixyMon 55. Aktualizacja firmware kamery Pixy do najnowszej wersji 56. Jak wytrenować kamerę Pixy za pomocą komputera 57. Sterowanie kierunkiem obrotu silnika prądu stałego za pomocą Arduino 58. Sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino 59. Sterowanie kierunkiem obrotu silnika krokowego za pomocą Arduino 60. Sterowanie prędkością obrotów silnika krokowego za pomocą Arduino 61. Pobieranie danych z serwera internetowego za pomocą Arduino Wi-Fi 62. Wprowadzenie do Arduino YUN 63. Dostęp do serwera Linux Arduino YUN za pomocą Putty
Rozwiń cały spis treści Zwiń spis treści

Dzisiaj opowiem Wam jak zrobić prosty algorytm sterowania prędkością silnika krokowego za pomocą Arduino. Mówiłem już o sterowanie kierunkiem obrotów silnika prądu stałego za pomocą Arduino, Matlab i NI LabVIEW. Ponadto, omówiłem również sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino, Matlab i LabView. Jeśli pracujemy nad silnikiem krokowym, musimy rzucić okiem na sterowanie kierunkiem silnika krokowego za pomocą Arduino, sterowanie kierunkiem silnika krokowego przy użyciu Matlaba oraz Sterowanie kierunkiem silnika krokowego przy użyciu NI LabVIEW. Z kolei, w tym poradniku wyjaśnię program, który będzie pomocny w kontroli prędkości silnika krokowego przy użyciu Arduino. Zanim przejdziemy do szczegółów tego poradnika, należy przejrzeć poprzednie poradniki, ponieważ używamy tego samego sprzętu. Będą one zatem bardzo pomocne w lepszym zrozumieniu tego poradnika.

W tym poradniku wyjaśnię jak stworzyć program dla Arduino służący do sterowania prędkością obrotu silnika krokowego za pomocą Arduino przy użyciu komunikacji szeregowej. Jeśli silnik krokowy obraca się z maksymalną prędkością i ciągle wysyłamy komendę przez port szeregowy, aby zmniejszyć jego prędkość, to jego prędkość będzie zmniejszana proporcjonalnie do liczby komend wysyłanych przez port szeregowy. Analogicznie ta sama procedura zostanie zastosowana do zwiększenia prędkości silnika krokowego.

Sterowanie prędkością obrotów silnika krokowego za pomocą Arduino

W poradniku dot. sterowania kierunkiem obrotu silnika krokowego za pomocą Arduino, wyjaśnię jak stworzyć algorytm do uruchamiania silnika krokowego z różną prędkością. Jeśli silnik krokowy już pracuje z maksymalną prędkością i chcemy jeszcze go przyspieszyć, to nic się nie stanie z jego prędkością. Jeżeli silnik krokowy obraca się powoli i zwiększymy jego prędkość, to prędkość silnika wzrośnie proporcjonalnie do ilości komend przyspieszających wysłanych przez port szeregowy.

Schemat blokowy

Zrobiłem schemat blokowy, aby można było łatwo zrozumieć cały algorytm, ponieważ czasami trudno jest zrozumieć algorytm z pomocą kodu źródłowego.

Schemat przepływu sterowania prędkością obrotu silnika krokowego za pomocą Arduino jest pokazany na poniższym rysunku.

Przede wszystkim musimy uruchomić port szeregowy, aby nasza komunikacja mogła się rozpocząć.

Istnieje metoda sprawdzania prędkości. Jeżeli prędkość jest większa niż maksymalna prędkość silnika krokowego to program będzie czekał na następną komendę.

Jeśli silnik krokowy nie obraca się z maksymalną prędkością to możemy jego prędkość zwiększyć.

Podobnie jeśli osiągnięta zostanie minimalna prędkość silnika krokowego, program będzie się przechodził do kolejnych komend.

Jeśli minimalna granica prędkości silnika krokowego nie zostanie osiągnięta to mamy możliwość dalszego jej zmniejszenia.

Na koniec powinniśmy zamknąć port szeregowy, aby uniknąć wymiany zbędnych komend.

Schemat blokowy

Schemat blokowy będzie pomocny w celu lepszego zrozumienia wymiany informacji.

Mówi nam, jak informacja jest wymieniana sekwencyjnie pomiędzy wszystkimi używanymi komponentami.

Schemat blokowy został przedstawiony na poniższym rysunku.

Arduino UNO komunikuje się z kontrolerem silnika L298, aby kontrolować prędkość silnika krokowego.

Sterownik silnika L298 manipuluje poleceniami Arduino i zaczyna kontrolować prędkość silnika krokowego.

Opis kodu Arduino

W tej części poradnika dot. kontroli prędkości obrotu silnika krokowego przy użyciu Arduino, zamierzam omówić kod źródłowy Arduino.

Stworzyłem dwie różne funkcje do zwiększania (przyspieszania) prędkości obrotów silnika krokowego i odpowiednio do jej zmniejszania (spowolnienia).

Zadeklarowałem zmienną o nazwie count (odliczanie).

W funkcji Accelerate (przyspiesz) należy wysłać polecenie H przez port szeregowy, aby zwiększyć prędkość silnika krokowego.

W tej funkcji stale zwiększamy wartość count, tzn. prędkość silnika krokowego będzie wzrastać w sposób ciągły, tyle razy, ile wyślemy komendę H.

Poniżej znajduje się kod źródłowy funkcji Accelerate.

   void Accelerate_Motor()
   { 
    count=count+10; //Prędkość będzie wzrastać w sposób ciągły, gdy będziemy kontynuować wciskanie H
    if (count>120) //Prędkość nie może być większa niż 120
    {
      count=120;
      }
    Serial.println("Accelerating"); //wyświetlanie na porcie szeregowym
    Serial.println("");//wyświetl pustą linię na porcie szeregowym
    myStepper.step(stepsPerRevolution);//obrót w kierunku przeciwnym do ruchu wskazówek zegara
    myStepper.setSpeed(count); //Uaktualnianie prędkości silnika
    lcd.setCursor(3,0);//ustawienie kursora LCD
    lcd.print("Przyspieszenie"); //wyświetlanie na LCD
   }

W funkcji Decelerate (zwolnij) należy wysłać polecenie L przez port szeregowy, aby zmniejszyć prędkość silnika krokowego.

W tej funkcji stale zmniejszamy wartość count, tzn. prędkość silnika krokowego będzie maleć w sposób ciągły, tyle razy, ile wyślemy komendę L.

Kod źródłowy funkcji Decelerate jest podany poniżej.

void Deaccelerate()
{
  count=count-10; //zmniejszanie prędkości silnika
  if (count<20) //prędkość silnika nie może być mniejsza niż 20
  {
    count=20;
    }
    Serial.println("Decelerating"); //wyświetlanie na porcie szeregowym
    Serial.println("");//wyświetl pustą linię na porcie szeregowym
  myStepper.step(stepsPerRevolution);
    myStepper.setSpeed(count); //Uaktualnianie prędkości silnika
  lcd.setCursor(3,0); //ustawienie kursora na LCD
  lcd.print("Decelerating"); //wypisuje polecenie na LCD
  }

W głównym źródle wewnątrz pętli wywołuję obie funkcje, Accelerate i Decelerate.

Wykonane komendy będą również wyświetlane na wyświetlaczu ciekłokrystalicznym (LCD).

Główny kod źródłowy jest podany poniżej.

#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;
int count = 120;
//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);// szybkość, z jaką komunikuje się Arduino

lcd.begin(20, 4);//Typ LCD

lcd.setCursor(3,0);//ustawienie kursora LCD i wyświetlanie na nim
lcd.print("Stepper Motor");
lcd.setCursor(6,1);
lcd.print("Speed");
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");
      Serial.println("No rotation”);//wyświetlanie na porcie szeregowym
      }   
     if(data == 'H'){Accelerate_Motor();}
     if(data == 'L'){Decelerate();}
}

Kompletna konfiguracja sprzętu

W tej części poradnika pokażę kompletną konfigurację sprzętową, której użyłem do tego projektu.

Sprzęt składa się z zasilacza 12 V, Arduino UNO oraz sterownika silnika L298.

Po wgraniu kodu na płytkę Arduino, układ będzie wyglądał jak na poniższym zdjęciu.

Po naciśnięciu przycisku H aby zwiększyć prędkość silnika krokowego, na wyświetlaczu pojawi się komunikat Accelerating (przyspieszanie).

Wykonana komenda jest wyświetlana na LCD i przedstawiona na poniższym zdjęciu.

Po naciśnięciu przycisku L aby zmniejszyć prędkość silnika krokowego, na wyświetlaczu pojawi się komunikat Decelerating (zwalnianie).

Wykonana komenda jest wyświetlana na LCD i przedstawiona na poniższym zdjęciu.

To już wszystko jeśli chodzi o poradnik sterowania prędkością 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 kwestie, w lepszy sposób, jeśli to możliwe. Będę odkrywał Arduino poprzez tworzenie kolejnych projektów i podzielę się nimi z Wami w moich późniejszych poradnikach.

Do pobrania
Download icon Sterowanie prędkością obrotów silnika krokowego za pomocą Arduino - kody źródłowe

Artykuł Stepper Motor Speed Control using Arduino opracowano w wersji polskiej na podstawie współpracy z portalem www.theengineeringprojects.com.

1. Praktyczny Kurs Arduino - przewodnik po artykułach składających się na kurs 2. Czym jest Arduino? 3. Porównanie Arduino z Raspberry Pi 4. Instalacja sterownika Arduino w systemie Windows 5. Generowanie pliku hex w Arduino 6. Jak wgrać bootloader w Atmega328? 7. Rozpoczęcie pracy z oprogramowaniem Arduino 8. Rozpoczęcie programowania w Arduino 9. Programowe resetowanie Arduino 10. Wprowadzenie do Arduino UNO 11. Wprowadzenie do Arduino NANO 12. Wprowadzenie do Arduino Pro Mini 13. Wprowadzenie do Arduino Mega 2560 14. Wprowadzenie do Arduino Due 15. Wprowadzenie do Arduino Lilypad 16. Wprowadzenie do ATmega328 17. Biblioteka Arduino dla Proteusa 18. Projekt płytki drukowanej Arduino UNO dla Proteus ARES 19. Biblioteka Arduino Lilypad dla Proteusa 20. Odczyt z portu szeregowego Arduino 21. Projektowanie układów LCD z Arduino 22. Łączenie klawiatury z Arduino 23. Wartość ADC na LCD przy użyciu Arduino 24. Symulacja czujnika ultradźwiękowego w Proteusie 25. Połączenie czujnika ultradźwiękowego z Arduino 26. Wiele czujników ultradźwiękowych z Arduino 27. Czujnik temperatury 18B20 z Arduino 28. Jak używać 18B20 w Proteus ISIS? 29. Łączenie LM35 z Arduino w Proteusie 30. Współpraca siedmiosegmentowego wyświetlacza z Arduino w Proteusie 31. Łączenie czujnika PIR z Arduino 32. Współpraca czujnika płomienia z Arduino 33. Interfejs NRF24L01 z Arduino 34. NRF24L01+ i Arduino - Response Timed Out 35. Połączenie RFID RC522 z Arduino 36. Komunikacja Bluetooth z Arduino przy użyciu HC05 37. Sterowanie serwomotorem za pomocą Arduino w Proteusie 38. Projekt sterowania sygnalizacją świetlną przy użyciu Arduino 39. Przewijanie tekstu na matrycy LED 8×8 z użyciem Arduino 40. Inteligentny system oszczędzania energii 41. Komunikacja USB pomiędzy Androidem i Arduino 42. Automatyka domowa z użyciem XBee i Arduino 43. Domowy system bezpieczeństwa oparty na GSM 44. Wysyłanie SMS-ów za pomocą Arduino UNO i SIM900 45. Odbieranie SMS-ów za pomocą komend AT przy użyciu Arduino 46. Projekt rozpoznawania głosu przy użyciu EasyVR Shield 47. Rozpoczęcie pracy z programem EasyVR Commander 48. Połączenie EasyVR z Arduino UNO 49. Błąd szkolenia - niepowodzenie rozpoznawania w EasyVR 50. Połączenie XBee z komputerem 51. Wprowadzenie do modułu XBee 52. Interfejs XBee z Arduino 53. Rozpoczęcie pracy z kamerą Pixy 54. Jak zainstalować oprogramowanie kamery Pixy - PixyMon 55. Aktualizacja firmware kamery Pixy do najnowszej wersji 56. Jak wytrenować kamerę Pixy za pomocą komputera 57. Sterowanie kierunkiem obrotu silnika prądu stałego za pomocą Arduino 58. Sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino 59. Sterowanie kierunkiem obrotu silnika krokowego za pomocą Arduino 60. Sterowanie prędkością obrotów silnika krokowego za pomocą Arduino 61. Pobieranie danych z serwera internetowego za pomocą Arduino Wi-Fi 62. Wprowadzenie do Arduino YUN 63. Dostęp do serwera Linux Arduino YUN za pomocą Putty
Rozwiń cały spis treści Zwiń spis treści
Tematyka materiału: Kurs Arduino, pierwsze kroki, Projekty Arduino, L298, Sterowanie silnikiem krokowym, PWM, mostek H
AUTOR
Źródło
www.theengineeringprojects.com
Udostępnij
UK Logo
Elektronika dla Wszystkich
Zapisując się na nasz newsletter możesz otrzymać GRATIS
najnowsze e-wydanie magazynu "Elektronika dla Wszystkich"