AVR für Servo Input und Output

Gast #2792154
Lesenswert?

Hi!
Ich stehe vor einem kleinem Modellbau-Projekt. An einen ARM Cortex M3 
(mbed), der Fluglagen und vieles mehr berechnet, soll ein AVR 
vorgelagert werden, der sich um die Servo-Signal Ein- und Ausgabe 
kümmert.
Problem ist nämlich das Timing. Wenn der ARM noch Sensoren ausliest, 
kann er gleichzeitig schlecht nebenbei noch auf Empfängerimpulse warten 
und Servodaten ausgeben.

Der AVR soll mit UART an den ARM angeschlossen werden.
Einlesen sollte mit Port Change Interrupt gehen.
Ausgabe mit Hardware-PWM, um nicht das Timing durch Kommunikation oder 
anderes zu verfälschen.

Der AVR liest also ein, gibt auf Befehl die aktuellen Werte weiter, 
bekommt Stellwerte und gibt entsprechend wieder aus. Das ganze soll ein 
Modul werden, dass ich auch bei anderen Projekten benutzen kann.

Weitere Anforderungen sind:
- 3.3V Spannungsversorgung
- Noch lötbar. TQFP ist noch möglich.
- So zwischen 20-30 Pins, mehr wird fast zu groß.
- Hardware-PWM für 8 Pins, Auflösung ca. 7 Bit.

Welcher AVR kommt hier in Frage?
#2792200
Lesenswert?

Atrigos schrieb:
> Karl Heinz Buchegger schrieb:
>> Eine HW-PWM reicht.
>
> Ich dachte, die HW-PWM sind an ganz bestimmte Pins gebunden. Bei den
> gänigegen kleineren 8-Bit sind das doch meist nur 2-4 Pins.
> Oder irre ich mich etwa?

Man kann ein Dutzend Servosignale problemlos mit 1 Timer erzeugen. Dazu 
braucht man noch nicht einmal HW-PWM (so gesehen hab ich eine falsche 
Angabe gemacht). Per Software mit einem Compare-Match im Timer ist das 
für den AVR ein Kinderspiel.

Modellbauservo Ansteuerung
Gast #2792312
Lesenswert?

Modellbau Servos erwarte Impulse mit 1-2ms Dauer alle 20ms. Daher kannst 
Du locker 5 Servos mit nur einem einzigen Teimer ansprechen, und zwar 
immer abwechselnd (quais gemultiplext). Da die Timer des AVR zwei 
Compare Register haben, kannst Du sogar 10 PWM Ausgänge mit nur einem 
Timer realisieren.

Der Trick besteht darin, die nicht PWM Ausgänge der Timer zu verwenden, 
sondern die Compare- und Overflow Interrupts. In der Interrupt-Routine 
stellst Du dann die 10 Ausgänge um...

Konkretes Beispiel: http://stefanfrings.de/servocontroller/index.html

Dieses Programm wird per I2C angesteuert, Du kannst es sicher leicht auf 
UART umschreiben.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren