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!
ich habe ein cRIO9076 und nutze den FPGA für die DI/DO (9425).
Es wird ein Motor verfahren, an dem ein Inkrementalgeber angebracht ist.
Diese Flanken vom Inkrementalgeber erfasse ich über den FPGA und werte die positiven Flanken mittels dem Baustein "boolean crossing" aus.
Problem ist, dass das ganze extrem empfindlich ist. sobald man in der nähe vom Weggeber minimal auf den Tisch haut, dann hat er schon so peaks und somit flanken, die gezählt werden. Allerdings sollen diese ja noch nicht gezählt werden, da der Motor/Weggeber nicht verfährt.
Ist das erste Projekt mit FGPA, deshalb noch nicht soviel Ahnung.
Gibt es einen Baustein oder sonstirgendwas, wo ich nur die echten gewollten Flanken zähle, und nicht diese Peaks?
Zitat:wo ich nur die echten gewollten Flanken zähle, und nicht diese Peaks?
Defniere bitte "echte gewollte Flanken" (aus Sicht deines FPGA)!
Wenn du diese Definition hast, können wir über eine entsprechend angepasste Auswertung reden…
Tipps:
- Auch im FPGA machen sich Schieberegister sehr gut…
- Bei solchen Problemen haben sich "Entprellfilter" bewährt…
Zitat: ein ungewollten peak hab ich mit ca. 75µs gemessen.
alles was größer 150µs ist, sollte nur ausgewertet werden.
Na siehst du, jetzt haben wir doch eine Handlungsgrundlage…
Code:
IF delay(RisingEdge - FallingEdge) > 125µs
THEN Count++
ELSE do nothing
Du musst dir also den Timestamp der Flanken merken (beim FPGA würde ich einfach die Ticks der Loop nehmen und diese mit einer definierten Rate laufen lassen) und die (zeitliche) Differenz der Flanken bestimmen. Nur, wenn die Zeit zwischen den Flanken groß genug war, zählt der Puls als "gewollt"…
ich glaube eher an ein elektrisches Problem! Normalerweise sind Encoder sehr stabil, ich benutze sie seit Jahren mit dem 9401 auf dem cRIO als Drehzahl-Eingang und "pseudo-Pulse" habe ich nur erlebt wenn etwas mit der Elektrik nicht gestimmt hat. Im Detail: es handelte sich um "Nahnebensprechen" in nicht terminierten BNC-Leitungen.
In den Beispielen (example-finder) gibt es ein VI in dem gezeigt wird wie man auf dem FPGA die Encoder-Signale richtig auswertet, such mal nach "quadratur(e) encoder", dann wirst du das beispiel hoffentlich finden. Der Code im Beispiel funktioniert 100%ig - ich verwende ihn seit 10 Jahren für Drehzahl-Eingänge - und wenn du dann immer noch "Pseudo-Pulse" bekommst kannst du 100%ig davon ausgehen, dass was mit deiner Elektrik nicht so ganz stimmt.
Da du schreibst du wärst ein Anfänger tippe ich dann mal auf eine schlechte Masse-Verbindung. Die Masse vom Encoder muss die gleiche Masse wie das DIO-Modul haben! Sonst zieht sich der Stromkreis die Masse über das Chassis und das DIO-Modul oder über irgendwelche sonstigen wilden Pfade und dann kann es zu den wildesten Effekten kommen ...