INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

PWM counter - unpräzise Phasenbestimmung



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

02.10.2010, 21:34
Beitrag #1

Steppenwolf12 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: May 2010

9 SP1
2009
de

68782
Deutschland
PWM counter - unpräzise Phasenbestimmung
Hallo liebe Community,
ich lese die PWM-Signale von 2 selbstkonfigurierten Beschleunigungssensoren über das NI 9403 und den FPGA des cRIO-9074 ein. Da das NI 9403 Modul die Methoden "Wait on rising/falling edge" nicht unterstützt, konnte ich keinen von den Beispielcountern zur PWM-Signaldecodierung verwenden.
Ich habe jetzt einen Counter gebastelt der in einer SCTL laufen kann, allerdings liefert dieser Counter unpräzise Messwerte.
Die Periodendauer der Sensorsignale ist auf 1,2ms konfiguriert also ca. 833,33Hz. Bei Messungen hat sich gezeigt, dass bei ruhenden Sensoren die Messwerte von regelmäßig auftretenden Artefakten durchsetzt sind.
Daraufhin habe ich das Messsystem an einen Signalgenerator angeschlossen, der mit der gleichen Konfiguration PWM-Signale generiert. Da ich mit angeschlossenem Signalgenerator die gleichen Artefakte gemessen habe, vermute ich, dass es einen Fehler in meinem Counteraufbau gibt.

Gemessen sehen die Artefakte so aus, dass z.B. bei 50% Duty Cycle der Counter 50 +-0,3% misst. Je nach eingestelltem Duty Cycle treten diese Messfehler häufiger oder weniger häufig auf - also anscheinend gibt es eine Frequenabhängigkeit.

Ich habe das VI mit einigen Beschreibungen versehen, so dass man schneller durchblickt. Vielleicht könntet ihr mal drüberschauen und mir sagen was daran falsch sein könnte, oder welche Fehlerquellen ich außer acht gelasseb habe.

Das VI ist mit LV 2009 SP1 geschrieben (FPGA-Module sollte nicht notwendig sein um das VI anzuschauen)

Vielen Dank für eure Anregungen & Tipps


Sonstige .vi  FPGA_PWM_counter.vi (Größe: 536,14 KB / Downloads: 366)


Gruß Nico
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
04.10.2010, 13:39
Beitrag #2

dlambert Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 89
Registriert seit: May 2009

2010
2007
en

12359
Deutschland
PWM counter - unpräzise Phasenbestimmung
So wie ich das sehe, hast Du eine Timed Loop mit einer Zykluszeit von einem Tick gebaut und Dein Code braucht mehr als einen Tick für die Ausführung. Du hast laut Deiner Beschreibung genug Zeit. Warum also die Timed Loop ?
Nimm einfach eine While Loop und leg einen Loop Timer rein. Den kannst Du in Ticks oder µs/ms zählen lassen.

Timed Loops benutze ich auf dem FPGA nur für SCTL's.

Hope it helps
Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
06.10.2010, 13:57
Beitrag #3

Steppenwolf12 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: May 2010

9 SP1
2009
de

68782
Deutschland
PWM counter - unpräzise Phasenbestimmung
Hallo Christian,
Danke für die Idee! In einer früheren Version des Counters hatte ich alles (also Counterlogik und FPGA I/O) in einer While-Loop bei 200kHz. Der Sensorhersteller gibt eine Mindestabtastung des Signals mit 10facher Frequenz an, was in meinem konkreten Fall mindestens 8333Hz bedeuten würde. Allerdings erschien mir bei 10facher Abtatsung des PWM-Singnals die Flankenerkennung recht ungenau, deshalb bin ich gleich recht hoch eingestiegen.
Da sich bei 200kHz das gleiche Verhalten gezeicht hat, dachte ich ich baue das ganz so um, dass es in eine SCTL passt (hab nochmal nachgeschaut die Timed Loop ist in diesem Fall eine SCTL) und erhöhe nochmals die Abtastung...mit dem Ergebnis, dass sich nichts verändert hat.

Ich dachte eigentlich, dass je höher die Frequenz des Counters, desto genauer die Phasenbestimmung des PWM-Signals. Aber vielleicht irre ich mich da, denkst du dass eine niedrigere Abtastung das "Rausch"-Verhalten verbessert?
Letzten Endes äußert sich diese "unpräzise" Phasenbestimmung in 1m/s^2 Schwankungen nach der Skalierung...was ziemlich "bescheiden" ist.

Aber in der Counterlogik hast du jetzt keinen Fehler entdeckt oder?

Vielen Dank, Gruß

Nico
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
25.10.2010, 09:37
Beitrag #4

dlambert Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 89
Registriert seit: May 2009

2010
2007
en

12359
Deutschland
PWM counter - unpräzise Phasenbestimmung
Also mit der Annahme das es sich bei Deiner Timed Loop um eine SCTL handelt liegst Du meiner Meinung nach falsch.
Die SCTL ist eine Compileranweisung und kein ausführbarer Code. Daher muss das Conditional Terminal bei einer SCTL immer so beschaltet werden, dass die Loop sofort wieder beendet wird ! In einer SCTL können daher auch keine ShiftRegister implementiert werden.

Ich würde wie gesagt eine While Loop verwenden und wenn nötig kannst Du innerhalb der WhileLoop dann Codeteile in SCTL's pressen.

Hope it helps
Christian

PS: Sorry for the late response ! Uuuurlaub :-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
26.10.2010, 22:30
Beitrag #5

Steppenwolf12 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: May 2010

9 SP1
2009
de

68782
Deutschland
PWM counter - unpräzise Phasenbestimmung
Ich habe das mit der While-Loop jetzt mal ausprobiert, leider ohne Erfolg Sad. Nur die Schleifendurchlaufzeit hat sich verlängert, aber die Schwankungen in der Decodierung sind geblieben. In der Konfiguration mit der Timed-Loop hat ein Schleifendurchlauf exakt 1 Tick benötigt (deswegen bin ich auch davon ausgegangen dass es eine SCTL ist) mit der While-Loop dauert ein Schleifendurchgang über 100 Ticks. Aber die Schleifengeschwindigkeit scheint hier gar nicht das Problem zu sein. Wenn mit der Counter von der Theorie her richtig funktionieren müsste, dann kommt das PWM-Signal vielleicht schon mit Schwankungen an?
Das wollte ich eigentlich dadurch ausschließen, indem ich mit einem Signalgenerator das PWM-Signal simuliere. Bei den Sensoren habe ich noch einen Kondensator zur DC-Entstörung eingebaut, was beim Signalgenerator ja nicht nötig ist. Vielleicht bekomme ich ja über die Referenz die Schwankungen ins Signal. Ich muss ja an dem dSub Stecker die Referenz für das Digitalsignal rausführen/anschließen, dafür kann ich laut Bedienungsanleitung jeden der 4 COM-Ports benutzen (da diese alle miteinander verbunden sind). Beim CAN-Bus verwendet man ja Abschlusswiderstände um die Welleneffekte, die bei schnellen Flankenwechseln entstehen, zu vermeiden.
Kann es sein, dass ich auch noch einen Widerstand, oder irgendein anderes Bauteil zwischen meiner Signalleitung und der Referenz brauche?

@Christian: No prob, hoffe der Urlaub war erholsamWink! Ich bin ja froh, dass mir überhaupt jemand weiterhilft. Bin mit meinem Latein echt am Ende

Vielen Dank!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
29.10.2010, 11:39
Beitrag #6

Nilbog Offline
LVF-Neueinsteiger


Beiträge: 8
Registriert seit: Oct 2010

2009
2008
en


Deutschland
PWM counter - unpräzise Phasenbestimmung
Hi,

ich könnte mir vorstellen, dass dein Problem im gewählten cRio Modul liegt. Das 9403 braucht laut Spezifikation 7µs um einen Wert einzulesen. Daher kannst du den I/O Node dieses Moduls auch nicht in einer SCTL verwenden. Soweit ich weis kann man z.B. das Modul 9401(8DIO) direkt in SCTL auslesen. Hängt wohl damit zusammen, das die Module über einen 15 poligen DSub-Anschluss angekoppelt sind. Da gehen 32 Kanäle natürlich langsamer drüber als 8.
Und 7µs / 1200µs ergibt, wenn ich keinen argen Denkfehler drin hab, sogar +-0,6%.
Die Fehler bei der Genauigkeit sollten also bei einer langsameren PWM Frequenzausgabe verschwinden, bzw. bei Verwendung eines schnelleren DIO Moduls.

BTW.: Ich verwende auch grundsätzlich SCTLs auf dem FPGA für alles was mit Signalkonditionierung oder PWM/Frequenz/etc. messen zu tun hat, auch wenn ich die Ausgabe aus Timinggründen in While Loops auslagern muss. Wenn ich schon Tik genau arbeiten kann, dann will ich das auch nutzen.

Gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
29.10.2010, 14:04
Beitrag #7

Steppenwolf12 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: May 2010

9 SP1
2009
de

68782
Deutschland
PWM counter - unpräzise Phasenbestimmung
Hi Nilbog,

das was du schreibst erscheint mir sehr plausibel. Ich habe das mit den 7µs wohl immer überlesen in der Spezifikation vom 9403 Modul. Das heißt wenn ich jetzt bei meiner Auswertung eine Genauigkeit von 0,01% erreichen will, dann darf die Frequenz des PWM-Signals 14,28Hz nicht überschreiten Sad. Also ich werde das nächste Woche mal mit dem Signalgenerator verifizieren.
Ich habe beim Testen die PWM-Frequenz auch schon zu niedrigeren Frequenzen hin verschoben, aber subjektiv keine Verbesserung beobachten können, allerdings bin ich in der Frequenz auch noch nie so tief gewesen.

Also vielen Dank für den Ansatz, ich werde hier dann wieder berichten was die Tests ergeben haben.

Viele Grüße!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
01.11.2010, 09:42
Beitrag #8

dlambert Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 89
Registriert seit: May 2009

2010
2007
en

12359
Deutschland
PWM counter - unpräzise Phasenbestimmung
Ich muss mich bezüglich meiner Aussagen zur SCTL korrigieren. Die SCTL kann als echte Loop und auch mit Schieberegistern ausgeführt werden. Problematisch ist tatsächlich die Verwendung von IO. Laut diesem Vortrag beim VIP FPGA under the Hood ist nur digital IO in SCTL möglich. Beim Modul 9403 ließ sich der Code in der SCTL compilieren und ist damit fehlerfrei. Das sich der Port nicht in 25ns aktualisieren lässt ist eben nicht vom FPGA sondern nur vom Modul abhängig.

Wenn es Dir um Performance geht versuchs mit 10µs Looptime und verwende Pipelining. Da verlierst Du zwar den ersten Zyklus aber danach laufen Processing und IO parallel. Teste die Performance mit einer einfachen Togglefunktion und angeschlossenem Counter.

Hope it helps
Christian
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.11.2010, 15:47
Beitrag #9

Steppenwolf12 Offline
LVF-Grünschnabel
*


Beiträge: 16
Registriert seit: May 2010

9 SP1
2009
de

68782
Deutschland
PWM counter - unpräzise Phasenbestimmung
Hallo Zusammen,
konnte Nilbog's Vermutung leider erst heute verifizieren und das kurze Resumee lautet. Nilbog's Vermutung trifft zu! Die 7µs die beim Auslesen der 32 Kanäle des NI9403 vergehen erzeugen einfach einen zu großen Jitter bei der Flankenerkennung des PWM-Signals.
Habe die PWM-Frequenz am Signalgenerator immer weiter runtergeschraubt und je niedriger die PWM-Frequenz, desto kleiner die Schwankungen um den eingestellten Duty-Cycle-Wert. So gesehen eignet sich das 9403 Modul nicht um PWM-Signale > 14Hz zu decodieren (kommt natürlich auf den Anspruch des Anwenders an, aber zur Decodierung von Beschleunigungssignalen definitiv ungeeignet).
Da sich jetzt Niemand mehr bezüglich der Counterlogik gemeldet hat gehe ich davon aus, dass an dieser Stelle alles in Ordnung ist. Trotzdem auch nochmal ein Dankeschön an dlambert für die VIP '10 Unterlagen. Hab sie mir angeschaut und denke, dass es eine sinnvolle Ergänzung zum FPGA-Training ist, da hier das Pipelining stärker hervorgehoben wird.

Also vielen Dank für eure Hilfe!

mfG Nico
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Antwort schreiben 


Gehe zu: