arduino
PWM - Pulsbreitenmodulation
Suche…
Steuern Sie einen Gleichstrommotor über die serielle Schnittstelle mit PWM
In diesem Beispiel möchten wir eine der häufigsten Aufgaben lösen: Ich habe einen kleinen Gleichstrommotor herumliegen. Wie verwende ich mein Arduino, um es zu steuern? Einfach, mit PWM und serieller Kommunikation, mit der Funktion analogWrite()
und der Serial
Bibliothek.
Die Grundlagen
Die Pulsweitenmodulation oder kurz PWM (PWM) ist eine Technik zum Nachahmen von analogen Signalen mithilfe des Digitalausgangs. Wie funktioniert das? Durch Verwenden einer Impulsfolge, deren Beziehung D (Tastverhältnis) zwischen der Zeit bei hohem Pegel (digital 1, normalerweise 5 V) und Zeit bei niedrigem Pegel (digital 0, 0 V) in jeder Periode geändert werden kann, um eine Durchschnittsspannung zwischen diesen beiden Pegeln zu erzeugen:
Mit der analogWrite(pin,value)
- analogWrite(pin,value)
von Arduino können wir den value
des Tastverhältnisses des pin
-Ausgangs variieren. Beachten Sie, dass der pin
in den Ausgabemodus versetzt werden muss und der value
zwischen 0 (0 V) und 255 (5 V) liegen muss. Jeder Wert dazwischen simuliert einen proportionalen analogen Zwischenausgang.
Der Zweck von Analogsignalen bezieht sich jedoch in der Regel auf die Steuerung mechanischer Systeme, die mehr Spannung und Strom benötigen, als dies die Arduino-Platine allein kann. In diesem Beispiel erfahren Sie, wie Sie die PWM-Funktionen von Arduino erweitern können.
Hierzu wird eine MOSFET-Diode verwendet. Im Wesentlichen fungiert diese Diode als Schalter. Erlaubt oder unterbricht den elektrischen Fluss zwischen seinen Source- und Drain- Anschlüssen. Anstelle eines mechanischen Schalters ist jedoch ein dritter Anschluss namens Gate vorhanden . Ein sehr kleiner Strom (<1 mA) "öffnet" dieses Gatter und lässt den Strom fließen. Dies ist sehr praktisch, da wir die Arduino-PWM-Ausgabe an dieses Gate senden können, wodurch ein weiterer PWM-Impulszug mit demselben Tastverhältnis durch den MOSFET erzeugt wird, wodurch Spannungen und Ströme ermöglicht werden, die den Arduino zerstören würden.
Stückliste: Was brauchen Sie, um dieses Beispiel zu erstellen?
- MOSFET-Diode: zum Beispiel die beliebte BUZ11
- Schutzdiode für den Motor: Schottky SB320
- Widerstand: alles 10K ~ 1M Ohm
- Motor: Ein typischer kleiner Motor (ein typischer kann 12 V sein)
- Eine Stromquelle, die mit dem von Ihnen ausgewählten Motor kompatibel ist
- Ein Steckbrett
- Bunte Kabel!
- Ein Arduino, aber das wussten Sie schon.
Der Build
Setze alles zusammen! Versorgen Sie die Schienen des Steckbretts mit Strom und setzen Sie die MOSFET-Diode darin ein. Verbinden Sie den Motor zwischen der positiven Schiene und dem MOSFET-Drain. Schließen Sie die Schutzdiode auf dieselbe Weise an: zwischen dem MOSFET-Drain und der positiven Schiene. Verbinden Sie die Source des MOSFET mit der gemeinsamen Erdungsschiene. Verbinden Sie schließlich den PWM-Pin (in diesem Beispiel verwenden wir Pin 10) mit dem Gate des MOSFET und über den Widerstand mit der gemeinsamen Masse (wir benötigen einen sehr geringen Strom!).
Hier ist ein Beispiel, wie dieser Build aussieht. Wenn Sie eine Regelung bevorzugen, ist hier eine.
Der Code
Jetzt können wir das Arduino an einen Computer anschließen, den Code hochladen und den Motor steuern, indem wir Werte über die serielle Kommunikation senden. Denken Sie daran, dass diese Werte Ganzzahlen zwischen 0 und 255 sein sollten. Der eigentliche Code dieses Beispiels ist sehr einfach. Eine Erklärung ist in jeder Zeile enthalten.
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
}
}
Und das ist es! Jetzt können Sie die PWM-Funktionen von Arduino verwenden, um Anwendungen zu steuern, die analoge Signale erfordern, selbst wenn der Strombedarf die Grenzen der Karte überschreitet.
PWM mit einem TLC5940
Der TLC5940 ist praktisch, wenn Sie keine PWM-Ports auf dem Arduino haben. Es verfügt über 16 Kanäle, die jeweils individuell mit einer Auflösung von 12 Bit (0-4095) steuerbar sind. Eine vorhandene Bibliothek ist unter http://playground.arduino.cc/Learning/TLC5940 verfügbar. Es ist nützlich, um mehrere Servos oder RGB-LEDs zu steuern. Denken Sie daran, dass die LEDs eine normale Anode sein müssen, um zu funktionieren. Außerdem können die Chips verkettet werden, wodurch noch mehr PWM-Anschlüsse möglich sind.
Beispiel:
// 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);
}