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.
Uwaga: Ponieważ pracujemy z silnikiem prądu stałego, więc musimy również zajrzeć do poprzednich poradników, ponieważ będą one również pomocne w symulacji tego projektu.
Regulacja prędkości silnika prądu stałego za pomocą mikrokontrolera PIC
Sterowanie prędkością obrotów silnika prądu stałego za pomocą Arduino w Proteus ISIS
Sterowanie kierunkiem obrotu silnika prądu stałego przy użyciu Arduino w Proteusie
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.