Forum: Mikrocontroller und Digitale Elektronik Frage zu Endschalter an zwei µC


von Frank U. (ultimaker)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich habe hier einen Ultimaker 2 3D Drucker, der Microendschalter jeweils 
in der X, Y und Z-Achse verbaut hat, um die Endposition zu erkennen wenn 
ein Druck fertig gestellt wurde.

Die Frage klingt nun für jemanden der sich gut mit µC Technik und 
Elektronik auskennt wahrscheinlich etwas blöd ... aber ist es möglich, 
dass ich das Schaltsignal von diesen Endschaltern zusätzlich mit einem 
anderen Microcontroller auch noch abfrage? Also z.B dass ich den X- 
Endschalter zusätzlich an einen Arduino hänge (Digitaler Eingang?)und so 
auch dort das Signal 0/1 bekomme, je nachdem ob er betätigt ist oder 
nicht.
Bin mir nicht sicher ob sich die zwei Controller dann gegenseitig 
irgendwie beeinflussen wenn ich den Endschalter doppelt abfrage?

Ich stelle mir das dann so wie auf der Skizze im Anhang vor.

Danke!

von Thomas (Gast)


Lesenswert?

Zeichne mal 5V (oder andere Versorgungsspannung) und GND in deinen 
"Schaltplan" mit ein :-)

von Günter N. (turtle64)


Lesenswert?

Das ist so einfach nicht zu beantworten.

Es gibt (mindestens) 2 Möglichkeiten, einen Eingang abzufragen.
a) Beim Betätigen des Schalters eine Spannung auf den Eingang 
durchschalten, Eingang geht auf High.
b) Beim Betätigen des Schalters eine Spannung, die am Eingang liegt, auf 
Masse runterziehen, Eingang geht auf Low. (Diese Möglichkeit ist meist 
besser, weil sie eine Kabelbrucherkennung erlaubt)

In Deinem Fall müssten beide Eingänge gleich funktionieren, das musst Du 
prüfen.

Außerdem müssen beide Controller mit der gleichen Spannung arbeiten, und 
die Massen müssen verbunden sein.

Sicherer wäre, mit dem Mikroschalter ein Relais 2xUm zu betätigen und 
mit den beiden Controllern je einen der Umschalter abzufragen.

von Georg (Gast)


Lesenswert?

Frank U. schrieb:
> Bin mir nicht sicher ob sich die zwei Controller dann gegenseitig
> irgendwie beeinflussen wenn ich den Endschalter doppelt abfrage?

Wenn GND der beiden Controller verbunden ist, geht das, z.B. wenn der 
Schalter nach GND schaltet und einen Pullup-Widerstand hat. In dem Fall 
würde ich einen Pullup in beiden Controllern vorsehen, die wirken dann 
wie ein einziger mit dem halben Widerstand, das macht aber nix wenn sie 
hochohmig genug sind, und so funktioniert es auch noch, wenn ein 
Controller ausgeschaltet ist. Es kann dann akllerdings sein, dass der 
Eingang des ausgeschalteten Controllers durch seine Begrenzungsdioden 
das Signal auf Lo zieht, das kann man aber verhindern mit einem 
Widerstand vor jedem Eingang.

Ein weniger offensichtliches Problem könnte sein, dass der Schalter 
entprellt werden muss, und dass die Entprellroutinen in beiden 
Controllern unter ungünstigen Umständen zu unterschiedlichen Ergebnissen 
kommen. Das muss man eben prüfen - was passiert wenn ein Controller EIN 
erkennt und der andere nicht.

Georg

von Frank U. (ultimaker)


Lesenswert?

Danke für deine Ausführliche Antwort.
Also der Endschalter ist nur 2-polig angeschlossen an den 
Microcontroller vom 3D-Printer.
Im Prinzip so:
http://www.printme3d.com/ulitmaker-endstoppack.html

Sind die nicht einfach zwischen einem Digitalen Pin und Ground? Und je 
nachdem ob betätigt, oder nicht erhalte ich am jeweiligen Pin dann 0 
oder 1 ?
Oder bin ich da komplett falsch mit meiner Überlegung?

Eventuell wäre es doch besser einen zusätzlichen Endschalter zu 
verwenden wenn es da noch andere Probleme geben kann (Entprellen etc.)

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Frank U. schrieb:
> Oder bin ich da komplett falsch mit meiner Überlegung?

Vielleicht, vielleicht auch nicht. Das hängt von der Eingangsschaltung 
des Druckers ab, die weder du noch wir kennen. Du kannst aber versuchen 
nachzumessen, ob ein Ende de Schalters mit GND verbunden ist (musst du 
erst mal finden) und das andere Ende beim Schalten zwischen GND und plus 
3..5 V wechselt.

Georg

von Frank U. (ultimaker)


Lesenswert?

Georg schrieb:
> Frank U. schrieb:
>> Oder bin ich da komplett falsch mit meiner Überlegung?
>
> Vielleicht, vielleicht auch nicht. Das hängt von der Eingangsschaltung
> des Druckers ab, die weder du noch wir kennen. Du kannst aber versuchen
> nachzumessen, ob ein Ende de Schalters mit GND verbunden ist (musst du
> erst mal finden) und das andere Ende beim Schalten zwischen GND und plus
> 3..5 V wechselt.
>
> Georg

Das wäre glaube ich nicht das Problem, das PCB vom Drucker ist das hier:
https://jtechphotonics.com/wp-content/uploads/2014/04/Laser-Connection-Ultimaker-2.jpg

Die Endschalter hängen an X-Stop, Y-Stop und Z-Stop. Dort müsste ich ja 
nachmessen können?

von Jochen (Gast)


Lesenswert?

Frank U. schrieb:
> Danke für deine Ausführliche Antwort.
> Also der Endschalter ist nur 2-polig angeschlossen an den
> Microcontroller vom 3D-Printer.
> Im Prinzip so:
> http://www.printme3d.com/ulitmaker-endstoppack.html
>
> Sind die nicht einfach zwischen einem Digitalen Pin und Ground? Und je
> nachdem ob betätigt, oder nicht erhalte ich am jeweiligen Pin dann 0
> oder 1 ?
> Oder bin ich da komplett falsch mit meiner Überlegung?
>
> Eventuell wäre es doch besser einen zusätzlichen Endschalter zu
> verwenden wenn es da noch andere Probleme geben kann (Entprellen etc.)

Günter hat ja schon die beiden prinzipiellen Möglichkeiten beschrieben.

Wie Du das am besten machst, hängt im wesentlichen davon ab, was Du Dir 
zutraust. Die einfachste Möglichkeit, bei der Du ohne weitere Kenntnisse 
relativ sicher gehst, dass Du nichts kaputt machst, ist, wie Du 
vorschlugst ein zweiter Endschalter. Das wird dann nur mechanisch eine 
Herausforderung, die beiden Schalter in einem Toleranzbereich, der eng 
genug ist, fast zur selben Zeit, wenn sie betätigt werden, schalten zu 
lassen. Das kann schwierig werden; hängt davon ab wieviel Geduld und 
mechanisches Geschick Du aufbringen kannst.
Übrigens ist das Entprellen mit ziemlich sicher kein Problem. Das ist 
ein Vorgang, der per Software in den beiden uCs abläuft und der keine 
Rückwirkung auf den Schalter und den jeweils anderen uC hat.

Mechanisch einfacher, weil es eben dann nur einen Schalter gibt, bei der 
die Schaltposition ausser Frage steht, ist eine elektrische Lösung. 
Allerdings erfordert das vermutlich Eingriffe in die Elektronik und 
wahrscheinlich auch in die Software. Dazu wäre es gut wenn Du den 
Schaltplan beider Platinen postest.

von Jochen (Gast)


Lesenswert?

Frank U. schrieb:

> Das wäre glaube ich nicht das Problem, das PCB vom Drucker ist das hier:
> 
https://jtechphotonics.com/wp-content/uploads/2014/04/Laser-Connection-Ultimaker-2.jpg
>
> Die Endschalter hängen an X-Stop, Y-Stop und Z-Stop. Dort müsste ich ja
> nachmessen können?

Der Link zeigt einen Bestückungsplan und keinen Schaltplan. Den 
letzteren würde man benötigen. Und, wie gesagt, von beiden Platinen.

Vermutlich wird man den Quelltext von der Software nicht sehen können, 
oder doch?

Das Problem ist vermutlich, dass Pull-Ups verwendet werden. Falls es die 
internen Pull-Up-Widerstände der uCs sind, und in beiden uCs die 
Pull-Ups aktiviert sind (was vermutlich so ist) dann könnte der Strom 
höher als gewünscht werden. Das kann man aber nur in Software ändern. 
Falls Du aber Glück hast, sind die Widerstände extern als eigene 
Bauteile realisiert.

von Karl (Gast)


Lesenswert?

Mach einfach mal bitte erst ein Tutorial mit schaltern und µC. In dem 
Tutorial sollten die Begriffe Pull-up und Pull-down vorkommen.

Um mal auf das Problem einzugehen, dein Schalter hat 2 Kabel eins ist an 
V+ angeschlossen das andere Ende am µC. Wenn der Schalter geschlossen 
ist, liegt durch die Verbindung V+ auch am µC-Pin. Was aber passiert 
wenn der Schalter geöffnet wird? Die Verbindung zwischen V+ und µC wird 
getrennt. Das bedeutet aber nicht, dass aufeinmal die Spannung am dem 
µC-Pin auf 0V geht. Es würde ein undefinierter Zustand entstehen. 
Deshalb wird zwischen GND und µC-Pin ein Pull-down Widerstand 
angeschlossen. Der sorgt dafür, dass das Potential in der Leitung auf 
GND geht.

Du kannst die das wie einen Gartenschlauch vorstellen der am Haus einen 
Wasserhahn hat und am Ende eine Spritze. Wenn du den Wasserhahn 
aufdrehst (Schalter geschlossen) geht Druck auf den Schlauch, den Kannst 
du an der Spritze auch messen. Wenn jetzt die Spritze geschlossen ist 
(hochomig, wie ein µC-Pin) und du den Hahn zudreht, wirst du immer noch 
druck im schlauch haben und den würde man auch an der Spritze messen. Um 
also zu wissen ob der Hahn offen oder geschlossen ist, musst du mit der 
Spritze etwas Wasser aus dem Schlauch ablassen (Pull-down), entweder 
geht dann der Druck zurück (geschlossen) oder er bleibt gleich, dann ist 
der Hahn geöffnet.

von Karl (Gast)


Lesenswert?

P.S., dass der Schalter an V+ ist, ist nur eine Annahme.

von Frank U. (ultimaker)


Angehängte Dateien:

Lesenswert?

Habe den Schaltplan gefunden.
Also zwischen 5V und GND mit Pullup wenn ich das richtig sehe?

: Bearbeitet durch User
von Jochen (Gast)


Lesenswert?

Frank U. schrieb:
> Habe den Schaltplan gefunden.
> Also zwischen 5V und GND mit Pullup wenn ich das richtig sehe?

Da Dein verlinktes Bild nur Schalter mit zwei Anschlüssen zeigt, 
schliesse ich messerscharf ;-), dass es sich um den Schaltplan einer der 
beiden Platinen handelt. Bitte poste den Schaltplan beider Platinen.

von Frank U. (ultimaker)


Lesenswert?

Jochen schrieb:
> Frank U. schrieb:
>> Habe den Schaltplan gefunden.
>> Also zwischen 5V und GND mit Pullup wenn ich das richtig sehe?
>
> Da Dein verlinktes Bild nur Schalter mit zwei Anschlüssen zeigt,
> schliesse ich messerscharf ;-), dass es sich um den Schaltplan einer der
> beiden Platinen handelt. Bitte poste den Schaltplan beider Platinen.

Also das ist der Schaltplan vom 3D-Drucker, so wie die Endschalter 
angeschlossen sind.
Hier sind alle Files bzw. der ganze Schaltplan:
https://github.com/Ultimaker/Ultimaker2/blob/master/1091_Main_board_v2.1.1_(x1)/Main%20Board%20V2.1.1.pdf

Und ich würde einen Arduino Mega verwenden, als zweiten µC:
https://www.arduino.cc/en/uploads/Main/arduino-mega2560_R3-schematic.pdf

danke!

: Bearbeitet durch User
von Jochen (Gast)


Lesenswert?

Sehr schön. Danke.

Also. Da die zweite Platine, der Arduino, Port-Pins ohne externe 
Pull-Ups (oder Pull-Downs) hat, brauchst Du elektrisch nichts zu ändern.

Du kannst (unter einer weiteren Voraussetzung, von der ich unten 
schreibe) den Arduino ohne weiteres parallel an den Schalter 
anschliessen. Elektrisch ist das völlig in Ordnung (etwa an die 
unbenutzten Pins von Port A).

Jetzt kommt das zweite Problem mit der Software. Schreibst Du die 
selbst? Falls nicht, kommst Du an den Quelltext?

Der Punkt ist nämlich, das der ATMega eingebaute Pull-Up-Widerstände 
hat, die sich per Software ein- oder ausschalten lassen.

Falls Du die Software selbst schreibst, ist es einfach. Schalte die 
Pull-Ups einfach nicht ein.

Falls Du Fremdsoftware verwendest, von der Du den Quellcode nicht 
hast, musst Du feststellen, ob die internen Pull-Ups eingeschaltet sind. 
Das ist einfach. Starte die SW und miss mit dem Voltmeter an dem 
jeweiligen Pin.

Falls Du den Quellcode hast und die Pull-Ups eingeschaltet sind, ändere 
den Quellcode so, dass die Pull-Ups ausgeschaltet bleiben. Da helfen wir 
hier gerne.

Alles klar?

von Frank U. (ultimaker)


Lesenswert?

Jochen schrieb:
> Sehr schön. Danke.
>
> Also. Da die zweite Platine, der Arduino, Port-Pins ohne externe
> Pull-Ups (oder Pull-Downs) hat, brauchst Du elektrisch nichts zu ändern.
>
> Du kannst (unter einer weiteren Voraussetzung, von der ich unten
> schreibe) den Arduino ohne weiteres parallel an den Schalter
> anschliessen. Elektrisch ist das völlig in Ordnung (etwa an die
> unbenutzten Pins von Port A).
>
> Jetzt kommt das zweite Problem mit der Software. Schreibst Du die
> selbst? Falls nicht, kommst Du an den Quelltext?
>
> Der Punkt ist nämlich, das der ATMega eingebaute Pull-Up-Widerstände
> hat, die sich per Software ein- oder ausschalten lassen.
>
> Falls Du die Software selbst schreibst, ist es einfach. Schalte die
> Pull-Ups einfach nicht ein.
>
> Falls Du Fremdsoftware verwendest, von der Du den Quellcode /nicht/
> hast, musst Du feststellen, ob die internen Pull-Ups eingeschaltet sind.
> Das ist einfach. Starte die SW und miss mit dem Voltmeter an dem
> jeweiligen Pin.
>
> Falls Du den Quellcode hast und die Pull-Ups eingeschaltet sind, ändere
> den Quellcode so, dass die Pull-Ups ausgeschaltet bleiben. Da helfen wir
> hier gerne.
>
> Alles klar?


Danke dir,

ja die Software für den zusätzlichen µC würden wir selbst dafür 
schreiben, bzw. ein Kollege von mir der weitaus mehr Ahnung hat von dem 
Zeugs als ich (Sollten ja nur ein paar Zeilen sein denke ich).
Die Pullups sind beim Arduino standardmäßig deaktiviert?

LG

: Bearbeitet durch User
von Jochen (Gast)


Lesenswert?

Frank U. schrieb:

>
> Danke dir,

Bitteschön.

> ja die Software für den zusätzlichen µC würden wir selbst dafür
> schreiben, bzw. ein Kollege von mir der weitaus mehr Ahnung hat von dem
> Zeugs als ich (Sollten ja nur ein paar Zeilen sein denke ich).
> Die Pullups sind beim Arduino standardmäßig deaktiviert?
>
> LG

Was die internen Pull-Up-Widerstände betrifft, kann ich das nur für den 
ATMega2560 im Auslieferungszustand sagen: Dort sind die 
Pull-Up-Widerstände nach dem Reset deaktiviert.

Allerdings kann ich nicht sagen, was die Arduino-Firmware tut. Das 
sollte aber der von Dir erwähnte Kollege wissen bzw. aus der 
Dokumentation ermitteln können. Ich meine mich aber dunkel zu erinnern, 
dass das entsprechende Register auch mit der Arduino-API zu ändern ist. 
Notfalls kann man ja nachmessen.

Notfalls schmeisst man halt das Arduino-Gewusel (Du siehst, die Dinger 
sind mir nicht sympathisch :-) ) raus.

Das sollte kein Problem sein.

von Einer K. (Gast)


Lesenswert?

Frank U. schrieb:
> Die Pullups sind beim Arduino standardmäßig deaktiviert?

Das steht im Datenblatt des Prozessors, und Arduino ändert daran nichts.
Außer, wenn du Wire nutzt, dann werden für die Pins die Pullups 
aktiviert.

von Frank U. (ultimaker)


Lesenswert?

Arduino F. schrieb:
> Frank U. schrieb:
>> Die Pullups sind beim Arduino standardmäßig deaktiviert?
>
> Das steht im Datenblatt des Prozessors, und Arduino ändert daran nichts.
> Außer, wenn du Wire nutzt, dann werden für die Pins die Pullups
> aktiviert.

Aber doch nur an den entprechenden I2C Pins/Leitungen, oder?
Die Sache ist nämlich die, dass an dem Arduino den ich verwenden möchte 
dafür noch andere Sensoren über I2C angeschlossen sind.

: Bearbeitet durch User
von Frank U. (ultimaker)


Lesenswert?

Jochen schrieb:
> Frank U. schrieb:


> Notfalls schmeisst man halt das Arduino-Gewusel (Du siehst, die Dinger
> sind mir nicht sympathisch :-) ) raus.

Darauf habe ich leider keinen Einfluss ;) Ich selbst bin Maschinenbauer, 
kenne mich mit dem Microcontroller Zeugs nur sehr marginal aus, die 
Sachen die man halt im Laufe der Zeit so mitbekommt. :)

von Jochen (Gast)


Lesenswert?

Frank U. schrieb:
> Jochen schrieb:
>> Frank U. schrieb:
>
>
>> Notfalls schmeisst man halt das Arduino-Gewusel (Du siehst, die Dinger
>> sind mir nicht sympathisch :-) ) raus.
>
> Darauf habe ich leider keinen Einfluss ;) Ich selbst bin Maschinenbauer,
> kenne mich mit dem Microcontroller Zeugs nur sehr marginal aus, die
> Sachen die man halt im Laufe der Zeit so mitbekommt. :)

Naja. Dann brauchen wir aber nicht so ins Detail zu gehen. Dass Du den 
Endschalter dem Grunde nach an die beiden Platinen anschliessen kannst, 
reicht dann doch als Information für Dich. Den Rest macht der Software- 
bzw. Hardwareentwickler. Dem hättest Du eigentlich auch die Frage aus 
Deinem Eröffnungspost stellen können.

Ändert den Lauf der Welt nicht, aber das hättest Du auch einfacher haben 
können.
Es ist ja ein Unterschied, ob ein Maschinenbauer mal eine Auskunft 
braucht die sich auf die Mechanik/Physis auswirkt oder ob jemand der 
3D-Druck-Fan ist, sich notgedrungen und mit geringsten Grundkenntnissen 
mit Elektronik und Softwarefragen beschäftigen muss.

von Cha-woma M. (Firma: --------------) (cha-ar-196)


Lesenswert?

Frank U. schrieb:
> Bin mir nicht sicher ob sich die zwei Controller dann gegenseitig
> irgendwie beeinflussen wenn ich den Endschalter doppelt abfrage?
>
> Ich stelle mir das dann so wie auf der Skizze im Anhang vor.
>
> Danke!

Zwei Eingänge parallel bringt Probleme.
Werde dir klar  über welchen Eingang  soll der Schalter mit +V versorgt 
werden, da dürfte zu 99,9% nur die original Spannungsversorung in Frage 
kommen.
Und lass den zweiten Eingang nur passiv die Spannung einlesen.
Dazu muß die Schaltung auf der gleichen Bezugsmasse liegen und der 
Eingang sehr hochohmig sein.


Am einfachsten wäre es einen Endschalter zu verwenden der 2X Schließer 
hat!
Damit dürfte alles eifacher sein.
Wichtig ist noch, das die Endschalter mechanisch  nur durch einen 
Anschlag angesteuert werden.
sonst könnte es zu inkonsitenten Signalzuständen kommen. Also Schalter A 
erkennt "auf", Schalter B ist immer noch "geschlossen".

Alternative wäre ein Signalvervielfältiger.
Da wäre dann noch die Speisung zu  klären (Wo kommt die 
Spannungsversorgung her).

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.