mikrocontroller.net

Forum: Compiler & IDEs AVR Studio und PWM Mode


Autor: Ben Jasc (robojuice)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hey Leute,
ich hab mal versuch mich als Neuling an die AVR Programmierung zu
machen. Bevor ich mir das Dev. Board rn-controll 1.4 mit Mega32 geholt
habe, wollt ich erst Vercuhe mit AVR-Studio und den Simulator machen.
Konkret will ich R/C Servos mit dem Controller steuern. Nun einen Tag
mit der Simulation verbracht und immer wieder am PWM Mode der Timer
gescheitert. Beim runterzählen und erreichen von BOTTOM wird das TOVx
Flag nicht gesetzt. Das gleiche Programm auf dem Board ausprobiert und
hier klappt es (LED am PORTC blinken). Ist das ein Fehler im Simulator
oder hab ich was falsch gemacht.

Grüße
Robojuice

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist das ein Fehler im Simulator
> oder hab ich was falsch gemacht.

Wenn's auf dem Board funktioniert und im Simulator nicht, dann
ist die Sache doch eindeutig, nicht wahr?

Es muss auch irgendwo (in der Windows-Hilfe?) ein Dokument geben,
das die "known limitations" der AVR-Studio-Simulation beschreibt.

Autor: Ben Jasc (robojuice)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay danke,
dort hab ich aber auch schon geschaut und nichts gefunden. Aber das
Problem hat sich in soweit gelöst als das ich gar nicht kontinuierlich
PWM-signale an den (Digital-!!) Servo schicken muss. D.h. ich schick 2
Pulse (mit ~20ms Abstand) die die Zielposition des Servos angeben, der
speichert sie intern (hält entsprechend auch die Position bis neue
Impulse kommen), und dann (oder auch zwischen den Impulsen) kann ich
den Controller machen lassen was ich will.
Also ist für mich das Thema Hardware PWM erstmal gestorben (das
Interrupt Handling soll sowie so recht anfällig sein.

Robojuice

P.S.:
Digitalservos von Hitec: HSR-5995 (Robot-Servo) High Torque

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> (das
> Interrupt Handling soll sowie so recht anfällig sein.

So?  Was für ein interrupt handling?  Die Hardware-PWM heißt
Hardware-PWM, weil die Hardware sie macht.  Da braucht man gar
keine Interrupts (zwingend), insbesondere keine zeitkritischen.

Autor: Ben Jasc (robojuice)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja,
um ne Periode (von 20ms) mit gut aufgelösten Pulsen (wenns geht 1µs)zu
bekommen und man nur einen 16 bit Timer hat, aber dann ebend 6 Servos
an einem Mega32 steuern will wird das recht schwer ohne Interrupts.
Ein Beispiel:
-8bit Timer 16Mhz f_CPU Puls generien
-Prescaler64
-Pulsebreite in das Outputcomare Register
-Timeroverflow nach 2048µs->Interrupt annehmen
-im TOVx Interrupt selben Timer auf Prescaler1024 Preload (-25)
-bei 17952µs nächster Overflow
-(dort wieder Prescaler auf 8 und Timer 0 setzen)
---> so hat man auf jeden 8bit Timer einen Hardware PWM für RCServos
mit ner Pulsbreiten-Auflösung von 4µsec und ner exakten Periode von
20ms

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so, darauf willst du hinaus.

Trotzdem verstehe ich deinen Aufwand nicht.  Erstens ist, soweit
ich weiß, die gesamte Periodendauer in der RC-PWM ziemlich schnuppe.
Sie soll ungefähr bei 20 ms liegen, aber die Servos speichern sich
ja den aktuellen Wert sowieso zwischen.

Ich mag dir jetzt nicht all die Arbeit abnehmen, aber folgendes
müsste doch gehen:

. CPU-Frequenz 8 MHz
. Timer 1 mit prescaler 8 -> 1 µs Auflösung
. fast PWM (mode 14) mit ICR1 als TOP, ICR1 auf 2500 gesetzt,
  ergibt einen Umlauf pro 2,5 ms; mit 6 Kanälen kommst du also
  auf 15 ms aktiven Teil, danach 2 inaktive Umläufe für die
  Synchronisation
. OCR1A kann Werte zwischen 920 und 2120 annehmen, umd die
  Pulsbreite zu steuern
. da OCR1A doppelt gepuffert ist, kann man nach dem Beginn einer
  jeden Periode bereits den Wert für die nächste Periode
  eintragen; damit braucht man natürlich Interrupts, hat aber
  vergleichsweise viel Zeit, diese zu bearbeiten (man bereitet
  während des jeweils aktiven Impulses eines Kanals bereits den
  nächsten vor)

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.