Problem mit PWM und Servo

Gast #1042948
Lesenswert?

Hallo Zusammen

Ich habe mir anhand einiger Beiträge aus diesem Forum ein Programm zum 
ansteuern von zwei Servos geschrieben. Dazu benutze ich die PWM Funktion 
von Timer1. Der Timer arbeitet soweit gut, aber wenn ich versuche die 
Servos drehen zu lassen wird der µC zurückgesetzt. Ich gebe zum Debuggen 
einzelne Zeichen über die serielle Schnittelle aus. Im Terminal sehe ich 
dann folgende Ausgabe: abcabcabcabcabcdeabcabcabcabcabcdeab usw.. Daraus 
entnehme ich das er erst beim 4 Durchlauf bis "e" kommt und dann auch 
nicht in der Main Schleife bleibt. Außerdem drehen die Servos nur 
ständig hin und her. Habe ich bei der Konfiguration des Timers einen 
Fehler gemacht oder liegt es an einer anderen Stelle?

mfg
Max

Hardeware: STK500 mit ATMega16 bei 14,7456 MHz
Compiler: avr-gcc 4.3.0 unter Ubuntu 8.10
Angehängte Dateien:
Gast #1042960
Lesenswert?

Die Servos benoetigen 0.8 .. 2.2ms Einschaltzeit bei ca 20ms Periode. 
Wenn das Timing nicht stimmt, wegen einem Interrupt oder so, kommt das 
Servo aus dem Tritt. Es gibt servos, die fahren bei fehlendem, oder 
fehlerhaftem Steuersignal auf eine Deafultposition, andere halten die 
aktuelle position bei fehlendem Steuersignal. Ohne visuelle kontolle des 
Steuersignales mit einem Oszilloskop kann man keinerlei Aussagen machen.
Gast #1042984
Lesenswert?

>m Terminal sehe ich
>dann folgende Ausgabe: abcabcabcabcabcdeabcabcabcabcabcdeab usw.. Daraus
>entnehme ich das er erst beim 4 Durchlauf bis "e" kommt und dann auch
>nicht in der Main Schleife bleibt.

Da deine main-while-Schleife leer ist, und vorher ein 'e' ausgegeben 
wurde, schließe ich, dass die korrekte Ausgabe so aussehen sollte:

abcde

Da es immer wieder von vorn losgeht, bedeutet dass das der µC (ständig) 
resettet.
Da du keine ISR freischaltest, kann es eigentlich nur ein hardware-reset 
sein.

Möglich wäre zB ein brown-out-detect.

Vielleicht ist der Aufbau hardwaremäßig, also im Sinne von EMV und 
Abblockkondensatoren, Spannungsversorgung,... nicht ganz "optimal" ??
Gast #1043020
Lesenswert?

@Mixer S.
Die for-Schleife gibt den Servos nur zeit die Position zu erreichen.

@holger
Ja, ich arbeite mit Eclipse und dem AVR-Plugin. Alle Einstellungen sind 
korrekt.

@Matthias
Du hatest Recht. Danke!
Habe die Brown-out detection deaktiviert und es läuft. Wass kann ich da 
an der Hardeware ändern um mich in zukunft besser vor sowas zu schützen? 
Reicht da ein 100nF Kondensator zwischen VCC und GND aus?
Gast #1043023
Lesenswert?

>Reicht da ein 100nF Kondensator zwischen VCC und GND aus?

Naja, das sollte nur eine Maßnahme sein.

Google mal nach
"emc desgin considerations"
Das ist ne AppNote von Atmel. Lies die dir mal durch. Die gilt für jede 
digitale Schaltung.

Schon lange Zuleitungen und ein schwaches Netzteil reichen da, um 
Probleme zu machen...
Gast #1043187
Lesenswert?

Deine Zahlen für OCR stimmen nicht.
1ms OCR=1843
2ms OCR=3686

Ich hänge mal ein ziemlich umfangreiches Programm an, das auch noch 
Multiswitch-Module von futaba auslesen kann...
Es ist zwar für den ATMega162 (scheinbar mein LIeblings-AVR) 
geschrieben, sollte aber Dank der Kommentare leicht änderbar sein.
Die Servos hängen an "normalen" Portpins.

"fosc" und die Registernamen müssten nur deinen Controller angepasst 
werden.
Angehängte Dateien:

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