Hallo zusammen,
ich hänge seit einigen Tagen an der Umsetzung einer zuverlässigen und vor allem genauen Synchronisierung
vom Positionswert & einem digitalen Signal.
Um das Signal zu erfassen wird die Zeit zwischen den fallenden Flanken mittels SCTL gemessen.
Alle Flankenzeiten werden in einen Target Scoped FIFO geschrieben und in einer anderen Schleife auf dem FPGA mittels DMA FIFO an das RT System übertragen. Der Code für die Erfassung des Encoders läuft in der gleichen SCTL in der auch das Signal erfasst wird.
Das Signal liefert nicht regelmäßig einen Synchronisationspuls (erkennbar durch bestimmte Länge der Flankenzeit).
Zu jedem Synchronisationspuls muss die aktuelle Position, Spannung und Strom mit in den FIFO geschrieben werden.
Spannung und Strom sind Werte die jede 10ms erzeugt werden und nur für eine groben Spannungs/Strom verlauf später benötigt werden. Daher schreibe ich diese mittels lokale Variablen in den FIFO.
Mit meinem Code bekomme ich beim auslesen auf dem RT System die meiste Zeit gute bzw. normale Werte.
Ab und zu schreibt jedoch das FPGA viele Nullen in den FIFO, jedesmal an der gleichen Position in einer Botschaft.
z.B. 100 gute Botschaften dann 1 falsche; 1204 gute Botschaften dann 1 falsche.
Das die Ursache auf der RT Seite liegt schließe ich aus, da die Abholung der Daten wesentlich schneller erfolgt als sie geschrieben werden.
Hier exemplarisch was ab und zu als Fehler auftritt.
Normal:
6701 2393 100000000 5000 24 1556 2512 2512 2153 1675 3111 2273 10289
Fehler:
6702 2872 100000000 5000 24 1556 2512 2512 2632 1674 0 0 0 0 0 0 0 0 0 0 3111 1795 9332
Liegt ein grundlegender Fehler in meinem FPGA Programm bzw. wie kann ich sonst noch die aktuelle Position beim Auftreten des Synchronisationspuls in den FIFO bringen?
Danke für jeden Hinweis
Cross Post:
http://forums.ni.com/t5/LabVIEW/SCTL-amp...se#M846269