mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie erzeugt man ein software PWM-Signal am Bessten?


Autor: Sepp -o- (sepp_o)
Datum:

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

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Methode 4:
man verwendet das Output Compare register und lädt im Interrupt jeweils
den nächsten Wert. z.B. 1,5ms ;18,5 ms jeweils skaliert.

Autor: Jens D. (Gast)
Datum:

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

Autor: Umwandler (Gast)
Datum:

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

Autor: Berni F. (Gast)
Datum:
Angehängte Dateien:

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

Autor: Sepp -o- (sepp_o)
Datum:

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

Autor: Umwandler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sind denn deine ISR so lang, dass das Zählergebnis ungenau wird?
Eigentlich sollte man doch die ISR so kurz wie möglich machen.

Autor: Sepp -O- (Sepp_O) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leider geht's nicht anders.

Ich werd's mit Compare machen.

mfg Sepp

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.