kramann.info
© Guido Kramann

Login: Passwort:










14 Verwendung der nativen PWM-Ausgänge zur Steuerung des Motors

14 Use of the native PWM outputs to control the motor (EN google-translate)

14 Wykorzystanie rodzimych wyjść PWM do sterowania silnikiem (PL google-translate)

In den vorangehenden beiden Projekten wurde der Motor über in der Hauptschleife über Verzögerungen implementierte PWM-Signale gesteuert. Dies macht es zum einen schwer weitere Funktionalität in die Hauptschleife zu integrieren. Zum anderen ist die Auflösung des PWM-Signals so sehr grob.

In the previous two projects, the engine was over in the Main loop is controlled via delays implemented PWM signals. This makes it difficult to integrate further functionality into the main loop. On the other hand, the resolution of the PWM signal is very coarse.

W poprzednich dwóch projektach silnik był już zakończony Pętla główna jest sterowana poprzez opóźnienia zaimplementowane sygnały PWM. Utrudnia to integrację dalszej funkcjonalności z główną pętlą. Z drugiej strony rozdzielczość sygnału PWM jest bardzo zgrubna.

Mikrocontroller besitzen Timer, die in der Lage sind PWM-Signale auf bestimmten Pins zu erzeugen. Dazu müssen lediglich spezielle Register des Mikrocontollers entsprechend konfiguriert werden. Die eigentliche Generierung des PWM-Signals übernimmt dann die Hardware (interne Peripherie).

Microcontrollers have timers that are capable of generating PWM signals on specific pins. To do this, only special registers of the microcontoller need to be configured accordingly. The actual generation of the PWM signal then takes over the hardware (internal periphery).

Mikrokontrolery mają timery, które są w stanie generować sygnały PWM na określonych pinach. W tym celu należy odpowiednio skonfigurować tylko specjalne rejestry mikrokontrolera. Rzeczywiste generowanie sygnału PWM przejmuje wtedy sprzęt (wewnętrzne peryferie).

Für die Arduino-Entwicklungsumgebung wurde die Methode "analogWrite(..)" eingeführt, die tatsächlich ein PWM-Signal auf die oben beschriebene Art und Weise erzeugt und einem weitestgehend die Registerkonfiguration erspart.

which is actually a PWM signal in the manner described above generated and largely saved the tab configuration.

który w rzeczywistości jest sygnałem PWM w sposób opisany powyżej wygenerował i w dużej mierze zapisał konfigurację rejestru.

Auf den den Arduino-Boards zugrunde liegenden AVR-Mikrocontrollern sind häufig mehrere Time mit 8 oder 16 Bit Zählregistern integriert, z.B. bei einem ATmega 32 sind es zwei 8-Bit-Timer (Timer 0 und Timer 2), sowie ein 16-Bit-Timer (Timer 1). Von der Anzahl der Zählregister-Bits hängt ab, mit welcher Auflösung ein PWM-Signal erzeugt werden kann. Ein 8-Bit-Timer erlaubt intern PWM-Werte von 0 bis 255, kann also eine 5 Volt Spannung beispielsweise im Mittel mit Schritten von ca. 0.02 Volt auflösen.

There are often multiple AVR microcontrollers on the Arduino boards Time is integrated with 8 or 16 bit count registers, e.g. for an ATmega 32, there are two 8-bit timers (Timer 0 and Timer 2), and a 16-bit timer (Timer 1 The number of count register bits depends on the resolution with which a PWM signal can be generated. An 8-bit timer allows internally PWM values ​​from 0 to 255, so it can resolve a 5 volt voltage, for example, on average with steps of about 0.02 volts.

Na tablicach Arduino często znajduje się wiele mikrokontrolerów AVR Czas jest zintegrowany z rejestrami zliczającymi 8 lub 16 bitów, np. dla ATmega 32 dostępne są dwa 8-bitowe timery (Timer 0 i Timer 2) oraz 16-bitowy timer (Timer 1 Liczba bitów rejestru zliczania zależy od rozdzielczości, z jaką można wygenerować sygnał PWM. 8-bitowy timer umożliwia wewnętrznie PWM wartości od 0 do 255, więc może rozpuścić napięcie 5 woltów, na przykład średnio o krokach około 0,02 wolta.

Nachfolgendes Programm stellt eine Variante des ersten Motor-Projekts dar, bei der aber mit analogWrite(..) gearbeitet wird:

The following program represents a variant of the first motor project, in which but with analogWrite (..) is worked:

Poniższy program przedstawia wariant pierwszego projektu silnikowego, w którym ale w AnalogWrite (..) działa:

int zaehler = 0;

int xPWM = 0;

void setup() 
{
  // put your setup code here, to run once:
  pinMode(9,OUTPUT);   //Ard. oben4=OutPin D9 ---- L293 Pin 15 Input4
  pinMode(4, OUTPUT);  //Ard. oben9=OutPin D4 ---- L293 Pin 10 Input3
  pinMode(3, OUTPUT);  //Ard. oben10=OutPin D3 ---- L293 Pin 10 Enable2, PWM
  
  pinMode(13, OUTPUT); //Board LED 
  
  //Eine Richtung festlegen und PWM aus:
  digitalWrite(4,HIGH);
  digitalWrite(9,LOW);
  analogWrite(3,0);

  //LED aus  
  digitalWrite(13,LOW);
}

void loop() 
{
    delay(20); //0,02 Sekunden Pause
    
    if(zaehler==0)
    {
        digitalWrite(13,HIGH);
        analogWrite(3,xPWM); //Änderung des aktuell gültigen PWM-Wertes
        xPWM++;
        xPWM%=256;
    }        
    else if(zaehler==2)
    {
        digitalWrite(13,LOW);
    }    
    
    
    
    zaehler++;
    zaehler%=5;  //0,1 Sekunde == 5 PWM-Perioden
}

Code 14-1: Verwendung von analogWrite(..) zur Erzeugung von PWM-Signalen.

arduino_micro_motor003.zip - Arduino-Quelltext.
Aufgabe
task
zadanie

Übertragen Sie das Verwenden von analogWrite(..) auch auf das zweite Motorprojekt, bei dem die PWM-Werte vom PC kommen.

Transfer the analogWrite (..) to the second motor project where the PWM values ​​come from the PC.

Przenieś analogWrite (..) do drugiego projektu silnika, gdzie wartości PWM pochodzą z komputera.