Serwisy partnerskie:
Close icon
Serwisy partnerskie

Sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino

Kompletny poradnik, pokazujący krok po kroku sterowanie prędkością obrotów silnika prądu stałego przy użyciu Arduino UNO.
Article Image
Toc left icon Poprzednia część
Spis treści
Następna część Toc right icon
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
Rozwiń cały spis treści Zwiń spis treści

Dzisiaj podzielę się swoją wiedzą na temat tego, jak można zrobić prosty program do sterowania prędkością obrotu silnika prądu stałego przy użyciu Arduino UNO. W moim poprzednim poradniku, sterowanie kierunkiem obrotów silnika prądu stałego za pomocą Arduino, sterowałem właśnie silnikiem prądu stałego w obu kierunkach, ze stałą prędkością, używając Arduino. Zajmowałem się również sterowanie kierunkiem obrotów silnika prądu stałego w Matlabie, wysyłając różne komendy przez port szeregowy z Matlaba i LabVIEW do Arduino, a następnie sterowałem kierunkiem obrotów silnika prądu stałego. Ale w tym poradniku będę obracał ten sam silnik prądu stałego ze zmienną prędkością, zarówno w kierunku zgodnym jak i przeciwnym do ruchu wskazówek zegara.

W moim poprzednim poradniku widzieliśmy, że piny wejściowe In1 i In2 sterownika silnika L298 (mostek H) są przydatne do sterowania kierunkiem obrotów silnika prądu stałego. W poradniku tym kontrolowałem również jego prędkość poprzez podanie różnych poziomów napięcia na pinie enable sterownika silnika prądu stałego L298. Możliwość zmiany prędkości obrotów silnika prądu stałego w kierunku zgodnym lub przeciwnym do ruchu wskazówek zegara jest bardzo pomocna. Tak więc, zacznijmy od kontroli prędkości obrotów silnika prądu stałego przy użyciu Arduino UNO:

Sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino UNO

W tym poradniku dowiemy się jak stworzyć algorytm sterowania prędkością obrotów silnika prądu stałego przy użyciu Arduino UNO. Kontrola prędkości obrotów dowolnego silnika jest zawsze wykonywana w modulacji szerokości impulsu, w skrócie PWM. PWM może być generowana za pomocą Arduino. Do uzyskania tego PWM używany jest pin Enable L298, a następnie odpowiednio kontroluje on prędkość silnika. Zanim przejdziemy do dalszych szczegółów, chciałbym opowiedzieć o koncepcji PWM do sterowania silnikiem prądu stałego. Ponadto, można pobrać kompletny kod Arduino dla Sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino klikając poniższy przycisk:

Modulacja szerokości impulsu (PWM)

PWM to skrót od Pulse Width Modulation (modulacja szerokości impulsu). Opisuje on w zasadzie typ sygnału cyfrowego. Technika PWM jest doskonałą techniką do sterowania obwodami analogowymi za pomocą cyfrowego wyjścia PWM mikrokontrolera. W tej technice możemy uzyskać analogowe wyniki za pomocą środków cyfrowych. Sterowanie cyfrowe jest wykorzystywane do tworzenia fali kwadratowej. Ten wzór może zmieniać napięcia pomiędzy pełnym włączeniem, tj. 5 V, a pełnym wyłączeniem tj. 0 V. Czas trwania czasu włączenia, tzn. kiedy sygnał jest obecny, jest znany jako szerokość impulsu. Fale PWM dla różnych cykli pracy pokazane są na poniższym rysunku.

Cykl pracy to zasadniczo proporcja czasu, w którym system jest eksploatowany. Można ją wyrazić w procentach. Na przykład silnik obraca się przez 1 sekundę ze 100 sekund, jego cykl pracy może być przedstawiony jako 1/100 lub jako 1%. Dla kodowania programowego Arduino komenda analogWrite(255) pokazuje maksymalny, tj. 100% cykl pracy. Aby osiągnąć 50% cykl pracy musimy zaktualizować tę komendę do analogWrite(127). Piny Arduino UNO nr 3, 5, 6, 10 oraz 11 są używane jako piny PWM. W tym projekcie możemy kontrolować prędkość silnika prądu stałego poprzez podanie wysokich i niskich napięć do pinu enable sterownika silnika L298. Na przykład, jeśli silnik obraca się z maksymalną prędkością i 100% cyklem pracy przy 12 V, a my dostarczymy mu napięcie 6 V, to będzie się on obracał z połową prędkości początkowej i z 50% cyklem pracy.

Sterownik silnika L298

Piny EnA oraz EnB sterownika silnika L298 są używane jako piny PWM. Możemy obracać silnik prądu stałego z różną prędkością, podając różne poziomy wysokiego i niskiego napięcia do wymienionych pinów sterownika silnika. Jeśli zaczniemy zmniejszać maksymalne napięcie, przy którym silnik obraca się z maksymalną prędkością, prędkość silnika również zacznie się zmniejszać. W ten sposób piny Enable są pomocne do sterowania prędkością silnika prądu stałego.

Projektowanie i opis algorytmów

W tej części poradnika sterowania prędkością obrotów silnika prądu stałego za pomocą Arduino UNO zamierzam wyjaśnić jak wygląda projektowanie oraz zawrę szczegółowy opis zaprojektowanego algorytmu. Krok po kroku opowiem o całym algorytmie.

Otwórzmy program Arduino, a następnie skopiujmy i wklejmy do niego poniższy kod źródłowy.

#include <LiquidCrystal.h>
// Sterowanie klawiaturą:
//
// C – zgodnie z ruchem wskazówek zegara
// S – Stop
// A – Przeciwnie do ruchu wskazówek zegara

// Deklarowanie pinów kontrolera L298N
// Motor 1
int count=255;
int dir1PinA = 2;
int dir2PinA = 5;
int speedPinA = 6; // sterowanie PWM
LiquidCrystal lcd(8, 9, 10, 11, 12, 13);

void setup() { 
 
Serial.begin(9600); // szybkość transmisji

lcd.begin(20, 4);
lcd.setCursor(5,0);
lcd.print("DC 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 ();

lcd.setCursor(0,2);
lcd.print("www.TheEngineering");
lcd.setCursor(4,3);
lcd.print("Projects.com");
//Zdefiniuj piny sterownika silnika L298N z podwójnym mostkiem H

pinMode(dir1PinA,OUTPUT);
pinMode(dir2PinA,OUTPUT);
pinMode(speedPinA,OUTPUT);

analogWrite(speedPinA, 255); //Ustawia zmienną prędkości poprzez PWM 

}

void loop() {

// Inicjalizacja interfejsu szeregowego:

if (Serial.available() > 0) {
int inByte = Serial.read();
int speed; // Zmienna lokalna

switch (inByte) {

case 'C': // Obrót zgodnie z ruchem wskazówek zegara
//analogWrite(speedPinA, 255); //Ustawia zmienną prędkości poprzez PWM 
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
Serial.println("Clockwise rotation"); // Na monitorze szeregowym wyświetlany jest komunikat "Silnik 1 naprzód"
Serial.println("   "); // Tworzy pustą linię wyświetlaną na monitorze szeregowym
//lcd.clear();
lcd.setCursor(0,0);
lcd.print("Clockwise rotation");
break;

case 'S': // Brak obrotu
//analogWrite(speedPinA, 0); // 0 PWM (Prędkość)
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, LOW);
Serial.println("No rotation");
Serial.println("   ");
//lcd.clear();
lcd.setCursor(0,0);
lcd.print("No rotation");
break;

case 'H': // Motor przyspieszający
count=count+20;
  if (count>255)
  {
  count =255;
  }
  analogWrite(speedPinA,count);
  delay(50);

//digitalWrite(dir1PinA, LOW);
//digitalWrite(dir2PinA, HIGH);
Serial.println("Motor is accelrating slowly");
Serial.println("   ");
Serial.println(count);
lcd.setCursor(0,0);
lcd.print("Motor is accelrating");
break;

case 'L': // Motor zwalniający
count=count-20;
  if (count<20)
  {
  count=20;
  }
  analogWrite(speedPinA,count);
  delay(50);

//digitalWrite(dir1PinA, LOW);
//digitalWrite(dir2PinA, HIGH);
Serial.println("Motor is deaccelrating slowly");
Serial.println("   ");
Serial.println(count);
lcd.setCursor(0,0);
lcd.print("Motor Deaccelrates");
break;

case 'A': // Obrót w kierunku przeciwnym do ruchu wskazówek zegara
//analogWrite(speedPinA, 255); // Maksymalny PWM (prędkość)
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
Serial.println("Anti-clockwise rotation");
Serial.println("   ");
//lcd.clear();
lcd.setCursor(0,0);
lcd.print("Anti-clockwise");
break;

default:
// Wyłączyć silnik, jeśli wciśnięty jest dowolny inny przycisk
for (int thisPin = 2; thisPin < 11; thisPin++) {
digitalWrite(thisPin, LOW);
}
Serial.println("Wrong key is pressed");
//lcd.clear();
lcd.setCursor(0,0);
lcd.print("Wrong key is pressed");
  }
    }
      }

W poprzednich poradnikach dot. sterowania kierunkiem obrotu silnika prądu stałego za pomocą Arduino oraz sterowania kierunkiem obrotu silnika prądu stałego za pomocą Matlaba dowiedzieliśmy się jak sterować kierunkiem obrotu silnika prądu stałego.

Użyliśmy komend C, A oraz S odpowiednio dla obrotu zgodnie z ruchem wskazówek zegara, obrotu przeciwnego do ruchu wskazówek zegara i zatrzymania silnika.

W tym poradniku dodaliśmy dwie kolejne komendy – H oraz L do przyspieszania i zwalniania obrotów silnika prądu stałego.

Jeśli wyślemy polecenie H kilka razy po sobie, prędkość silnika będzie stale wzrastać.

Jeśli wyślemy polecenie L kilka razy po sobie, prędkość silnika zacznie maleć.

Teraz załadujmy kod źródłowy na płytkę Arduino UNO.

Otwórzmy monitor szeregowy w prawym górnym rogu oprogramowania Arduino.

I wprowadzajmy komendy w monitorze szeregowym okresowo, jak wyjaśniono powyżej.

Faktyczna konfiguracja sprzętu

Gdy wpiszemy komendę C w monitorze szeregowym oprogramowania Arduino, silnik zacznie się obracać w kierunku zgodnym z ruchem wskazówek zegara, a na porcie szeregowym zostanie wyświetlony komunikat Obroty w kierunku zgodnym z ruchem wskazówek zegara.

Ten sam komunikat zostanie wyświetlony na wyświetlaczu ciekłokrystalicznym, jak pokazano na poniższym zdjęciu.

Gdy wpiszemy komendę A w monitorze szeregowym oprogramowania Arduino, silnik zacznie się obracać w kierunku przeciwnym do ruchu wskazówek zegara, a na port szeregowy zostanie wyświetlony komunikat Obroty w kierunku przeciwnym do ruchu wskazówek zegara.

Ten sam komunikat zostanie wyświetlony na wyświetlaczu ciekłokrystalicznym, jak pokazano na poniższym zdjęciu.

Gdy wpiszemy komendę H w monitorze szeregowym oprogramowania Arduino, silnik zacznie przyspieszać i na port szeregowy zostanie wypisany komunikat Silnik przyspiesza.

Ten sam komunikat zostanie wyświetlony na wyświetlaczu ciekłokrystalicznym, jak pokazano na poniższym zdjęciu.

Gdy wpiszemy komendę L w monitorze szeregowym oprogramowania Arduino, silnik zacznie zwalniać i na port szeregowy zostanie wysłany komunikat Silnik zwalnia.

Ten sam komunikat zostanie wyświetlony na wyświetlaczu ciekłokrystalicznym, jak pokazano na poniższym zdjęciu.

To wszystko w kwestii poradnika sterowania prędkością silnika prądu stałego za pomocą Arduino UNO. Mam nadzieję, że poradnik się podobał. W wypadku napotkania jakichkolwiek problemów, można mnie w każdej chwili bez wahania pytać.

Będę nadal pogłębiał swoją wiedzę w temacie projektów Arduino w moich kolejnych poradnikach.

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

Toc left icon Poprzednia część
Spis treści
Następna część Toc right icon
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
Rozwiń cały spis treści Zwiń spis treści
Tematyka materiału: Kurs Arduino, pierwsze kroki, Projekty Arduino, L298, Sterowanie silnikiem, PWM
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"