Aufgabenstellung
MIttels eines ATtiny2313 soll ein Modellbauservo angesteuert werden. Dazu wird zunächst der 16-bit Timer/Counter1 with PWM verwendet.
[ ATtiny2313] Seite 88ff.
Ansteuerung von Modellbau Servos
Ein Modellbauservo sollte spätestens alle 20 ms einen Steuerimpuls bekommen. Die Impulslänge ist proportional zum Stellwinkel des Servos. Sie bewegt sich typischerweise zwischen 1,0 und 2,0 ms. Für den Modellbauer interessant ist vor allem die Impulsdauer der Mittelstellung des Servos - hier 1,5 ms.Die erste Überlegung betrifft das Timing zur Erzeugung des PWM-Signals.
Der Timer wird mit einem vorgeteilten von der CPU-Frequenz abgeleiteten Signal betrieben. Mögliche Teilverhältnisse sind: 1,8,64,256,1024. Der Controller hat einen internen Oszillator mit folgenden wählbaren Frequenzen: 1,2,4,8 MHz.
Timer und Pulsweitenmodulation
Der Servo erhält alle 20ms einen Impuls zwischen 1.0ms und 2.0ms Dauer. Der Timer wird daher mit 1 MHz, dem Systemtakt getaktet.
Gewählt 1 MHz mit Vorteiler 1:1.
Betriebsart Fast PWM Mode siehe Seite 98ff. Der Timer zählt von 0 bis zu einem einstellbaren TOP Wert und springt dann wieder auf 0. Ein Ausgang kann beim Sprung von TOP auf 0 gesetzt und bei Erreichen eines einstellbaren Wertes OCR1A wieder rückgesetzt werden.
OCR1A als TOP. OCR1B als Pulsweite. Ausgang ist PB4 (OC1B).
Einstellungen bei Initialisierung
Register | Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Beschreibung |
---|---|---|---|---|---|---|---|---|---|---|
TCCR1A | Bedeutung | COM1A1 | COM1A0 | COM1B1 | COM1B0 | FOC1A | FOC1B | WGM11 | WGM10 | Ausgang OC1B bei 0 setzen und bei OCR1B löschen |
Wert | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 |
Waveform Generation Mode: Fast PWM mit OCR1A als TOP |
|
TCCR1B | Bedeutung | ICNC1 | ICES1 | - | WGM13 | WGM12 | CS12 | CS11 | CS10 | |
Wert | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | Keine Vorteilung Timer mit CPU-CLK (No prescaling) | |
TIMSK | Bedeutung | TOIE1 | OCIE1A | OCIE1B | - | ICIE1 | OCIE0B | TOIE0 | OCIE0A | Keine Interrups notwendig |
Wert | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Anschluß des Servos
|
|||||||||||||||||||||||||||||||
ATtiny2313 | STK200 I/O Port B |
---|
Initialisierung 1,5ms Impuls
#include <avr/io.h> int main(){ DDRB = 0b00010000; // PB4 als Ausgang TCCR1A = 0b00100011; // Ausgang OC1B bei 0 setzen und bei OCR1B loeschen TCCR1B = 0b00011001; // Waveform Generation Mode: Fast PWM it OCR1A als Top, Timer mit CPU-CLK OCR1A = 19999; // alle 20ms OCR1B = 1500; // Impulslaenge 1,5ms while (1); // Endlosschleife }
Initialisierung und Anfahren der Endpositionen
Aufgaben
Erstellen Sie eine Lösung, die ohne PWM auskommt.
Erstellen Sie eine Lösung mit 8Bit Timer.
Das Servo soll folgenden Weg immer abfahren: 1000ms, 2s; 1200ms, 2s; 1800ms, 3s; zurück zu 1000ms.