1 Prinzipen und Komponenten Eingebetteter Systeme (PKES) (7) Ansteuerung von Motoren Sebastian Zug Arbeitsgruppe: Embedded Smart Systems
2 Veranstaltungslandkarte Fehlertoleranz, Softwareentwicklung Mikrocontroller Architekturen Sensoren Scheduling Arithmetik Anwendungen Aktoren Kommunikation Energieversorgung
3 Literaturhinweise Bücher Hans-Rolf Tränkler, Sensortechnik: Handbuch für Praxis und Wissenschaft Springer, 1998 Jens Steffen Gutmann, Robuste Navigation autonomer mobiler Systeme Dissertation Webseiten http://www.ermicro.com/blog/?p=1971 (PWM)
4 Fragestellungen dieser Vorlesung Erläutern Sie, warum Elektromotoren die wichtigste Antriebsform für Aktuatoren darstellen? Vergleichen Sie die grundlegende Funktion eines Schrittmotors und eines Servomotors. Welche Vorteile ergeben sich aus der unipolaren/bipolaren Bauform eines Schrittmotors? Für welche Aufgaben werden die Timerfunktionen des Mikrocontrollers herangezogen? Wie sind ein Timer grundlegend aufgebaut (Capture&Compare)? Was ist PWM? Welche Arten der PWM Generierung gibt es? Welche Schritte werden bei der Abarbeitung von Interrupts durchlaufen? Welche Folgen können verpasste Interrupts haben? Beziehen Sie sich dabei insbesondere auf verschiedene Sensortypen, mit denen Sie in der Übung gearbeitet haben. Woraus ergibt sich die Prioritätenfolge der Interrupts beim AVR? Nennen Sie Interruptquellen beim AVR? Wie viele Interrupts können sich bei Atmega 2560 stauen, ohne dass einer verloren geht?
5 Übergreifendes Beispiel - Gleichstrommotor Beispiel: Permanenterregter Gleichstrommotor +Energieeinsparung durch statisches Magnetfeld +Einfacher Aufbau +Großes Einsatzspektrum Bürstenkontakte Keine Anpassung des Magnetfeldes möglich Source: http://de.wikipedia.org/wiki/gleichstrommaschine Varianten: Bürstenlose Gleichstrommotoren
6 Beispiel Gleichstrommotor - Kennlinie Leerlaufdrehzahl Anlaufstrom P U I Drehzahlkennlinie (blau) N=f(U,M) Stromkennlinie(schwarz) N=f(U,M) Wirkungsgrad(grün) Anlaufmoment P U I M N Source: http://www.dunkermotoren.de/default.asp?id=18&lang=1
7 Schittmotor Schrittweise Bewegung des Stators - diskrete Positionierung Varianten: Bipolar, Unipolar Source: Wikipedia.de
8 Servomotoren Interner Regelkreis zur Positionierung über Potentiometer Pulsbreitendefinierte Richtungsvorgabe Unterscheidung digitaler oder analoger Servomotor Source: http://rn-wissen.de/wiki/index.php/servos, oberallgeier
9 PWM(100) == konstante Geschwindigkeit? Unterschiedliches Verhalten der Treiber und Motoren Variable Radgrößen Veränderlicher Untergrund (Neigung, Reibung) = konstante Rotationsgeschwindigkeit als Herausforderung
10 Aufbau des Systems Einfache Odometriescheibe Gleichstrommotor Getriebe Fragen: 1.Wie steuere ich den Gleichstrommotor aus dem Mikrocontroller heraus an? 2.Welche Aufgaben kann ich auf einen Treiberbaustein auslagern? 3.Wie erfasse ich die Messungen der Odometrie im Controller effektiv? 4.Wie bilde ich die Odometrieticks auf eine Bewegung ab?
11 Ansteuerung Gleichstrommotor Richtungsorientierung über H-Brücke M + - + - + M - M + - - +
12 Ansteuerung Gleichstrommotor Geschwindkeitsdefinition über PWM M + - Periode + - Spannung am Motor 50% ma 90% 10%
13 Beispiel LED https://www.youtube.com/watch?v=zhirryhfhlm Üblicherweise ist die mit PIN 13 verbundene LED an einem PWMfähigen Port angebunden.
14 Leistungstreiber L298P PWM vom Controller Source: Arduino Homepage STMicroelectronics, Datenblatt L298P
15 PWM in Software? #include <avr/io.h> #define F_CPU 16000000UL #include <util/delay.h> void setup() { DDRB = _BV(DDB0); } void loop() { PORTB = _BV(PB0); _delay_ms (10); PORTB &=~ _BV(PB0); _delay_ms (90); } Busy-Waiting Nachteil der Implementierung: Die Verzögerung der Verarbeitung wird nicht berücksichtigt. Der Prozessor läuft permanent mit voller Leistung. Timerfunktionen sollten soweit wie möglich in Hardware umgesetzt werden.
16 Aufgaben der Timer Zählen von Ereignissen Messen von Zeiten, Frequenzen, Phasen, Perioden Erzeugen von Intervallen, Pulsfolgen, Interrupts Überwachen von Ereignissen und Definition von Zeitstempeln Source: Mikrocontroller und Mikroprocessoren, Brinkschulte
17 Capture-and-Compare Einheit interrupt request system clock Capture-Register edge select 2 n Port internal timers timer select MUX Counter external timing sources activate Counter Controller interrupt request Min / Max Capture Funktionalität: Generation von Zeitstempeln
18 Capture-and-Compare Einheit system clock Compare-Register 2 n match Digital Comparator Port internal timers timer select MUX Counter external timing sources activate Counter Controller interrupt request Min / Max Compare Funktionalität: Generation von Zeitintervallen, PWM
19 Anwendung: Timerinterrupts Compare-Register 12 Digital Comparator Clock 0...16 Counter Controller 0/ 16 interrupt request Periode p=16 Timerinterrupt: pw=12 match/clear Zähler<pw Zähler pw match/clear Zähler<pw Zähler pw match/clear Zähler<pw p p Overflow Interrupt Compare Interrupt
20 Anwendung: Pulsweitenmodulation Compare-Register 12 Digital Comparator match Port Clock 0...16 Counter Controller 0/ 16 interrupt request Signalverlauf: Periode p=16 Pulsweite: pw=12 Tastverhältnis: a:b = 12:4 match/clear Zähler<pw Zähler pw match/clear Zähler<pw Zähler pw match/clear Zähler<pw a b a b p p
21 Umsetzung im AVR Two 8-bit Timer/Counters with Separate Prescaler and Compare Mode Four 16-bit Timer/Counter with Separate Prescaler, Compare- and Capture Mode Four 8-bit PWM Channels Twelve PWM Channels with Programmable Resolution from 2 to 16 Bits
22 Modi des 8-Bit Timers I Clear on Compare Match (CTC) f 2 N f clk _ I / O (1 OCRnx ) Variable Periode! Fast PWM f N f clk _ I / O 256
23 Timer Modi des 8-Bit Timers II Phase Correct PWM f N f clk _ I / O 510
24 Abfragen der Sensoren Lies Messwert Lies Messwert 1 Taktperiode Transformation, Filterung, Detektor, Abstraktion Berechnung Reglerverhalten Idle Messwert verfügbar Busy Waiting bis zum Ende der Periode Schreibe Ausgabe Lies Messwert Idle Timerinterrupt Schreibe Ausgabe Idle Timerinterrupt Schreibe Ausgabe
25 Interruptbasierte Programmierung normale Programmabarbeitung Beenden der aktuelle Instruktion eventl. Interrupts deaktiviert Registersatz auf den Stack Zeitpunkt des Interrupts indirekter Sprung über die Interrupt-Einsprungtabelle zur Interrupt-Behandlungs- Routine Ausführung der Interrupt- Einsprung- Routine Ausführung der Interrupt- Behandlungs- Routine RTI: Rückkehr vom Interrupt normalen Programmabarbeitung Wiederherstellung des Prozessorzustands Holen der Register vom Stack
26 Praktische Umsetzung Single Device Multi Devices Daisy Chaining
27 Vektorisierte Interupts Hauptspeicher IVT Programmzähler CPU Vektor-Basis-Reg. IRQ IACK IBR BUS IACK IRQ Peripheres Gerät IACK Vektor IRQ IACK Vektor IRQ Peripheres Gerät
28 Vektorisierte Interrupts IMR Interrupt Masken Register IRR Interrupt Request Register PSN - Prioritätenschaltnetz Source: Mikrocontroller, Wüst
29 Interrupts beim AVR 8 Interruptvektoren für externe Interrupts an Port INT 0...7 25 Interruptvektoren für interne Ereignisse (Timer, ADC, Comm, Memories) 1 Reset Interruptvektor Die Priorität der Interrupts ist durch die Position in der Interrupt- Vektor-Map (0000 16 0044 16 ) festgelegt. Diese wird im Programmspeicher (Flash) angelegt. Es kann gewählt werden, ob sie am Anfang (0000 16 ) stehen soll oder vor der Boot-Loader Sektion. Prioritäten: Reset ext.interrupts 0-7 Timer (hohe Prio) Kommunikation ADC Analog-Komparator Timer (niedrigere Prio) Kommunikation (niedrigere Prio)
30 Interrupt-Vektortabelle des AVR
31 Interrupts beim AVR Ausführung eines Interupts wenn: generelle Aktivierung über Status Bit (I-Bit) individuelle Aktivierung der externen Interrupts (Maske) Interrupt Auftritt Verschachtelte Interrupts sind nicht vorgesehen können aber erzwungen werden globale Sperrung der Interrupts, keine Verdrängungsmodelle! Stau von Interrupts: 1. Ein Interrupt tritt auf, während Interrupts gesperrt sind. 2. Setzen des individuelle Interruptflags 3. Soweit ein weiterer Interrupt gleichen Typs auftritt, wird der vorhergehende Interrupt überschrieben. 4. Nach dem Verlassen der ausgeführten Interruptroutine werden die zwischenzeitlich eingetroffenen Interrupts abgearbeitet.
32 Darstellung im Assembler-Code 00000000 < vectors>: 0: 0c 94 72 00 jmp 0xe4 ; 0xe4 < ctors_end> 4: 0c 94 93 00 jmp 0x126 ; 0x126 < bad_interrupt> 44: 0c 94 95 00 jmp 0x12a ; 0x12a < vector_17> 000000e4 < ctors_end>: e4: 11 24 eor r1, r1 ; Init R1 e6: 1f be out 0x3f, r1 ; Setzen des SREG e8: cf ef ldi r28, 0xFF ; Initialisieren des Stack 00000126 < bad_interrupt>: 126: 0c 94 00 00 jmp 0 ; 0x0 < vectors>
33 Darstellung im Assembler-Code 0000012a < vector_17>: ISR(TIMER1_COMPA_vect) { 12a: 1f 92 push r1 12c: 0f 92 push r0 12e: 0f b6 in r0, 0x3f ; 63 130: 0f 92 push r0 132: 11 24 eor r1, r1 134: 8f 93 push r24 counter_trigger=1; 136: 81 e0 ldi r24, 0x01 ; 1 138: 80 93 0a 02 sts 0x020A, r24 } 13c: 8f 91 pop r24 13e: 0f 90 pop r0 140: 0f be out 0x3f, r0 ; 63 142: 0f 90 pop r0 144: 1f 90 pop r1 146: 18 95 reti SREG sichern r1=0 r24 sichern Counter_trigger =1 Rücksprung
34 Zeitverhalten des Interrupts normale Programmabarbeitung aktuelle Instruktion wird zu Ende geführt Mindestens Interrupts werden 1 Clock Zyklus deaktiviert Zeitpunkt des Interrupts indirekter Sprung über die Interrupt-Einsprungtabelle zur Interrupt-Behandlungs- Routine Ausführung der Interrupt- Einsprung- Routine Mindestens 5 Clock Zyklen Ausführung der Interruptn Clock Zyklen Behandlungs- Routine Fortsetzung der normalen Programmabarbeitung Continue Mindestens RTI: Rückkehr vom Interrupt 5 Clock Zyklen Wiederherstellung des Prozessorzustands
Source: Atmega 2560 Handbuch Prinzipien und Komponenten eingebetteter Systeme 35 AVR zwei Varianten externer Interrupts INTn bei INT0 kannst du auf die positive bzw. negative Flanke einen Interrupt auslösen. individuelle Interruptroutinen Teilweise asynchron und damit zum Restart des Prozessors aus verschiedenen Sleep-modi geeignet PCINTn Keine Triggerung auf bestimmte Signalzustände eine allgemeine Interruptfunktion Pattern matching über 8 Bit PCINT0:7 und PCINT8:15 (konfigurierbar über PCMSK1:2) Beide Varianten können als Softwareinterrupts benutzt werden!
36 Bis zur nächsten Woche!