www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Lineare Frequenzänderung mit Atmega


Autor: Pascal Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich generiere mit meinem Atmega8 eine Frequenz mittels eines Timers.
Der Code im Überlauf-Interrupt des Timers ist folgender:
Isrtimer1:
      ' Wenn counter = speed
      If Motor1ctr >= Motor1speed Then
         Toggle Motor1clk
         Motor1ctr = 0
      End If

      Motor1ctr = Motor1ctr + 1
Return

Das Intervall für diesen Timer ist konstant.
Nun möchte ich eine (lineare) Rampe erzeugen, so dass der angesteuerte 
Motor langsam anfährt bzw. wieder langsam abbremst.

Das Problem ist nun folgendes:
Dekrementiere ich Motor1speed linear in einem konstanten Intervall um 
die Frequenz zu erhöhen, so steigt die ausgegebene Frequenz quadratisch 
an. Ist ja klar, weil:
Wenn Motor1speed=2 ist und damit eine Frequenz von 1000Hz erzeugt wird, 
wird eine Frequenz von 2000Hz erzeugt wenn Motor1speed=1 ist.
Und da ich die Variable in einem festen Zeitintervall erhöhe, steigt die 
Ausgabefrequenz quadratisch, und damit viel zu schnell an (soll linear 
ansteigen).

Leider bin ich momentan etwas überfragt, und weiß nicht, wie ich das 
Problem beheben könnte.
Mein Ansatz war, das Zeitintervall welches Motor1Speed inkrementiert 
dynamisch zu erhöhen:
Isrtimer2:
   ' Konstante Zeit
   Load Timer1 , 300

      ' Motor1Target = Zielfrequenz
      If Motor1speed > Motor1target Then
         If Rampetarget = Rampectr Then
            If Motor1speed > 1 Then
               Motor1speed = Motor1speed - 1
               ' Verdoppeln des Rampenintervalls
               Rampetarget = Rampetarget * 2
               Rampectr = 0
            End If
         End If
         Rampectr = Rampectr + 1
      End If
Return


Das scheint im Prinzip zu funktionieren, ist aber viel zu langsam (und 
schneller kann ich den Timer nicht mehr takten).

Ich würde mich sehr über Eure Ideen freuen!

Viele Grüße,
Pascal

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Pascal Christian schrieb:
> Dekrementiere ich Motor1speed linear in einem konstanten Intervall um
> die Frequenz zu erhöhen, so steigt die ausgegebene Frequenz quadratisch
> an. Ist ja klar, weil:
> Wenn Motor1speed=2 ist und damit eine Frequenz von 1000Hz erzeugt wird,
> wird eine Frequenz von 2000Hz erzeugt wenn Motor1speed=1 ist.

Der Zusammenhang zwischen der Frequenz und dem Zeitintervall ist T=1/f. 
Das heißt, wenn du den Intervall halbierst, dann verdoppelst du die 
Frequenz. Damit kann man sich für diverse Frequenzen eine Lookuptable 
füllen und die grast man dann ab, um seine Rampe zu erreichen oder man 
berechnet es in Echtzeit.

f in Hz  |  1  |  2  |  3  |  4  |  5  |  7  |  8  |  9  |  10
---------+-----+-----+-----+-----+-----+-----+-----+-----+-----
T  in s  | 1/1 | 1/2 | 1/3 | 1/4 | 1/5 | 1/7 | 1/8 | 1/9 | 1/10




Gruß Skriptkiddy

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.