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 

Signal erstellen und gleichzeitig Regeln?



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!

17.11.2010, 16:54
Beitrag #1

Knulf Arnulfson Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: May 2010

2011
2010
kA


Deutschland
Signal erstellen und gleichzeitig Regeln?
Hallo,

ich würde gerne mit meinem FPGA einen Sinus erstellen und gleichzeitig einen PID Regler nutzen um das Sinus Signal zu Regeln.

Ich betreibe einen Elektromagnetischen Shaker und möchte über meinen RT Controller Amplitude und Frequenz an den FPGA geben.
Meinen Sinus erstelle ich ueber einen Memory mit 1024 Plätzen im I16 Format den ich per Autoinitialisierungsfunktion mit einem Sinus versehe.
Meine Idee ist es eine Schleife zu bauen die entsprechend oft wiederholt wird und dabei den Speicher Zeile für Zeile ausliest. Amplitude und Frequenzwechsel macht der RT Controller.
Allerdings möchte ich die Schleife wesentlich langsamer laufen lassen als die PID Reglerschleife. Ist diese Parallelität möglich und wenn ja mit welcher Schleife arbeite ich am besten.

Sollwert erhalte ich aus der Sinusschleife, Stellwert geht per AO 9263 raus und Istwert erhalte ich per Lasersensor auf dem AI 9205.

Danke schonmal fürs lesen.

Gruß

Knulf

P.S.: Ich arbeite mit LV 8.6.1 und einem cRIO 9014


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
18.11.2010, 09:10
Beitrag #2

chrissyPu Offline
LVF-Stammgast
***


Beiträge: 467
Registriert seit: Jun 2006

2014 PDS
2006
DE_EN

64283
Deutschland
Signal erstellen und gleichzeitig Regeln?
Also,

- Double auf FPGA geht nicht. Warum auch immer du das Programmieren kannst. Auf Fixpoint würde ich auch verzichten, die Ausgabe ist sowieso integer-basierend, da spart man Slices...
- Die Übergabe zwischen den Schleifen funktioniert so nicht. Am Ausgang der oberen Schleife liegt (und das ist LabView-allgemein, nicht FPGA-spezifisch) erst nach Ende der Schleife ein Wert an. Daher: Übergabe zwischen den beiden muss anders geregelt werden. Da ich das noch nicht gemacht habe, nur ein Tipp: Globale Variable. Laut NI auf FPGA der Lokalen vorzuziehen. Alternativ ein Melder, wobei ich nicht weiß, ob das auf dem FPGA funktioniert.
- Über das Speichern von Soll-, Ist- und Ausgabewert des Reglers würde ich nochmal nachdenken, könnte zu Laufzeitproblemen führen. alternativ: Die drei Zahlen in ein Array (bzw. besser einfach die entsprechenden Bits zusammen packen,d as geht auf dem FPGA instantan) packen und das Array/Bitmuster einmal in den FiFo schreiben. KÖnnte mir vorstellen, dass die Fifo-Zugriffszeit dadurch besser wird, Mechatronik-Ingenieur hat da aber sicher Erfahrungswerte zu...

Soviel dazu, Grüße,

ch
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2010, 10:53
Beitrag #3

Knulf Arnulfson Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: May 2010

2011
2010
kA


Deutschland
Signal erstellen und gleichzeitig Regeln?
Hi, danke für die schnelle Hilfe. Aber nochmal meine Frage. Kann ich die beiden Schleifen einfach so nebeneinander hinstellen und die werden mit der eingestellten Verzögerung unabhängig schnell ausgeführt?

Ich habe zu diesem ersten Anlauf jetzt mal ein bischen weiter gebastelt, bin von FXP Zahlen weg (der PID Regler verlangt FXP Zahlen) und habe nun folgendes gebaut (s. Anhang).

Wie schnell sind denn so Memoryblöcke und macht es Sinn für diese eine Variable einen anzulegen? Und Wo muss ich die Globale Variable erstellen, damit ich die auf dem FPGA nutzen kann(bzw. was von beidem ist schneller)?

Ausserdem bin ich nicht dazu in der Lage den FIFO mit einem Array zu versehen bzw. irgendwelche bits zusammen zu schieben.

Gruß

Knulf


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
18.11.2010, 13:28
Beitrag #4

chrissyPu Offline
LVF-Stammgast
***


Beiträge: 467
Registriert seit: Jun 2006

2014 PDS
2006
DE_EN

64283
Deutschland
Signal erstellen und gleichzeitig Regeln?
Hi,

- Generell geht das, zwei Schleifen auf einem FPGA unabhängig voneinander laufen zu lassen. In Deinem ERSTEN Screenshot wartet die zweite Schleife aber auf die Ausgabe von der ersten und wird daher nur einmal gestartet werden bzw. keine synchronisierten Daten bekommen.

- Ob die Datenübergabe mit einem Memoryblock schnell genug klappt, wage ich zu bezweifeln, so wegen Arbitrierung. Wie gesagt, ich hab's noch nicht gemacht, würde aber über eine globale Variable gehen (ist im BD in der Structures-Palette zu finden und laut NI auf FPGAs schneller als die Nutzung von Lokalen Variablen) - siehe Anhang. Screenshot ist aus Standard LV, nicht aus dem FPGA-Modul, daher nicht wundern,w enn bei Dir da weniger drins teht.

- Wegen PID: Schau mal, ob du den Ausgang nicht auf "Gleiches Zahlenformat wie der Eingang" stellen kannst - geht zumindest bei allen anderen FPGA-"Express-VIs"...

- Bzgl. Array und so: Array würde ich sein lassen, es sei denn, du initialisierst das vorher und das braucht dann wieder Speicher. Daher vielleicht das angehängte Split/Joint-Number versuchen, logischerwesie zweimal hintereinander.

Grüße,

ch
   
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
19.11.2010, 15:09
Beitrag #5

Knulf Arnulfson Offline
LVF-Grünschnabel
*


Beiträge: 17
Registriert seit: May 2010

2011
2010
kA


Deutschland
Signal erstellen und gleichzeitig Regeln?
Danke nochmal für die Hilfe,

Zitat:Daher vielleicht das angehängte Split/Joint-Number versuchen, logischerwesie zweimal hintereinander.

Hat geklappt. Habe jetzt 4 I16 zu 1 U64 zusammengefügt. Lässt sich auch auslesen.

Zitat:- Wegen PID: Schau mal, ob du den Ausgang nicht auf "Gleiches Zahlenformat wie der Eingang" stellen kannst - geht zumindest bei allen anderen FPGA-"Express-VIs"...

Das habe ich nicht erreichen können, da ich diese Einstellung nicht vornehmen kann, und wenn doch dann habe ich diese nicht gefunden. Aber sollte ich nicht mit "einfachem" in I16 umwandeln "genug" Genauigkeit erreichen?


Nun eine Frage zum Timing, wenns gestattet ist.

Wie erreiche ich es denn, dass meine Signalschleife in dem Zeitlchen Abstand ausgeführt wird den ich möchte?
Also wenn 1024 ausführungen der Schleife 1 Sinus sind. Dann müsste ich ja die Schleife alle 1/1024 Sekunden ausführen um 1 Hz zu erreichen. Das erreiche ich doch, wenn ich dem Loop-Timer sage: Alle 1000000/1024 uSec ausführen?!
Jetzt meine Ungewissheit. Wie schnell geht das ganze von statten und wie hoch kann ich wohl in meiner Frequenz gehen. Bzw. wie schnell macht das wohl der Memory mit?

Weiterhin s.u. was ich gebastelt habe und ich würde mich über eine Abschätzung und Beurteilung meines Programmierstils freuen.

Gruß

Knulf


Angehängte Datei(en) Thumbnail(s)
       
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: