Gargamel
17.03.2016, 13:48 |
Microcontroller steuert mehrere Kollegen (Elektronik) |
Hallo Zusammen
Ich setze in meinem Projekt mehrere autonom arbeitende Microcontroller ein (Arduino kompatible AVRs). Dabei gibt es ein Szenario in welchem ein Master mehrere Slaves (ca. 20 Stück) synchronisieren muss. Dazu soll der Master einen Ausgang auf HIGH setzen, woraufhin alle Slafes auf bereitschaft gehen und beim eintreffen des LOW Pegels mit der Arbeit beginnen.
Zwischen den Microcontrollern sind ungeschirmte Kupferkabel verlegt. Die Kabellänge kann schon mal 5 Meter betragen (für eine Verbindung vom Master zu einem Slave).
Ein Beispielschaltplan habe ich angehängt.
Meine Frage: Funktioniert dies so? Bzw. was müsste ich ändern?
Meine Bedenken: Anzahl der Slaves an einem Pin, und die Kabellänge.
Danke
Gargamel
 |
pfuscher

17.03.2016, 14:37
@ Gargamel
|
Microcontroller steuert mehrere Kollegen |
Hallo!
Ich schalte mit dem Ausgang des Master einen Transistor, der 5V an die Eingänge der Slave gibt. Dort sitzten 1k zur Strombegrenzung und 10k pull down.
--> perfektes high/low auf Leitungslängen bis 10m, getestet.
Gruß |
Offroad GTI
17.03.2016, 14:43 (editiert von Offroad GTI am 17.03.2016 um 14:44)
@ Gargamel
|
Microcontroller steuert mehrere Kollegen |
» Meine Bedenken: Anzahl der Slaves an einem Pin, und die Kabellänge.
Wie synchron soll es denn sein? Im "Ernstfall" müssen halt alle Verbindungsleitungen gleich lang sein, damit es keine Laufzeitunterschiede gibt.
20 µCs mit einem Ausgangs anzusteuern ist i.d.R. kein Problem. |
Gargamel
17.03.2016, 15:53
@ pfuscher
|
Microcontroller steuert mehrere Kollegen |
Danke fürs Feedback.
» Ich schalte mit dem Ausgang des Master einen Transistor, der 5V an die
» Eingänge der Slave gibt. Dort sitzten 1k zur Strombegrenzung und 10k pull
» down.
Ergeben die 10k pulldowns dann nicht eine Parallelschaltung? Bei 20 Slaves also nur noch 500 Ohm Pulldown? |
Gargamel
17.03.2016, 15:56
@ Offroad GTI
|
Microcontroller steuert mehrere Kollegen |
» » Meine Bedenken: Anzahl der Slaves an einem Pin, und die Kabellänge.
» Wie synchron soll es denn sein? Im "Ernstfall" müssen halt alle
» Verbindungsleitungen gleich lang sein, damit es keine Laufzeitunterschiede
» gibt.
Na ganz so kritisch ist die Anforderung nicht. 1ms reicht locker. Ohne das berechnet zu haben, müsste das sowohl die HW wie auch die SW locker mitmachen.
Es geht mir nur darum in sauberes Signal zu haben und nicht von Störungen geplagt zu werden - oder den Master zu überlasten...
» 20 µCs mit einem Ausgangs anzusteuern ist i.d.R. kein Problem.
Danke |
pfuscher

17.03.2016, 21:09
@ Gargamel
|
Microcontroller steuert mehrere Kollegen |
» Ergeben die 10k pulldowns dann nicht eine Parallelschaltung? Bei 20 Slaves
» also nur noch 500 Ohm Pulldown?
Nein. Jeder Slave-Eingang bekommt die 1k/10k-Kombination. |
geralds

Wien, AT, 17.03.2016, 21:36 (editiert von geralds am 17.03.2016 um 21:41)
@ Gargamel
|
Microcontroller steuert mehrere Kollegen |
Hi,
empfehle einen ordentlichen abgeschlossenen Bus mit sym. Leitung und Bustreiber machen.
Weil, 20x 5m = 100m /oder liege ich hier falsch? weil die 20Stk eh nebeneinander wären, und nur einmal vom Master 5m abgesetzt?
Es kann Reflexionen geben, wird geben.
RS422 zB., wenn du nur eine Richtung hast, bzw. halbduplex.
https://de.wikipedia.org/wiki/EIA-422
Sparen am falschen Platz würde nicht gut sein.
Und die Node ganz knapp an der Leitung, Abzweigung.
Grüße
Gerald
--- -- ...und täglich grüßt der PC:
"Drück' ENTER! Feigling!" |
Gargamel
18.03.2016, 09:10
@ pfuscher
|
Microcontroller steuert mehrere Kollegen |
» Nein. Jeder Slave-Eingang bekommt die 1k/10k-Kombination.
Also ungefähr so?
Oder lässt Du Begrenzung und Transistor am Master auch weg?
 |
Gargamel
18.03.2016, 09:20
@ geralds
|
Microcontroller steuert mehrere Kollegen |
Hallo Gerald
» Weil, 20x 5m = 100m /oder liege ich hier falsch? weil die 20Stk eh
» nebeneinander wären, und nur einmal vom Master 5m abgesetzt?
Die Anlage hat eine Grundfläche von 2x3 Metern. In diesem Feld sind die Microcontroller "verteilt". Die Topologie wird voraussichtlich einem Bus entsprechen, da parallel dazu auch ein I2C Bus (mit Bus-Treibern) zum Einsatz kommt.
Der hier diskutierte Eingang dient nicht dem Datentransfer, sondern nur der Synchronisation (ist nur ca. alle 5-15min erforderlich). "Kritisch" ist hier lediglich die Synchrone Erfassung der LOW Flanke.
Als Ergänzung zum Bus sind allenfalls abgesetzte Slaves denkbar (vermutlich dann ohne I2C). Die würden vom Bus mit max. 1.5m abzweigen.
Mir ist bewusst, dass die Konstellation so kaum für einen highspeed Datentransfer geeignet ist. Die Ansprüche sind sehr gering. Daher hoffe ich ohne aufwendige Lösungen auszukommen. Für eine Datenverbindung wäre EIA-422 sicher eine gute Wahl. |
geralds

Wien, AT, 18.03.2016, 10:02
@ Gargamel
|
Microcontroller steuert mehrere Kollegen |
Hi,
aha, danke, alles klar soweit....
» Hallo Gerald
»
» » Weil, 20x 5m = 100m /oder liege ich hier falsch? weil die 20Stk eh
» » nebeneinander wären, und nur einmal vom Master 5m abgesetzt?
»
» Die Anlage hat eine Grundfläche von 2x3 Metern. In diesem Feld sind die
» Microcontroller "verteilt". Die Topologie wird voraussichtlich einem Bus
» entsprechen, da parallel dazu auch ein I2C Bus (mit Bus-Treibern) zum
» Einsatz kommt.
» Der hier diskutierte Eingang dient nicht dem Datentransfer, sondern nur der
» Synchronisation (ist nur ca. alle 5-15min erforderlich). "Kritisch" ist
» hier lediglich die Synchrone Erfassung der LOW Flanke.
"LOW" erfassen - aber oben bei hast einen Pull-Down?? - dann wäre die aktive Flanke ein HIGH.
Auch bei der Schaltung, die du pfuscher gepostet hast,
ist mit pull-down belegt.
Willst LOW erfassen, würde ich das mit aktiv LOW verstehen, also einen Pull-High als Abschluss_R zu nehmen,
weil High dann der Ruhezustand wäre.
-> Vorschlag:
ich würde einen kräftigeren N_MOSFET-Transi als Treiber nehmen.
Die Eingänge bei jedem Slave mit Pull-up an die 100k und einen Ker-Kondi 1nF als Filter setzen.
-- Die Eingänge der Controller selbst, brauchen wenig Strom, - FAN-In mäßig.
Willst ein Plus bringen, dann einen P_MOSFET nehmen, und mit Pull-Down und 1nF als Filter.
--> Die Eingänge der Slaves selbst brauchen keinen eigenen Transi.
Hier ist der Filter wichtig.
Also - OPEN-Drain, (bzw. Kollektor) Lösung vom Master.
»
» Als Ergänzung zum Bus sind allenfalls abgesetzte Slaves denkbar (vermutlich
» dann ohne I2C). Die würden vom Bus mit max. 1.5m abzweigen.
»
» Mir ist bewusst, dass die Konstellation so kaum für einen highspeed
» Datentransfer geeignet ist. Die Ansprüche sind sehr gering. Daher hoffe ich
» ohne aufwendige Lösungen auszukommen. Für eine Datenverbindung wäre EIA-422
» sicher eine gute Wahl.
Aha, ok, ja die Datenleitung sollte ordentlich abgeschlossen sein.
Dazu gibt's Appli-Schaltungen.
www.ti.com
www.maximintegrated.com
Grüße
Gerald
--- -- ...und täglich grüßt der PC:
"Drück' ENTER! Feigling!" |
Gargamel
18.03.2016, 10:33
@ geralds
|
Microcontroller steuert mehrere Kollegen |
» » Der hier diskutierte Eingang dient nicht dem Datentransfer, sondern nur der
» » Synchronisation (ist nur ca. alle 5-15min erforderlich). "Kritisch" ist
» » hier lediglich die Synchrone Erfassung der LOW Flanke.
» "LOW" erfassen - aber oben bei hast einen Pull-Down?? - dann wäre die
» aktive Flanke ein HIGH.
» Auch bei der Schaltung, die du pfuscher gepostet hast,
» ist mit pull-down belegt.
Die Idee ist, dass das Signal im Ruhezustand LOW ist. Wenn der Master dann mit der Synchronisation beginnt, setzt er das Signal auf HIGH um die Aufmerksamkeit der Slaves zu erlangen. Dort wird es eine "längere" Zeit bleiben (z.B. 1s) bis sicher alle Slaves bereit sind. In dem Moment wo der Master dann auf LOW fällt, geht's für alle (nun synchron) weiter. Toleranzen von <0.5ms sind dabei akzeptabel.
» -> Vorschlag:
» ich würde einen kräftigeren N_MOSFET-Transi als Treiber nehmen.
» Die Eingänge bei jedem Slave mit Pull-up an die 100k und einen Ker-Kondi
» 1nF als Filter setzen.
Zum Verständnis: die Filter zwischen Eingang und GND? Oder Eingang und VCC? |
geralds

Wien, AT, 18.03.2016, 11:21 (editiert von geralds am 18.03.2016 um 11:48)
@ Gargamel
|
Leitungstreiber |
--
» Die Idee ist, dass das Signal im Ruhezustand LOW ist. Wenn der Master dann
» mit der Synchronisation beginnt, setzt er das Signal auf HIGH um die
» Aufmerksamkeit der Slaves zu erlangen. Dort wird es eine "längere" Zeit
» bleiben (z.B. 1s) bis sicher alle Slaves bereit sind. In dem Moment wo der
» Master dann auf LOW fällt, geht's für alle (nun synchron) weiter.
» Toleranzen von <0.5ms sind dabei akzeptabel.
»
---
Na, jetzt hab'm mas...
ok, dann würde ich einen Totem-Pol Ausgang machen, einen Bustreiber,
der das LOW aktiv bringt und nicht mit Pull-down runter floatet.
Ist schneller, steilflankiger.
Eine Strombegrenzung, 1k maximal (zB wird oft 50R ... 100'e R verwendet,
nur um die Inrush-Impulse zu glätten) an den Eingängen, -
der Punkt dabei, das LOW unter 0,8V kommen muss.
Ein Pull-down mit 100k direkt an den Eingängen (nach der I-Begrenzung),
dass sie nicht floaten, falls die Verbindung offen ist.
Mehr brauchst nicht.
zB:

So ein Treiber würde gehen:
http://ww1.microchip.com/downloads/en/DeviceDoc/20002092F.pdf
einige Applis
http://www.microchip.com/wwwproducts/en/MCP1416
Wennst allerdings einen Eingangsschutz machen willst,
dann jeden Eingang mit je schnellen Optos trennen.
Bzw. kommt darauf an,,, willst Master trennen, 1 opto,
willst alles trennen, jeder S einen opto.
Gerald
--- -- ...und täglich grüßt der PC:
"Drück' ENTER! Feigling!" |