Forum: Mikrocontroller und Digitale Elektronik STM32F4xx QEI maximale Frequenz


von Jay (Gast)


Lesenswert?

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

von Horst H. (horst_h44)


Lesenswert?

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

von m.n. (Gast)


Lesenswert?

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.

von Jay (Gast)


Lesenswert?

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

von Little B. (lil-b)


Lesenswert?

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.

von m.n. (Gast)


Lesenswert?

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'.

von Jay (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.