Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Hier könnt Ihr Erweiterungen oder Verbesserungen des RF1000 vorstellen oder diskutieren. Verbesserungspotential ist ja vorhanden. Modifikationen und Zubehör können hier ebenfalls diskutiert werden.
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2066
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 268 times
Been thanked: 544 times

Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von rf1k_mjh11 »

Ein Schrittmotor, wie im 3D Drucker verwendet, steuert üblicherweise seine Zielposition zuverlässig an. Voraussetzung ist, diese Zielposition ist erreichbar und der Motor ist der jeweiligen Last gewachsen. Unter der genannten Last fallen der Bewegungswiderstand (Reibung, Luftwiderstand, usw.) und besonders die Massenträgheitskräfte der bewegten Elemente. Muss eine große Masse bewegt werden, steigt die benötigte Kraft mit der geforderten Beschleunigung.

Weder der Schrittmotor noch die Firmware wissen in welcher Position sich der Motor tatsächlich befindet. Da der Motor keine Rückmeldung betreffend der Position liefert (oder liefern kann) nimmt die Firmware einfach an, alles wäre in Ordnung. Das klappt ja beim 3D Druck eigentlich recht gut (meistens). Gelegentlich geht irgendeine Kleinigkeit daneben, ein Schrittmotor ‚verliert‘ einen oder mehrere Schritte, und -schwupps- hat man wieder was für die Recyclingtonne produziert :dash: .

Beim CNC Fräsen klappt es meistens auch, obwohl hier, meiner Meinung nach, die Ansprüche ungleich höher sind. Beispielsweise bewegt sich beim 3D Druck das Werkzeug (die Düse) normalerweise immer weiter vom Werkstück (vom Druckbett) weg, womit eigentlich nie ein direkter Kontakt besteht, beim Fräsen ist hingegen eine ‚Kollision‘ ja vorgesehen und erwünscht. Wo sollten sonst die Späne herkommen? :yes:    Durch diese Konstellation ergeben sich deutlich öfters Situationen, wo ein ‚verlorener‘ Schritt eines Schrittmotors zu mehr als nur Ausschuss führen könnte: hier sind gebrochene Werkzeuge oder Werkstücke, sogar ernste Verletzungen möglich.

Industriemaschinen (und auch –roboter) verwenden daher meist Systeme, wo die Ist-Position jedes Motors bekannt ist, bzw. zurückgemeldet wird. Sollte es irgendwann eine Diskrepanz zwischen Soll- und Ist-Position geben, bleibt die Maschine stehen (quasi ein Not-Aus), oder ähnliches.

Eine häufig eingesetzte Methode zur Positionsermittlung ist ein sogenannter Drehgeber (Rotationskodierer oder Rotary Encoder). So ein Drehgeber erkennt, oft auf optischem Weg, die jeweilige Winkelposition. Besonders raffinierte Systeme behalten auch die Anzahl der Umdrehungen im Auge.

Ich stelle hier also einen (funktionierenden?) Drehgeber vor, dessen Hauptbestandteile am RF1000 gedruckt wurden (mit 0.35 und 0.2mm Düse):
Rendered_1.png
Der Drehgeber hat eine Auflösung von 8 Bit, womit bei einer vollen Umdrehung 256 unterschiedliche Werte erkannt werden können (entspricht 1.40625°). In unseren Druckern sind Schrittmotoren mit 200 Schritten eingebaut (entspricht 1.8°). Damit ist der Drehgeber theoretisch genauer als ein ganzer Schritt eines der Schrittmotoren (und ‚verlieren‘ kann man immer nur einen oder mehrere ganze Schritte).

Die Abmaße des Drehgebers sind 44x44x16mm (ohne Kabel, usw.). Ein NEMA 17 Schrittmotor, wie in den meisten 3D Druckern verwendet, hat 43x43xLänge (unterschiedlich). Somit hat der Drehgeber ungefähr dieselben Maße wie die Motoren:
Encoder&Motor.jpg
Elektrisch steckt nichts Besonderes dahinter, bloß 8 IR-LEDs und ebenso viele Phototransistoren, beide in der 3mm Ausführung. Für die LEDs sind Vorschaltwiderstände nötig. Für die Phototransistoren werden Pull-Up Widerstände benötigt damit das erzeugte Signal erkannt werden kann. Details später…

Ich habe versucht ein Video zu machen, was nicht sonderlich gut gelang. Daher hier ein Bild des funktionierenden Versuchsaufbaus:
OverallSetup_1b.jpg
[list
  • Bei ‚A‘ sieht man den eigentlichen Drehgeber. Hier sind noch alle Beinchen der LEDs und Phototransistoren in voller Länge vorhanden - daher sieht es ein wenig unförmig aus.
  • ‚B‘ ist bloß ein Schraubendreher als Input-Medium, um die Unterbrecherscheibe drehen zu können
  • ‚C‘ ist die Steuereinheit zur Signalauswertung – hier ein Arduino AT Mega 2560 – es besitzt einen Prozessor, der sehr ähnlich ist wie jener, auf dem die RFx000 Drucker basieren. Das Board ist hier ‚Overkill‘, also für die Aufgabe weit überdimensioniert (siehe dazu ‚G‘)
  • ‚D‘ ist eine optionale Anzeige damit man sieht ‚was läuft‘ – tut eigentlich nichts zu Sache. Im Bild ist es kaum als Anzeige erkennbar da die Kamera ‚zu schnell‘ fotografiert und das Display Zeilenweise aufgebaut wird. Die Anzeige zeigt in der ersten Zeile den Winkel, in der zweiten den Status der 8 Sensoren als binäre Zahl, z.B. 10110111.
  • Bei ‚E‘ und ‚F‘ sieht man die LED Vorwiderstände, bzw. die Pull-Up Widerstände für die Phototransistoren. Ich hatte die benötigten Werte nicht bei der Hand und musste jeweils 2 in Serie schalten um den geforderten Wert ungefähr hin zu bekommen. Streng genommen könnte man zumindest bei den IR-LEDs alle 8 in Serie schalten und mit nur einem einzigen Widerstand auskommen. Jemand, der in der Elektronik mehr bewandert ist als ich es bin, hat mir davon abgeraten. Bei den Phototransistoren kommt man um die 8 Widerstände nicht herum. Es kann sogar sein, dass diese nicht alle denselben Wert benötigen (bei mir zumindest).
  • ‚G‘ zeigt ein Wemos D1 Mini, eine kleine Platine die imstande wäre, die gestellte Aufgabe zu lösen – man benötigt einfach 8 digitale Eingänge. So wie ich das erkennen kann, hat der D1 Mini mindestens 9 digitale IO pins. (Der Wemos D1 Mini ist sogar WiFi fähig, könnte somit die Werte drahtlos ins Netz speisen.) Der Wemos D1 Mini ist hier nicht nötig, könnte aber anstatt dem AT Mega 2560 eingesetzt werden.
  • ‚H‘ zeigt als Größenvergleich einfach einen üblichen NEMA 17 Schrittmotor. Der Motor ist hier natürlich nicht nötig.
Funktion/Genauigkeit:

Ich kann hier aus mehreren Gründen keine eindeutige Aussage treffen:
  • Einmal sind insgesamt an die 100 ‚wackelige‘ Steckverbindungen mittels Steckbrücken oder gesteckte Bauteile auf dem Breadboard im System. Die einzigen Lötstellen sind, dass jeweils ein Bein aller IR-LEDs und jeweils ein Bein aller Phototransistoren miteinander verbunden wurden da diese alle an Plus oder Minus gelegt wurden (damit wurden 14 Kabel eingespart). Durch die Steckverbindungen, zusammen mit den scheinbar steifen Kabeln, reicht manches Mal nur eine kleine Bewegung des Drehgebers und ein falsches ‚Signal‘ wird gesendet. Diese Probleme sollten mit einer fixen Montage (= alle Teile & Kabel gelötet) nicht mehr vorhanden sein.
  • Andererseits sind die Löcher in den jeweiligen Masken sowie in der Unterbrecherscheibe schon sehr an der Grenze des Druckbaren und weichen eventuell ein wenig zuviel ab (mehr dazu später). Dadurch kommen vielleicht grenzwertige Signale zustande, welche zu den gelegentlichen Schwankungen führen? Eigentlich sollte der hier eingesetzte Gray Code solche Fehler vermeiden (oder gar ganz ausschließen?), ich weiß es nicht.
  • Die gelegentlichen Schwankungen, die beobachtet wurden, sind vielleicht eine Folge der Programmierung. Nachdem das Programmieren in Arduino überhaupt nicht meine Stärke ist, könnte der Hund da begraben liegen. Nibbels könnte vermutlich mehr dazu sagen.
Auch kann ich bezüglich der Geschwindigkeit wenig sagen – das Display ist halt recht träge. Ich weiß nicht, ob das System imstande wäre, in Echtzeit, Real Time, die Werte zu übertragen (gerade bei schnellen Leerfahrten, zum Beispiel). Ebenso kann ich nicht abschätzen, ob die Systemplatine im Drucker imstande wäre, die Daten in Real Time zu verarbeiten. Aber eine gelegentliche Prüfung müsste auf jeden Fall möglich sein, wo der Drucker dann relativ zeitnahe gestoppt werden könnte (kann sein, dass der Druck trotzdem Schrott ist…). Garantiert möglich wäre eine Prüfung beim Layerwechsel.

Ich kann bei Interesse die Stückliste, die CAD Modelle und das Arduino Skript ins Forum stellen.

Mehr im nächsten Beitrag.

Allseits Gesundheit!

mjh11
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
mhier
Prof. Dr. des 3D-Drucks
Prof. Dr. des 3D-Drucks
Beiträge: 1672
Registriert: Fr 11. Sep 2015, 11:37
Has thanked: 279 times
Been thanked: 246 times

Re: Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von mhier »

Beeindruckend :-) und durchaus sehr interessant, ich beschäftige mich ja gerade auch mit dem Antrieb.

Wer den Aufwand eines eigenbaus scheut: Es gibt die Dinger übrigens auch fertig zu kaufen, Stichwort zum Suchen "Nema 17 closed loop". (Closed loop bezeichnet eigentlich etwas komplexeres, aus Marketinggründen findet man aber meistens erstmal Stepper mit eingebautem Encoder, jedenfalls im unteren Preissegment...)

Was ich mich aber frage: Wie bekommen wir die Information in den Microcontroller unseres Druckers? Ich fürchte, da fehlen uns einfach die Pins. Wenn wir die Information irgendwie einspeisen könnten, würde sich sicher mit einer Firmware-Modifikation damit was anfangen lassen, sprich man könnte die Position korrigieren. Was natürlich in jedem Fall ginge, wäre eine Abweichung mit einem externen Controller zu erkennen und dann ein Notaus-Signal zu generieren (Reset des Druckers). Dazu müsste der externe Controller aber natürlich noch die Positions-Vorgabe kennen. Da kommen wir auch wieder nicht so leicht ran... Hast du dir in der RIchtung schon Gedanken gemacht?

Btw: Mit einer Auflösung, die ungefär im Bereich eines Vollschritts liegt, wirst du nur Abweichungen von mehr als einem Vollschritt (also mindestens zwei Vollschritten) erkennen können. Selbst wenn du exakt 200 (statt 256) Positionen codieren wüdest, würden die ja nie mit den 200 Vollschritt-Positionen exakt übereinstimmen (schon alleine weil die Positionen nie exakt 1.8 Grad Abstand zueinander haben). Du wirst also laufend "abweichungen" von +- 1 Schritt feststellen. Alarm schlagen kannst du also grundsätzlich erst bei einer Abweichung von 2 Schritten oder mehr. Das ist dann schon fast ein halber Millimeter...

Einen Druck kann man ggf. dann noch retten, wenn man die Rescue-Funktion vom Repetier-Server nutzt. Der homed dann in X und Y (womit die Position wieder bekannt ist) und versucht dann den Druck fortzusetzen. Beim Fräsen kann man im Prinzip ähnlich vorgehen. Da lässt sich ja sogar die Z-Position wieder "homen", solange man noch nicht die gesamte Original-Oberfläche weggefräst hat (also noch irgendwo eine unbearbeitete Oberfläche für Find Z Origin vorhanden ist). Ich habe durchaus schon Fräsvorgänge auf die Weise abgebrochen und neu gestartet (sogar mit neuem GCode wegen geänderten Schnittparametern) - der fräst dann halt erstmal ne Weile Luft :-)
Gruß, Martin

Klipper Firmware für den RFx000: Klipper für RFx000 | Original-Dokumentation | Diskussion | Wiki mit Installations-Anleitung

(Ich bin in diesem Forum nicht mehr aktiv)
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2066
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 268 times
Been thanked: 544 times

Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von rf1k_mjh11 »

Hallo allerseits,

Es geht weiter. Nur muss ich zuerst auf die Punkte Martins/mhier eingehen. Über alle vorgebrachten Punkte habe ich mir schon Gedanken gemacht.

1):
mhier hat geschrieben:Was ich mich aber frage: Wie bekommen wir die Information in den Microcontroller unseres Druckers? Ich fürchte, da fehlen uns einfach die Pins. Wenn wir die Information irgendwie einspeisen könnten, würde sich sicher mit einer Firmware-Modifikation damit was anfangen lassen, ...
Ja dazu wollte ich heute kommen.

2):
mhier hat geschrieben: Du wirst also laufend "abweichungen" von +- 1 Schritt feststellen. Alarm schlagen kannst du also grundsätzlich erst bei einer Abweichung von 2 Schritten oder mehr. Das ist dann schon fast ein halber Millimeter...
Vermutlich richtig. Dazu wäre ich auch noch gekommen. Laut FW haben wir:
#define XAXIS_STEPS_PER_MM float(4.761875 * (float)RF_MICRO_STEPS)
Also in etwa 4.8 Ganzschritte pro mm. Und mhiers Einwände dürften stimmen. Erst ab 2 Schritten Diskrepanz wird die Firmware reagieren können. Damit ist die Abweichung fast 0.5mm (0.42 und ein paar sehr zerquetschte).
Eine Möglichkeit wäre, analog zum 'Homing', den Motor eine volle Umdrehung machen zu lassen und die erhaltenen Echt-Werte in eine Matrix zu speichern. Damit könnte man vielleicht die Reproduzierbarkeit/Genauigkeit verbessern - ich bin zu wenig Programmierer um das abzuschätzen.
3):
mhier hat geschrieben:Ich habe durchaus schon Fräsvorgänge auf die Weise abgebrochen und neu gestartet (sogar mit neuem GCode wegen geänderten Schnittparametern) - der fräst dann halt erstmal ne Weile Luft
Habe ich auch schon hinter mir :developer: .

So,
Jetzt zurück zum Thema:

Der Clou am System liegt in der Unterbrecherscheibe, im ersten Schnitt-Bild hellgelb dargestellt. Die Scheibe unterbricht in einer genau definierten Folge den Strahl zwischen den 8 LED/Transistorpaaren und erlaubt damit die Positionserkennung, und das berührungslos und damit ohne Verschleiß.
EncoderDisk.jpg
Diese Scheibe war auch die größte Herausforderung beim Drucken. Der Außendurchmesser ist 34mm. Die theoretische Breite der Löcher in der äußersten Lochreihe ist 0.79mm. Der Abstand der Lochreihen nur 0.6mm. Da bekanntlich kleine Löcher immer kleiner ausfallen als gezeichnet, habe ich die Breite der Löcher in radialer Richtung um 0.2mm und die Breite in Umfangsrichtung um 0.15mm vergrößert. Damit wurde der Abstand der Lochreihen nur mehr 0.4mm. Das lässt sich vielleicht mit einer 0.3 oder 0.35mm Düse schaffen, ich wählte hingegen meine kleinste Düse, mit 0.2mm, dafür aus.
Die Abfolge der Schlitze/Löcher in der Scheibe entspricht einem Gray Code, den ich in diesem Fall in Excel selbst erarbeitet habe.
Gray Code
Da sollte man im Wiki selbst nachlesen. Der Code sollte Fehler vermeiden (oder ganz ausschließen?) da sich immer nur ein einzelnes Bit ändert. Würde man beispielsweise einfach binär hoch zählen, ändern sich von 3 auf 4 gleich 3 Bits gleichzeitig (von 011 auf 100). Durch unvermeidliche Fertigungstoleranzen könnte dadurch jede Zahl zwischen 0 und 4 kurzzeitig dargestellt werden. Noch schlimmer ist der Wechsel von 127 auf 128 (also von 01111111 auf 10000000), da ändern sich ALLE 8 Bits!. Jede Zahl zwischen 0 und 255 wäre damit möglich.
Der Gray Code sorgt hingegen dafür, dass die Zahl um den Wert von maximal Eins 'daneben' sein kann.
Damit sich alle 8 LEDs usw. platzmäßig unterbringen haben lassen, war es notwendig, diese in 4 Paare zu unterteilen, die der Einfachheit halber in die 4 Himmelsrichtungen zeigen. (Es wären andere als nur rechte Winkel möglich, das Lochmuster in der Unterbrecherscheibe muss dies einfach ‚berücksichtigen‘.)
Die Dicke der Scheibe ist nur 0.8mm denn ich wollte die LEDs und Phototransistoren möglichst knapp beieinander haben. Bei solchen geringen 'Wandstärken' stellt sich heraus, dass viele Farben durchscheinend werden. Hier einige schlechtere Ergebnisse:
EncoderDisks2.jpg
Die gold- und silberfarbenen Scheiben sind, gegen das Licht gehalten, deutlich durchscheinend. Das wäre vielleicht gar kein Problem, aber ich als Elektronik-Unbedarfter konnte die Auswirkung nicht abschätzen und wollte kein Risiko eingehen. Mein Schwarz war gerade aus, COVID-19 hatte gerade alle Geschäfte, bis auf die lebensnotwendigen, geschlossen. Und per Internet dauert es Wochen - :weinen: - was tun? Ein schwarzer Filzstift kam da zu Hilfe. Erstaunlicherweise wurde die sauber gedruckte Scheibe aus goldfarbenem PLA mithilfe des Filzstifts deutlich Licht-UN-durchlässiger. Mit dem Filzstift wurden natürlich beide Seiten bemalt. Die allerersten Versuche klappten damit auch tadellos.
Das Drucken der Unterbrecherscheibe war für mich jedenfalls eine Herausforderung. Ein wenig Nacharbeit wird vermutlich immer notwendig sein.
Im Versuchsaufbau (Foto im ersten Beitrag) werkelt mittlerweile eine Scheibe aus ASA. (Die COVID-Sperre wurde inzwischen aufgehoben und schwarzes Nachschubmaterial bei Conrad beschafft: ASA schwarz und PLA matt schwarz.) Ich hätte die Scheibe am liebsten in PLA gedruckt, weswegen ich das PLA-matt besorgte. Das Zeug ist wirklich deutlich weniger glänzend als sonstige Farben. Dummerweise verträgt es sich nicht mit der 0.2mm Düse - mehrfach musste ich eine Düsenverstopfung beseitigen (vielleicht ist es deshalb matt, weil die Bestandteile grobkörniger vermahlen sind?). Jedenfalls klappte das matte PLA Material tadellos mit der 0.35mm Düse, weswegen ich die restlichen Teile damit druckte.
Alternativen zur gedruckten Lochscheibe
Ich kontaktierte anfangs meinen Neffen, der einen Laser-Gravierer besitzt und ich hoffte, er könne damit Alu-Folie schneiden, um es als Unterbrecherscheibe einzusetzen. Er verneinte, brachte aber dafür den Vorschlag, die Unterbrecherscheibe mit dem Laserdrucker auf Transparentfolie zu drucken. Das hatte ich daraufhin gleich getestet. Obwohl der Ausdruck schön schwarz wirkt, scheint bei Gegenlicht doch einiges durch - was andererseits unter Umständen gar nichts ausmacht - nun, vielleicht möchte das ein anderer testen (ich habe kein Bock, alles nochmals um zu konstruieren).
Bevor ich für heute Schluss mache, noch eine Explosionsdarstellung:
ExplodedView_2.jpg
Im nächsten Beitrag werde ich die zwei Lochmasken ansprechen (der rote und blaue Teil in der Explosionsdarstellung, bzw. das hellgraue und hellrosa-farbene Teil in der Schnittdarstellung im ersten Beitrag).

Jetzt sehe ich gerade, dass ich nicht auf mhiers Punkt eingegangen bin (bei mir als '1):' dargestellt).
OK.
Abschließend ist noch zu sagen, dass der Drehgeber alleine noch zu wenig ist. Dieser müsste auch in die Firmware mit eingebunden werden – und das übersteigt meine Fähigkeiten bei Weitem. Da wären wir bei Nibbels eher an der richtigeren Adresse. Und mhiers Bedenken, ob ausreichend Pins vorhanden sind oder nicht, kann ich auch nicht beantworten. Mir fehlt das Wissen und die Erfahrung. Vorschläge hätte ich (ich bin ja Träumer) - ob diese machbar, sinnvoll oder funktionieren würden, übersteigt meine Kenntnisse. Da müsste Nibbels her. Zur Not müsste der externe Controller alles machen, bis auf die Benachrichtigung an das Mainboard, den Druck zu stoppen. Mit einem externen Controller könnte man eine Menge Pins (Ports) gewinnen.
Ebenso wäre es vorteilhaft, alle Motoren gegen solche mit Achsen an beiden Enden zu tauschen, damit man den Drehgeber einfachst direkt mit dem Motor verbinden könnte. Bei der X- und Z-Achse ist genügend Platz, bei der Y-Achse wird es mit dem Netzteil kollidieren. Da müsste man das Netzteil etwas verschieben oder verlegen.


Gesundheit allerseits,

mjh11
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
mhier
Prof. Dr. des 3D-Drucks
Prof. Dr. des 3D-Drucks
Beiträge: 1672
Registriert: Fr 11. Sep 2015, 11:37
Has thanked: 279 times
Been thanked: 246 times

Re: Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von mhier »

Ich hab gerade mal in den Schaltplan geschaut. Es gibt tatsächlich zumindest beim RF1000 noch einige freie Pins auf dem "Option I/O", wenn ich das richtig sehe 10 Stück. Der Stecker (X25) dafür ist aber evtl. nicht bestückt... Mit 10 Pins könnte man im Grunde die Schritt-Information für 5 Stepper übertragen (jeweils Richting + Step-Signal). Alternativ müsste man sich an die Pins dranhängen, die an die Stepper-Treiber gehen, aber das ist dann defintiiv mit Löten verbunden...
Gruß, Martin

Klipper Firmware für den RFx000: Klipper für RFx000 | Original-Dokumentation | Diskussion | Wiki mit Installations-Anleitung

(Ich bin in diesem Forum nicht mehr aktiv)
PeterKa
Profi 3D-Drucker
Profi 3D-Drucker
Beiträge: 464
Registriert: So 7. Feb 2016, 11:04
Wohnort: Rinteln
Has thanked: 16 times
Been thanked: 237 times

Re: Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von PeterKa »

Die Idee ist grandios :)
wenn man die LED und die Phtotransitoren in SMD ausführt, kann man natürlich eine Platine machen, auf der alle Bauteile perfekt posioniert und beschaltet sind. Das ist durchaus mit Hausmitteln machbar.
Die Codierscheibe gedruckt, klingt prima, aber ich glaube nicht, daß ich das bei mir ordentlich gedruckt bekommen würde. Die Dicke der Codierscheibe ist ein weiteres Problem, das man sich einhandelt, es kommt nämlich an den Wänden zu Reflektionen, die dann Fehlmessungen provozieren. Aus dem Grunde sind die meisten Codierscheiben mattschwarz und extrem dünnwandig.
Zum Dekodieren kann man einen Arduini Nano spendieren (3-5€) der dann die Positionswerte seriell an die RF100 Firmware übermittelt. Aber egal wie, das wäre ein wirklich harter Eingriff in die doch sehr ausgelutschte Commumitiy Firmware.

Trotzdem, was für ne tolle Idee :)

PeterKa
Benutzeravatar
georg-AW
Developer
Developer
Beiträge: 536
Registriert: Mi 1. Okt 2014, 14:43
Wohnort: Schweiz Nordost
Has thanked: 40 times
Been thanked: 238 times

Re: Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von georg-AW »

hi
Man kann sich eine Encoderscheibe bei einem Hersteller von Platinen günstig machen lassen. Für das Auftragen der Lötpaste im SMD Verfahren sind Siebdruckmasken zb. in Messing erhältlich. Sie werden im Laserverfahren oder Ätztechnik hergestellt. Sie müssen deshalb aus zB 0.5mm Material sein..
ciao Georg
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2066
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 268 times
Been thanked: 544 times

Re: Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von rf1k_mjh11 »

Ich gehe zuerst einmal auf PeterKas und georg-AWs Beiträgen ein:
PeterKa hat geschrieben:… wenn man die LED und die Phtotransitoren in SMD ausführt, …
SMD Varianten der Bauteile hatte ich mir auch schon vor langem besorgt. Liegen bei mir jetzt herum. Nachdem ich nicht so der Elektroniktüftler bin, habe ich mich für die konventionellen Bauteile entschieden.
PeterKa hat geschrieben:… wenn man die LED und die Phtotransitoren in SMD ausführt, kann man natürlich eine Platine machen, auf der alle Bauteile perfekt posioniert und beschaltet sind. Das ist durchaus mit Hausmitteln machbar.
Das war auch der Vorschlag meines Neffen – wobei er vorschlug, gleich die Platine bestücken zu lassen. Kostet auch nicht die Welt, behauptet er. Die Frage wäre bloß, machen solche Firmen auch klitzekleine, nicht-runde Löcher? (Siehe nächsten Beitrag, weiter unten).
PeterKa hat geschrieben:Zum Dekodieren kann man einen Arduini Nano spendieren (3-5€) der dann die Positionswerte seriell an die RF100 Firmware übermittelt.
Ja, deshalb habe ich auch den Wemos D1 Mini gezeigt. Der müsste das auch können und kostet auch nur €3-4.
PeterKa hat geschrieben:Die Codierscheibe gedruckt, klingt prima, aber ich glaube nicht, daß ich das bei mir ordentlich gedruckt bekommen würde. Die Dicke der Codierscheibe ist ein weiteres Problem, das man sich einhandelt, es kommt nämlich an den Wänden zu Reflektionen, die dann Fehlmessungen provozieren. Aus dem Grunde sind die meisten Codierscheiben mattschwarz und extrem dünnwandig.
Wenn man sich den Link zwecks Gray Code in meinem zweiten Beitrag angesehen hat, findet man ein Bild eines zerlegten Drehgebers:
Codierscheibe(aus Wiki).jpg
Da sieht man wie es dort (auf Reflexionsbasis?) funktioniert. Eine undurchsichtige Folie (im Bild schon beschädigt) scheint auf einer Glasscheibe angebracht zu sein. Am Gegenstück (hier im Bild nicht dargestellt – siehe dazu Wiki) sieht man nur eine kleine silberne Box mit einem dünnen Schlitz. Ob dort drinnen Sender & Empfänger angebracht sind, oder ob die Erkennung kapazitiv, magnetisch oder sonst wie klappt, entzieht sich meiner Kenntnis.
Wenn es um Reflexionen geht, mache ich mir noch keine Sorgen. Die Druckauflösung (Rauigkeit, Maßabweichungen, usw.) bringt schon eine gewisse Ungenauigkeit in das System. Hier sieht man ein Schnittbild durch das Sensorpaar für Bit 0:
Section_Reflections_1.jpg
Sind deine Bedenken in etwa so (Nahaufnahme):
Section_Reflections_2b.jpg
Auch im Falle, wie hier im zweiten Bild dargestellt, mache ich mir keine Sorgen. Dazu komme ich etwas später noch genauer. Aber in so einem Fall kommt so wenig ‚Licht‘ durch, dass der Phototransistor vermutlich nicht durchschaltet. Man könnte auch die Schlitze im roten und blauen Teil ‚tiefer‘ machen, also die Sensoren von der Codierscheibe weiter entfernen. Damit erzwingt man einen Strahl der noch ‚paralleler‘ sein muss und Reflexionen stärker unterbinden würde. Trotzdem würde ich den Weg nicht gehen. Jedes Bit setzt sein eigenes Sensorpaar ein. Und nur Bit 0 besitzt relative knappe Stege zwischen den Löchern wo so ein Fehlverhalten vorkommen könnte. Bei allen anderen Bits ist der Steg ein Vielfaches der Schlitzbreite in den Sensormasken (rotes & blaues Bauteil) und lässt so was gar nicht zu. Geht es bloß um ein zu frühes Ansprechen, sind wir wieder bei der Druckerauflösung/Druckqualität. Der Gray Code sollte wiederrum gänzlich falsche Werte ausschließen und einen Fehler von maximal +/- 1.40625° zulassen. (Damit sind wir beim, von mhier berechtigt vorgebrachtem Argument, dass der Drucker vermutlich erst bei 2 verlorenen Ganzschritten reagieren wird können.)
georg-AW hat geschrieben:Man kann sich eine Encoderscheibe bei einem Hersteller von Platinen günstig machen lassen. Für das Auftragen der Lötpaste im SMD Verfahren sind Siebdruckmasken zb. in Messing erhältlich. Sie werden im Laserverfahren oder Ätztechnik hergestellt. Sie müssen deshalb aus zB 0.5mm Material sein..
Ich dachte auch schon daran, mir eine Encoderscheibe als Platine zu besorgen und dabei als Trägermaterial irgendeinen löslichen Kunststoff vorzuschreiben, das ich nachher auflösen könnte. Dann bliebe nur die reine Kupferschicht zurück. Diese Kupferschicht könnte man auf eine transparente Scheibe kleben. Bloß weiß ich nicht ob es lösliche Platinenmaterialien gibt (oder besser: völlig transparente Materialien). Mit den Technologien, die inzwischen eingesetzt werden, könnte man weit höhere Auflösungen schaffen (siehe Foto aus dem Wiki - dort scheinen 12 oder 13 Bit machbar).

So, im nächsten Beitrag geht es mit den Sensormasken weiter.

Gesundheit allseits,

mjh11
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2066
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 268 times
Been thanked: 544 times

Re: Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von rf1k_mjh11 »

Die Sensormasken/Lochmasken – für LEDs und Phototransistoren

Ursprünglich wollte ich alle 8 Phototransistoren (in SMD Ausführung) mit nur einem IR-LED bedienen – mittels Lichtleiter!
Zuerst galt es das Konzept des Lichtleiters zu prüfen. Die Prototypen durchliefen mehrere Iterationen. Ich spare mir die Details. Hier die zwei Hauptvarianten:
Lichtleitervarianten_1.jpg
Links ist eine Variante in einem Stück gedruckt. In die 8 kleinen Bohrungen wäre jeweils ein Lichtleiter, mit einem Durchmesser von 0.5mm, einzufädeln, wo dann alle 8 Lichtleiter oben in der Mitte, aus der Seite kämen. Das Kunststück habe ich nie geschafft, alle 8 hin zu bekommen, immer nur ein, zwei oder maximal drei Lichtleiter gleichzeitig klappten (nicht immer dieselben 2 oder 3 !).
Rechts im Bild eine zweiteilige Variante. Vier Lichtleiter sind zufällig im Foto eingebaut. Daher leuchten auch drei ‚Löcher‘ ganz gut, das vierte kaum (schließlich kommt nur Streulicht in den Leiter). Mit der zweiteiligen Variante wurde eine Zeitlang gebastelt. Ich weiß auch nicht, ob es damit tatsächlich klappen würde. Ich habe bei den ersten Versuchen das mit den Pull-Up Widerständen nicht ganz geschnallt und nahm daher an, dass es nicht funzt. Folglich habe ich die Methode mit den Lichtleitern aufgegeben. Dabei könnte man sich damit einiges an Baugröße, Kabel, usw. ersparen.

Damit gelang ich schließlich zu der bereits bekannten Variante aus den vorhergehenden Beiträgen, wo 8 LEDs und 8 Phototransistoren eingesetzt werden.

Die Sensormasken für LED und Transistor sind sehr ähnlich aufgebaut. Im Schnittbild im vorhergehenden Beitrag (bzgl. Reflexionen) sieht man dass an jeder Sensorposition ein -
  • Schlitz - Die Schlitze haben alle unterschiedliche Breiten, das engste bei Bit 7, dann zunehmend breiter
  • Konus - Die Achse des Konus befindet sich genau über der Mitte des Schlitzes
  • Radius - Keine besondere Funktion - sieht einfach 'schön' aus.
vorhanden ist.

Alle folgenden Aussagen gelten sowohl für den IR-LED als auch für den Phototransistor.

Der Konus sorgt dafür, dass sich das LED schön zentrieren kann. Ein kleines Stück Schaumstoff (ca. 3x3x3mm) hinter dem LED drückt dieses spielfrei in den Konus (und kompensiert damit auch die Fertigungstoleranzen). Damit sitzt das LED, ohne zu wackeln, ausreichend fest.
Der LED Halter (in der Explosionszeichnung grün) und der Halter für die Phototransistoren (im Bild orange dargestellt) sind ähnlich, unterscheiden sich nur geringfügig, da diese an den Abmaßen der jeweiligen Bauteile angepasst sind (Durchmesser und Länge weichen zwischen LED und Transistor leicht voneinander ab).
Das Muster der Schlitze in beiden Masken muss sich natürlich decken. Damit es zu keinen großen Abweichungen kommt, zentrieren sich beide Masken zueinander. Die Schlitze haben alle unterschiedliche Breiten, da diese vom Radius abhängig sind (theoretisch zumindest). Der engste Schlitz ist jener am weitesten Innen (entspricht Bit 7):
SensorMask_PhotoTrans_1.jpg
Der Schlitz hat laut CAD nicht einmal 0.4mm (0.392mm). Dazu ist zu sagen, dass der Schlitz um mehr als 0.1mm BREITER gezeichnet wurde, denn theoretisch sollte es nur 0.265mm breit sein! Das Extramaß wurde bewusst dazu gegeben, denn so kleine Löcher werden meist noch kleiner gedruckt.

Die Länge der Schlitze (in radialer Richtung) beträgt 1.2mm.

Etwas problematisch wird es für Bit 7 in der gegenüberliegenden Maske, da hier ein größeres Loch für die Nabe der Unterbrecherscheibe benötigt wird. Hier eine CAD-Nahaufnahme:
SensorMask_IR-LED_1.jpg
Man muss beim LED eine kleine Flachstelle anbringen, damit die Achse des LEDs den zugehörigen Schlitz zumindest etwas überdecken kann. Zugegeben, es handelt sich um eine Lösung mit dem Vorschlaghammer, klappt aber. Es handelt sich hier um Bit 7. Dieses ist für 180° ‚an‘ und für 180° ‚aus‘. Damit besteht kaum Gefahr, dass zwischendurch ein falsches Signal übermittelt wird, wenn man einmal ein ordentliches Signal, mittels korrektem Pull-Up Widerstand, eingestellt hat.

Hier ein Foto einer der Masken (Reservebauteil, nicht verbaut):
SensorMask_PhotoTrans_2b.jpg
Man sieht zwei konzentrische Ringe. Diese sind nur 0.25mm breit und stehen nur 0.15mm über die Oberfläche vor. Man muss also mit dem Slicer spielen, die Layerhöhe, usw. anpassen, damit die zwei Ringe gelingen. Diese dienen dazu, dass die Unterbrecherscheibe nicht vollflächig an den zwei Masken reibt.

Ebenso kommt man um eine Nacharbeit der Teile nicht umhin (vermutlich). Ich nahm ein 0.5mm Federstahldraht, schliff diesen auf ca. 0.33mm beidseitig etwas ab und benutzte es um die Schlitze ‚auszuputzen‘.

Alle Teile lassen sich übrigens ohne Support drucken.

Das reicht einmal für heute.

Gesundheit allerseits,

mjh11
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Benutzeravatar
georg-AW
Developer
Developer
Beiträge: 536
Registriert: Mi 1. Okt 2014, 14:43
Wohnort: Schweiz Nordost
Has thanked: 40 times
Been thanked: 238 times

Re: Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von georg-AW »

Hi
Plastiklichtleiter mit 0.5mm Durchmessser ( zb. von Toyo Rayon ) , einseitig gebündelt zur Ankoppelung an eine IR LED wären durchaus geeignet für dein Vorhaben.

Dazu müssten auf der Senderseite alle 8 Lichtleiter in einer Messinghülse gefasst werden. Deren Innendurchmesser muss so sein, dass alle gerade hineinpassen. Die Verklebung erfolgt mit einem dünnflüssigen Epoxidkleber ( leicht erwärmen ) Der Kleber wird durch die Kapillarwirkung automatisch hochgezogen. Aushärten. Stirnseite planschleifen mit 1000 / 4000 Schleifpapier, als Ersatz geht auch die Diamantnagelfeile deiner Frau.
Die anderen Enden sollten je in einer zb. Ms Kabelendhülse genau gleich eingeklebt und geschliffen werden.
Ungenügender Schliff = Lichtverlust !

Die folgenden Punkte sind essentiell:

Als IR Sender unbedingt eine IR LED mit möglichst schmalen Abstrahlwinkel verwenden. Die LED muss !! eine Linse ( plankonvex ) haben zb. SMD Version zb von Lumileds. Die üblichen IR LEDs haben meist keine Linse und strahlen breit ab. Da im Lichtleiter keine Lichtkonzentration stattfindet ( es gilt Einstrahlwinkel = Austrittswinkel ) wird andernfalls nur sehr wenig Licht in die Lichtleiter eingekoppelt. Die Verluste durch die Einkoppelung generell sind schon massiv, auch mit Linse !. Alternativ würde es helfen, die Sender LED im Impulsbetrieb laufen zu lassen oder bei den Empfängern eine Transistorverstärkerstufe einzufügen. ( Emitterschaltung )

Auf der Empfängerseite empfiehlt ess sich, ebenfalls Phototransistoren mit schmalem Öffnungswinkel zu verwenden zb. 3mm Gehäuse. Es gibt aber auf dem Markt auch IR geeignete SMD Phototransistoren mit planconvexer Linse.
Wenn Platz vorhanden kann zb. eine BPX 43 IIII verwendet werden, hat aber TO18 Gehäuse Metall, Öffnungswinkel +- 15°. Uralte Type zb. von Osram. Oder SMD SFH 3219Z von Osram Öffnungswinkel + - 25° > optisch üngünstiger.

Last but not least: Der minimale Biegeradius der Lichtleiter darf nirgends zu klein sein sonst tritt einer grosser Teil des Lichts an der Stelle aus, die Reflexion innerhalb des Lichtleiters ist stark reduziert. Hersteller Datenblatt zb. 5mm min.
Die Lichtleiter dürfen keine äusseren Verletzungen aufweisen weil auch da Licht austreten kann.

ciao Georg
Benutzeravatar
rf1k_mjh11
Developer
Developer
Beiträge: 2066
Registriert: Di 6. Jan 2015, 19:44
Wohnort: Autriche
Has thanked: 268 times
Been thanked: 544 times

Ein Drehgeber mit 8-bit Auflösung, 3D-gedruckt!

Beitrag von rf1k_mjh11 »

Hallo Georg/georg-AW,
georg-AW hat geschrieben:Als IR Sender unbedingt eine IR LED mit möglichst schmalen Abstrahlwinkel verwenden.
Ich nahm, was ich beim 'C' finden konnte. Der Abstrahlwinkel ist 50° (siehe Stückliste im Download Bereich, ebenso alle CAD Modelle).
georg-AW hat geschrieben:Auf der Empfängerseite empfiehlt ess sich, ebenfalls Phototransistoren mit schmalem Öffnungswinkel zu verwenden zb. 3mm Gehäuse.
Da gilt das selbe, wobei hier nur 12° angegeben sind.
georg-AW hat geschrieben:Der minimale Biegeradius der Lichtleiter darf nirgends zu klein sein sonst tritt einer grosser Teil des Lichts an der Stelle aus, die Reflexion innerhalb des Lichtleiters ist stark reduziert.
Ja das hatte ich gesehen - 'minimaler Biegeradius = 10X Durchmesser (bei 0.5mm also 5mm). Ich gebe zu, im CAD kam ich beim Radius stellenweise bis auf 4.2mm an ein oder zwei der 8 Leiter ran. Zur Not hatte ich mir auch 0.25mm Lichtleitermaterial schicken lassen - von einem Modelleisenbahn Geschäft in Deutschland. Ich schätze, so was wird für Fahrzeug-, Waggon- und Straßenbeleuchtung hergenommen. Da kommt natürlich noch viel weniger Lichtenergie durch....
georg-AW hat geschrieben:Die anderen Enden sollten je in einer zb. Ms Kabelendhülse genau gleich eingeklebt und geschliffen werden.
Ungenügender Schliff = Lichtverlust !
Ist das auch nicht 'Overkill'? Auch wenn ich 80% des Lichts 'verliere', kann ich ein Gutteil wieder mit dem Pull-Up wettmachen, oder? Außerdem, kann ich nicht einfach mit 3 X so viel Licht rein, wie benötigt wird? Wenn da 60% verloren gehen, kommt am anderen Ende doch noch genügend 'raus', oder? Oder sehe ich das falsch? (Hinweis: mein Elektronikwissen und -erfahrung lässt sehr zu wünschen übrig). So lange ich die Lichtleiter thermisch nicht überlaste....

Übrigens könnte man den Nachteil eines großen Abstrahlwinkels eines LEDs nicht so 'umgehen'?:
Abstrahlwinkel.jpg
Also die Lichtleiter nicht parallel führen....

Gesundheit allseits,

mjh11
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RF1000 (seit 2014) mit:
  Pico Hot End (mit eigenem Bauteil- und Hot End Lüfter)
  Ceran Bett
  FW RF.01.47 (von Conrad, modif.)

Die Natur kontert immer sofort mit einem besseren Idioten.
Antworten

Zurück zu „Erweiterungen“