Hallo, nachdem sich herausgestellt hat, das mit einem 8Bit-DAC-Baustein mit nachgeschaltetem OP ich meine beiden benötigten sinusförmigen Frequenzen (1200Hz und 1800Hz) einfach erzeugen kann, geht es an die Details. Ich muß ja nun 2 Tabellen entwerfen, in denen ich jeweils die Bytes für die Ansteuerung des DAC ablege. Ich zerlege also meinen Sinus in kleine "delta" t. Für jedes "delta" t ist nun der zugehörige y Wert auszurechnen, wobei Zeiger senkrecht nach oben =1 (volle Ausgangsspannung Vmax). Zeiger waagerecht nach unten =0 (Ausgangspannung =0V). Auf die Bytes übertragen bedeutet =1, dann 11111111b und =0 dann 00000000b . Das war ja einfach. Jetzt muß ich die Zwischenwerte berechnene. Annahme: Bei t = 0,04ms beträgt der y-Wert vom Sinus 0,36 Bei einem 8Bit-DAC betragen die normierten Stufen 1/256 =0,0039. Habe ich mir in Excel eine Tabelle berechnet, so kann ich nachschauen, welche Stufe meinem Y-Wert(Annahme 0,36) am nächsten liegt. Dies wäre 0,36 durch 0,0039 = 92,3.. Also die 92 Stufe 92dez entspricht 5Chex Das bedeutet: Bei t = 0,04ms muß der Mikrocontroller den 8-Bit-DAC mit dem Hexwert 5C ansteuern. Wäre nett, wenn das mal jemand überfliegen könnte und auf Richtigkeit prüft.
Du brauchst nur eine Tabelle, in der sich die Werte für eine Viertelschwingung befindet. (Die Musst du entweder mit der höheren oder der niedrigeren Frequenz insgesamt vier mal ausgeben (vorwärts, rückwärts, 128-vorwärts, 128-rückwärts). Die Werte kannst du ziemlich einfach durch 127*sin(t) berechnen (lassen).
Da gebe ich Rahul Recht, eine Tabelle würde genügen, http://www.mikrocontroller.net/forum/read-4-360801.html seit dem es gibt Timing-Probleme, da die beiden Frequenzen elativ dicht beieinander liegen. Bernhard
Hallo Rahul, den y-Wert berechne ich mit y = sin(2*pi*f*t). Um den zu sendenden binären Wert zu berechnen, muß ich dieses Ergebnis durch 256 teilen. Also ergibt sich: bitwert = 256 * sin(2*pi*f*t) Für einen Sinus benötige ich positive und negative Werte, sprich ich muß die 256 möglichen Werte in 2 Hälften unterteilen. Ergibt je 128 Werte. Damit ergibt sich: bitwert = 128 * sin(2*pi*f*t) . Kann es sein, daß du die 2*pi*f unterschlagen hast? Was jetzt noch zu prüfen wäre, wie ist das mit einer exakten Nullinie. Wie ist das mit dem nachgeschalteten OP (der wahrscheinlich sogar auf Nulllinie abgeglichen werden muß? Jaetzt ist ja Wochenende und zeit darüber nachzudenken.
Um Mißverständnissen vorzubeuegen: Ich muß durch 1/256 teilen. Mit der guten alten Bruchrechnung steht 256 damit wieder oben.
Ich habe t im Bogenmaß angegeben... Wenn du einen Blick auf die Sinus-Kurve wirfst, wird dir auffallen, dass man sie an einer senkrechten Gerade, die durch pi/2 geht spiegeln kann. Durch eine Punktspiegelung bei an der Stelle pi auf Höhe der 0-Linie, ergibt sich wieder ein Kopie. Dass das letzte Kurvensegment auch noch eine Kopie/Spiegelung der ersten ist, brauche ich wohl nicht zu erwähnen. Mna könnte die Tabelle so auslegen, dass sie für 600Hz einen schönen sinusförmigen Verlauf hat. Dann könnte man sie mit doppelter bzw. dreifacher Frequenz ausgeben...
> bitwert = 128 * sin(2*pi*f*t)
fast
bitwert = 127 * sin(2*pi*f*t) + 127
ich denke nämlich nicht, dass dein DAC mit
2-er Komplementwerten so richtig glücklich ist.
Statt einer Tabelle kann man übrigens auch eine andere Methode benutzen: einen rekursiven (Digital-)Resonator. Hört sich schlimm an, ist aber recht einfach, siehe AppNote von Maxim für ihren MAXQ-Controller (auf Seite 3): http://pdfserv.maxim-ic.com/en/an/AN3386.pdf Du musst für einen Sinus nur einen Wert vorausberechnen, und der Controller braucht dann pro zu berechnenden aktuellen Wert nur eine Multiplikation und eine Subtraktion ausführen. Dein Controller sollte deshalb vorzugsweise einen Hardwaremultiplizierer haben.
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.