Hallo! Ich möchte mal zum Üben einen Tiefpass Filter in meinem Microcontroller implementieren. Dazu habe ich die Differentialgleichung aufgestellt und mit der Explizit Euler Methode digitalisiert. Das habe ich dann in Matlab/Simulink getestet und es läuft auch. Jetzt ist mein Problem das ganze in den Microcontroller zu bekommen. In meiner digitalisierten DGL habe ich die beiden Koeffizienten a und b, die folgendermaßen aussehen: a=1-ts/RC, b=ts/RC Wie komme ich auf den Wert für ts? Dass das die Samplingfrequenz ist habe ich schon herausbekommen. Aber wie ermittele ich die für meinen Microcontroller? Es handelt sich dabei um einen PIC18f458 mit 4MHz Kristall. Die Frequenz für die A/D Wandlung ist Fosc/8. Aber eigentlich glaube ich nicht, dass das der Wert für mein ts ist. Ich denke viel mehr, dass mit ts die Zeit zwischen 2 A/D Wandlungen gemeint ist, oder? Muss ich dann die Zeiten der Befehle addieren, die die Berechnung der DGL im Microcontroller in Anspruch nehmen? Oder wie geht man da generell vor? Kann mir jemand von euch Literatur zu dem Thema empfehlen? Damit meine ich keine Theorieschinken zur digitalen Signalverarbeitung, denn davon habe ich schon ein paar. Ich suche etwas, wo die Implementierung der Theorie in echten Controllern beschrieben wird. Gerne auch in englisch. Vielen Dank schon mal Maik
Die Samplingfrequenz muss ev. vorgegeben werden. Denn in einem physikalischen Systemn ist sie nicht beliebig frei waehlbr. Sie muss naemlich einiges oberhalb von Grenzfrequenzen und Resonanzen sein. O.
"Ich denke viel mehr, dass mit ts die Zeit zwischen 2 A/D Wandlungen gemeint ist, oder?" RICHTIG. "Muss ich dann die Zeiten der Befehle addieren.." FALSCH. Aber die Berechnung von Tiefpassen, Hochpassen etc... in digitalen IC's geschieht nicht über Differentialgleichungen, sondern über Differenzengleichungen. Die macht man mittels Z-Transformation.
Hallo und danke für die Antworten. Okay, das ist ja schon mal was. "Ich denke viel mehr, dass mit ts die Zeit zwischen 2 A/D Wandlungen gemeint ist, oder?" RICHTIG. -Diese Bestätigung habe ich gebraucht. DANKE!! "Muss ich dann die Zeiten der Befehle addieren.." FALSCH. -Wie komme ich denn dann auf die Samplingzeit? Gut, sie muss mindestens die doppelte Frequenz haben, von dem, was ich sampeln möchte, aber ich muss ja zusehen, dass ich alles an Berechnungen "erledige", die nötig sind, oder? (ich bin halt noch ganz am Anfang . . . ) "Aber die Berechnung von Tiefpassen, Hochpassen etc... in digitalen IC's geschieht nicht über Differentialgleichungen, sondern über Differenzengleichungen. Die macht man mittels Z-Transformation." Sorry, bei den mathematischen Ausdrücken bin ich mir auch nie so sicher. Ich habe echt gedacht, dass das, was ich da für den Tiefpass erstellt habe eine digitalisierte DGL erster Ordnung ist: u_c(k)=a*u_c(k-1)+b*u_e(k-1) mit a und b, wie oben angegeben. Mit den ganzen Transformationen stehe ich auf Kriegsfuß, weil ich die noch nie so richtig durchschaut habe. . . (trotz meiner Theorieschinken) Gruß Maik
"Ich habe echt gedacht, dass das, was ich da für den Tiefpass erstellt habe eine digitalisierte DGL erster Ordnung ist: u_c(k)=a*u_c(k-1)+b*u_e(k-1) mit a und b, wie oben angegeben...." Das ist keine DGL mehr!! Aber schon eine Differenzengleichung, da kannst du dir die Transformationen sparen... ;-) Das siehst du daran, das deine werte (hier c, u_c, u_e) NICHT von der Zeit (direkt) abhängig sind (es heißt ja nicht c(t) ), sonder c(k), wobei k den aktuellen Abtastzeitpunkt t=k*ts beschreibt. den Begriff "digitalisierte DGL" habe ich noch nie gehört, wills deshalb weder als richtig noch als falsch einstufen, ist nur ein Begriff und jetzt denk ich nicht so wichtig hier... Die Samplingzeit musst du mittels deiner Taktfrequenz des AD-Wandlers ermitteln können, welcher Zusammenhang zwischen dieser Taktfrequenz und der Samplingfrequenz besteht, kann/muss dir das Datenblatt sagen. Ich kenne die PIC's nicht, und kann dir das demzufolge nicht beantworten... Richtig, die Berechnungen sollten erledigt sein, bevor der nächste Samplingwert "eintrudelt", also innerhalb ts erfolgen.. Da dieses Ergebnis zwingenderweise mit dem (nächsten) Takt auszugeben ist, erfolgt dadurch eine Verzögerung um exakt einen Takt. Dies ist bei Filteranwendungen normal, und muss besonders bei der Realisierung von digitalen Reglern beachtet werden (Totzeit)... noch Fragen...?
>>den Begriff "digitalisierte DGL" habe ich noch nie gehört
er meint bestimmt "diskretisiert"
Hi Matthias! "Digitalisierte" DGL habe ich es deswegen genannt, weil ich zunächst die DGL des Tiefpasses in Abhängigkeit von t erstellt habe: u_c'(t)=-u_c(t)/RC+u_e(t)/RC Danach habe ich diese Gleichung mit Hilfe der "explizit Euler" Methode, die wir so in der FH gelernt haben, "digitalisiert": u_c'(t)=(u_c(k)-u_c(k-1))/ts u_c(t)=u_c(k-1), u_e(t)=u_e(k-1) Das Ganze dann in die DGL oben eingesetzt, nach u_c(k) aufgelöst und die "digitalisierte DGL" erhalten. Ob man das nun so nennen darf, oder nicht, weiß ich nicht. Nur so zur Info, wie ich darauf gekommen bin. Du scheinst ja etwas Erfahrung zu haben mit der digitalen Signalverarbeitung. Kannst du mir vielleicht ein Buch empfehlen, dass, wie gesagt, auch mal die Umsetzung der Theorie in den DSP/Controller beschreibt, und auf was man da alles achten muss? Ich komme da nämlich mit meinen Recherchen nicht so richtig weiter. Gruß Maik
nein. Sorry mein Studium (E-Technik FH) ging bisher ohne Bücher. Ausser einem guten Mathebuch. Da ich das auch als Hobby mache (wenn µC, dann allerdings Atmel AVR) habe ich ziemlich viel Erfahrung bzgl Elektronik. Mit DSPs selbst habe ich allerdings noch nie zutun gehabt... Ich rechne solche Differenzengleichungen meist per Hand von der Differtialgleichung/Übertragungsfkt (im s-Bereich) direkt in den Z-Bereich und dann nach Ausgang(k) umstellen... Aber frag ruhig...
"Ich rechne solche Differenzengleichungen meist per Hand von der Differtialgleichung/Übertragungsfkt (im s-Bereich) direkt in den Z-Bereich und dann nach Ausgang(k) umstellen..." Irgendwie sind das für mich immer noch bömische Dörfer . . . gerade was diese ganzen Transformationen betrifft. Ich weiß zwar, das die sehr nützlich sind, um die Gleichungen nicht mehr mit Integral- oder Differentialrechnung lösen zu müssen, sondern mit algebraischen Methoden, aber wann man was und wie am Besten macht, dafür fehlt es mir an Durchblick. Wenn du jetzt hier z.B. die z-Transformation erwähnst, dann frage ich mich, wo jetzt dieses Euler Verfahren einzuordnen ist, dass ich verwendet habe? Naja, das würde wohl jetzt zu weit führen . . . Wie gehst du denn dann an die AVR Programmierung ran, wenn du was auf dem Papier ausgerechnet hast, und das dann in den Controller bekommen willst. So unterschiedlich werden doch die Methoden zwischen PIC und AVR nicht sein. Ich versuche das jetzt erst mal in den PIC zu bekommen, bin aber für jeden Praxistip dankbar. Gruß Maik
Na wenn du die konrekete umzusetzende Differenzengleichung hast, dann musst du "nur" sehen, wie du diese realisieren kannst. Wichtig ist dort zB das Vermeiden von gebrochenen Werten, also musst du alle Werte mit einem Faktor versehen, den du zuletzt wieder herausrechnest. Mathematisch ist das so gemeint: Aus y(n) = 0.1234*x(n) - 0.4321*y(n-1) wird zB 256*y(n) = 32*x(n) - 111*y(n-1) somit umgehst du die Brüche. Und ganz wichtig ist immer dass die EIngangswerte in gleichen Zeiten gesampelt werden.. Gucke dir dazu mal den Anhang an, ist zwar für AVR, aber sollte helfen...
Hey, danke! Das sind genau die Art von Tips, die ich suche. Und Danke auch für das Dokument. Da werde ich mich mal durcharbeiten. Wie gesagt, vom Grundsatz her müsste das für die PICs ja genauso gehen. Gruß Maik
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.