Sinus erzeugen mit Timer - +5V bis -5V

Gast #1606531
Hallo!

Ich will ohne externe Beschaltung zum Ansteuern eines kleinen 
Schrittmotors zwei Sinus-Verläufe mit einem Timer und möglichst hoher 
PWM-Frequenz erzeugen. Als Referenzpunkt nehme ich einen Portipn. In der 
oberen Halbwelle ist dieser Pin auf Masse, die PWM arbeitet normal. In 
der unteren Halbwelle ist der PIN auf +5V (high), die PWM müsste jetzt 
invertiert laufen. Also entweder mit COMxA0 auf 1 oder mit Werten in der 
Form 255, 215, ..., 0, 215, 255.

Knackpunkt ist der Wechsel von oberer auf untere Halbwelle (oder 
andersrum). Da die Frequenz des Sinus von einem anderen Interrupt 
gesteuert wird wird der Wert des OCRx-Registers bzw. des COMxA0 Flags 
nicht synchron übernommen sondern erst beim nächsten TxOVF oder 
Compare-Match. Da ich aber in dem Interrupt den Portpin schon ändern 
muss habe ich beim Umschalten immer irgendwelche ungewünschten Impulse 
in meinem Sinus! Die der PWM-Timer ohne Vorteiler läuft möchte ich es 
eigentlich vermeiden extra dessen Interrupt nutzen. Der ganze Quatsch 
wäre schon längst erledigt wenn das COMxA0 Flag SOFORT ausgewertet würde 
bzw. wenn das Force Output Compare auch im PWM-Modus funktionieren 
würde...

Grüße
Robert

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.