arduino
PWM - modulacja szerokości impulsu
Szukaj…
Steruj silnikiem prądu stałego przez port szeregowy za pomocą PWM
W tym przykładzie staramy się wykonać jedno z najczęstszych zadań: mam wokół siebie mały silnik prądu stałego, w jaki sposób używać Arduino do sterowania nim? Łatwy, z PWM i komunikacją szeregową, za pomocą funkcji analogWrite()
i biblioteki Serial
.
Podstawy
Modulacja szerokości impulsu lub w skrócie PWM to technika naśladowania sygnałów analogowych przy użyciu wyjścia cyfrowego. Jak to działa? Za pomocą ciągu impulsów, którego zależność D (cykl pracy) między czasem na wysokim poziomie (cyfrowy 1, zwykle 5 V) a czasem na niskim poziomie (cyfrowy 0, 0 V) w każdym okresie można zmodyfikować w celu wytworzenia średniego napięcia między tymi dwoma poziomami:
Używając funkcji analogWrite(pin,value)
Arduino analogWrite(pin,value)
możemy zmieniać value
cyklu pracy wyjścia pin
. Należy pamiętać, że pin
musi być przełączony w tryb wyjściowy, a value
musi wynosić od 0 (0 V) do 255 (5 V). Każda wartość pośrednia będzie symulować proporcjonalne pośrednie wyjście analogowe.
Jednak cel sygnałów analogowych jest zwykle związany ze sterowaniem systemami mechanicznymi, które wymagają większego napięcia i prądu, niż jest w stanie sama płytka Arduino. W tym przykładzie nauczymy się zwiększać możliwości PWM Arduino.
W tym celu stosuje się diodę MOSFET. Zasadniczo ta dioda działa jak przełącznik. Pozwala lub przerywa przepływ prądu między jego źródłem a zaciskami spustowymi . Ale zamiast mechanicznego przełącznika ma trzeci terminal zwany bramą . Bardzo mały prąd (<1mA) „otworzy” tę bramkę i umożliwi przepływ prądu. Jest to bardzo wygodne, ponieważ możemy wysłać wyjście PWM Arduino do tej bramki, tworząc w ten sposób kolejny ciąg impulsów PWM o tym samym cyklu pracy przez MOSFET, który dopuszcza napięcia i prądy, które mogłyby zniszczyć Arduino.
Zestawienie materiałów: czego potrzebujesz, aby zbudować ten przykład
- Dioda MOSFET: na przykład popularna BUZ11
- Dioda zabezpieczająca silnik: Schottky SB320
- Rezystor: cokolwiek 10K ~ 1M Ohm
- Silnik: typowy mały silnik (typowy może mieć 12V)
- Źródło zasilania zgodne z wybranym silnikiem
- Deska do krojenia
- Kolorowe kable!
- Arduino, ale już o tym wiedziałeś.
Kompilacja
Złóż wszystko razem! Zasil szyny płyty chlebowej i umieść w niej diodę MOSFET. Podłącz silnik między szyną dodatnią a odpływem MOSFET. Podłącz diodę ochronną w ten sam sposób: między odpływem MOSFET a szyną dodatnią. Podłącz źródło MOSFET do wspólnej szyny uziemienia. Na koniec podłącz pin PWM (w tym przykładzie używamy pin 10) do bramki MOSFET, a także do wspólnej masy przez rezystor (potrzebujemy bardzo niskiego prądu!).
Oto przykład tego, jak wygląda ta kompilacja. Jeśli wolisz schemat, oto jeden.
Kod
Teraz możemy podłączyć Arduino do komputera, załadować kod i sterować silnikiem, wysyłając wartości poprzez komunikację szeregową. Przypomnij sobie, że te wartości powinny być liczbami całkowitymi od 0 do 255. Rzeczywisty kod w tym przykładzie jest bardzo prosty. W każdym wierszu znajduje się wyjaśnienie.
int in = 0; // Variable to store the desired value
byte pinOut = 10; // PWM output pin
void setup() { // This executes once
Serial.begin(9600); // Initialize serial port
pinMode(pinOut, OUTPUT); // Prepare output pin
}
void loop() { // This loops continuously
if(Serial.available()){ // Check if there's data
in = Serial.read(); // Read said data into the variable "in"
analogWrite(pinOut, in); // Pass the value of "in" to the pin
}
}
I to wszystko! Teraz możesz korzystać z możliwości PWM Arduino do sterowania aplikacjami, które wymagają sygnałów analogowych, nawet jeśli wymagania mocy przekraczają limity płyty.
PWM z TLC5940
TLC5940 to poręczny element, który zabierze Ci gdy zabraknie portów PWM w Arduino. Ma 16 kanałów, każdy indywidualnie sterowany z 12 bitami rozdzielczości (0-4095). Istniejąca biblioteka jest dostępna na stronie http://playground.arduino.cc/Learning/TLC5940 . Jest to przydatne do sterowania wieloma serwomechanizmami lub diodami LED RGB. Pamiętaj, że diody LED muszą być wspólną anodą, aby działać. Ponadto układy można łączyć łańcuchowo, co pozwala na jeszcze więcej portów PWM.
Przykład:
// Include the library
#include <Tlc5940.h>
void setup() {
// Initialize
Tlc.init();
Tlc.clear();
}
unsigned int level = 0;
void loop() {
// Set all 16 outputs to same value
for (int i = 0; i < 16; i++) {
Tlc.set(i, level);
}
level = (level + 1) % 4096;
// Tell the library to send the values to the chip
Tlc.update();
delay(10);
}