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.
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
"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
// 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
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?
"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
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?
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?
Wozu der Umweg über einen Frequenz-Spannungs-Wandler? Ich kann von dem Prinzip leider nicht weg, ist nun mal eine Vorgabe.
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
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.