LabVIEWForum.de
PWM-Signal über Dig.Output - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW FPGA (/Forum-LabVIEW-FPGA)
+---- Thema: PWM-Signal über Dig.Output (/Thread-PWM-Signal-ueber-Dig-Output)

Seiten: 1 2


PWM-Signal über Dig.Output - draluz02 - 08.08.2007 10:17

Grüß euch!

Will ein PWM-Signal an einem digitalen ausgang (5V TTL) am NI9403 Modul mit dem cRIO-9012 realisieren. Will dazu über ein host-VI die frequenz in Hz und die PWM in % vorgeben, anschließend die periodendauer über die frequenz ausrechnen & die zeit in der der ausgang log. high ist über die % und die zuvor ermittelte periodendauer ausrechnen & diese dann an das FPGA VI übergeben und mittels timer (loop timer) den ausgang dementsprechend schalten.

das ganze sollte dann wie folgt ablaufen:

1.) TimerPeriode & TimerHigh starten; DO0 = high
2.) TimerHigh läuft ab; DO0 wird low gesetzt
3.) TimerPeriode läuft ab; DO0 wird high gesetzt & beide Timer starten wieder von vorne

Mein problem bei der sache ist jetzt, dass ich nicht weiß wie ich den ausgang alternieren soll, weil ich so eine dementsprechende fkt. noch nicht gefunden habe!

oder habt ihr vl eine bessere idee wie ich diese aufgabenstellung realisieren soll? womöglich ohne timer?

mfG, lukas


PWM-Signal über Dig.Output - Lurx - 08.08.2007 10:45

ich habe bei mir ein fertiges VI von LV verwendet... es gibt eines für PWM-Generation in FPGA...wo du alles einstellen kannst was du willst

lass mal nach PWM im LV verzeichnis suchen, dann wirds viel finden und da gibt es ein PWM Generator.vi....
viel spaß damit


PWM-Signal über Dig.Output - draluz02 - 08.08.2007 10:55

klingt vielversprechend! werd ich gleich mal ausprobierenSmile!

danke für die schnelle antwort! mfG


PWM-Signal über Dig.Output - cb - 08.08.2007 10:59

das sieht mir grad so aus als hätt jemand den Wald vor lauter Bäumen nicht gefundenBig Grin

Ich hab grad mal was aus einem aktuellen Projekt rauskopiert, wo man sieht, wie ich alle 500 ms die FPGA-LED aus- bzw. einschalte ...

[attachment=7909]


PWM-Signal über Dig.Output - draluz02 - 08.08.2007 15:00

@Lurx: dieses PWM-Generation VI ist ja nur für das NI9505 Modul, oder? war für mein bescheidenes LV-Wissen etwas zu hoch. wie hast du es konkret verwendet?

@i2dx: danke für den tipp! hab das jetzt auch schon umgesetzt nur funktioniert es bei mir trotzdem noch nicht! Tges wird vom host vorgegeben (zwischen 200 und 1000); getimed wird die while schleife im FPGA mit 10µs! vielleicht hast du zeit dir das VI im anhang kurz durchzudenken... wär dir wirklich dankbarSmile!

mfG, lukas


PWM-Signal über Dig.Output - cb - 08.08.2007 16:49

' schrieb:@i2dx: danke für den tipp! hab das jetzt auch schon umgesetzt nur funktioniert es bei mir trotzdem noch nicht! Tges wird vom host vorgegeben (zwischen 200 und 1000); getimed wird die while schleife im FPGA mit 10µs! vielleicht hast du zeit dir das VI im anhang kurz durchzudenken... wär dir wirklich dankbarSmile!

mfG, lukas


dann schließ mal die Drähte richtig an, dann funktioniert der Teiler auch richtig:)So wie du das verkabelt hast wird der bei jedem Schleifendurchlauf zurückgesetzt bzw. das Signal getoggelt.

andererseits, so richtig als PWM taugt das eh nicht, ich hab dir mal was angehängt, dass auf dem FPGA auf jeden fall als PWM laufen sollte. Wie man nun das Timing umrechnet musst du selber rausfindenSmile

[attachment=7925]


PWM-Signal über Dig.Output - Lurx - 09.08.2007 09:29

ich verwende ein 9401....

ich habe dir mal ein Bild meines Programmes angehängt und des PWM Vi.

Ich hoffe das hilft dir weiter. ICh bin selber ein blutiger Anfänger und habe das über die Beispiele rausbekommen

Viel erfolg!


PWM-Signal über Dig.Output - draluz02 - 09.08.2007 11:25

habs jetzt derweil einmal i2dx's version probiert. funktioniert prima! stell im host VI die relevanten parameter ein, rechne diese um und übergib sie alle 10ms an das FPGA VI wo im 10µs takt hinaufgezählt wird. habs am oszi kontolliert und funktioniert echt super.

einziges manko vl: wenn ich 100% bei der PWM einstell, hab ich trotzdem 10µs low pegel am DO dazwischen! macht jetzt bei dieser anwendung zwar nur einen max. Fehler von 0,5%, aber in zukunft hatte ich vor ein 180kHz signal pulsweitenmoduliert am DO auszugeben und da ist die kleinste periodendauer nur mehr 5.56µs... !!!

hab auch schon probiert die zeit des timers im FPGA VI runter zu stellen, aber es funktioniert bis max. 7µs, dann stimmt die freuquenz nicht mehr überein, weil ja der FPGA länger zum abarbeiten braucht als der timer braucht!

welche lösung wäre daher für die 180kHz am geeignetsten?

mfG


PWM-Signal über Dig.Output - cb - 09.08.2007 17:46

' schrieb:einziges manko vl: wenn ich 100% bei der PWM einstell, hab ich trotzdem 10µs low pegel am DO dazwischen! macht jetzt bei dieser anwendung zwar nur einen max. Fehler von 0,5%, aber in zukunft hatte ich vor ein 180kHz signal pulsweitenmoduliert am DO auszugeben und da ist die kleinste periodendauer nur mehr 5.56µs... !!!

hab auch schon probiert die zeit des timers im FPGA VI runter zu stellen, aber es funktioniert bis max. 7µs, dann stimmt die freuquenz nicht mehr überein, weil ja der FPGA länger zum abarbeiten braucht als der timer braucht!

welche lösung wäre daher für die 180kHz am geeignetsten?

mfG

Lösung für 180 kHz --> nimm ein anderes Modul, das 9403 schafft nur max. 7µs gem. Spezifikation

Du hast bei 100% einen Low-Pegel "dazwischen", weil da noch ein Bug im Code warSmile--> berichtigte Version liegt bei. Du musst übrigens nicht ständig die Controls in dem FPGA-VI beschreiben, es reicht, die Werte zu setzen, wenn sich etwas ändert.

Ich hab dann nochmal per SCTL alles an Performance rausgequetscht, was geht, bringen tut's freilich nix, weil der Code vorher schon schneller war, als das Modul schalten kann.

[attachment=7976]


PWM-Signal über Dig.Output - draluz02 - 10.08.2007 07:32

' schrieb:das 9403 schafft nur max. 7µs gem. Spezifikation

Aber in dem "Operating instructions and specifications" pdf-File wird unter "Timing" ein "propagation delay" von max. 330ns und ein "channel-to-channel skew" von max. 265ns versprochen! wie kann dann ein fehler von 7µs entstehen?

Wegen dem dauernden schreiben der controls an das fpga war meine überlegung, dass ich eine zeitgesteuerte while-schleife von 10ms im host laufen lasse, sodass ich sicher gehen kann das der wert der controls nur alle 10ms abgefragt wird und dann übergeben wird, weil ich verhindern will das in undefinierten zeitabständen die controls an das fpga übergeben werden. so kann ich sicher sein, dass auch wenn sich innerhalb der 10ms der zustand der controls ändert - zB. nach 5ms - der wert erst nach ablaufen der 10ms übergeben wird.