Hallo, ich bin zur Zeit damit beschäftigt eine Platine zu entwickeln. Dabei kommt ein STM32F4xx zum Einsatz. An Diesen werden über TIM2 bzw. TIM5 je ein Weggeber mit Quadratureencoder angeschlossen. Wenn ich in die eine Richtung drehe wird der Zähler grösser in die andere Richtung kleiner. Das QEI funktioniert anscheinend und ist wohl soweit richtig konfiguriert. Ich versuche gerade herauszufinden, wie schnell ich mich maximal bewegen darf, damit das QEI keine Impulse verpasst und ich immmernoch richtig rechnen kann. Die maximale Frequenz hängt im Wesentlichen von zwei Faktoren ab: 1) Wie schnell kann der Encoder noch saubere Rechtecke ausgeben? 2) Bis zu welcher Geschwindigkeit kann der STM32F4xx diese Rechtecke noch ohne Probleme interpretieren? Zu 1) gibt das Datenblatt des Encoders Auskunft. Bei 2) bin ich mir im Moment überhaupt nicht sicher und eventuell suche ich an der falschen Stelle oder es erschliesst sich mir gerade nicht. Meine 'Idee': Die maximale Frequenz hängt von der Einstellung des Registers TIMx_CCMR1->IC1F bzw. TIMx_CCMR1->IC2F ab. Prizipiell ergeben sich dann 3 Möglichkeiten: 1) keine Filterung (0) 2) abhängig von fck_int (1-3) 3) abhängig von fdts (4-16) Da fdts, abgesehen von einem Vorteiler (s. TIMx_CR1->CKD), gleich fck_int ist, kann 2) und 3) gleich betrachtet werden: Hier muss für mindestens N Pulse der entsprechenden Clocksource das Signal anliegen, bevor eine Änderung erkannt wird. Im schlimmsten Fall verpasst man gerade so den ersten Impuls. Aus diesem Grund sollte der Encoder mit maximal (f_clk/(N+1))Hz den Zustand wechseln. Für den 1) Fall, ohne Filterung, gilt prinzipiell das Gleiche. Für N muss man den Wert 1 annehmen (die Zustandsänderung muss ja wenigstens 1-mal gesehen werden). Laut Datenblatt gehören beide Timer zu APB1 (ich hab mir das durch das RCC_APB1ENR Register erschlossen. Würde mich freuen, wenn jemand einen Tipp hat wie man das einfacher erschliessen kann). STM32CubeMX sagt mir, dass die Timer in APB1 bei meiner Konfiguration mit 84MHz laufen. Wenn ich also keine Filterung vorsehe, wäre die Grenze bei (84MHz/(1+1))Hz = 42MHz zu sehen. Sollte man die Filter immer so stark wie möglich einstellen oder gibt es einen Grund warum eventuell gar ganz auf die Filterung verzichtet wird? Wenn ich weiss, dass der angeschlossene Weggeber mit maximal 300kHz arbeitet, gibt es dann einen Grund die Filterung nur auf 1MHz statt 300kHz einzuschränken? Vielen Dank im Vorraus. CU, Jay
Hallo Jay, bei einer Interrupt gesteuerten Auswertung eines inkrementalen Encoders mit ABZ-Signalen ist entscheidend ob ein minimaler Flankenabstand von A/B definiert ist. Wenn nicht kommt es bei Vibrationen zum Jitter und auf diese schnellen Änderung kann die S/W nicht reagieren. Lösung ist ein Encoder-Interface Baustein der über SPI oder parallel ausgelesen werden kann. Eine andere Option ist ein Filter für die A/B-Signale die den Jitter verhindern. Entweder in externer Logik oder der flankengetriggerte Interrupt-Eingang hat einen programmierbaren Filter. Die Richtungserkennung aund logische Überprüfung in S/W erfordert Zeit. Diese Ausführungszeit ist hier der limitierende Faktor für maximale Frequenz der A/B-Signale. Welchen Encoder verwendest Du denn? Gruß Horst
Horst H. schrieb: > bei einer Interrupt gesteuerten Auswertung Darum geht es doch garnicht. Jay schrieb: > Sollte man die Filter immer so stark wie möglich einstellen oder gibt es > einen Grund warum eventuell gar ganz auf die Filterung verzichtet wird? Die Filterung kannst Du weglassen, wenn Deine Signale steile (ns) Flanken haben. > Wenn ich weiss, dass der angeschlossene Weggeber mit maximal 300kHz > arbeitet, gibt es dann einen Grund die Filterung nur auf 1MHz statt > 300kHz einzuschränken? Du mußt hier nichts auf "Resonanz" einstellen, sondern laß noch Luft nach oben. Die Filterung ist unkritisch.
Hallo, vielen Dank m.n. Kannst du, oder natürlich auch jemand anderes, noch ein paar Worte zu meiner "Interpretation" des Datenblattes sagen. Ob die mir hergeleiteten 42MHz prinzipiell richtig sind? CU, Jochen
Im stm32f4 reference manual steht dazu folgendes:
> Encoder interface mode acts simply as an external clock with direction selection
Im stm32f407 device datasheet steht dann noch im "TIM timer
characteristics" (kap. 5.3.18): f_EXT sei maximal 42MHz für APB1-Timer.
Ich glaube aber nicht, dass das etwas mit dem internen Clock zu tun hat,
sondern eher mit dem Design des TIM-Blocks.
Genaue Angaben sind wohl weder dem Datenblatt noch dem Ref.-Manual zu entnehmen. Analog zu anderen Hardware-Decodern gehe ich immer von Taktfrequenz/4 aus, was in diesem Fall Flankenwechsel mit 21 MHz zulassen würde. Du liegst mit Deinen 300 kHz aber soweit darunter, daß eine Diskussion um einen exakten Wert völlig nebensächlich ist. Falls Du Langeweile haben solltest, kannst Du ja per DMA passende Quadratursignale erzeugen und sehen, ab wann sich der Zähler 'verschluckt'.
Hallo, vielen Danke euch beiden. Vorallem dass es für den externen Takt eine andere Grenze gibt habe ich vollkommen übersehen. @m.n.: Das ich mit meinem 300kHz-Weggeber ganz weit auf der sicheren Seite bin habe ich mir schon zusammengereimt. Ich weiss aber jetzt schon, dass irgendwann die Frage aufkommt, ob man da nicht einen anderen 'viel cooleren' Sensor anschliessen könnte, der dann viel höher auflöst und dementsprechend das Signal viel schneller ist. Bevor ich dann wieder einen Thread eröffnen muss und nachfrage dachte ich mir, dass es vielleicht ganz sinnvoll ist, wenigstens grob sagen zu können 'JA', 'NEIN', 'Muss man halt mal testen!'. Ausserdem hoffe ich dadurch, in Zukunft, mit dem Datenblatt besser um gehen zukönnen. CU, Jay
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.