www.mikrocontroller.net

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


Autor: Jochen Schulz (Firma: Denton) (newcomer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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°?

Autor: Jochen Schulz (Firma: Denton) (newcomer)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: Jochen Schulz (Firma: Denton) (newcomer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als Taktfrequenz stehen mit übrigens 4MHz zur Verfügung.

Autor: Jochen Schulz (Firma: Denton) (newcomer)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: newcomer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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/Whitepa...

Geschwindigkeitsmessung - Methode 3

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

Gruß Jochen

Autor: newcomer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.