Forum: FPGA, VHDL & Co. Frequenzanpassung für Drehgeberauswertung


von Jochen S. (Firma: Denton) (newcomer)


Lesenswert?

Hallo zusammen,

für meine Diplomarbeit sitze ich gerade an der Auswertung eines 
Drehgebersignals. Die Auswertung soll auf einem Xilinx Coolrunner 
stattfinden.

Mein Problem ist folgendes:

Das Drehgebersignal muss für sehr niedrige Drehraten (6 Grad/sec) und 
für sehr hohe Drehraten (5000 Grad/sec) und natürlich alles was da 
zwischen liegt ausgewertet werden.

Für die Geschwindigkeitsbestimmung bietet es sich natürlich an, 
Inkremente vom Drehgeber in einem bestimmten Zeitintervall zu zählen. 
Dafür habe ich einen Timer in VHDL umgesetzt, der mit einer zunächst 
festen Frequenz getaktet wird. Für einen bestimmten 
Geschwindigkeitsbereich ist dies auch ausreichend.

Allerdings stehe ich nun vor dem Problem, dass die Taktfrequnez für den 
oben genannten Geschwindigkeitsbereich ständig verändert werden muss, um 
eine optimal Auflösung meines Messergebnisses gewährleisten zu können.

Google-Suche und ähnliches brachten mich auf die Idee einen DDS bzw. 
einen NCO in VHDL umzusetzen. Allerdings ist mir die Funktionsweise noch 
etwas unklar und ich weiss nicht, wo ich genau ansetzen soll und wie ich 
die Taktfrequenzanpassung realisieren soll.

Vielleicht hat jemand einen Ansatz für mich oder hat sogar eine bessere 
Idee. Vielleicht hat ja auch der ein oder andere etwas Erfahrung mit 
dieser Problematik.

Wäre für jeden Kommentar sehr dankbar.

Gruß
Newcomer

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Für einen bestimmten Geschwindigkeitsbereich ist dies auch ausreichend.
Hast du auch Zahlen dazu?
Taktfrequenz, Zählerfrequenz, Zählerbreite?

> Für die Geschwindigkeitsbestimmung bietet es sich natürlich an,
> Inkremente vom Drehgeber in einem bestimmten Zeitintervall zu zählen.
Alternativ könntest du einen Zähler laufen lassen und die Zeit zwischen 
2 Inkrementalgeberimpulsen zu ermitteln. Das ist dann für langsame 
Geschwindigkeiten gut.

> Das Drehgebersignal
Welche Auflösung hat der Geber pro 360°?

von Jochen S. (Firma: Denton) (newcomer)


Lesenswert?

Hallo Lothar,

Zahlen habe ich leider keine mehr, da ich meinen Testaufbau mittlerweile 
umgepflügt habe und die Zahlen leider nicht mehr im Kopf habe.

Die Zeitmessung zwischen zwei Impulsen habe ich schon ausprobiert. Du 
sagst ja aber selbst, dass es nur für kleine Drehraten gute Auflösung 
liefert. Je höher die Geschwindigkeit allerdings wird desto schlechter 
wird die Auflösung. Dies liegt daran, dass bei hohen Geschwindigkeiten 
nur noch wenige Bits des Zählers verwendet werden.

Der Aufnehmer ist von Heidenhain und hat zwei Spuren mit 5000 
Strichen/Umdrehung.

Vielleicht um nochmal etwas konkreter zu werden:

Die Werte die ich nach der Auswertung auf meinem Chip bekommen müssen 
auf ein eigens entwickeltes Bussystem übertragen werden. Alle 
Informationen die ich gewinnen (Weg ,Zeit und Vorzeichen) muss ich 
anschließend in 16bit packen.

Mein erster Ansatz sah vor 5bit für den Weg, 5bit für die genaue Zeit, 4 
bit für die grobe Zeit und ein bit fürs Vorzeichen.

mit genauer Zeit meine ich den Wert des Timers an dem er angehalten 
wird. Dieser Wert war einstellbar und konnte vorgegeben werden. Die 
grobe Zeit ist die Taktung des Timers welche ich über einen Taktteiler 
(einfacher Zähler mit anschließendem MUX) realisiert habe. Allerdings 
ist die Teilung des Zählers zu grob.

Danke für deine schnelle Antwort
Gruß

von Jochen S. (Firma: Denton) (newcomer)


Lesenswert?

Als Taktfrequenz stehen mit übrigens 4MHz zur Verfügung.

von Jochen S. (Firma: Denton) (newcomer)


Lesenswert?

Hab mal weiter nach Informationen zu NCO's gesucht und bin auch fündig 
geworden:

http://www.edaboard.com/ftopic106948.html

Leider ist mir nicht ganz klar wie ich nun meine Frequenz anpasse.

Ich verstehe des so:

Prinzipiell besteht ein NCO aus einem ROM und einem Akkumulator (also 
nem Addierer). So bei jedem Clock wird jetzt der Addiere um eins erhöht 
und der nächste Wert aus dem ROM geschoben. Im ROM ist ein Sinus- bzw. 
ein Cosinus-Signal hinterlegt, welches man mit der gewünschten Frequenz 
hinterlegt. Hab ich das soweit richtig verstanden?

Wäre ja dann eigentlich nicht das was ich suche oder?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Hab ich das soweit richtig verstanden?
Im Großen und Ganzen ja. Wobei die Frequenz nicht aus der hinterlegten 
Funktion entsteht, sondern aus der Geschwindigkeit der Adressierung 
(Akkumulator-Increment).

> Wäre ja dann eigentlich nicht das was ich suche oder?
Nein. Ganz und gar nicht...

Ich könnte mir eine Kombination aus Zeitmessung (Takte pro Strich) für 
die langsame Drehrate sowie des Impulszählens (Impulse pro Zeit) für die 
hohe Drehgeschwindigkeit gut vorstellen.

Aber ich werde daraus noch nicht ganz schlau:
> Alle Informationen die ich gewinnen (Weg ,Zeit und Vorzeichen)
> muss ich anschließend in 16bit packen.
Du gibst also eine Zeitdifferenz und eine Wegdifferenz zurück?
Und das auf 16 Bit? Welche Bandbreite hat der Bus? Und welche Latenz?

> 5bit für die genaue Zeit, 4 bit für die grobe Zeit
Lügst du dir da nicht selber was in die Tasche?
Warum gibst du den Vorteiler zurück, den du doch selber eingestellt 
hast?

> Allerdings ist die Teilung des Zählers zu grob.
Mit 4 MHz Taktfrequenz und max. 20 kHz Impulsfrequenz erreichst du eine 
Genauigkeit von 0,5% bei der Maximaldrehzahl. Reicht dir das 
theoretisch?

von newcomer (Gast)


Lesenswert?

Hallo Lothar,

erstmal frohes neues Jahr.

Danke für deine Antwort und Entschuldigung für meine späte Antwort. 
Leider hat mich über Weihnachten die Grippe erwischt und meine Laptop 
hatte ich im Geschäft gelassen.

Nach einigem googeln habe ich denke ich eine guten Lösungsansatz 
gefunden:

http://www.channel-e.de/fileadmin/additive/Whitepaper_Inkrementalgeber.pdf

Geschwindigkeitsmessung - Methode 3

Diese versuche ich mal auf meinem FPGA umzusetzen und melde mich dann 
falls es geklappt hat.

Gruß Jochen

von newcomer (Gast)


Lesenswert?

So leute,

hab das mal wie oben erwähnt umgesetzt. Des funktioniert einwandfrei und 
hat auch wie im Dokument versprochen die gute Auflösung über einen 
weiten Geschwindikeitsbereich.

Danke für eure Hilfe.

Gruß Jochen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.