Hallo zusammen, ich bin ganz neu in der Thematik FPGAs und soll unter anderem einen PWM Generator/ PWM Decoder erzeugen. Da es schnell gehen muss, habe ich zur Generierung einfach ein Codefragment aus dem Internet zu meinem Projekt hinzugefügt. So wollte ich ebenfalls bei der Demodulation vorgehen - finde jedoch keinen passenden Code dafür! Hat jemand so etwas schon mal in VHDL umgesetzt und könnte mir an dieser Stelle weiterhelfen? Vielen Dank bereits im Voraus! Lieber Gruße!
> ich bin ganz neu in der Thematik FPGAs [...] > Da es schnell gehen muss, [...] > ein Codefragment aus dem Internet [...] Ihr Jungs seit echt lustig!!! Was erwartest du hier?
Keine Ahnung was du vor hast (wie schnell erkannt werden soll usw), aber an sich ist das doch nicht viel mehr als ein Zähler... LMV schrieb: > ich bin ganz neu in der Thematik FPGAs ... Da es schnell gehen muss ganz schlechte Methode. Ich hoffe das wird nicht irgentwo verkauft sondern ist nur eine Hausaufgabe.
Liegt auf der Hand, dass Du da nichts findest: Eine PWM-Modulation machst Du typischerweise, um etwas analoges anzusteuern (z.B. H-Brücke, Audio, Motorensteuerungen), darum findest Du den Modulator auch im Netz. Eine Anwendung des Gegenteils (digitale PWM-Demodulation) fällt mir nicht spontan ein. Vielleicht wollte der Urheber Deiner Übung, dass da doch noch etwas Eigenleistung dazukommt?
nicht so wirklich... es sollte schon funktionieren im Endeffekt ;) Mag sein, dass ich auch schon etwas auf dem Schlauch heute stehe: aber ich komme irgendwie nicht wieter... Ich habe eine Eingangsfrequenz von einem Power Supply. Und diese Frequenz sollte zurück in einen 12-Bit Wert modulliert werden... Der Teil des Systems wird mit 125 kHz gefahren! Ich bräuchte nur mal ein paar Ansätze, den Rest schaff ich dann sicherlich! Danke weiterhin für alle Beiträge!
Ich kenne mich mit PWM nicht aus, aber das ist doch nur ein Takt mit unterschiedlich langen Takten. Wenn du also sowas als Eingangstakt hast, dann würde ich entweder auf das rising oder falling edge triggern und damit einen Zähler zurücksetzen. Also der zähler läuftdann vom einen falling_edge bis zum nächsten und zählt dann Takte eines festen Taktes bekannter Frequenz im FPGA. Also sagen wir wir machen das mit 10MHz dann haben wir einen festen Takt 0,1us und wenn der Zähler sagen wir 20 Takte zählen kann bis die Nächste gleiche Flanke kommt, dann war die Periodendauer des PWM gerade 20*0,1us=2us. Mit f=1/T bekommen wir für f also 500kHz. -gb-
12 Bit sind 4096. Du brauchst also zum "einfachen Mitzählen" eine Abtastfrequenz von 125kHz * 4096 = 512MHz. Das wird nicht einfach... Natürlich kannst du die Taktfrequenz auch reduzieren, indem du mehrere PWM Pulse mitzählst. Aber dann sollte sich das Tastverhältnis nicht allzu schnell ändern...
Warscheinlicher ist wohl das mit 125khz gepulst wird, also 125kHz / 4096 = 30Hz Intervalle.
> 30 Hz
Die Speicherdrossel in dem Schaltnetzteil möchte ich mal sehen...
SNT und 125kHz scheint mir plausibler. Vielleicht erfahren wir das ja
noch.
Du kannst nicht einfach das "Intervalle" weglassen, das meinte ich schon wirklich ;) 30 HZ Intervalle, d.h. der zu übertragende Wert wird als PWM über eine Zeit von 1/30s angelegt, dann kann ein Update erfolgen und es geht von vorne los. Jeder Einzelne Wert (0 oder 1) ist dann 1/125000s lang gültig. Das macht jedenfalls am meisten Sinn, wenn man überlegt was da so drinne sein wird im Netzteil(irgentein kleiner µC). Wenn uns Freund Vogel etwas mehr mitteilen würde müssten wir aber nicht so viel rätseln :-)
Ich habe jetzt schon 5x in den thread reingesehen, aber das Problem will sich mir nicht erschliessen. l.vogel@asp-equipment.de schrieb: > zurück in einen 12-Bit Wert modulliert werden Soll da jetzt amplituden- oder frequenz-modul(l)iert werden? Frequenzmodulation geht über eine Multiplikation mit dem Wert - vor der PWM-Bildung. Amplitudenmodulation hat nichts mit den 12Bit und den 125kHz zu tun. Die müssen hier auch nicht multipliziert werden, wie Lothar das tut.
Gute Frage. Bei Amplitude könnte man ja immer bis 4096 (oder 2erpotenzen davon) zählen und gucken wieviele Takte davon das Signal 1 oder 0 war. Eigentlich könnte man doch auch einen langsamen ADC nehmen, der würde doch auch drüber mitteln und gleich schön einen 12Bit-Wert ausgeben. Kommt natürlich drauf an wie schnell sich die PWM Impulslängen verändern. Für die Frequenz wird das aufwendiger, da muss man wirklich Impulslängen "messen".
Tja, da kann man lange raten. Und bis brauchbare Informationen (was, wie, warum und wozu) da sind, hat jeder Recht...
LMV schrieb: > Da es schnell gehen muss, ... > > ... und könnte mir an dieser Stelle weiterhelfen? So dringend scheint es dann doch nicht zu sein. Oder Copy&Paste hat eine klein Einheit in Sachen VHDL-Grundlagen eingeschoben.
Guten Morgen, so "Copy&Paste" musste aus gesundheitlichen Gründen mal eine Pause einlegen - also entschuldigt mein verspätetes Antworten... Weiterhin natürlich auch vielen Dank für alle (spitzen) Kommentare und nützlichen Ratschläge! Ich muss erst einmal alles lesen und dann werde ich weitersehen! Danke nochmals an alle! Bis dahin einen guten Tag für alle!
So - kurz zur Erklärung! Ich hab' vor zwei Wochen zwischen Tür u. Angel eine Aufgabe bekommen, die ich nicht besser wiedergeben kann, als ich es in meinem ersten Thread getan habe! Da ich wirklich reiner Informatiker bin und noch nie nix mit Hardware zu tun hatte, aber trotzdem auf die "Schnelle" eine Aussage machen muss, hab' ich die Frage mal an das Forum weitergegeben! Ich seh' ja erst jetzt, dass es nicht so einfach sein kann ;) Im Projekt hat sich auch schon wieder alles geändert - deswegen kann ich selbst bis heute keine genaueren Aussagen machen! Höchstwahrscheinlich wird die PWM-Generierung der Microprozessor übernehmen! Wenn ich was konkreteres weiss, geb' ich gern nochmal Bescheid! Eventuell bin ich nicht der einzige Mensch, den das interessieren könnte! Bis dahin alles Gute!
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.