mikrocontroller mit mehr als einem Quadrature-Decoder Timer

M

Matthias Weingart

Guest
Hi,

ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.ä.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
glücklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und häufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert. D.h. ich will da lieber ne Hardware im Controller,
die das macht.
Welche Controller haben (möglichst mehrere) Timer, die auch Quadratur-
Dekodierung können?
Ich hab schon recherchiert, leider ist das nicht leicht rauszufinden. Da das
Feature kaum in den Filtern der Distris oder Hersteller auftaucht, muss man
sich erst durch Datenblätter oder Appnotes kämpfen...
Also beim STM32 können es nur die "Advanced timer" und da hat man oft nur
einen davon drin, in den größeren Controllern aber manchmal sogar schon zwei
und ganz selten sogar drei.
https://www.st.com/resource/en/application_note/dm00042534.pdf

Welche Controller gibt es noch? (Mir reichen da Typen mit 16 MHz Takt und ein
paar kB RAM, gern auch mehr, Hauptsache sie sind keine Stromschlucker ;-).

M.
--
 
Am 19.09.2019 um 08:36 schrieb Matthias Weingart:

> Also beim STM32 kĂśnnen es nur die "Advanced timer" und da hat man oft nur

Bist Du sicher?
Ich hab jetzt mal spontan in das Datenblatt des STM32F7xx und STM32L4xx
reingeschaut, und dort unterstĂźtzen die Advanced-Timer und die
General-Purpose-Timer quadrature Encoder.
Und davon gibts dann schon mehr als 2.

einen davon drin, in den größeren Controllern aber manchmal sogar schon zwei
und ganz selten sogar drei.
https://www.st.com/resource/en/application_note/dm00042534.pdf

Welche Controller gibt es noch? (Mir reichen da Typen mit 16 MHz Takt und ein
paar kB RAM, gern auch mehr, Hauptsache sie sind keine Stromschlucker ;-).

Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstĂźtzen.
 
=?UTF-8?Q?Thorsten_B=c3=b6ttcher?= <thorsten_nospam@gmx.net>:

Am 19.09.2019 um 08:36 schrieb Matthias Weingart:

Also beim STM32 kĂśnnen es nur die "Advanced timer" und da hat man oft
nur

Bist Du sicher?

Nee eben nicht. Drum frag ich ja auch hier :). In der unten verlinkten App-
Note steht das leider auch wieder nicht eindeutig drin - d.h. ich hätte auch
noch die Datenblätter wälzen müssen und dabei kenne ich mich mit den Dinger
noch gar nicht aus.

> Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstĂźtzen.

Super, danke.

M.
--
 
Am 19.09.2019 um 10:20 schrieb Matthias Weingart:
=?UTF-8?Q?Thorsten_B=c3=b6ttcher?= <thorsten_nospam@gmx.net>:

Am 19.09.2019 um 08:36 schrieb Matthias Weingart:

Also beim STM32 kĂśnnen es nur die "Advanced timer" und da hat man oft
nur

Bist Du sicher?

Nee eben nicht. Drum frag ich ja auch hier :). In der unten verlinkten App-
Note steht das leider auch wieder nicht eindeutig drin - d.h. ich h�tte auch
noch die Datenbl�tter w�lzen m�ssen und dabei kenne ich mich mit den Dinger
noch gar nicht aus.

Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstĂźtzen.

Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StĂźck hin.

Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.

https://www.st.com/en/development-tools/stm32cubemx.html

Gruß Andreas
 
Am 19.09.2019 um 10:43 schrieb Andreas Fecht:
Am 19.09.2019 um 10:20 schrieb Matthias Weingart:
=?UTF-8?Q?Thorsten_B=c3=b6ttcher?= <thorsten_nospam@gmx.net>:

Am 19.09.2019 um 08:36 schrieb Matthias Weingart:

Also beim STM32 kĂśnnen es nur die "Advanced timer" und da hat man oft
nur

Bist Du sicher?

Nee eben nicht. Drum frag ich ja auch hier :). In der unten verlinkten App-
Note steht das leider auch wieder nicht eindeutig drin - d.h. ich h�tte auch
noch die Datenbl�tter w�lzen m�ssen und dabei kenne ich mich mit den Dinger
noch gar nicht aus.

Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstĂźtzen.

Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StĂźck hin.

Ich hab das Datenblatt nur Ăźberflogen, kann sein dass nicht alle von den
Timern das unterstĂźtzen. Aber definitiv gehts auch mit den GP-Timern,
und nicht nur mit den Advanced.
 
Andreas Fecht <forum@aftec.de>:

Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstĂźtzen.

Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StĂźck hin.

Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.

https://www.st.com/en/development-tools/stm32cubemx.html

Mhh ja, aber dabei bin ich doch gerade erst dabei mir einen neuen Controller
auszusuchen. Da wollte ich eigentlich ohne Installationsorgien auskommen. ;-)
AT XMEGA und Pics kommen ja auch noch in Frage und bestimmt viele andere mehr
- nur die MSP430-Timer z.B. können das gar nicht ;-).

M.
--
 
"Matthias Weingart" <mwnews@pentax.boerde.de> schrieb im Newsbeitrag
news:XnsAACF577EAFF4DAlwLookOnTBrightSide@penthouse.boerde.de...

ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.ä.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller
(im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
glücklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und häufigen Interrupts, bzw. man darf
dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert.

Na ja, schlechte Programmierung, man kann bereits mit einem AVR vier Encoder
mit 1 Mio Abtastungen pro Sekunde einlesen.

D.h. ich will da lieber ne Hardware im Controller, die das macht.
Welche Controller haben (möglichst mehrere) Timer, die auch Quadratur-
Dekodierung können?

Siehe
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29

Der H8/3003 und H8S (2 Kanäle) H8SX (4 Kanäle), ATXmega (3 Kanäle bis Osz/4)
und STM32F4 (6 Kanäle) machen das in Hardware
--
MaWin, Manfred Winterhoff, mawin at gmx dot net
Homepage http://flexiblebird.bplaced.net/
dse-FAQ: http://dse-faq.elektronik-kompendium.de/
 
Am 19.09.2019 um 08:36 schrieb Matthias Weingart:

ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.ä.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders
glücklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und
belastet die CPU mit recht vielen und häufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert. D.h. ich will da lieber ne Hardware im Controller,
die das macht.
Welche Controller haben (möglichst mehrere) Timer, die auch Quadratur-
Dekodierung können?

Quadratur-Dekodierung ist ein Klacks für jeden Controller. Deiner
Beschreibung entnehme ich, daß Du möglicherweise das Meßverfahren ändern
solltest, mit Interrupt vom Encoder statt von einem Timer?

Wieviele Encoder hast Du denn, mit wievielen Impulsen pro Sekunde maximal?

DoDi
 
Am 19.09.2019 um 12:17 schrieb Hans-Peter Diettrich:

> Interrupt vom Encoder statt von einem Timer?

Potentiell prellende Encoder direkt an einen Interrupt zu hängen ist meist
keine gute Idee.

Bernd
 
"Hans-Peter Diettrich" <DrDiettrich1@aol.com> schrieb im Newsbeitrag
news:guh3a1F6og6U1@mid.individual.net...

Quadratur-Dekodierung ist ein Klacks für jeden Controller. Deiner
Beschreibung entnehme ich, daß Du möglicherweise das Meßverfahren ändern
solltest, mit Interrupt vom Encoder statt von einem Timer?

Das ist ungefähr das blödeste, was man machen kann,
denn wenn es dann wirklich mal prellt, wird der Controller mit
haufenweise Interrupts überfahren, schneller als
er sie abarbeiten kann. Welche er verliert ist Zufall.

Man muss dann vorher per Hardware entprellen, damit
kann man sich die Software-Entprellung ganz sparen.
--
MaWin, Manfred Winterhoff, mawin at gmx dot net
Homepage http://flexiblebird.bplaced.net/
dse-FAQ: http://dse-faq.elektronik-kompendium.de/
 
"MaWin" <me@private.net>:

"Hans-Peter Diettrich" <DrDiettrich1@aol.com> schrieb im Newsbeitrag
news:guh3a1F6og6U1@mid.individual.net...

Quadratur-Dekodierung ist ein Klacks für jeden Controller. Deiner
Beschreibung entnehme ich, daß Du möglicherweise das Meßverfahren ändern
solltest, mit Interrupt vom Encoder statt von einem Timer?

Das ist ungefähr das blödeste, was man machen kann,
denn wenn es dann wirklich mal prellt, wird der Controller mit
haufenweise Interrupts überfahren, schneller als
er sie abarbeiten kann. Welche er verliert ist Zufall.

Man muss dann vorher per Hardware entprellen, damit
kann man sich die Software-Entprellung ganz sparen.

Naja mit Port-Interrupts - das hab ich schön bleiben lassen. Zuverlässig
funktioniert Quadraturdekodierung nur, wenn man die Signale mit einem festen
Takt abtastet - dann stört auch prellen nicht wirklich - da wackelt dann der
Wert nur um ein Digit hin- und her, es gehen keine Zählimpulse verloren - was
ihmo das wichtigste ist. (sofern nur eine Flanke prellt, wenn natürlich beide
gleichzeitig Prellen ist das ganz schön böse ;-).

M.
--
 
Andreas Fecht <forum@aftec.de>:

Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstĂźtzen.

Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StĂźck hin.

Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.

https://www.st.com/en/development-tools/stm32cubemx.html

Mhh, hab das jetzt mal installiert. Man muss aber trotzdem wissen, an welchen
Flags man drehen muss? Auf Anhieb sehe ich da nicht, welche Register ich
verändern muss, um einen Timer auf Quadrature-Modus zu bekommen.
Was hast Du da eingestellt?

M.
--
 
Am 19.09.2019 um 12:35 schrieb Bernd Laengerich:
Am 19.09.2019 um 12:17 schrieb Hans-Peter Diettrich:

Interrupt vom Encoder statt von einem Timer?

Potentiell prellende Encoder direkt an einen Interrupt zu hängen ist
meist keine gute Idee.

Prellende Encoder sind eine dumme Idee. Prellen können AFAIR nur
mechanische Kontakte, und die sind so langsam, daß sie per Software
entprellt werden können. Wenn das so nicht mehr funktioniert, ist ein
Entprellen auch mit Hardware nicht mehr möglich. Andere Encoder können
nicht prellen, eignen sich also für eine Abfrage per Interrupt.

DoDi
 
Matthias Weingart <mwnews@pentax.boerde.de> wrote:

ich hab immer mal wieder Quadratur-Encoder (Drehgeber u.?.) an einen
Mikrocontroller anzuschliessen. Irgendwie geht das mit jedem Controller (im
schnellen Timerinterrupt die zwei Pins einlesen und dekodieren), besonders

Es hindert dich keiner auch mehr Pins gleichzeitig einzulesen wenn du
sie geschickt an einem 8Bit-Port verteilst.

gl?cklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und

Es gibt sicher Anwendungen wo man einen Hardwareencoder zu schaetzen
weiss, aber IMHO eher selten. Einfach deshalb weil die Mechanik nicht
die schnellste ist.

belastet die CPU mit recht vielen und h?ufigen Interrupts, bzw. man darf dann
im Hauptprogramm tunlichst nie Interrupts sperren, damit der Encoder
fehlerfrei funktioniert. D.h. ich will da lieber ne Hardware im Controller,

Kann das sein das du nur Controller kennst wo man die
Interruptprioritaeten nicht frei einstellen kann?

die das macht.
Welche Controller haben (m?glichst mehrere) Timer, die auch Quadratur-
Dekodierung k?nnen?

Ich kann jetzt aus dem Kopf keine Nummern nennen, aber ich bin mir
sicher das bei Renesas bei den Industriekontrollern gesehen zu haben.

Olaf
 
Am 19.09.2019 um 15:39 schrieb Matthias Weingart:

> Naja mit Port-Interrupts - das hab ich schön bleiben lassen.

Ja wenn Du so ein Experte bist, kann ich diesen Thread ja killen.

DoDi
 
Am 19.09.2019 um 15:35 schrieb Matthias Weingart:
Andreas Fecht <forum@aftec.de>:

Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstĂźtzen.

Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StĂźck hin.

Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.

https://www.st.com/en/development-tools/stm32cubemx.html

Mhh, hab das jetzt mal installiert. Man muss aber trotzdem wissen, an welchen
Flags man drehen muss? Auf Anhieb sehe ich da nicht, welche Register ich
ver�ndern muss, um einen Timer auf Quadrature-Modus zu bekommen.
Was hast Du da eingestellt?

M.
Klick auf einen Timer, der das unterstĂźtzt (z.B. TIM2).
Bei Combined Channels kann man dann "Encoder Mode" auswählen.

Gruß Andreas
 
Am 19.09.19 um 15:39 schrieb Matthias Weingart:

Naja mit Port-Interrupts - das hab ich sch�n bleiben lassen. Zuverl�ssig
funktioniert Quadraturdekodierung nur, wenn man die Signale mit einem festen
Takt abtastet - dann st�rt auch prellen nicht wirklich - da wackelt dann der
Wert nur um ein Digit hin- und her, es gehen keine Z�hlimpulse verloren - was
ihmo das wichtigste ist. (sofern nur eine Flanke prellt, wenn nat�rlich beide
gleichzeitig Prellen ist das ganz sch�n b�se ;-).

Dann musst Du die Entprellung noch optimieren... Irgendwann ist dann
natĂźrlich die Grenze in Bezug auf die Drehgeschwindigkeit erreicht.

Gerald
 
Am 19.09.2019 um 15:39 schrieb Matthias Weingart:

> Naja mit Port-Interrupts - das hab ich schÜn bleiben lassen. Zuverlässig

Ich hab das vor Jahren mal so gemacht, 3 Drehgeber in einem System,
Interrupt auf die steigende Flanke. Im Interrupt den 2. Pin gelesen und
daran entschieden ob ich inkrmentieren oder dekrementieren muss.
Das hat immer Problemlos funktioniert, und ist IMHO noch heute im Einsatz.

funktioniert Quadraturdekodierung nur, wenn man die Signale mit einem festen
Takt abtastet - dann stĂśrt auch prellen nicht wirklich - da wackelt dann der

Naja, es geht auch einfacher, ohne den Prozessor ständig zu unterbrechen.
 
Andreas Fecht <forum@aftec.de>:

Am 19.09.2019 um 15:35 schrieb Matthias Weingart:
Andreas Fecht <forum@aftec.de>:

Z.B. STM32L072, 6 GP-Timer, die Drehgeber unterstĂźtzen.

Ich hab' grad mal durchgespielt. Ich krieg bei dem nur 4 StĂźck hin.

Um das STM32-Zeuch schnell auszuprobieren,
solltest Du den STM32CubeMX benutzen.

https://www.st.com/en/development-tools/stm32cubemx.html

Mhh, hab das jetzt mal installiert. Man muss aber trotzdem wissen, an
welchen Flags man drehen muss? Auf Anhieb sehe ich da nicht, welche
Register ich ver�ndern muss, um einen Timer auf Quadrature-Modus zu
bekommen. Was hast Du da eingestellt?

M.

Klick auf einen Timer, der das unterstĂźtzt (z.B. TIM2).
Bei Combined Channels kann man dann "Encoder Mode" auswählen.

Ahhh, da steckt das! Danke. Sogar der LowPower-Timer kann Encoder-Mode.
Damit kann dann z.B. sogar der nur 32 pinnige STM32L0 sogar 4 Encoder (sofern
man einen Timer nicht für andere Zwecke braucht).

M.
--
 
olaf <olaf@criseis.ruhr.de>:

Matthias Weingart <mwnews@pentax.boerde.de> wrote:

gl?cklich bin ich dabei aber meist nicht - denn das ist zu langsam (der
Encoder verliert dann doch mal Impulse, weil man zu schnell dreht) und

Es gibt sicher Anwendungen wo man einen Hardwareencoder zu schaetzen
weiss, aber IMHO eher selten. Einfach deshalb weil die Mechanik nicht
die schnellste ist.

Naja, irgendwie kommt man dann doch oft schneller an die Grenzen des Systems
als man vorher denkt ;-). Hatte mal einen Linearencoder - Auflösung 10um -
wenn man den ein wenig schneller bewegte, verlor der gleich Impulse trotz
100kHz Abtastrate. Da hatte ich mich "verschätzt" und eine Baustelle mehr.
Das Encodersystem konnte mit 10MHz liefern! Da wäre ein Hardwreencoder toll
gewesen.

Kann das sein das du nur Controller kennst wo man die
Interruptprioritaeten nicht frei einstellen kann?

Naja das nützt ja nix, wenn in der Hauptschleife
DINT;
"tu was kritisches";
EINT;
gekapselt werden muss. Z.B. wenn man 64bit Variablen auf einem 8 bit System
sauber und sicher lesen will, die in einem Interrupt verändert werden.

Ich kann jetzt aus dem Kopf keine Nummern nennen, aber ich bin mir
sicher das bei Renesas bei den Industriekontrollern gesehen zu haben.

Ja stimmt, Renesas war auch immer toll bei der Ausstattung der Controller.

M.
--
 

Welcome to EDABoard.com

Sponsor

Back
Top