Forum: Mikrocontroller und Digitale Elektronik Quadratur Decooder/Zähler als eigenständiges IC - heutzutage (2021) erhältlich?


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von TomH (Gast)


Lesenswert?

Hallo zusammen,

ich bin auf der Suche nach einem lieferbaren IC, das A/B-Encodersignale 
und das Indexsignal in einem Auf-Ab-Zähler zählt, der dann über 
irgendein Interface vom Microncontroller ausgelesen werden kann.

Die scheints heutzutage alle nicht mehr wirklich zu geben, wer langsame 
Signale hat, macht's in Software, wer's schnell braucht, nimmt einen 
STM32.

Hier haben wir so ein Mittelding:

Als Controller ist vorerst der Exot AT90USB1287 gesetzt, weil unser 
Programmierer damit schon viel gemacht hat und die Platine mit dem Ding 
drauf existiert ja auch schon und soll nur weiterentwickelt werden. Es 
wird sehr schwierig sein, die beiden Entwickler von der Notwendigkeit zu 
überzeugen, auf einen STM32 umzuschwenken.

Der auszuwertende Drehgeber hat 1400 counts pro Umdrehung und arbeitet 
mit einem AEDR8712, von dem ich gerade nicht weiß, inwieweit dort die 
interne Taktvervielfachung von 2, 4, 8 oder 16 eingeschaltet ist. Für 
das Berechnen der maximalen Frequenz sind also momentan so viele 
Irrtumsquellen drin, daß ich lieber den Takt mit einem Oszi messen werde 
und das Ergebnis nachliefere.

Dem Programmierer ist das Aulesen per Interrupt oder Polling jedenfalls 
unsympathisch (mir gefühlsmäßig auch).

Nun also ein externes IC.

Wir haben sogar noch einige HCTL-2032 (2-Kanal, unnötig) hier, die sind 
aber vom Footprint etwas groß. Seine kleineren (1-Kanal) Brüder sind 
genausowenig lieferbar.
Auch der LS7366 taucht beim Googeln auf, aber scheint auch nicht mehr 
lieferbar zu sein.

Habt Ihr noch Ideen?
fragt und grüßt
der Tom.

von Falk B. (falk)


Lesenswert?

TomH schrieb:
> Habt Ihr noch Ideen?

Sowas kann man in einem kleinen Mikrocontroller nachbauen, der dann per 
UART oder I2C die Daten zur Verfügung stellt.

Beitrag "Re: Versetzte Rechtecksignale auswerten, kein drehgeber"

http://www.mino-elektronik.de/mt12_iic/mt12_iic.htm#qcnt_tiny25

von Dirk W. (Gast)


Lesenswert?

Falk B. schrieb:
> Sowas kann man in einem kleinen Mikrocontroller nachbauen, der dann per
> UART oder I2C die Daten zur Verfügung stellt.

Dafür sind z.B. die dsPIC-Mikrocontroller sehr gut geeignet, da sie 
einen Quadratur-Decoder in Hardware besitzen. Damit habe ich schon 
mehrfach Projekte mit Drehgebern realisiert. Die dsPICs gibt's in 
verschiendenen Gehäuseformaten und Pincounts, sogar bastlerfreundlich in 
DIP. Einige PIC24EP-Typen haben dieses Feature auch, kann man hier 
leicht herausfiltern: 
https://www.microchip.com/maps/Microcontroller.aspx

von Wolfgang (Gast)


Lesenswert?

Falk B. schrieb:
> Sowas kann man in einem kleinen Mikrocontroller nachbauen, der dann per
> UART oder I2C die Daten zur Verfügung stellt.

Das kommt wohl auf die (noch unbekannte) maximale Drehzahl an.

von Olaf (Gast)


Lesenswert?

> Das kommt wohl auf die (noch unbekannte) maximale Drehzahl an.

Das wuerde ich auch so sagen. So macht es keinen Sinn ueber sowas 
nachzudenken.

> Dafür sind z.B. die dsPIC-Mikrocontroller sehr gut geeignet, da sie
> einen Quadratur-Decoder in Hardware besitzen.

Es duerfte kaum eine MCU Familie geben wo es sowas nicht gibt.

Olaf

von Peter D. (peda)


Lesenswert?

TomH schrieb:
> Als Controller ist vorerst der Exot AT90USB1287 gesetzt

Es gibt auch AVRs mit Quadrature Encoder Eingängen (Xmega-E5) bzw. die 
neueren AVRs mit Configurable Custom Logic (CCL) können so programmiert 
werden.

http://ww1.microchip.com/downloads/en/AppNotes/00002434A.pdf

von Guido K. (Firma: Code Mercenaries GmbH) (thebug)


Lesenswert?

Was soll das Ding denn machen?

Ansonsten Drehgeber zu USB gibt es fertig:
https://www.codemercs.com/de/drehgeber

von 🍅🍅 🍅. (tomate)


Lesenswert?

CPLD oder FPGA nehmen, der macht auch den ganzen Rest, Zähler, Display 
etc, in einem Chip.

von Thomas F. (igel)


Lesenswert?

Einen kleinen ATXmega für den Encoder verwenden und per SPI mit dem 
Atmega verbinden.

Oder gleich auf ATXmega umschwenken. Habe ich gemacht und möchte 
eigentlich keinen Atmega mehr verwenden.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?

Der Hersteller der LS... Typen existiert noch
https://www.lsicsi.com/products/Incremental-Encoder-Interface
Status "full production", aber die Preise ? Die Firma wurde 1969 
gegründet.

von TomH (Gast)


Lesenswert?

So, ein paar Salamischeiben bin ich ja noch schuldig...

Hab ein Oszi aufgetrieben.
Frequenz an einem der beiden Encoder-Ausgänge A oder B: max. 300Hz.
Hertz, nicht kHz!
Lächerlich niedrig.

Das soll der Programmierer mal schön in Software machen.

Das kann ich ihm als proof-of-concept sogar in Arduino vorlegen.

Die interne Interpolation des AEDR8712 ist auf 8fach gestellt.
Die Frequenz könnte sich also noch höchstens verdoppeln, immer noch 
lächerlich niedrig.

Tut mir leid, daß ich die Frage nach dem externen IC überhaupt gestellt 
habe.

Viele Grüße
Tom.

von Peter D. (peda)


Lesenswert?

TomH schrieb:
> Frequenz an einem der beiden Encoder-Ausgänge A oder B: max. 300Hz.

Das macht dann 1,2kHz je Phasenwechsel. Sollte mit Pin-Change Interrupt 
zu schaffen sein.

von Falk B. (falk)


Lesenswert?

Peter D. schrieb:
> Das macht dann 1,2kHz je Phasenwechsel. Sollte mit Pin-Change Interrupt
> zu schaffen sein.

NEIN! NICHT SCHON WIEDER!

Auch DU Brutus? (Ähh Peter)

Siehe Drehgeber

von Falk B. (falk)


Lesenswert?

TomH schrieb:
> So, ein paar Salamischeiben bin ich ja noch schuldig...
>
> Hab ein Oszi aufgetrieben.
> Frequenz an einem der beiden Encoder-Ausgänge A oder B: max. 300Hz.
> Hertz, nicht kHz!
> Lächerlich niedrig.

Was hängt denn an dem Drehgeber dran? Wenn der 1400 Pulse/U bei 300Hz 
macht, sind das ~0,25U/s. Klingt nach einem Stellantrieb.

von W.S. (Gast)


Lesenswert?

TomH schrieb:
> wer's schnell braucht, nimmt einen
> STM32.

Aber nur dann, wenn er Scheuklappen trägt und sich nicht dafür 
interessiert, daß die Chips von anderen Herstellern ebenfalls sowas 
gelegentlich eingebaut haben.

W.S.

von Georg (Gast)


Lesenswert?

TomH schrieb:
> das A/B-Encodersignale
> und das Indexsignal in einem Auf-Ab-Zähler zählt

Das kommt sehr auf den Verwendungszweck an, es gibt im Wesentlichen 2 
Sorten:

1. Eingabelement als Potentiometer-Ersatz - niedrige Auflösung, 
Zähl-Frequenz im kHz-Bereich, Zuverlässigkeit ziemlich egal

2. Positionserfassung für NC/CNC-Maschinen - hohe Auflösung, Frequenz 
bis MHz, Schrittverluste dürfen nicht passieren

Mit hier empfohlenen Zählern für max 25 kHz kann man keine 
Bearbeitungsmaschine betreiben. Für manuelle Eingaben sind andrerseits 
1400 Schritte stark übertrieben. Es ist also nicht klar was der TO will 
und braucht.

Georg

von Wolfgang (Gast)


Lesenswert?

Georg schrieb:
> Mit hier empfohlenen Zählern für max 25 kHz kann man keine
> Bearbeitungsmaschine betreiben. ...

Es sind max. 300 Hz (dreihundert Hertz).
Nix mit "... bis MHz" - kannst dich wieder hinlegen ;-)

von TomH (Gast)


Lesenswert?

Ich will die Diskussion nicht verlängern oder erst richtig lostreten - 
andererseits möchte ich die fehlenden Salamischeiben nicht schuldig 
bleiben und beschreibe die Anwendung.

Es ist keine Privat-Bastelei, sondern ein Neben-Produkt in unserer 
Firma. Die Firma ist sehr klein, das Entwicklungsteam auch: Einer, der 
die Elektronik designt, einer, der programmiert, und ich, der die 
Mechanik designt und das Gesamtkonzept verbrochen hat. Das Produkt hat 
auch schon Entwicklungsstufen hinter sich, und es müssen Aufträge in 
gewissem Zeitrahmen erfüllt werden. Vorschläge wie "laß es bleiben" oder 
"fang das doch ganz anders an" werde ich nicht umsetzen können.

Es handelt sich um einen Stellantrieb.
Eine Art "Zeiger" mit einer 3mm-Scheibe vorndran bewegt sich knapp über 
der lichtempfindlichen Fläche von 64x64mm einer Kamera an einem 
Elektronenmikroskop. Die Scheibe fängt den Nullstrahl bei 
Beugungsaufnahmen. Sie soll aus dem Bild gefahren werden können, aber 
auch wiederholgenau in die Bildmitte zurückgefahren werden können. Wie 
wiederholgenau? Naja, so 0,1mm...
Der Zeiger ist ca. 60mm lang, seine Achse muß deutlich außerhalb des 
Bildes sein, und nach einer ca.45°-Drehung dürfen weder Scheibe noch 
Zeiger das Bild stören. Das diktieren die Platzverhältnisse.

Die momentane Lösung:
Ein Schneckenantrieb, dessen Lagerspiel überall durch Federdruck 
rausgenommen ist. Wirklich am Endabtrieb, auf dem Schneckenrad, sitzt 
die Encoderscheibe mit 1400CPR, und wird von der AEDR8712 abgetastet.
Dieser Endantrieb bewegt sich mit geschätzten 2-3 Sekunden für die 
Vierteldrehung. Wie gesagt, max. Frequenz eines Encoder-Kanals 300Hz. 
Wie schon von jemand anders bemerkt, das sind 1,2kHz, mit denen 
Phasenwechsel zu verarbeiten sind.

Nun noch einige Erkenntnisse aus den Diskussionen hier in der Firma:
- Der Programmierer, jetzt nochmal auf die Software-Lösung angesprochen, 
verwehrt sich heftig dagegen. Das hätte er in der Vergangenheit schon 
probiert, und es kam nur Sch...e dabei raus. Der Controller hat auch mit 
der USB-Kommunikation einiges zu tun. Ich weiß jetzt natürlich nicht, ob 
Interrupt oder Polling oder irgendwas...
- Der weiter oben erwähnte IC LS7366 scheint doch lieferbar zu sein. Der 
Preis von gut 5€ schockt uns nicht.
- Ich hab natürlich  doch gleich mal mit dem Arduino rumgestöpselt. Aber 
so trivial ist es nicht. Hatte sofort mit Schrittverlust zu kämpfen. 
Aber da kann ich noch ein bißchen weiterspielen, und eigentlich möchte 
ich niemanden die x-te Diskussion um die Programmierprinzipien für 
Drehgeber-Auswertung zumuten...

So, morgen hab ich erstmal Urlaub und bin zuhause auch mit dem 
Geburtstag meiner kleinen Tochter beschäftigt. Werde also wohl den 
ganzen Tag hier nicht reinschauen und antworten.

Also bis übermorgen!
Tom.

von Georg (Gast)


Lesenswert?

TomH schrieb:
> Hatte sofort mit Schrittverlust zu kämpfen

Das kann bei 300 Hz einfach nicht sein. Ein Timer, der die Eingänge alle 
ms oder etwas weniger abfragt muss absolut zuverlässig zählen.

TomH schrieb:
> Das hätte er in der Vergangenheit schon
> probiert, und es kam nur Sch...e dabei raus

Das sehe ich als Problem eurer Firma, nicht als technische 
Undurchführbarkeit. Aber was richtig ist: wenn ihr etwas einfach nicht 
beherrscht solltet ihr tatsächlich die Finger davon lassen, da gibt es 
mit einem externen Zähler-IC weniger Fehlermöglichkeiten, das kann man 
ja höchstens falsch auslesen, Verzählen passiert nicht. Ich habe solche 
ICs angefangen beim 74LS2000 bei hundert mal höheren Frequenzen für 
Messmaschinen in der Autoindustrie eingesetzt und die haben den ganzen 
Arbeitstag lang korrekt gezählt.

Georg

von Frank K. (fchk)


Lesenswert?

Machts doch ganz anders: Magnet auf die Achse, und dann mit sowas 
abtasten:

https://ams.com/as5048a

Gibts auch als b-Version mit I2C statt SPI. Das Ding gibt einen 
absoluten Drehwinkel raus, d.h. da könnt ihr keine Schritte verlieren.

Ansonsten einfach ein kleines FPGA für den Zähler und die Logik nehmen, 
z.B.:

https://www.digikey.de/product-detail/de/lattice-semiconductor-corporation/LCMXO2-256HC-5SG32C/220-2640-ND/3232670

Das sollte reichen.

fchk

von Olaf (Gast)


Lesenswert?

> Das soll der Programmierer mal schön in Software machen.

DAs wuerde ich ja wohl auch so sehen. Ich hab im Mega8 mal eine 
komplette
Achsensteuerung (Geschwindigkeit, Position, Rampen) eines Motors 
gemacht. TimerIRQ fuer die Abstastung lief mit 40khz.

Wobei mir deine 300Hz etwas niedrig vorkommen. Wenn das die Frequenz 
eines A oder B Kanals ist dann brauchst du 1.2khz im Timer. Also alles 
vollkommen lachhaft.

Kacke an den AVRs in dem Zusammenhang ist aber das man keine 
Interruptprioritaeten vergeben kann. Da muss man sich dann je nach dem 
was da sonst noch drin laeuft schonmal einen abbrechen.

Olaf

von Gerhard O. (gerhard_)


Lesenswert?

Ich rate entweder uC mit Quadratur Peripherie (STM32, DSPIC, etz.) zu 
verwenden oder die LS7166 Zähler o.ä. Den STM32 Quadraturmodus 
verwendeten wir früher einmal in der Firma und das funktionierte wie 
gewünscht. Die LS7x66 funktionierten in früheren Projekten auch sehr 
gut. Mit einem LS7183/4 als Frontend kann man übrigens einen normalen 
Timerzähler mit U/D Steuerung fabrizieren um Quadraturzählen mit uC 
Timern ohne QE zu emulieren. Der LS7183 übernimmt die Filterung und 
Dekodierung und erzeugt je nach Modell U/D und den Takt. Damit lässt 
sich auch allerhand anstellen.

von Datenblatt Leser (Gast)


Lesenswert?

Z.B. TMC424 von Trinamic: 
https://www.trinamic.com/products/integrated-circuits/details/tmc424/. 
Verfügbar aber teuer.

von Falk B. (falk)


Lesenswert?

TomH schrieb:
> rausgenommen ist. Wirklich am Endabtrieb, auf dem Schneckenrad, sitzt

> - Der Programmierer, jetzt nochmal auf die Software-Lösung angesprochen,
> verwehrt sich heftig dagegen. Das hätte er in der Vergangenheit schon
> probiert, und es kam nur Sch...e dabei raus.

Jaja, die Softwerker. Immer am Jammern, geht alles nicht, CPU 
viiiiiieell zu langsam, vieeeeelll zu wenig RAM.

> Der Controller hat auch mit
> der USB-Kommunikation einiges zu tun. Ich weiß jetzt natürlich nicht, ob
> Interrupt oder Polling oder irgendwas...

Mag sein, aber für die solide Auswertung dieses Encoders braucht man 
hier einen Timer-Interrupt mit ca. 3-5kHz. Der sollte durch die 
USB-Kommunikation nicht ausgebremst werden, geringfügiger Jitter ist 
sicher OK.
Dann läuft das. Mit minimalem Aufwand kann man auch Interruptprioritäten 
per Software nachbilden.

> - Der weiter oben erwähnte IC LS7366 scheint doch lieferbar zu sein. Der
> Preis von gut 5€ schockt uns nicht.

Dann nimm ihn.

> - Ich hab natürlich  doch gleich mal mit dem Arduino rumgestöpselt. Aber
> so trivial ist es nicht. Hatte sofort mit Schrittverlust zu kämpfen.

Dann machst auch du grundlegend was falsch. Möglicherweise sogar schon 
auf der Hardwareebene.

> Aber da kann ich noch ein bißchen weiterspielen,

Wenn ich das Wort "weiterspielen" höre, werde ich allergisch. Das klingt 
genau danach, was es beschreibt. Planloses Rumspielen ohne Know How.

von Peter D. (peda)


Lesenswert?

TomH schrieb:
> Hatte sofort mit Schrittverlust zu kämpfen.

Ich vermute mal der Schrittverlust kommt durch Polling in der Mainloop. 
Das geht natürlich nicht. Da der Chip ja schon prellfreie Signale 
liefert, ist der Pin-Change Interrupt die beste Lösung.

Schrittverlust bekommt man auch, wenn andere Interrupts den Pin-Change 
Interrupt solange blockieren, bis schon der nächste Phasenwechsel 
erfolgt.
Falls es der USB-Interrupt ist, der nicht aus die Puschen kommt, kann 
man ihn ja bei Eintritt disablen und mit sei() die eiligen Interrupts 
wieder freigeben.

von Peter D. (peda)


Lesenswert?

Falk B. schrieb:
> Jaja, die Softwerker. Immer am Jammern, geht alles nicht, CPU
> viiiiiieell zu langsam, vieeeeelll zu wenig RAM.

Ja, das kenne ich auch nur zu gut. Es ist vollkommen egal, ob Du Takt 
und RAM verdoppelst, es bleibt immer zu wenig.
Ich kann da oft nur mit dem Kopf schütteln, mit welch gewaltigen 
Ressourcen auf simpelste Steuerungsabläufe geschossen wird.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

TomH schrieb:
> Frequenz an einem der beiden Encoder-Ausgänge A oder B: max. 300Hz.
Das ist ja schnarchlangsam. Das kann man ja fast von Hand 
mitschreiben...

TomH schrieb:
> Dem Programmierer ist das Aulesen per Interrupt oder Polling jedenfalls
> unsympathisch (mir gefühlsmäßig auch).
1. es gibt auch schlechte Programmierer (der von meinem DVD-Player ist 
auch so einer) und

2. in der Technik sollte man sich nicht auf Gefühle verlassen (auf jeden 
Fall nicht, so lange die nicht vollständig und belastbar ausgeprägt 
sind)

TomH schrieb:
> - Der Programmierer, jetzt nochmal auf die Software-Lösung angesprochen,
> verwehrt sich heftig dagegen. Das hätte er in der Vergangenheit schon
> probiert, und es kam nur Sch...e dabei raus.
Da muss man nichts "probieren". Das kann man analysieren und 
sicherstellen.
> Der Controller hat auch mit der USB-Kommunikation einiges zu tun.
Ja, Ausrede eben.
> Ich weiß jetzt natürlich nicht, ob Interrupt oder Polling oder
> irgendwas...
Ich bin auch nur deshalb zu spät gekommen, weil ich den Bus verpasst 
habe, weil die Großmutter meiner Nachbarin ihre Katze im dunklen Keller 
ohne Licht... Verdammt, Faden verloren... Ausrede eben.

> - Der weiter oben erwähnte IC LS7366 scheint doch lieferbar zu sein.
Die haben da echt eine Nische gefunden:
https://lsicsi.com/products/Counters/LS7366R-S_LS7366R-TS_LS7366R
> Der Preis von gut 5€ schockt uns nicht.
Ihr sitzt da wohl auf einer Insel der Glückseligen.

TomH schrieb:
> Nun also ein externes IC.
Sieh dir den Beitrag "Re: Auswertung mehrerer Drehencoder" auch 
mal an.

: Bearbeitet durch Moderator
von Harald W. (wilhelms)


Lesenswert?

TomH schrieb:

> - Der Programmierer, jetzt nochmal auf die Software-Lösung angesprochen,
> verwehrt sich heftig dagegen. Das hätte er in der Vergangenheit schon
> probiert, und es kam nur Sch...e dabei raus.

Dann handelt es sich wohl um einen Sch...-Programmierer. Vielleicht
sollte der mal bei Drehgeber (siehe Link) nachlesen. Bei der von
Dir geforderten hohen Präzision sollte auf jeden Fall eine Zustands-
auswertung und keine Interruptauswertung gemacht werden. Inter-
ruptauswertung ist höchstens bei handbetätigten Drehgebern sinnvoll.

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Harald W. schrieb:
> Bei der von
> Dir geforderten hohen Präzision sollte auf jeden Fall eine Zustands-
> auswertung und keine Interruptauswertung gemacht werden

Da kommt man sich hier im Forum vor wie ein Prediger in der Wüste, der 
die Felswände überzeugen will. Forum für alternative Elektronik eben, 
natürlich auch LEDs ohne Vorwiderstand, Busse ohne GND usw. usw.

Georg

von Peter D. (peda)


Lesenswert?

Harald W. schrieb:
> Dir geforderten hohen Präzision sollte auf jeden Fall eine Zustands-
> auswertung und keine Interruptauswertung gemacht werden.

Der Pin-Change Interrupt erkennt nur, daß ein Phasenwechsel auf einer 
der beiden Leitungen erfolgte. Die Auswertung muß natürlich der 
Interrupthandler machen (z.B. Graycode zu binär).

von Maxim B. (max182)


Angehängte Dateien:

Lesenswert?

TomH schrieb:
> ich bin auf der Suche nach einem lieferbaren IC, das A/B-Encodersignale
> und das Indexsignal in einem Auf-Ab-Zähler zählt, der dann über
> irgendein Interface vom Microncontroller ausgelesen werden kann.

Das könnte z.B. so aussehen. Ungefähr wie Mode x1 von LS7084N. Dafür 
braucht man nicht unbedingt besondere IC. 74HC132 paßt auch. Will man 
x2-Mode, kann man das mit zwei 4093 oder HC132 machen. Auch 4x-Mode ist 
so möglich.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Peter D. schrieb:
> Der Pin-Change Interrupt erkennt nur, daß ein Phasenwechsel auf einer
> der beiden Leitungen erfolgte

Der erkennt genauso, wenn das Signal an der Taktflanke "prellt" oder der 
Encoder am Übergang rumeiert.

von Axel G. (maulwurf_a)


Lesenswert?

Um mal auf die Anfangsfrage zurück zu kommen. Git es schon:

https://www.ichaus.de/product/iC-MD

von Sprachlos (Gast)


Lesenswert?

Axel G. schrieb:
> Um mal auf die Anfangsfrage zurück zu kommen. Git es schon:
>
> https://www.ichaus.de/product/iC-MD

Der Link ist ein schönes Beispiel dafür, die Anforderungen des TO 
überhaupt nicht beachtet oder verstanden zu haben. Warum soll er denn 
LVDS oder 40 MHz bezahlen, mit welchen Lieferzeiten, zu welchem Preis?

Sofern es der hausinterne Programmierer nicht in Software gebacken 
bekommt, reicht doch ein kleiner 8-pol. µC (ATtiny, s.o.), um eine 
externe Zählerlösung zu erhalten. Kosten < 1 Euro, Aufwand für 
Platinenlayout minimal.

von Falk B. (falk)


Lesenswert?

Sprachlos schrieb:
> Kosten < 1 Euro, Aufwand für
> Platinenlayout minimal.

Entwicklungskosten 99,9% der Gesamtkosten.

von TomH (Gast)


Lesenswert?

Ich will mal nochmal abrunden und versuchen, die Gemüter zu beruhigen. 
Wird nicht gelingen, es gibt immer welche, die sich streiten wollen.

1. Externer IC

Danke für die Vorschläge.
Wir werden zunächst versuchen, den LS7366 in SSOP zu bekommen. Der hat 
handliche 14 Beine. Selbst wenn wir nur auf abenteuerlichen Wegen 
einmalig  ca. 20 Stück davon beschaffen können, das beschriebene Produkt 
ist ein absolutes Nischen-Ding, das reicht uns.
Die beiden anderen Vorschläge sind deutlich komplexer, man kann sagen 
Overkill. Selbst wenn das Argument "teuer" bei uns nicht so schlimm 
wäre...

Kleine Anekdote am Rande:
Das Vorgängerprodukt arbeitete mit dem Avago HCTL-2032. Weil der vor 
Jahren auch schon schwierig zu beschaffen war, wurde panisch ein Vorrat 
beschafft. Leider irrtümlich in DIL-40 statt in SSOP... davon haben wir 
jetzt ca. 40 Stück herumliegen... können wir irgendwann handverlesen auf 
ebay vergolden...

2. Programmierer

Hört auf, auf dem herumzuhacken. Der Umgang mit ihm ist ganz normaler 
Umgang mit Kollegen. Ich muß ihm ja die Aufgabenstellung nahebringen, er 
macht sich seinen Reim drauf. Der macht sein Zeug super, und ich kann 
nicht beurteilen, ob er mit den negativen Erfahrungen mit 
Polling/Interrupt in seinem Gesamt-Setting recht hat oder einem Irtum 
aufgesessen ist.
Nur wenn man alles selber macht, hat man die Schnittstelle zwischen den 
Kollegen nicht, aber man ist trotzdem nicht gegen Holzwege und Irrtümer 
gefeit.

3. Arduino-Spielerei

Bitte keine Pickel bekommen, es ist ja nur eine "Demo", die ich da für 
den Programmierer zusammenstöpsle.

Übrigens funktioniert es mittlerweile ziemlich gut.
Problematisch ist bei mir sicher die Rückmeldung der Position über die 
serielle Schnittstelle. Vor allem bei Erreichen des Index-Signals wurde 
zunächst ständig das Wort "Index" rausgerattert, in der vollen Frequenz 
der Main Loop. Das hat alles gestaut und durcheinandergebracht. Seit ich 
nur noch ein bescheidenes "I" neben der gelegentlichen Positionsmeldung 
anzeige, ist es ziemlich fehlerfrei geworden.

Das Konstrukt ist ungefähr so:
1
void loop() 
2
{
3
  static int encoderTimeout;
4
  
5
  Position_alt = Position;
6
  Position = Position + encoderImpuls();
7
8
  if (Position == Position_alt) encoderTimeout++;
9
10
  if (encoderTimeout > 1000)
11
  {
12
    encoderTimeout = 0;
13
    Serial.print(Position);
14
    if (digitalRead(ENC_I) == HIGH) Serial.print(" I");
15
    Serial.println();
16
  }
17
18
  MotorSteuern(JoystickLesen());
19
}
20
21
int encoderImpuls()
22
{
23
  static byte state=0;
24
  state= state<<2;    // Bits um zwei Stellen nach links schieben
25
  if (digitalRead(ENC_A)) bitSet(state,1);  // Eingang A abfragen und Bit1 setzen
26
  if (digitalRead(ENC_B)) bitSet(state,0);  // Eingang B abfragen und Bit0 setzen
27
  state= state & 0xF;   // Nur die unteren 4 Bits behalten
28
  switch(state)
29
  {
30
    case 0b0000:
31
    case 0b0101:
32
    case 0b1010:
33
    case 0b1111: return 0; // keine Änderung an den Eingängen
34
    case 0b0001:
35
    case 0b0111:
36
    case 0b1110:
37
    case 0b1000: return 1; // links Impuls an den Eingängen
38
    case 0b0010:
39
    case 0b1011:
40
    case 0b1101:
41
    case 0b0100: return -1; // rechts Impuls an den Eingängen
42
  } 
43
}

Die Sache mit dem Timeout ist natürlich unsauber (und eigentlich eher 
für das Auswerten von handbetätigten Drehgebern gedacht). Es wird immer 
irgendeinen Moment geben, in dem die Taktsignale langsam genug kommen, 
um die serielle Ausgabe zuzulassen, und dennoch so schnell, daß während 
der seriellen Ausgabe was verschluckt wird. Aber tatsächlich 
funktioniert es so schon ganz gut.

von Olaf (Gast)


Lesenswert?

> Das Vorgängerprodukt arbeitete mit dem Avago HCTL-2032. Weil der vor
> Jahren auch schon schwierig zu beschaffen war, wurde panisch ein Vorrat
> beschafft.

Hm..ich hab noch eine Handvoll HCTL-2000. Bin ich jetzt reich? :-)

Olaf

von Sprachlos (Gast)


Lesenswert?

TomH schrieb:
> Die beiden anderen Vorschläge sind deutlich komplexer, man kann sagen
> Overkill.

Was ist denn an einem ATtiny25 oder 202 komplex oder Overkill? Das 
Programm dafür muß nur aufgespielt werden. AVR wird bei euch ja schon 
verwendet.

TomH schrieb:
> Selbst wenn wir nur auf abenteuerlichen Wegen
> einmalig  ca. 20 Stück davon beschaffen können,

Kurz gesucht. ATtiny25/45/85 gibt es bei Reichelt; ATtiny212 zum 
Beispiel bei Farnell 835 Stk. ab Lager < 50 ct.

von TomH (Gast)


Lesenswert?

Neueste Erkenntnis:
LS7366 ist tatsächlich nur auf extrem abenteuerlichen Wegen beschaffbar. 
Eigentlich gar nicht.

Ein Punkt mehr für die Software-Lösung.
Oder meinetwegen, wenns gar nicht anders geht, ja, einen ATtiny.

von Wolfgang (Gast)


Lesenswert?

Falk B. schrieb:
> Entwicklungskosten 99,9% der Gesamtkosten.

Du tust so, als ob man da irgendetwas neu erfinden müsste.
Auch bei einem Chip, der von sich aus zählen kann, muss Layout und 
Softwareanbindung umgesetzt werden.

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Selbst wenn man einen µC nimmt, der einen Encoder-Eingang in Hardware 
hat, muss der Programmiert werden. Und zwar so, dass der eine brauchbare 
Schnittstelle für den bereits verbauten Mastercontroller bekommt. Das 
ist kein Hexenwerk, aber für den o.g. Programmierer scheinbar zu 
schwierig. Der ganze Overhead, der da drann hängt (Doku, 
Produktionsprozess,...), ist auch nicht zu unterschätzen.

@Tom: Wenn ihr das nicht hinbekommen solltet, melde dich gerne per Mail 
bei mir. Vielleicht kann ich euch da dann weiterhelfen.

Mit freundlichen Grüßen
Thorsten Ostermann

von No Y. (noy)


Lesenswert?

Wir nutzen einen der LSICSI ICs (SPI interface) in einem Serienprodukt 
mit Linux, bisher keine Probleme, weder Funktion noch Beschaffbarkeit..
Aber wir kaufen auch direkt ganze Rollen..

Und für uns war es besser als eine Softwarelösung da die Softwarepflege 
+ Programmierung + Softwareentwicklungskosten entfallen sind..

Reicht wenn wir das Linux pflegen müssen..

von Georg (Gast)


Lesenswert?

TomH schrieb:
> Ein Punkt mehr für die Software-Lösung.
> Oder meinetwegen, wenns gar nicht anders geht, ja, einen ATtiny.

Als ob man den nicht programmieren müsste. Wer das mit einem AT90 nicht 
hinkriegt, schafft das auch nicht mit einem ATtiny - eher noch weniger. 
Und Geld ist wohl auch nicht dafür verfügbar.

Georg

von No Y. (noy)


Lesenswert?

I.MX7 hat interne Decoder aber mit anderem nützlichen "vermuxt" daher 
ist es dann auch bei uns extern geworden..

von Sprachlos (Gast)


Lesenswert?

Georg schrieb:
> Als ob man den nicht programmieren müsste.

SPI-Prommer für AVRs gibt es doch wie Sand am Meer und ist wohl schon 
längst vorhanden.
Die paar Byte sind doch in 2 s im Chip.

von Falk B. (falk)


Lesenswert?

Sprachlos schrieb:
> SPI-Prommer für AVRs gibt es doch wie Sand am Meer und ist wohl schon
> längst vorhanden.
> Die paar Byte sind doch in 2 s im Chip.

Er meinte mit "programmieren" wohl eher die Erstellung und den Test des 
Programms, nicht das Brennen der Firmware.

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.