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
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.
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
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...
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?
@ 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.
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.
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).
> 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.
@ 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.
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 ;-)
> 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 :-)
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.
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.