Wie erzeugt man ein software PWM-Signal am Bessten?

OP #310941
Lesenswert?
• ▲
▼
Salve

Ich stelle mir gerade die Frage wie ich das Software PWM-Signal zur
Ansteuerung eines Modellbauservos am Besten erzeugen soll.

Ich habe mir mehrere Lösungen überlegt.

Welche davon ist eigentlich die Beste?

Methode 1:
Man aktiviert den Überlaufevent und trimmt durch Startwertvorgabe
darauf dass der Überlaufinterrupt in fixen Zeitintervallen auftritt
welche für die benötigten low bzw highzeiten mitgezählt werden.


Methode 2:
Man verwendet 2 unterschiedliche Vorteiler für das Stoppen der High-
und lowzeiten und schaltet dabei bei jedem Timer-Event den Pegel um.

Methode 3:
Diese Methode ist sicher die Schlechteste:
Man fängt das Hauptprogramm in der Hauptschleife für die jeweiligen
Zeitintervalle in einer Schleife ein und beschränkt sich mit den
Aufgaben in der Hauptschleife auf das Erzeugen des PWM-Signals.

Kann man die Lowzeit dauernd bei 18,5ms lassen und verändert nur die
High-Zeit oder sollte man nicht darauf vertrauen dass bei dem Servo die
Tolaranz groß genug ist und die Lowzeit auch variabel gestalten und sie
an die Highzeit anpassen?

mfg Sepp
Gast #310943
Lesenswert?
• ▲
▼
Du laesst den Timer bis zum Overflow laufen, dann setzt du deinen pin
beim interrupt auf Low.
Dann setzt du einen Compare wert, wo du in einen intrrupt ausloesen
laesst und setzt den pin auf High
Gast #310944
Lesenswert?
• ▲
▼
- Timer Interrupt initialisieren (entspricht der PWM Frequenz)
- in Hauptscheilfe einen Zähler erhöhen
- Zähler mit pwm_var vergleichen (entspricht Einschaltdauer des PWM)
- Zähler < pwm_var -> Pin Low
- Zähler > pwm_var -> Pin High
- in der ISR  zähler = 0 setzen
Gast #310945
Lesenswert?
• ▲
▼
Man aktiviert den Überlaufevent und trimmt durch Startwertvorgabe
darauf dass der Überlaufinterrupt in fixen Zeitintervallen auftritt
welche für die benötigten low bzw highzeiten mitgezählt werden.
Siehe Anhang! ---> Selbsterklärend
Angehängte Dateien:
OP #310946
Lesenswert?
• ▲
▼
@Berni F.
Was soll dass mit dem Anhang wieder sein?

Was willst du mit dem Kopieren von Ausschnitten meines Beitrages
sagen?

@Umwandler
Einen Zähler in der Hauptschleife ist nicht wirklich machbar, da die
Hauptschleife durch alle Interrupts unterbrochen wird und somit der
Zählwert nur ein grober Schätzwert ist.

@Wolfram
Danke für den Hinweis.
Daran habe ich garnicht gedacht.
(Manchmal sieht man den Wald vor lauter Bäumen nicht und denkt um 10
Ecken bevor man auf die einfachste Lösung aufmerksam gemacht wird.)

Das ist wirklich gut und erspart mir einige Zeile Code.

Das ist sicherlich die schnellsete und platzsparendste Lösung für diese
Anwendung.

mfg Sepp

Antwort schreiben

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.

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.