PWM mit Arduino


Bastelseite Display + Antriebe Sensoren C++


Poti mit PWM Pulsweitenmodulation

PWM steht für Pulsweitenmodulation. Der Arduino verwendet die PWM-Technik an seinen 6 digitalen Ausgängen mit der Tilde (∼). Dies sind die Pin 3, 5, 6, 9, 10 und 11. Hiermit lassen sich beinahe stufenlos Werte zwischen 0 und 255 einstellen.

Diese digitale Steuerung erfolgt nur im binären Format 5 Volt als ein- oder 0 Volt als ausgeschaltet. Schaltet man viele Male schnell ein und aus wird dadurch eine Rechteckwelle erzeugt. Diese kann durch langsameres oder Schnelleres Schalten beeinflusst werden.

Aber wozu soll ich schalten? Der Arduino kann das doch viel besser: möchten Sie den Motor langsamer laufen lassen, geben Sie im nur weniger Strom - oder ändern das Rechtecksignal!


Die Erzeugung des Rechtrecksignals

PWM-Bild in 4 Stufen

Von einem roten Strich zum Nächsten ist ein Zyklus.


Bei "25%" sind nur 25% zeitmäßig eingeschaltet und 75% sind aus.
"50%" hät siach alles halbe/halbe in der Waage
Bei dagegen "75%" sind 75% ein und 25% aus.
Bei "100%" ist alles ein.


Nehmen wir aus dem oberen Bild das grüne und blaue Rechtecksignal einzeln heraus, können die Abstände der Einschalt- und Ausschaltzeit besser betrachtet werden.

Das Rechtrecksignal allein:

PWM-Bild in 4 Stufen


Je länger die Einschaltzeit ist, desto höher ist damit auch der digitale Wert.

Ein: 0 und Aus: 100% entspricht digital also "0".
Ein: 25% und Aus: 75% sind dann digital: 25% = 63,75; dies wird aufgerundet auf 64. Warum?

Da der digitale Wert von 0 bis 255 reicht, sind 0% = digital 0.
100% entsprechen also digital 255.
Somit sind 25% ( = ein Viertel von 255 ) = 63,75.

Ladet den Sketch hoch, nehmt einen Poti, schließt ihn außen an GND und an +5V an und führt den mittleren Potianschluß an "A0".



  
/*  Auslesen eines Potentiometers
    mit 470 kOhm
*/

#include <Wire.h>

int potianschluss = A0;
int potiwert = 0;
int ausgabe = 0;
int prozent = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("   Auslesen eines Potis:  ");
  delay(2000);
}

void loop() {

  Serial.println("---------------------------");
  potiwert = analogRead(potianschluss);

  ausgabe = map(potiwert, 0, 1023, 0, 255);
  prozent = map(potiwert, 0, 1023, 0, 100);
  
  Serial.print("Potiwert: ");
  Serial.print(potiwert);
  Serial.print(" - Ausgabe: ");
  Serial.print(ausgabe);
  Serial.print(" - ");
  Serial.print(prozent);
  Serial.println("%");

  delay(500); // kurze Pause zum Datenverarbeiten
			 // und zum Lesen der Werte
}  
  



Somit wird nun klar, warum wir 3 verschiedene Werte haben: Poti (analog von 0 bis 1023), Digitaler Wert von 0 bis 255 und die Prozentangabe 0 bis 100%.

"ausgabe = map(potiwert, 0, 1023, 0, 255);" berechnet vom Potiwert die Digitale Ausgabe.
"prozent = map(potiwert, 0, 1023, 0, 100);" und hier berechnet die map-Funktion die Prozentangabe aus dem Potiwert.

Auslesen eines Potis:  
---------------------------
Potiwert: 0 - Ausgabe: 0 - 0%
---------------------------
Potiwert: 29 - Ausgabe: 7 - 2%
---------------------------
Potiwert: 103 - Ausgabe: 25 - 10%
---------------------------
Potiwert: 176 - Ausgabe: 43 - 17%
---------------------------
Potiwert: 217 - Ausgabe: 54 - 21%
---------------------------
Potiwert: 267 - Ausgabe: 66 - 26%
---------------------------
Potiwert: 305 - Ausgabe: 76 - 29%
---------------------------
Potiwert: 359 - Ausgabe: 89 - 35%
---------------------------
Potiwert: 406 - Ausgabe: 101 - 39%
---------------------------
Potiwert: 476 - Ausgabe: 118 - 46%
---------------------------
Potiwert: 577 - Ausgabe: 143 - 56%
---------------------------
Potiwert: 653 - Ausgabe: 162 - 63%
---------------------------
Potiwert: 773 - Ausgabe: 192 - 75%
---------------------------
Potiwert: 818 - Ausgabe: 203 - 79%
---------------------------
Potiwert: 916 - Ausgabe: 228 - 89%
---------------------------
Potiwert: 1023 - Ausgabe: 255 - 100%
---------------------------
....



Noch viel mehr über Frequenzen

Hier gehts zu: gastack.com



Übersicht Seiten Anfang 3 x Poti einlesen


brixelweb.de