mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit PWM und Servo


Autor: Max (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: aha (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo aha

Das halten einer Position ist ja kein Problem. Ich kann auch mit einiger 
Kraft am Servo drehen und er hält trotzdem die Stellung. Deshalb gehe 
ich mal davon aus das es kein Problem mit der Signallänge gibt.
Habe gerade noch ausprobiert den Wert von ICR1 auf ca 22ms anzuheben, 
was aber keine Veränderung gebracht hat.

Autor: Christoph S. (mixer) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was willst du in der for-Schleife machen?? Wenn ich das richtig sehe 
setzt du 50 mal den gleichen Wert in die compare-Register!!

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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" ??

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Richtigen Controller im makefile eingetragen?

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Matthias
Ok, werd ich machen.

Danke nochmal an alle für die schnelle Hilfe.

Autor: STK500-Besitzer (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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.

Autor: Max (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo  STK500-Besitzer

Danke für den Code. Ich werd mal schaun ob  das was für mich ist. Hab 
leider seit Dienstag keine Zeit mehr gehabt an dem Programm zu arbeiten. 
Auf jeden Fall Danke für den Code.

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>sollte aber Dank der Kommentare leicht änderbar sein.
Die sind wohl irgendwie auf der Strecke geblieben...
Ich finde es aber relativ verständlich (naja, es ist ja auch von 
mir...).

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.