www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM linearisieren


Autor: bluemole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich würde mal gerne Eure Meinungen/Tipps lesen zu folgendem Problem:

Per Frequenz soll ein Sollwert für eine Spg.-Regelung vorgegeben
werden. Die Sollwertvorgabe soll sich linearverhalten.
Die Frequenz will ich per PWM erzeugen, indem ich das Register für die
Periodenlänge manipuliere. Leider bekomme ich genau an dieser Stelle
Probleme mit der Linearität.

Beispiel: Vorgabe 1 Volt( == 1 Bit) == 1 Herz.

Das bei 10 Volt würde ich 10 Bit in das PWM-Scale-Register eintragen
und den Prescaler der PWM vom uC & die externe Beschaltung so vornehmen
das dann auch 10 Volt als Sollwert anliegen.

Bei 40 Volt wären es dann dann leider nicht 40 Bit. Sondern eine
weitaus höhere Bitzahl. Da sich bei dieser Methode die Frequenz nicht
linear verändert.

Was meint Ihr. Ist es jetzt besser mit einer LookUp-Tabelle zu
arbeiten. Oder sich eine Linearisierungsfunktion zu errechnen.
Oder eine andere Art der Frequenzerzeugung zu wählen. An der
Sollwertvorgabe via Frequenz muss ich aus bestimmten Gründen
festhalten.

Vielen Dank für Eure Meinung,
bluemole

PS: Den Dutycycle der PWM halt ich immer auf dem Tastverhältnis 1:1.
Das ist einfach; Periodenlängen Register geteilt durch zwei und ins
Dutycycle Register geklopft.

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

das versteh ich nicht. Willst Du den PWM-Ausgang als DAC verwenden ?
Dann lass die Frequenz konstant und verändere das
Puls-Pausen-Verhältnis.

Gerhard

Autor: josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Die Frequenz will ich per PWM erzeugen, indem ich das Register für die
Periodenlänge manipuliere." - kein guter Weg. Freuqenzen erzeugt man
nicht mit PWM. Mit PWM kann man nur das Tastverhältnis ändern.
PWM eignet sich aber sehr gut, um mittels eines nachgeschalteten
RC-Tiefpasses und eines OPVs in Folger/ Verstärkerschaltung eine
lineare Spannung zu erzeugen. Wenn du zB einen OPV nachschaltest, der
2-fach verstärkt kannst du schön 0-10 V erzeugen. Mit dem OPV ist
ausserdem eine weitere Linearisierung möglich.


SG Josef

Autor: bluemole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Frequenz geht auf einen OVC (Frequenz-Spannungs-Converter).

Autor: josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz
// Mode: CTC top=OCR1A
// OC1A output: Toggle
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
TCCR1A=0x40;
TCCR1B=0x0C;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;


Damit kannst du zB. mit dem 90s8535 und mittels seinem Timer1 eine
variable Freuquenz erzeugen. Brauchst nur OCR1AH und OCR1AL verändern.
(OCR1AH = Freq ; OCR1AL=0x00; immer beide  beschreiben !)


Josef

Autor: bluemole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn ich mir das durchdenke ist die Frequenz aber wieder nicht linear.
Oder?

Autor: josef (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist eine lineare Frequenz ?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Er meint wohl eine lineare Beziehung zwischen dem Counter-Wert und der
Frequenz. Und die ist nun mal hyperbolisch, d.h. es muss dividiert
werden. Microcontroller mögen nicht dafür geboren sein, aber ein
bischen rechnen können sie auch. Fertige Routinen dafür gibt's via
Compiler oder Application-Note des Herstellers.

Tabelle mag nötig sein, wenn's arg eilig ist.

Was das mit den 40 Bit soll ist mir freilich unklar. Um welchen
Frequenzbereich geht es denn?

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Die Frequenz geht auf einen OVC (Frequenz-Spannungs-Converter)."

Wenn Du vielleicht noch den Sinn dieser Übung verraten könntest ?

Geht es nur darum, etwas möglichst umständlich und ungenau zu machen ?

Warum nimmst Du denn nicht gleich die PWM zur Spanungserzeugung ?

Ist mit Sicherheit wesentlich schneller, genauer und linearer als der
Umweg über ne Umrechnungstabelle und den FVC.


Peter

Autor: bluemole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der uC ist auf einem anderen Potential als die Regelung. Um die
galvanische Trennung zu überwinden ist es einfacher und genauer eine
Frequenz zu benutzen.

Um eine weitere oben genannte Unklarheit zu beseitigen. Es handelt sich
um einen Frequenzbereich von ca. 1kHz - 12kHz.

A.K. hat recht mit seiner Hypobolischen Funktion, kennt jemand einen
Link mit einem guten Beispiel?

Autor: Michael (ein anderer) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auch ein PWM-Signal ist eine Frequenz... Dann mach' es doch so:

PWM ---> galvanische Trennung (Opto) ---> Tiefpass

Fertig ist der Lack. Wozu der Umweg über einen
Frequenz-Spannungs-Wandler?

Autor: bluemole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wozu der Umweg über einen
Frequenz-Spannungs-Wandler?

Ich kann von dem Prinzip leider nicht weg, ist nun mal eine Vorgabe.

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es weiß hier ja keiner, welchen µC Du nimmst.

Mal angenommen einen AVR bei 8MHz:

8e6  12e3  2 = 333

D.h. Du erreichst maximal 333 * (1 - 1/12) = 305 lineare Stufen.

Da ist es das einfachste, eine Tabelle mit 305 Einträgen a 2 Byte zu
nehmen.

Wenn überhaupt Dein FVC so linear ist, ansonsten entsprechend weniger
Einträge.


Im Prinzip hat Michael aber recht, das PWM-Signal vor dem Filter läßt
sich auch prima über nen Optokoppler geben.


Peter

Autor: bluemole (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist ein HCS12 uC von Motorola/Freescale. 16 Bit breit.

Autor: Marko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe den Code vom Zoltan benutzt.

TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10);
TCCR1A=(1<<WGM11)|(1<<WGM10)|(1<<COM1A0);

OCR1A = 100;
// Frequenz einstellen


Allgemein kann man folgende Formel benutzen:

OCR1A = 8000000/Frequenz

Das Problem eine möglichst lineare Frequenz zu generieren liegt darin,
dass OCR1A nur ein 16-bit Register ist.
Das bewirkt, dass bei hohen Frequenzen die Abstände immer größer
werden. (f = 1/T)

Da aber beim Überlauf mind. ein Takt Verzögerung auftritt und diese bei
höheren Frequenzen einen höheren Anteil besitzt, da ja da
T kleiner wird, ergibt sich eine nach oben hin größer werdende
Differenz.

Ein Beispiel:
Quarz = 16 MHz, Vorteiler = 1

f= 5 KHz --> OCR1A = 1600
mit Frequenzmesser gemessen aber : 4,997437 KHz

Differenz =  2,536 Hz

f = 10KHz --> OCR1A = 800
mit Frequenzmesser gemessen aber : 9,988634 KHz

Differenz = 11,366 Hz

Die Formal muss um einen Faktor korrigiert werden.

Verändert man die Formel auf

OCR1A = 8000000/f - 1

Marko

kommt man sehr dicht an die gewünschte Frequenz heran.

f = 10KHz --> OCR1A = 799
mit Frequenzmesser gemessen aber : 10,00112 KHz

f_abstand zum OCR1A +- 1 ca. 8Hz

f= 5 KHz --> OCR1A = 1599
mit Frequenzmesser gemessen aber : 5000,532 KHz

f_abstand zum OCR1A +- 1 ca. 3Hz

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.