Sterowanie silnikiem DC przy pomocy Arduino

Silnik DC to najprostszy rodzaj silnika elektrycznego. Zasilamy go prądem stałym. Takie silniki najczęściej występują w takich urządzeniach jak: zabawki na baterie, drukarki, nagrywarki i odtwarzacze płyt.

W tym poradniku poznamy: metodę sterowania prędkością obrotową silnika DC sygnałem PWM, a także sterowanie kierunkiem obrotów mostkiem H.

Modulacja szerokości impulsów (PWM) umożliwia także sterowanie prędkością obrotową silnika DC. Prędkość ta zależy od wypełnienia sygnału PWM. Zbudujmy układ, w którym będziemy podawać sygnał PWM o wypełnieniu zależnym od odczytanego napięcia z potencjometru.

Pojawiły się tu dwa nowe elementy: dioda 1N4001 i tranzystor bipolarny PN2222. Zacznijmy od prostszego elementu – diody.

Dioda to element, który przewodzi tylko w jedną stronę. W drugą stronę blokuje przepływ prądu. Kierunek zaporowy określa pasek na diodzie. W przypadku tego obwodu zabezpiecza ona układ przed ujemnymi napięciem powstającym w silniku. Te napięcie mogłoby uszkodzić Arduino.

Czas na tranzystor bipolarny. Ma on 3 nóżki, nazywane: kolektorem, bazą i emiterem. Baza steruje przepływem prądu od kolektora do emitera. Tranzystory bipolarne dzielimy na tranzystory PNP i NPN. Wyglądem się nie różnią, wyróżnia je tylko parametry i sposób umieszczenia w obwodzie:


(otwieraj w nowym oknie)

Jak widać w NPN napięcie emiter-baza jest dodatnie, w PNP te same napięcie jest ujemne.

Tranzystory mają dwie funkcje: działają jak przełącznik i wzmacniają. Działają jak przełącznik ? Prąd płynący przez bazę „otwiera” lub „zamyka” przepływ w obwodzie kolektor-emiter. Wzmacnianie oparte jest na zależności prądu płynącego przez obwód kolektor-emiter od prądu bazy. Inaczej mówiąc mały prąd bazy może pozwalać na przepływ dużego prądu proporcjonalnie do prądu bazy.

W naszym obwodzie pojawił się jeszcze rezystor 270Ohm. Ten rezystor ogranicza prąd podawany na bazę.

Oto nasz program sterujący:

1
2
3
4
5
6
7
8
9
10
11
12
13
int silnik = 11;
int potencjometr = A0;
void setup()
{
pinmode(silnik, OUTPUT);
pinmode(potencjometr, INPUT);
}
void loop()
{
int pwm = map(analogread(potencjometr),0,1023,0,255);
analogwrite(motor, pwm);
delay(100);
}

Mamy możliwość kontroli nad obrotami silnika, ale jest inny problem – nie możemy zmienić kierunku obrotu. Aby móc zmieniać kierunek obrotów zastosujemy mostek H, który sami zbudujemy. Potrzebne nam będą 2 tranzystory NPN PN2222 i 2 tranzystory PNP PN2907.

Najpierw na wejście A (zielony przewód) będziemy podawać sygnał PWM, a na wejście B (żółty) podamy 0. Później po naciśnięciu przycisku na wejście A podamy 0, a na B sygnał PWM.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
int silnikA = 11;
int silnikB = 10;
int przycisk = 9;
int potencjometr = A0;
void setup()
{
pinMode((silnikA, OUTPUT);
pinMode((silnikB, OUTPUT);
pinMode((przycisk, INPUT);
pinMode((potencjometr, INPUT);
}
void loop()
{
pwm = map(analogRead(potencjometr),0,1023,0,255);
boolean stan = digitalRead(przycisk);
if (stan == LOW)
{
analogWrite(motorA, pwm);
digitalWrite(motorB, LOW);
}
else
{
analogWrite(motorA, LOW);
digitalWrite(motorB, pwm);
}
}

Jak widzimy podawanie sygnału na odpowiednie wejście mostka H decyduje o kierunku obrotu silnika. Tranzystory użyte w naszym układzie są małej mocy, ale są wystarczające dla tego silnika. Do sterowania silnikami o większej mocy stosuje się tranzystory MOSFET.

Źródło : http://blog.mageek.com.pl/kurs-arduino/sterowanie-silnikiem-dc-przy-pomocy-arduino/