kramann.info
© Guido Kramann

Login: Passwort:










Robuste Systemintegration
1 Grundlagen
..1.1 Newton
....1.1.1 LinearSchwinger
....1.1.2 Daempfung
....1.1.4 ODE
....1.1.5 Saaluebung
..1.2 NewtonEuler
....1.2.1 Traegheitsmomente
....1.2.2 Modellgleichungen
....1.2.3 Einfachpendel
..1.3 Scilab
....1.3.1 Erste_Schritte
....1.3.2 Skripte
....1.3.3 Funktionen
..1.4 Laplace
....1.4.1 Eigenwerte
....1.4.2 PT1
..1.5 Regleroptimierung
....1.5.1 Guetefunktion
....1.5.2 Heuristiken
....1.5.3 Scilab
..1.6 Einstellregeln
....1.6.1 Totzeit
....1.6.2 Methode1
....1.6.3 Methode2
....1.6.4 Scilab
..1.7 Zustandsregler
..1.8 Polvorgabe
..1.8 Polvorgabe_alt
..1.9 Beobachter
....1.9.1 Haengependel
..1.10 Daempfungsgrad
..1.11 Processing
....1.11.1 Installation
....1.11.2 Erste_Schritte
....1.11.3 Mechatronik
....1.11.4 Bibliotheken
....1.11.5 Uebung
....1.11.6 Snippets
......1.11.6.1 Dateioperationen
......1.11.6.2 Bilder
......1.11.6.3 GUI
......1.11.6.4 Text
......1.11.6.5 PDF
......1.11.6.8 Maus
......1.11.6.10 Zeit
......1.11.6.13 Animation
......1.11.6.15 Simulation
....1.11.7 Referenzen
..1.12 Breakout
2 Beispiel
3 Beispielloesung
4 Praxis
5 javasci
6 Fehlertoleranz1
7 Reglerentwurf
..7.1 Sprungantwort
..7.2 Messdaten
..7.3 Systemidentifikation
..7.4 Polvorgabe
..7.5 Beobachter
..7.6 Robuster_Entwurf
..7.7 SIL
8 Systementwicklung
9 Arduino
..9.1 Lauflicht
..9.2 Taster
..9.3 Sensor
..9.12 Motor_PWM1
..9.13 Motor_PWM2_seriell
..9.14 Motor_PWM3_analogWrite
..9.15 Scheduler
..9.20 AV
..9.21 Mikrofon
..9.22 Universal
....9.22.1 Laborplatine
....9.22.2 LED_Leiste
....9.22.3 Motortreiber
....9.22.4 Sensoreingaenge
....9.22.5 Taster
....9.22.6 Tests
....9.22.7 Mikrofon
....9.22.8 Lautsprecher
....9.22.9 Fahrgestell
..9.23 Zauberkiste
..9.24 OOP
....9.24.1 Uebungen
..9.25 AVneu
....9.25.1 Tests
..9.26 DA_Wandler
..9.27 CompBoard
....9.27.1 Tastenmatrix
....9.27.2 ASCIIDisplay
..9.28 CTC
..9.29 Tonerzeugung
10 EvoFuzzy
..10.1 Fuzzy
....10.1.1 Fuzzylogik
....10.1.2 FuzzyRegler
....10.1.3 Uebung9
....10.1.5 Softwareentwicklung
......10.1.5.1 AgileSoftwareentwicklung
......10.1.5.2 FuzzyRegler
......10.1.5.3 Uebung
....10.1.6 Umsetzung
......10.1.6.1 FuzzyRegler
......10.1.6.2 Simulation
......10.1.6.3 Optimierung
......10.1.6.4 Uebung
....10.1.7 Haengependel
......10.1.7.1 Haengependel
......10.1.7.2 Simulation
......10.1.7.3 FuzzyRegler
......10.1.7.4 Optimierer
......10.1.7.5 Genetisch
....10.1.8 Information
....10.1.9 Energie
..10.2 Optimierung
....10.2.1 Gradientenverfahren
....10.2.2 Heuristiken
....10.2.3 ModifizierteG
....10.2.4 optim
..10.3 Genalgorithmus
..10.4 NeuronaleNetze
....10.4.1 Neuron
....10.4.2 Backpropagation
....10.4.3 Umsetzung
....10.4.4 Winkelerkennung
..10.5 RiccatiRegler
11 Agentensysteme
12 Simulation
20 Massnahmen
21 Kalmanfilter
..21.1 Vorarbeit
..21.2 Minimalversion
..21.3 Beispiel
30 Dreirad
31 Gleiter
..31.1 Fehlertoleranz
80 Vorlesung_2014_10_01
81 Vorlesung_2014_10_08
82 Vorlesung_2014_10_15
83 Vorlesung_2014_10_22
84 Vorlesung_2014_10_29

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

9.14 (EN google-translate)

9.14 (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.

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).

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.

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.

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

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 9.14-1: Verwendung von analogWrite(..) zur Erzeugung von PWM-Signalen.

arduino_micro_motor003.zip - Arduino-Quelltext.
Aufgabe

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