Forum: Mikrocontroller und Digitale Elektronik Magnetic Encoder mit 10 Mhz auswerten


von Zulu (Gast)


Lesenswert?

Hallo zusammen,

ich möchte während einer Messung im Bereich Maschinenbau einen „linear 
incremental magnetic encoder“ einsetzen. 
(http://www.rls.si/products/linear-magnetic-encoders/rlc2hd-miniature-linear-pcb-level-incremental-magnetic-encoder 
/ ca 40 €) Dieser soll eine nahezu sinusförmige Hubbewegung 
hochauflösend mit 5 µm erfassen. Bei einer Amplitude von 10 mm ergeben 
sich 4000 Schritte, sprich 12 bit. Problematisch ist dabei die Abtastung 
der hohen Maximalgeschwindigkeit von bis zu 20 m/sec. Laut Datenblatt 
des Sensors 
(http://www.rls.si/fileuploader/download/download/?d=0&file=custom%2Fupload%2FData_sheet_RLC2HD_miniature_PCB_level_incremenal_magnetic_encoder.pdf) 
und rechnerisch nachvollziehbar ist nämlich dafür eine minimale 
Abtastfrequenz von ca. 10 MHz erforderlich (4x Quadrature Decoding). Die 
aktuelle Position möchte ich mit 10 kHz abfragen.

In diesem Beitrag wurde eine Lösung mit 9 Takten für einen einzelnen 
Encoder vorgestellt:
Beitrag "Re: Versetzte Rechtecksignale auswerten, kein drehgeber" 
(letzter Beitrag). Das wären dann 90 MHz Taktfrequenz. In Frage käme 
nach meinen Recherchen daher ein STM32 mit 100 MHz. Dieser soll auch ein 
Encoder Interface besitzen.

Eine weitere Möglichkeit sah ich in den Bausteinen HCTL-2000, HCTL-2016, 
HCTL-2020, die wohl mit 14 MHz getaktet 
werden(http://pdf.datasheetcatalog.com/datasheet/hp/HCTL-2000.pdf). Der 
interne digitale Filter braucht laut Datenblatt jedoch drei Takte, um 
ein gültiges Signal zu generieren. Das Mindert die effektive Abtastrate 
auf ca. 5 MHz.

Ich würde daher auf den STM32 setzen, habe jedoch nur Erfahrung mit 
Atmegas, und kenne die STM32 noch nicht.

Ich würde mich sehr über Ideen und Vorschläge zur Umsetzung der 
Signalerfassung freuen.

Vielen Dank und viele Grüße
Zulu

von m.n. (Gast)


Lesenswert?

Vergiß alle Vorschläge, die das per Software-Dekoder erledigen wollen, 
insbesondere diejenigen, die nur Erfassen aber nichts ausgeben können 
;-)

Wenn Du möchtest, könnte ich Dich mit THCT12024 versorgen, die man auch 
mit einem AVR auslesen kann.
STM32 wäre eine Alternative. Da gibt es Nucleo-Board für wenig Geld und 
dennoch hoher Leistung. Zum Beispiel STM32F411-nucleo.

von Georg (Gast)


Lesenswert?

Zulu schrieb:
> Ich würde mich sehr über Ideen und Vorschläge zur Umsetzung der
> Signalerfassung freuen.

Wenn die HCT2xxx nicht schnell genug sind, muss man eben mit schnellerer 
Hardware arbeiten, mit programmierbarer Logik ist das kein Problem. Ich 
würde einen Baustein nehmen, der genügend Register für einen 
32bit-Zähler hat plus Zwischenspeicher zum synchronen Auslesen, das ist 
heute ja kein Problem.

Auswertung per Software ist in dem Bereich einfach unsinnig, auch wenn 
man Controller mit GHz bekommt.

Georg

von noti (Gast)


Lesenswert?

Hallo Zulu,

5µm Auflösung bei 4-fach Auswertung ergeben 20µm pro Phase (A oder B), 
d.h. bei 20m/s 1MHz.

Für erste Versuche kann ich dir den STM32F4 Discovery empfehlen: für 
wenig Geld kannst du die Schnittstelle testen. Wir haben öfters 
vergleichbare Aufgabenstellungen und nehmen ebenfalls gerne solche 
Testboards als "Sensortester" oder auch um den Sensor zu emulieren.
Ich habe früher mit TI gearbeitet (bzw. damals Luminary Micro), deren 
"Quadrature Encoder Interface" hat mir sehr gut gefallen. Bei ST läuft 
alles unter "Timer" und ist ev. anfangs schwerer zu verstehen (den 
Aufwand aber definitiv wert - die Timer gut zu verstehen ist eine 
wichtige Grundlage).

Aufpassen bei der elektrischen Schnittstelle: die Anwendung deutet auf 
ein industrielles Umfeld (lange Leitungen, Störungen: differentielle 
Übertragung, Schutzbeschaltung...). Für erste Tests am Schreibtisch 
reicht aber eine einfache Auswertung der beiden Phasen an den 
5V-toleranten Eingängen des µC...

von Zulu (Gast)


Lesenswert?

Vielen Dank für die Beiträge.

-> STM32
Das besagte Nucleo Board (http://www.watterott.com/de/Nucleo-STM32F411) 
hat eine STM32F411RE. Das Datenblatt der STM32F411RE 
(http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00115249.pdf, 
S. 27, S. 101) spricht von 100 MHz, Max. timer clock, bzw 50 MHz Max. 
interface clock. Im Reference Manual 
(http://www.st.com/web/en/resource/technical/document/reference_manual/DM00119316.pdf, 
S.271) fand ich die Funktionsbeschreibung des Encoders, der genau das 
macht, was er soll bzw. was ich benötige.

Die STM32F4-Discovery scheint einen ähnlichen Prozessor, wie das Nucleo 
Board zu besitzen.

Letztendlich würde ich den Encoder-Counter-Register mit den 10kHz 
auslesen, und den Wert per USART an den PC versenden.

-> THCT12024
Die THCT12024 scheint auch sehr alt zu sein, was aber nichts bedeuten 
muss. Das gescannte Datenblatt ist schwer lesbar, aber ich vermute, dass 
hier auch 10 Mhz erreicht werden. Bevorzugen würde ich die STM32

-> Programmierbare Logik
Ich glaube, dass der Aufwand mit dem STM32 für mich geringer wäre und 
die Einarbeitung in die STM32 für mich mehr Gewinn bringen würde.

> 5µm Auflösung bei 4-fach Auswertung ergeben 20µm pro Phase
> (A oder B), d.h. bei 20m/s 1MHz.
Nach meinem Verständnis bedeutet die 4-fach Auswertung, dass alle 
Flanken einer Periode zur Auswertung und zur Erhöhung der Auflösung 
herangezogen werden. Ja, 20µm entspricht einer Periode. 5µm einen 
viertel, da wären wir bei 4 MHz Abtastrate, und der Hersteller des 
Sensors rechnet noch einen Faktor von 0,4666 hinzu, wodurch 8.5727 MHz 
bzw. gerundet meine 10 MHz zu Stande kommen.

> Aufpassen bei der elektrischen Schnittstelle: Die Anwendung deutet
> auf ein industrielles Umfeld hin
Ja, der Versuch soll in einem Prüfstand laufen, wobei jedoch die 
Elektronik eine Batterieversorgung bekommt und ca 10 cm Abstand zum 
Sensor hat. Alles in einem Metallgehäuse. Ich rechne nicht mit großen 
Störungen.

> 5V Tolerant
…ist schon mal gut zu wissen. An einem Spannungsteiler soll es nicht 
scheitern.

Nach meinem Eindruck müsste die Messung mit dem Nucleo Board oder 
STM32F4-Discovery möglich sein. Oder übersehe ich da etwas?

von Falk B. (falk)


Lesenswert?

@ Zulu (Gast)

>Letztendlich würde ich den Encoder-Counter-Register mit den 10kHz
>auslesen, und den Wert per USART an den PC versenden.

Und der kann das mit 10 kHz sinnvoll verareiten?

>-> Programmierbare Logik
>Ich glaube, dass der Aufwand mit dem STM32 für mich geringer wäre und
>die Einarbeitung in die STM32 für mich mehr Gewinn bringen würde.

so ist es. Vergiss die Sonderchips und AVR-Softwaregeschichte, das war 
mehr eine sportliche Herausforderung als prakrtisch wirklich sinnvolle 
Lösung. Nimm einen moderen Controller, meinetwegen STM32 mit eingebautem 
Quadraturdecoder und fertig. Einfacher und kompakter geht es nicht.

>Nach meinem Verständnis bedeutet die 4-fach Auswertung, dass alle
>Flanken einer Periode zur Auswertung und zur Erhöhung der Auflösung
>herangezogen werden.

Ja.

> Ja, 20µm entspricht einer Periode. 5µm einen
>viertel, da wären wir bei 4 MHz Abtastrate, und der Hersteller des
>Sensors rechnet noch einen Faktor von 0,4666 hinzu,

Sicherheitsfaktor.

> wodurch 8.5727 MHz
>bzw. gerundet meine 10 MHz zu Stande kommen.

Scheint zu passen.

>> 5V Tolerant
>…ist schon mal gut zu wissen. An einem Spannungsteiler soll es nicht
>scheitern.

Vergiss es. Nimm einen passenen Pegelwandler. 74HC4050 & Co.

: Bearbeitet durch User
von m.n. (Gast)


Lesenswert?

Zulu schrieb:
> -> THCT12024
> Die THCT12024 scheint auch sehr alt zu sein, was aber nichts bedeuten
> muss. Das gescannte Datenblatt ist schwer lesbar, aber ich vermute, dass
> hier auch 10 Mhz erreicht werden.

Das war der wohl letzte Nachfolger des 74LS2000 und kann mit 25 MHz 
getaktet werden. Seine Busschnittstelle paßt recht einfach an einen 8051 
und würde heute mit einem ATmega162, ..64, ..128 usw. direkt ansprechbar 
sein. Wenn man schon AVR einsetzt, wäre damit keine Einarbeitungszeit 
verbunden.

Zulu schrieb:
> Die STM32F4-Discovery scheint einen ähnlichen Prozessor, wie das Nucleo
> Board zu besitzen.

Der ..407 ist der große, ältere Bruder des ..411. Das Nucleo-Board ist 
kompakt, recht unverbaut, hat aber keine FSMC-Schnittstelle aber dennoch 
eine FPU und 128 kB RAM.

von Jojo S. (Gast)


Lesenswert?

Die Cortex-M von NXP haben auch QEI und sind auf verschiedenen Boards 
verbaut die sich gut für solche Projekte nutzen lassen:
LPC1769, LPC1549 oder LPC4088, zB jeweils als LPCXpresso Board von 
Embedded Artists. Der letztere ist dabei die Luxusversion mit Ethernet, 
USB, viel Speicher und Display Interface, der kann wahrscheinlich den 
ganzen Teststand steuern.

Aus dem Datenblatt:
This Quadrature Encoder Interface (QEI) has the following features:
• tracks encoder position.
• increments/ decrements depending on direction.
• programmable for 2X or 4X position counting.
• velocity capture using built-in timer.
• velocity compare function with less than interrupt.
• uses 32-bit registers for position and velocity.
• three position compare registers with interrupts.
• index counter for revolution counting.
• index compare register with interrupts.
• can combine index and position interrupts to produce an interrupt for 
whole and partial
revolution displacement.
• digital filter with programmable delays for encoder input signals.
• can accept decoded signal inputs (clock and direction).

von Zulu (Gast)


Lesenswert?

> Und der kann das mit 10 kHz sinnvoll verarbeiten?
Das ist eine berechtigte Frage. Der PC soll die Daten speichern. 
Gelegentlich wäre eine visuelle Ausgabe schön, aber nicht notwendig. Die 
Auswertung der Daten kann auch nach der Messung erfolgen.

10 kHz * 16bit sind 160kbit/sec. Diese zu übertragen halte ich für nicht 
unmöglich.

Es ist für die Übertragung an den PC eine Funkstrecke per Bluetooth 
(BTM-222, BlueNiceCom  o.ä.) angedacht.

Alternativ dazu wäre eine SD-Karte eine Lösung.

@ Falk Brunner (falk)
Danke für den Hinweis mit den Pegelwandlern. Als Erklärung nehme ich 
mit: Es wurde hier im Forum geschrieben, dass der Spannungsteiler 
zusammen mit parasitären Kapazitäten einen Tiefpass bildet, der bei 
höheren Frequenzen stören kann.

@ m.n. (Gast)
Auch danke für die Erklärung bezüglich THCT12024. Ich sehe den THCT12024 
als Plan-B.

von Falk B. (falk)


Lesenswert?

@ Zulu (Gast)

>10 kHz * 16bit sind 160kbit/sec. Diese zu übertragen halte ich für nicht
>unmöglich.

Die Verwendung der doppelten Verneinung ist im Deutschen nicht unüblich 
;-)

>Es ist für die Übertragung an den PC eine Funkstrecke per Bluetooth
>(BTM-222, BlueNiceCom  o.ä.) angedacht.

Naja, 160 kB/s netto. Und gerade bei Funk braucht man eine 
Fehlersicherung gegen kurzzeitigen Datenausfall etc.

>Alternativ dazu wäre eine SD-Karte eine Lösung.

Das schon eher.

>Danke für den Hinweis mit den Pegelwandlern. Als Erklärung nehme ich
>mit: Es wurde hier im Forum geschrieben, dass der Spannungsteiler
>zusammen mit parasitären Kapazitäten einen Tiefpass bildet, der bei
>höheren Frequenzen stören kann.

Ja.

von m.n. (Gast)


Lesenswert?

Zulu schrieb:
> 10 kHz * 16bit sind 160kbit/sec.

Reicht Dir tatsächlich ein 16 Bit Zähler? Ich nehme immer 32 Bit, wenn 
es um Weggeber geht.
Bei kontinuierlicher Übertragung und mit passendem Protokoll kann man 
allerdings auch nur die Differenz zum vorherigen Wert übertragen, um 
Bandbreite zu sparen.

Jojo S. schrieb:
> Die Cortex-M von NXP haben auch QEI und sind auf verschiedenen Boards
> verbaut die sich gut für solche Projekte nutzen lassen:

Na ja, dann muß ich auch noch die RX von Renesas erwähnen, bei denen der 
Referenzimpuls eleganter gehandhabt werden kann als bei den STM32 ;-)

von Jojo S. (Gast)


Lesenswert?

> 10 kHz * 16bit sind 160kbit/sec.

Das könnte man noch gut per UDP übers Ethernet schicken, Pakete im 1 ms 
Takt mit je 10 Pos.Werten (auch 32 Bit).

m.n. schrieb:
> Na ja, dann muß ich auch noch die RX von Renesas erwähnen, bei denen der
> Referenzimpuls eleganter gehandhabt werden kann als bei den STM32 ;-)

die PIC Freunde melden sich bestimmt auch noch :-)

von m.n. (Gast)


Lesenswert?

Jojo S. schrieb:
> die PIC Freunde melden sich bestimmt auch noch :-)

Hat W.S. nicht Urlaub? ;-)

von Dumdi D. (dumdidum)


Lesenswert?

Zulu schrieb:
> ich möchte während einer Messung im Bereich Maschinenbau einen „linear
> incremental magnetic encoder“ einsetzen.
> 
(http://www.rls.si/products/linear-magnetic-encoders/rlc2hd-miniature-linear-pcb-level-incremental-magnetic-encoder
> / ca 40 €) Dieser soll eine nahezu sinusförmige Hubbewegung
> hochauflösend mit 5 µm erfassen. Bei einer Amplitude von 10 mm ergeben
> sich 4000 Schritte, sprich 12 bit. Problematisch ist dabei die Abtastung
> der hohen Maximalgeschwindigkeit von bis zu 20 m/sec. Laut Datenblatt
> des Sensors
> 
(http://www.rls.si/fileuploader/download/download/?d=0&file=custom%2Fupload%2FData_sheet_RLC2HD_miniature_PCB_level_incremenal_magnetic_encoder.pdf)
> und rechnerisch nachvollziehbar ist nämlich dafür eine minimale

Ist da nicht Seite 4 des Datenblattes ein Problem? 
Maximalgeschwindigkeit ist doch eh nur 3,65m/s.

von Picler (Gast)


Lesenswert?

Dspic33ep serie, zb. dsPIC33EP512MU810 haben zwei Quadrature Encoder 
Interface (QEI).

von Zulu (Gast)


Lesenswert?

Was mir auf Anhieb an dem LPC4088 gefällt ist, dass dort 32 MB SDRAM 
verbaut sind. Der Preis ist relativ hoch, aber wäre noch ok (59 EUR). 
Lieber würde ich aber mit etwas kleinerem anfangen.

Die STM32-H407 von Olimex hat eine SD-card Slot (29.95 EUR).
(https://www.olimex.com/Products/ARM/ST/STM32-H407/open-source-hardware)

Für den STM32 Nucleo gibt es ein Bluetooth-Shield. (15.90 EUR).
(http://www.reichelt.de/?ARTICLE=154313&PROVID=2788&wt_mc=amc141526782519998&&gclid=COC95ruGg8cCFXDHtAod8oIOhw)

Ich denke, dass ich mit dem STM32 Nucleo beginne, und dort den Encoder 
und eine SD-Karte anschließen werde.

Darf ich als Anfänger die Frage stellen, ob CooCox empfehlenswert ist, 
bzw. was Ihr für den Einstieg für einen Toolchain empfehlen würdet?

Vielen Dank.

von m.n. (Gast)


Lesenswert?

Bei den IDEs sind die Geschmäcker verschieden, die 'harten' Profis 
kodieren per Hand!

Vielleicht ist eine Kickstart Version von IAR etwas für Dich. Auch Keil 
bietet soetwas an (beide kostenlos). Beide können interne Variablen zur 
Laufzeit anzeigen. Bei IAR heißt das 'live watch'. Für Dich würde das 
bedeuten, daß Du den Zähler in diesem Fenster ansehen kannst, ohne erst 
Daten zum PC übertragen zu müssen. Falls der Zähler nicht richtig 
arbeiten sollte, kannst Du bei laufendem Programm die Bits in den 
Registern ändern und sofort erkennen, ob die Änderung erfolgreich war.

Die Codebegrenzung auf 32 kB stört nicht, da Du diese Größe bei weitem 
nicht brauchen wirst. Für Deine Anwendung schätze ich den Bedarf auf < 
10 kB Code.

von Zulu (Gast)



Lesenswert?

Ich habe einen kleinen und einfachen Board gefunden, der mir als passend 
erscheint, auch wenn für 30 € relativ wenig auf dem Board ist: "MINI-M4 
for STM32". Er hat den
 - STM32F415RG, mit 64 pins
 - Encoder im Chip,
 - bis zu 168 Mhz,
 - 1MB Flash,

http://www.mikroe.com/mini/stm32/
http://www.libstock.com/projects/view/513/mini-m4-stm32-board-examples

 - Datasheet of STM32f415RG:
http://www.st.com/st-web-ui/static/active/en/resource/technical/document/datasheet/DM00035129.pdf
 - Reference Manual of STM32f415RG:
http://www.st.com/web/en/resource/technical/document/reference_manual/DM00031020.pdf


Der "MINI-M4 for STM32" lässt sich nur per Bootloader programmieren. 
(siehe Seite 6 ff)
http://www.mikroe.com/downloads/get/1946/mini_m4_stm32_user_manual.pdf

Ich habe vor noch einen ST-LINK/V2 kaufen. Kann ich den über einen 
Adapter, siehe Schaltung im Anhang, an den µC anschließen? Braucht man 
diese ganzen Pull-Ups, Pull-Downs? In einer weiteren Schaltung von 
OLIMEX sind nur Pull-Downs bestückt.

@ m.n. (Gast)
Danke für die Tipps. Ich habe jetzt das IAR installiert.

von m.n. (Gast)


Lesenswert?

Zulu schrieb:
> Ich habe einen kleinen und einfachen Board gefunden, der mir als passend
> erscheint, auch wenn für 30 € relativ wenig auf dem Board ist: "MINI-M4
> for STM32". Er hat den
>  - STM32F415RG, mit 64 pins
>  - Encoder im Chip,
>  - bis zu 168 Mhz,
>  - 1MB Flash,

Der ..415 ist ein ..417 (..407 mit Crypto-Einheit) im 64 pol. Gehäuse. 
Ihm fehlt der FSMC, läßt sich aber wie ein ..407 handhaben.

Zulu schrieb:
> Danke für die Tipps. Ich habe jetzt das IAR installiert.

Das ist gut. Ich hatte mir auch noch einmal die neueste Version 
installiert und damit mein Nucleo-411RE-Board angesprochen. Die 'live 
watch'-Geschichte funktioniert nach wie vor.

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.