Printable Version of Topic

Click here to view this topic in its original format

IBB Forum _ LabVIEW FPGA _ am Analog Output Modul messe ich zu viel Spannung

Posted by: Gunni1979 08. May 2007, 12:48

Hallo.

Hat jemand nen Plan woran das liegen kann, dass das Analoge Output Modul cRIO 9263 mehr Spannung abgibt als es laut Berechnung soll? Kann man da was einstellen/korrigieren? Laut einer Formel (aus einer der Seiten von NI) beträgt die Spannung die am Modul anliegt Output Voltage = BinaryCode * 20 / 2^Resolution of Modul. Das heißt in diesem Fall mit 16 Bit sollten bei gewünschten 5 Volt eine Zahl 16384 auf das Modul gelegt werden. Mit meinem externen Oszi messe ich aber 5,5 V. Ist meines Erachtens ein wenig heftig. Kann man da etwas korrigieren mit so ner Art Stellschraube oder so? Oder muss doch softwareseitig was getan werden?
Wir haben hier ein zweites Gerät stehen mit den gleichen Modulen. Habe jetzt mal diese beiden analogen Module getauscht aber es ist der gleiche Effekt.


Gunni

Posted by: CB 09. May 2007, 12:27

QUOTE(Gunni1979 @ 08. May 2007, 13:48) [snapback]203[/snapback]
Hallo.

Hat jemand nen Plan woran das liegen kann, dass das Analoge Output Modul cRIO 9263 mehr Spannung abgibt als es laut Berechnung soll? Kann man da was einstellen/korrigieren? Laut einer Formel (aus einer der Seiten von NI) beträgt die Spannung die am Modul anliegt Output Voltage = BinaryCode * 20 / 2^Resolution of Modul. Das heißt in diesem Fall mit 16 Bit sollten bei gewünschten 5 Volt eine Zahl 16384 auf das Modul gelegt werden. Mit meinem externen Oszi messe ich aber 5,5 V. Ist meines Erachtens ein wenig heftig. Kann man da etwas korrigieren mit so ner Art Stellschraube oder so? Oder muss doch softwareseitig was getan werden?
Wir haben hier ein zweites Gerät stehen mit den gleichen Modulen. Habe jetzt mal diese beiden analogen Module getauscht aber es ist der gleiche Effekt.
Gunni


schau dir mal das Beispiel an, dass ich damals im LabVIEW Forum für dich gepostet hatte. Da lese ich irgendwo die Kalibrierdaten des Moduls aus. Bei einem AO Modul kann man das auch machen, in der Formel oben hast du nämlich den Offset vergessen und den kannst du aus dem Modul auslesen ...

Posted by: Gunni1979 09. May 2007, 12:59

QUOTE(CB @ 09. May 2007, 13:27) [snapback]206[/snapback]
schau dir mal das Beispiel an, dass ich damals im LabVIEW Forum für dich gepostet hatte. Da lese ich irgendwo die Kalibrierdaten des Moduls aus. Bei einem AO Modul kann man das auch machen, in der Formel oben hast du nämlich den Offset vergessen und den kannst du aus dem Modul auslesen ...


Gut. Ausgelesen habe ich diese beiden Sachen mit LSB Weigth und Offset jetzt schon.
Wenn ich auf FPGA-Seite aber meinen Sinusgenerator benutze, wie kann ich diese beiden Werte mit ner Formel dann benutzen um da die Amplitude genau auf 10 V zu bringen. Denn der ist Original immer auf 32767(positive Halbwelle) und -32768(negative Halbwelle) eingestellt. Mit den beiden vorher besagten Daten ändert sich dieser wert ja dann auf etwas weniger .

Gunni

Posted by: CB 09. May 2007, 20:51

QUOTE(Gunni1979 @ 09. May 2007, 13:59) [snapback]207[/snapback]
Gut. Ausgelesen habe ich diese beiden Sachen mit LSB Weigth und Offset jetzt schon.
Wenn ich auf FPGA-Seite aber meinen Sinusgenerator benutze, wie kann ich diese beiden Werte mit ner Formel dann benutzen um da die Amplitude genau auf 10 V zu bringen. Denn der ist Original immer auf 32767(positive Halbwelle) und -32768(negative Halbwelle) eingestellt. Mit den beiden vorher besagten Daten ändert sich dieser wert ja dann auf etwas weniger .

Gunni


Es gibt ein Beispiel im Example Finder, das VI das du brauchst heisst "Binary to nominal" bzw. "Nominal to Binary". Such das mal, dann spar ich mir die Erklärerei <faul=on> smile.gif

Posted by: Gunni1979 10. May 2007, 08:39

QUOTE(CB @ 09. May 2007, 21:51) [snapback]208[/snapback]
Es gibt ein Beispiel im Example Finder, das VI das du brauchst heisst "Binary to nominal" bzw. "Nominal to Binary". Such das mal, dann spar ich mir die Erklärerei <faul=on> smile.gif



Ja stimmt. Mit dem "einen" hatte ich schon Werte berechnet. Ich glaube ich hab ne Idee. Ich berechne vorher mit "Nominal to Binary" den Binärwert und setzte ihn in ein Verhältnis zu 32767 (die angeblich 10 V wären). Den Faktor schiebe ich auf die FPGA-Anwendung und rechne ihn zum Ausgang des Generators dazu.


Gunni

Posted by: CB 10. May 2007, 11:56

QUOTE(Gunni1979 @ 10. May 2007, 09:39) [snapback]209[/snapback]
Ja stimmt. Mit dem "einen" hatte ich schon Werte berechnet. Ich glaube ich hab ne Idee. Ich berechne vorher mit "Nominal to Binary" den Binärwert und setzte ihn in ein Verhältnis zu 32767 (die angeblich 10 V wären). Den Faktor schiebe ich auf die FPGA-Anwendung und rechne ihn zum Ausgang des Generators dazu.
Gunni


ne, das ist falsch. Mit "Nominal to Binary" berechnest du schon den I16 Wert, der auf den AO geschrieben werden soll, skalierung und um das Offset bereinigt. Da brauchst du nicht nochmal was berechnen ...

Posted by: Gunni1979 10. May 2007, 13:12

QUOTE(CB @ 10. May 2007, 12:56) [snapback]210[/snapback]
ne, das ist falsch.

Da bin ich mir noch nicht sicher ob du jetzt recht hast.
QUOTE(CB @ 10. May 2007, 12:56) [snapback]210[/snapback]
Mit "Nominal to Binary" berechnest du schon den I16 Wert, der auf den AO geschrieben werden soll, skalierung und um das Offset bereinigt. Da brauchst du nicht nochmal was berechnen ...

Dem bin ich mir im Klaren. Da der Sinusgenerator aber ne Amplitude mit festen Wert von 32767 / -32768 liefert, muss ich die Berechnung die eigentlich "Nominal to Binary" macht auf FPGA-Seite bringen. in der eben besagten wird erst der Offset zum eigentlichen Wert dazu addiert und danach wird alles mit dem Skalierungsfaktor multipliziert.
Der FPGA kann nur mit ganzen Zahlen rechnen, also habe ich auf HOST-Seite den Offset für das Modul ausgerechnet. Offset = Offset vom Modul * 10^-9 *2^16 / 20. Da kam bei mir ein wert um 46 raus.[attachment=100:HOST_HardwareCAL.JPG]
dann habe ich mir was für den Faktor gedacht und zwar 1 * 20 * 1000 / LSB Weight * 10^-9 * 2^16. Mal 1000 habe ich genommen, weil sonst ne Komma zahl raus kommt. Auf FPGA-Seite ziehe ich nun von den vom Sinusgenerator festen Wert 32767 den Offset ab. Multipliziere die gesamte Geschichte mit dem 1000fachen Skalierungsfaktor und dividiere es dann wieder durch 1000 ( mit der Quotient und Rest - Division).[attachment=101:FPGA_HardwareCAL.JPG]

Das sollte meines Erachtens das gleiche sein wie mit "Nominal to Binary.vi".


Gunni

Posted by: CB 10. May 2007, 18:05

QUOTE(Gunni1979 @ 10. May 2007, 14:12) [snapback]211[/snapback]
Da bin ich mir noch nicht sicher ob du jetzt recht hast.

Dem bin ich mir im Klaren. Da der Sinusgenerator aber ne Amplitude mit festen Wert von 32767 / -32768 liefert, muss ich die Berechnung die eigentlich "Nominal to Binary" macht auf FPGA-Seite bringen. in der eben besagten wird erst der Offset zum eigentlichen Wert dazu addiert und danach wird alles mit dem Skalierungsfaktor multipliziert.
Der FPGA kann nur mit ganzen Zahlen rechnen, also habe ich auf HOST-Seite den Offset für das Modul ausgerechnet. Offset = Offset vom Modul * 10^-9 *2^16 / 20. Da kam bei mir ein wert um 46 raus.[attachment=100:HOST_HardwareCAL.JPG]
dann habe ich mir was für den Faktor gedacht und zwar 1 * 20 * 1000 / LSB Weight * 10^-9 * 2^16. Mal 1000 habe ich genommen, weil sonst ne Komma zahl raus kommt. Auf FPGA-Seite ziehe ich nun von den vom Sinusgenerator festen Wert 32767 den Offset ab. Multipliziere die gesamte Geschichte mit dem 1000fachen Skalierungsfaktor und dividiere es dann wieder durch 1000 ( mit der Quotient und Rest - Division).[attachment=101:FPGA_HardwareCAL.JPG]

Das sollte meines Erachtens das gleiche sein wie mit "Nominal to Binary.vi".
Gunni


ich würd das einfacher machen:

rechne dir einfach mit Nominal to Binary den i16 Wert für -10 Volt und +10 Volt aus, dann *weisst du wo du liegst". Die Skalierung an sich musst du nicht mehr verändern, die ist ja schon durch das Modul gegeben, du musst nur deinen Sinus Generator noch so anpassen, dass er nicht von -32767 bis 32767 ausgibt sondern nur bis zu *deinen* +- 10 Volt (in i16). Dann musst du nur noch den halben Offset abziehen, und dann sollte alles genau so funktionieren, wie du das willst ...

Da sich der Offset und die Skalierung des Modules nicht ändert kannst du da durchaus Konstanten für verwenden ...

Posted by: Gunni1979 11. May 2007, 07:53

QUOTE(CB @ 10. May 2007, 19:05) [snapback]212[/snapback]
ich würd das einfacher machen:

Du kannst mir galuben, ich hätte es gern einfacher gemacht.

QUOTE(CB @ 10. May 2007, 19:05) [snapback]212[/snapback]
rechne dir einfach mit Nominal to Binary den i16 Wert für -10 Volt und +10 Volt aus, dann *weisst du wo du liegst". Die Skalierung an sich musst du nicht mehr verändern, die ist ja schon durch das Modul gegeben, du musst nur deinen Sinus Generator noch so anpassen, dass er nicht von -32767 bis 32767 ausgibt sondern nur bis zu *deinen* +- 10 Volt (in i16).

Genau hiernach habe ich schon vergebens gesucht. Ich kann die Amplitude des Sinusgenerators nicht verändern. Da müßte ich ja dessen LookUpTable neu schreiben, oder?
Irgendwie muss ich doch da ne Verhältnisgleichung auf die FPGA-Seite bringen.

QUOTE(CB @ 10. May 2007, 19:05) [snapback]212[/snapback]
Dann musst du nur noch den halben Offset abziehen, und dann sollte alles genau so funktionieren, wie du das willst ...

Da sich der Offset und die Skalierung des Modules nicht ändert kannst du da durchaus Konstanten für verwenden ...

Und das wiederum verstehe ich gar nicht. Wieso nur noch den halben Offset abziehen?


Gunni


Update: ...kleine Fehler in der rechnung bei mir habe ich schon selbst gefunden - hier die Korrektur
[attachment=102:FPGA_HardwareCAL.JPG]
[attachment=103:HOST_HardwareCAL.JPG]

für den Offset bekomme ich ein Wert: 49 und für den Faktor CAL1000: 1070

damit habe ich es jetzt geschafft von ehemals 5,5V (fast 5,6V bei eingestellten 5Volt) auf 5,2Volt runter zu kommen. Aber das ist noch nicht das Wahre. Es sollten ja 5,0 Volt sein

Posted by: CB 11. May 2007, 19:41

QUOTE(Gunni1979 @ 11. May 2007, 08:53) [snapback]213[/snapback]
Genau hiernach habe ich schon vergebens gesucht. Ich kann die Amplitude des Sinusgenerators nicht verändern. Da müßte ich ja dessen LookUpTable neu schreiben, oder?


nein, musst du nicht. mach einfach den Haken weg und stell das Maximum neu ein smile.gif




gib mir mal die Original Werte (so wie sie vom Modul zurückgegeben werden) für Offset und LSB Waight, dann rechne ich dir das aus ...

Posted by: Gunni1979 13. May 2007, 20:36

QUOTE(CB @ 11. May 2007, 20:41) [snapback]214[/snapback]
nein, musst du nicht. mach einfach den Haken weg und stell das Maximum neu ein smile.gif




gib mir mal die Original Werte (so wie sie vom Modul zurückgegeben werden) für Offset und LSB Waight, dann rechne ich dir das aus ...


Hi.

Kannnst de mir den Rechenweg auch mit auf den Weg geben? Offset: 14885969, LSB Weight: 326528


Posted by: Gunni1979 14. May 2007, 14:48

QUOTE(Gunni1979 @ 13. May 2007, 21:36) [snapback]215[/snapback]
Hi.

Kannnst de mir den Rechenweg auch mit auf den Weg geben? Offset: 14885969, LSB Weight: 326528



Ich glaube ich habe den Rechenweg selbst gefunden. Habe es mir auch schon ausgerechnet. 30626 habe ich drin stehen. dann ziehe ich die 46 Offset ab und es funzt. Danke.

Gunni

Posted by: Gunni1979 19. Jul 2007, 09:05

QUOTE(Gunni1979 @ 14. May 2007, 15:48) *
Ich glaube ich habe den Rechenweg selbst gefunden. Habe es mir auch schon ausgerechnet. 30626 habe ich drin stehen. dann ziehe ich die 46 Offset ab und es funzt. Danke.

Gunni


Hi CB,

kannst du mir bitte trotzdem mal den Rechenweg und die dazu gehörigen Ergebnisse ins Forum schreiben. Es müssten namlich 46 für Offset raus kommen, aber ich hatte 49 ausgerechnet.

danke

Posted by: CB 22. Jul 2007, 08:10

QUOTE(Gunni1979 @ 19. Jul 2007, 10:05) *
Hi CB,

kannst du mir bitte trotzdem mal den Rechenweg und die dazu gehörigen Ergebnisse ins Forum schreiben. Es müssten namlich 46 für Offset raus kommen, aber ich hatte 49 ausgerechnet.

danke


1. Schritt: du liest die Kalibrier-Daten aus

2. Schritt: du läßt dir mit den Kalibrierdaten durch das "nominal to binary" VI für dein Modul den binären Wert für 0 Volt ausrechnen

=> dieser Wert ist dein Offset, den du im FPGA fest einprogrammieren kannst (einfach abziehen)

Posted by: Gunni1979 22. Jul 2007, 20:09

QUOTE(CB @ 22. Jul 2007, 09:10) *
1. Schritt: du liest die Kalibrier-Daten aus

2. Schritt: du läßt dir mit den Kalibrierdaten durch das "nominal to binary" VI für dein Modul den binären Wert für 0 Volt ausrechnen

=> dieser Wert ist dein Offset, den du im FPGA fest einprogrammieren kannst (einfach abziehen)


Einfach abziehen, oder die Hälfte davon abziehen. In einen der vorigen Beiträge zu diesem Thema hattest du was von die Hälfte abziehen gesagt. Wieso die Hälfte?

Gunni

Posted by: CB 23. Jul 2007, 06:48

QUOTE(Gunni1979 @ 22. Jul 2007, 21:09) *
Einfach abziehen, oder die Hälfte davon abziehen. In einen der vorigen Beiträge zu diesem Thema hattest du was von die Hälfte abziehen gesagt. Wieso die Hälfte?

Gunni


joh, frag ich mich jetzt auch grade smile.gif wieso eigentlich die Hälfte? keine Ahnung ....

zur Not kannst du das ja ausprobieren:



häng ein sehr genaues Messgerät an den Analog-Ausgang, lass das VI auf dem FPGA laufen und schau dir an, welchen Wert du eingeben muss, damit du genau 0 Volt rausbekommst ...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)