www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frequenz mit Poti linear regeln


Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich hab hier einen Poti zwischen 5V und 0V hängen und greife in der 
mitte auf einen ADC ab. Das klappt auch soweit, jedoch möchte ich die 
Frequenz linear regeln, was in der jetzigen Programmierweise nicht 
passiert, da ich OCR1A neu belege und damit ja quasi die Periodendauer. 
Kann man diesen hyperbolischen Verlauf, der entsteht linearisieren 
mittels Formeln oder sollte ich vieleicht ganz anders an das Problem 
gehen?

Autor: Carsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Frequenz? Über PWM?

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich nutze einen timer der einen compare interrupt auslöst, in der 
routine wird dann das ereignis bearbeitet, welches in der einstellbaren 
frequenz ablaufen soll.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du die Frequenz einstellen möchtest nimm den CTC Modus! Dann macht 
der Timmer das alles automatisch und du must nur einen neuen TOP Wert 
vorgeben.
Halber Wert = Halbe Frequenz. Vieleicht ist das poti auch ein 
Logarithmisches und kein Lineares?

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du clear timer on compare match meinst, den benutze ich schon, das 
klappt auch wunderbar, allerdings halt nicht linear, da ich damit ja die 
Periodendauer festlege und wenn ich die linear ändere beeinflusst das 
die Frequenz hyperbolisch, aber korrigiert mich ruhig wenn ich falsch 
liege.

Autor: Michael K. (mmike)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist das Poti auch wirklich linear ?

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also meiner Schätzung nach müsste es linear sein, denn ich gebe im 
moment zu testzwecken auch den wert des ADC mit aus und der verhält sich 
meiner meinung nach durchaus linear. Ich hatte schon evtl. daran gedacht 
eine Funktion zu überlagern um annähernd eine Linearität zu erreichen, 
aber da stehe ich im Moment leider auf dem Schlauch.

Autor: Sam Fischer (fm85)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was heist denn "Schätzung"? Hast du es gemessen oder nicht? Wenn du den 
TOP Wert entsprechend änderst und es zu keinen unbedachten Überläufen 
kommt muss die Frequenz auf jeden Fall indirekt proportional zu diesem 
sein.

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, das Poti ist linear, zumindest reicht es meinen Anforderungen von 
der linearität her.
Wenn ich die Frequenz errechne mit f=fcpu/((OCR+1)*Prescale) und 
verändere OCR linear, dann bekomme ich ja eine Funktion der Form: 
a*1/x+b, somit ist diese ja nichtmehr linear. Und genau das macht mir 
Probleme. Ich hoffe es ist jetzt verständlicher was ich meine.

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Anreas,

du bist auf dem richtigen weg. Du must rechnen.

Die Frequenz soll linear geändert werden je nach AD-Wert.

-> f = fmin + a * ADCW

fmin ist deine Startfrequez, a deine Steigung (wieviele Hertz
pro AD-Step azukommen)

Aus fmin ergibt sich auch der Prescal da der Zähler nur 16 Bit hat.

Dann den OCR berechnen:

-> OCR = fcpu / (f * Pres)

Einige Werte können vorab festgelegt/berechnet werden um schneller zu 
werden.

avr

Autor: Andreas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also den Prescaler hab ich auf 1024 festgelegt und dann habe ich mir den 
OCR bereich so gewählt, dass ich 10-600 bpm erreichen kann vom 
wertebereich, dadurch entstand die formel:

OCR1A=780+(value-50)*47.37307

mit

if (value<50) value = 50;

vorangestellt, da das poti von 0 auf 50 zu springen tendiert und ich den 
bereich dann tot setzen möchte.
Trotzdem bekomme ich grade im bereich um die 600 bpm extrem schnelle 
Änderungen vom Wert her und im Bereich von 10 bpm muss ich richtig 
kurbeln dass sich überhaupt der wert ändert.

Danke schonmal für die ausfürlichen Antworten!

Autor: avr (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Andreas,

du must beachten:

F = 1 / T   <->  T = 1 / F

Dein OCR ist ein Zeitwert, dein AD-Wert soll porportional
zur Frequenz sein.

Ohne eine Division wird das nichts!

avr

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.