PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos ansprechen mit Atmega16



zersus
22.05.2006, 13:42
Servus,

Da ich gerade an einem Roboter baue, hatte ich vor meinen Sensor mir Hilfe eines Servos drehbar zu machen, leider habe ich keine Ahnung wie ich diese genau mit meinem Mikrokontroller( einen Atmega16 ) ansteuern
kann.

P.S.: Ein normaler Modellbau Servo

Ich bedanke mich schon einmal für eure Antworten.

mfg zersus

Florian
22.05.2006, 14:23
Hallo zersus!
In welche Sprache programmierst Du?

zersus
22.05.2006, 14:32
Ich programmier mit Assembler.

uwegw
22.05.2006, 14:49
Was hast du noch so an Timern frei?

Einfachste Methode: Du stellst einen Timer so ein, dass er alle 20ms einen Interrupt auslöst. In dessen ISR startest du dann einen zweiten Timer, der -je nach gewünschter Position- den Anschluss des Servos für 1 bis 2ms [1,5ms ist Neutralstellung] einschaltet. Mit zwei Compare-Registern kannst du so recht einfach zwei Servos ansteuern. Es geht auch mit nur einem Timer und noch mehr Servos, aber dann wird halt auch komplizierter...

zersus
22.05.2006, 14:57
Wie wäre die eigentlich die Mäglichkeit genau mit einem Timer( 16Bit timer Counter1) und einem Servo, da ich leider nur noch 1 freihabe und nur einen Servo gebrauchen Kann, auch aus Platzproblemen.

Bedanke mich schon im Voraus für eure Antworten.

uwegw
22.05.2006, 15:03
Dann müsstest du erst die Impulsdauer (1 bis 2ms) ablaufen lassen, und danach den Timer so stellen, dass er die restlichen 18 bis 19ms zählt, bis der nächste Impuls kommen muss...

Hanni
22.05.2006, 15:06
Hmm .. folgende Annahme:

Servos werden mit einer Abart der PWM angesteuert.

Die Pulsfolgefrequenz liegt bei 50Hz (20 ms)
Der Regelbereich liegt zwischen 1 ms und 2 ms Impulsbreite (1ms - eine Seite - 1,5 ms die Mitte - 2 ms die andere Seite)

Folglich könnte man eine (Fast-) PWM mithilfe des Timers 1 initialisieren welche grob die folgenden Eckdaten hat:

1. ein kompletter Timerdurchlauf dauert 20 ms
2. der Vergleichswert (OCR) bewegt sich zwischen 1 ms & 2 ms ...

das schöne daran ist, man initialisiert das einmal und ausser dem, das man neue Werte übergeben muss hat man keinerlei Aufwand.

Grüße,

da Hanni.

€dit: Mit dem Timer 1 gehen im übrigen normalerweise 2 PWM's ...

zersus
22.05.2006, 16:28
Könntest du mir bitte auch noch sagen wie das im konkreten im Quellcode
ausschaut( zur Erinnerung im Assembler)

mfg zersus

Hanni
22.05.2006, 22:35
hier (https://www.roboternetz.de/phpBB2/viewtopic.php?p=181249#181249) könntest du einige Anregungen finden ...