mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Impulssignal mit variabler Frequenz


Autor: GaryB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

meine Herausforderung:
ich benötige eine Impulssignal das zur Ansteuerung einer sog. 
Impulsrichtungsschnittstelle dient. Diese Schnittstelle gibt 
Weginkremente vor, welche der angeschlossene Antriebe (ähnlich einem 
Schrittmotor) mit seiner Lageregelung ab arbeitet.
Das Signal muss dabei in ca. 8ms von 0 auf 430Khz geradelinig hoch...
die 430 kHz könnte ich zwar kleiner halten, aber das bedarf weiterer 
Anpassungen.

So nun habe ich mir die PWM-Funktion beim AVR-Mega8 angesehen und musste 
feststellen das ich mit dem digitalen Zähler keine konstante 
Frequenzverstellung habe, d.h. Zähler +1 ist nicht ein konstanter 
Frequenzhub. Wenn ich nicht irre dann ist besteht zwischen Zählerwert 
und Frequenzausgabe ein Hyperbel-Funktion.
Wie kann ich am einfachsten die variabel Frequenz einstellen bzw. gibt 
es andere Wege der Generierung einer Impulsfolge mit variabler Frequenz?
Zur Zeit gehe ich davon aus das ich die Puls-Breite immer bei 50:50 
halte und die Frequenz über den "Spitzenwert" der Zählrampe 
realisiere...

Vielen Dank schon jetzt,
Gary_B

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>d.h. Zähler +1 ist nicht ein konstanter
>Frequenzhub. Wenn ich nicht irre dann ist besteht zwischen Zählerwert
>und Frequenzausgabe ein Hyperbel-Funktion.

Das hängt vermutlich damit zusammen, dass f=1/T gilt...und eine 
Asymptote darstellt.
http://de.wikipedia.org/wiki/Asymptote


Hyperbel:
http://de.wikipedia.org/wiki/Hyperbel_%28Mathematik%29



>Wie kann ich am einfachsten die variabel Frequenz einstellen bzw. gibt
>es andere Wege der Generierung einer Impulsfolge mit variabler Frequenz?

Entweder lässt du den Controller etwas rechnen (sowas können die 
ziemlich gut) oder du lässt ihn bestimmte Werte aus einer Tabelle 
auslesen (das können sie auch recht gut).


Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@GaryB

>Das Signal muss dabei in ca. 8ms von 0 auf 430Khz geradelinig hoch...
>die 430 kHz könnte ich zwar kleiner halten, aber das bedarf weiterer
>Anpassungen.

>Wie kann ich am einfachsten die variabel Frequenz einstellen bzw. gibt
>es andere Wege der Generierung einer Impulsfolge mit variabler Frequenz?

Das Zauberwort heisst DDS (Direct Digital Synthesis).

www.analog.com/DDS

Entweder einen fertigen DDS-IC nehmen, oder, wenn nur ein digitaler Takt 
gebraucht wird, einen DDS Akkumulator in ein kleines CPLD brennen.

MfG
Falk

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mehr oder weniger einfache Geräte, bei denen man "einfach eine Frequenz 
einstellen" kann, gibt es z.B. hier:

http://www.rsonline.de/elektronische-bauelemente-d...

Ein Mega8 ist dagegen wie eine Schraube. Um den sinnvoll verwenden zu 
können, bedarf es eines Schraubenziehers (=Compiler), und vor allem 
eines Anwenders, der das Konzept einer Schraube verstanden hat. Sonst 
wird das nichts.

Schreib dir eine Funktion, die deine Frequenz in einen 
PWM-Register-Ladewert umrechnet. Ohne die geht es sowieso nicht. Und 
dann wirst du noch einiges weiteres programmieren und auch in Hardware 
realisieren müssen, denn ein Mega8 hat leider keine Drehknöpfe. Dieses 
"weitere" ist erfahrunsggemäß bei weitem aufwendiger, als die popelige 
Frequenzumrechnung.

Und wenn die Stufung zu grob sein sollte, oder die Frequenzkonstanz 
nicht ausreicht, oder es aus sonstigen Gründen nicht den Anforderungen 
genügt, dann brauchts du eine andere Schraube, sprich, dann geht es mit 
dem Mega8 nicht.

Oliver

Autor: GaryB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Beiträge - werde das heute abend erst einmal verarbeiten 
;)

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das müßte sich doch berechnen lassen, wieviele Frequenzstufen in 8 
Millisekunden bei linearer Änderung unterzubringen sind.
8 ms ist die Periodendauer von 125 Hz, also muß die erste Stufe deutlich 
über 125 Hz liegen, und die Schrittweite ist identisch mit der ersten 
Stufe.
430 kHz entspricht einer Periodendauer von 2,3 Mikrosekunden, das passt 
3440 mal in 8 ms

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die nächste Stufe dauert halb so lange wie die erste, die dritte ein 
Drittel usw, also eine unendliche Reihe 1+1/2+1/3+.... die hat ein 
endliches Ergebnis.

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Äquidistante Frequnezstufen sind, wie Falk schon schrieb eine Aufgabe 
für einen DDS, der hier ziemlich oft mit neuen Frequenzwerten 
beschrieben werden muß. Einfacher, aber nicht so schöne Impulse, ist ein 
Binärraten-Multiplizierer wie der SN7497. Er macht aus einer 
Taktfrequenz, hier wäre 430 kHz zweckmäßig, 64 Frequenzstufen:
http://semiconductor.alldatasheet.com/semiconducto...

Autor: Christoph Kessler (db1uq) (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Korrektur, die Reihe konvergiert nicht. Nennt sich Harmonische Reihe.

Autor: GaryB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also wenn es auf Basis des AVR-Mega laufen soll dann muss es eine
Tabelle sein, die evtl. im Hochlauf berechnet wird oder vorher im 
Speicher hardcoded eingetragen wird. Nur ist diese Tabelle eben abhängig 
von Rampenzeit und Endfrequenz... deswegen ist eine Berechnung der Werte 
im Hochlauf vermutlich das Beste.

Die Frequenz der Anpassung hatte ich mir im Vorfeld auf 10 mal je ms 
vorgenommen - da der Atmel aber nur einen Prescaler für seine Timer 
hat... müsste man das abstimmen.

Alles in allem erscheint mir das Thema mit dem Anspruch einer 
"stoßfreien" Rampe nicht so trivial zu sein wie es mir am Anfang 
erschienen ist und ich muss mich wirklich nochmal hinsetzen.

Die vorgeschlagenen Bausteine muss ich mir nun erst einmal in Ruhe 
ansehen. Evtl. hat ja aber jemand so etwas auch schon mal realisiert??
Mein Boss meinte in Analogtechnik wäre das gar kein Thema - Stromquelle, 
Kondensator, Komperator und fertig ;)

Autor: Rahul, der Trollige (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Nur ist diese Tabelle eben abhängig von Rampenzeit und Endfrequenz...
DDS arbeitet auch nach dem Prinzip einer Tabelle..

>deswegen ist eine Berechnung der Werte im Hochlauf vermutlich das Beste.
Das ist ein Urteil von jemandem, der nicht weiß, wie man eine 
Frequenzänderung mit einem Timer realisiert... (SCNR)

Autor: Christoph Kessler (db1uq) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es muß genau eine Lösung für die Aufgabe geben, wieviele Frequenzstufen 
zwishen Null und 430 kHz in 8 ms durchlaufen werden können, wenn jede 
Stufe genau eine Periode dauert. Es sind auf jeden Fall weniger als 
3440. Ein DDS wie der AD9835 muß für jede Stufe mit 32 Bit oder sind es 
noch mehr? seriell angesteuert werden, das wird knapp. Aber eine Tabelle 
ist unnötig, eine einfache Addition reicht.
Berechnung der Stufenzahl geht irgendwie mit der Näherungsformel für die 
Harmonische Reihe:
http://de.wikipedia.org/wiki/Harmonische_Reihe
Summe (n) = ln(n) + 0,5772156649

Autor: Christoph Kessler (db1uq) (christoph_kessler)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem ich Blödsinn erzählt habe, jetzt hoffentlich der richtige 
Lösungsweg.
Für eine konstant ansteigende Frequenz mit gleichbleibenden Stufen muß 
die Anzahl der Perioden natürlich auch ansteigen.
Hier ein Diagramm, eine Gerade von 0 bis 430 kHz und von 0 bis 8 
Milliskunden. Im gleichen Diagramm die Hyperbel Periodendauer = 1/f
Der Schnittpunkt bei etwa 7,5 kHz ist der gesuchte Frequenzschritt.
Die Stufen lauten also 0 - 7,5kHz - 15 kHz - 22,5 kHz - ... -430 kHz das 
sind ca 57 Stufen.

Autor: GaryB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
(Auf-)Lösung:

Die Aufgabe wurde nun mit Hilfe eines VCO gelöst.
Über die PWM des ATMEL stellt man die Periodendauer ein, damit erhält 
man Frequenzschritte die gemäß 1/T einer Hyperbel folgen. Für kleine 
Perioden extrem große Frequenzschritte hevorbringt.

Die Lösung besteht nun in einem DA-Wandler (R2R) welcher einen 
spannungsgeführten Oszillator bedient. Bis auf Abweichungen des 
Oszillators hat man damit eine konstante Schrittweite für die 
Frequenz-Verstellung.

Gruss!


Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@GaryB

>Die Aufgabe wurde nun mit Hilfe eines VCO gelöst.
>Über die PWM des ATMEL stellt man die Periodendauer ein, damit erhält
>man Frequenzschritte die gemäß 1/T einer Hyperbel folgen. Für kleine
>Perioden extrem große Frequenzschritte hevorbringt.

???? Also wieder analog? Ohhje. Naja, what works works.

MfG
Falk

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.