Hi,
ich habe hier einen DC Motor der mit bis zu 6000 Touren dreht. Ein auf
der Welle aufgeflanschter quadruple Encoder (A, A-, B, B-) dient dabei
zur Poitionsbestimmung. Der Encoder ist verdammt schnell - bzw schickt
viele Bits/Umdrehung - und da frag ich mich, was so ein ADC auswerten
kann, ohne sich zu verschucken.
Gruß
Sowas wird nicht mit einem ADC ausgewertet, sondern mit normalen
Eingangs-Pins.
> Der Encoder ist verdammt schnell - bzw schickt viele Bits/Umdrehung -
Zahlen?
Habe gerade aufs Datenblatt geschaut; der Encoder haut 2500 Bits raus.
Bei bis zu 6000rpm, macht das schonmal 250.000 Bits/Sec.
In Falks Link steht: Die Auswertung eines Drehgebers macht man am besten
in einem Timer-Interrupt, der mit einer festen Frequenz ausgeführt wird.
Die Abtastfrequenz muss so hoch sein, dass bei maximaler Drehzahl
zwischen zwei Codewechseln mindestens 1 Abtastung erfolgt, besser jedoch
mehr.
Interrupt und Co sind Neuland für mich.
250.000 ist schon ne ordentliche Hausnummer...
@ Lazlo Panaflex (Gast)
>Habe gerade aufs Datenblatt geschaut; der Encoder haut 2500 Bits raus.>Bei bis zu 6000rpm, macht das schonmal 250.000 Bits/Sec.
Hast du eine Linka auf das Datenblatt oder kannst du es als Anhang
posten?
>Interrupt und Co sind Neuland für mich.
Tja.
>250.000 ist schon ne ordentliche Hausnummer...
Ziemlich viel. Rein in Software wird das wahrscheinlich nix. Da muss ein
Hardwaredecoder her.
MfG
Falk
Das ist ein - auf einem MCG Servo Motor aufgeflanschter - Encoder aus
einem in der Halbleiterindustrie verwendeten Handlingsystem (Intel).
Was bringt es, wenn ich nur A oder B abfrage? Ich brauche beide um die
Drehrichtung festzustellen und wo hab ich denn nur einen Puls/Umdrehung,
wenn ich nur A oder B nutze? A sowie B geben um jeweils 90° verschoben
(elektrisch, nicht mechanisch) 2500 - in Worten: Zweitausendfünhundert -
Pulse pro Umdrehung aus. Ich muss also mit mindestens 500kHz abtasten.
Mutter sagte bereits: Wenn man keine Ahnung hat, einfach mal die Fresse
halten ;)
@Falk: Hier das Datenblatt: http://www.quantumdev.com/pdf/qd145.pdf
Könntest du das mit dem Hardwaredecoder bitte etwas präzisieren, bzw mir
einen Link zu entsprechenden Infos posten?
>> Mutter sagte bereits: Wenn man keine Ahnung hat, einfach mal die Fresse>> halten ;)
Deine Mutter hätte besser daran getan dir Manieren beizubringen.
@ Lazlo Panaflex (Gast)
>Was bringt es, wenn ich nur A oder B abfrage?
Nix. Travel Rec meint wohl eher den Indeximpuls. Für eine
Drehzahlmessung reicht es, zum Positionieren natürlich nicht.
>Mutter sagte bereits: Wenn man keine Ahnung hat, einfach mal die Fresse>halten ;)
Naja, inhaltlich richtig, Form diskussionswürdig.
>Könntest du das mit dem Hardwaredecoder bitte etwas präzisieren, bzw mir>einen Link zu entsprechenden Infos posten?
Hab ich doch schon. Der Artikel Drehgeber ist dein Freund.
MfG
Falk
Naja ein Timerinterrupt aller 2µs ist etwas ungünstig. Ein Pin Interrupt
ist auch nicht schön. Da muss deine Interruptroutine schon verdamt kurz
sein weil du sonst garnichts machen kannst.
Dreht der Motor nur in eine Richtung? Wenn ja würde ich ein XOR Gatter
davorklemmen und ein Timer mit externen Takt benutzen. Wenn dir die
Hälfte der Auflösung ausreicht, dann kannst du auch direkt ein Pin
anschließen, ohne Gatter.
Ansonsten haben, glaub ich, die XMegas einen Hardware Decoder für solche
Anwendungen. Die machen die Auswertung also nebenbei ohne das dafür
Takte benötigt werden.
Manieren hin oder her; Montags liegt meine Reizschwelle ziemlich
niedrig. Vielleicht hätte meine Mutter Sonntags weniger oft Kohleintopf
kochen sollen, dann wäre ich Montags nicht so grantig. Und hätte weniger
Blähungen.
Um die Quadratursignale auszuwerten, gab/gibt es Bausteine wie den
74HCT12024, der 24Bit zählen kann sowie kaskadierbar ist.
Eine andere Möglichkeit, die Signale zu verwurschteln, wäre ein FPGA.
Controller von Renesas, zum Beispiel die H8S-Reihe, haben zwei Hardware
Quadraturdekoder auf dem Chip.
Wie schnell ein Xmega die Signale aufbereiten und verwenden kann, weiß
ich nicht. Ein ATmega48 mit 20MHz schafft es jedoch, 250kHz Signale zu
zählen. Die Zählroutinen müssen aber in Assembler geschrieben und
optimiert werden.
Persönlich würde ich einen Renesas Controller nehmen. Eine günstige
Lösung wäre aber auch ein ATmega48, der nur als 'Vorteiler' programmiert
wird und Ausgangssignale wie Takt und Richtung liefert, die z. B. Faktor
10-100 untersetzt sind, und mit einem anderen µC ausgewertet werden.
Das hängt aber davon ab, wie genau die Position bestimmt werden soll.
Die Eingangsfrage nach der Schnelligkeit des ADC hat jedoch sehr
irritiert.
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.