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
> 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°?
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ß
Als Taktfrequenz stehen mit übrigens 4MHz zur Verfügung.
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?
> 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?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.