Hallo,
ich plane gerade ein kleines Bus-System über RS485.
Ist nicht direkt ein Hausbus, aber vergleichbar.
Die Kabellänge wird max. 100m betragen mit ca. 15 bis 30 Teilnehmern.
Davon ist einer der Master, alle anderen Slaves.
Die zu übertragene Datenmenge ist relativ klein und zeitunkritisch,
die Baudrate muss also nicht sehr hoch sein.
Ich würde die Teilnehmer gerne vom Master ausgehend über die Busleitung
mit Spannung versorgen, dachte an ca. 15V, so dass sich jeder Teilnehmer
auf jeden Fall durch einen 7812 o.ä. eine konstante 12V, oder per 7805
5V erzeugen kann. In erster Linie brauche ich nur 5V für die Versorgung
von Mikrocontrollern, die 12V sind für eventuelle spätere Erweiterungen
geplant. Habe jetzt schon einige Beiträge über galvanische Trennung bei
RS485 usw. gelesen, aber eine Sache ist mir noch nicht ganz klar:
Die Spannungsversorgung soll vom Master ausgehen (230V -> Tafo ->
Brückengleichrichter -> 15V).
Von diesen 15V sollen alle Teilnehmer (also auch der Master) gespeist
werden.
Per DCDC-Wandler trenne ich die RS485 Transceiver von der
Versorgungsspannung und über Optokoppler trenne ich die Datenleitungen
(So wie im Artikel "Galvanische Trennung"). Zusätzlich würde ich gerne
eine Interruptleitung einbauen, die beim Master einen External Interrupt
auslöst. Diese würde ich ebenfalls über Optokoppler trennen. Für das
Buskabel hab ich also zunächst 4 galvanisch getrennte Leitungen:
StammA:
1. RS485-A
2. RS485-B
StammB:
3. RS485-GND
4. Interrupt
Meine Frage nun: Muss ich jeden Teilnehmer nochmals von der 15V
Spannungsversorgung trennen?
Oder kann ich einfach ein zusätzliches Adernpaar für 15V und GND
benutzen und alle Teilnehmer direkt darüber versorgen? Die Slaves haben
keine Verbindung zur Erde, wodurch eigentlich keine Masseschleifen
entstehen sollten, oder? Ich würde dann also ein 2x3 adriges EIB-Kabel
nehmen.
StammC:
5. 15V
6. GND
Ist das so machbar?
Über die Bustopologie muss ich mir noch Gedanken machen. Würde gern mit
max. 5m langen Stichleitungen arbeiten.
> 7812
Ich würde bei der Anzahl der Teilnehmer nochmal die Verlustleistung
durchrechnen. Da kannst du Pi*Daumen mit 50mA Verlustleistung pro Device
rechnen und musst die Stromversorgung entsprechend dimensionieren.
Persönlich würde ich einen DC/DC für die 5V-Erzeugung benutzen.
Ich kann meinem Vorredner nur zustimmen, wenn Du eh schon für die Slaves
kleine Platinen entwirfst, dann pinn auch ein passendes Referenzdesign
für einen DC/DC Wandler daneben. Es gibt durch aus beherrschbare Chips
in lötbaren Gehäusen von Linear, Analog, STM oder TI.
Für die Gesamtversorgung würde ich mir ebenfalls ein Schaltnetzteil
aussuchen. Eventuell ein preisgünstiges Notebook Netzteil von Pollin
o.Ä. mit 15..18V Ausgang. Dann auf der Master-Platine daraus per DC/DC
passende 3.3..5V machen und ebenso auf den Slaves.
Im Gegensatz zu meinem Vorredner sieht die Leistungsbilanz bei mir
allerdings anders aus:
Wenn der Slave mit Relais und LEDs 100mA braucht und aus 15V Eingang per
7805 5V generieren soll, dann sind das 10V*100mA = 1W Verlustleistung
pro Slave, die der 7805 verheizt. 1W ist eine ganze Menge Holz und heizt
den Slave ordentlich auf.
Bei einem DC/DC und 80% Wirkungsgrad ( weil Layout nicht optimal, die
vorgegebenen Bauteile gerade nicht lieferbar u.s.w.) sähe das so aus,
dass für 5V*100mA=0.5W Ausgangsleistung etwa 0,63W Eingangsleistung
erforderlich sind, der Schaltregler setzt also gerade mal 130mW in Wärme
um.
Bei Deinem Bus werden diese erst einmal kleinen Zahlen dann recht
eindrucksvoll: 30W Verlustleistung gegenüber 3,9W...
Ich habe allerdings keine Ahnung, warum Du den RS485 Bus galvanisch
trennen willst. Alle Devices hängen am gleichen Bus und an der gleichen
Versorgungsspannung. Nimm fürs Gröbste ein paar TVs Dioden und
vielleicht auch ein paar schnelle Varistoren in die Datenleitungen.
Fertig.
Wir entwickeln hier ganz andere Geräte in ganz anderem Umfeld und deren
RS422 und RS485 sind auch nicht getrennt. Wegen einer defekten RS4xx ist
aber noch keine Platine zurück gekommen. Du könntest darauf achten, dass
die RS485 Tranceiver spannungsfest gegenüber Deiner mit auf dem Bus
liegenden Versorgung sind, dann passiert denen nichts, wenn Du Dich mal
'verdrahtest'.
Gruß, Ulrich
Danke für die Antworten!
Ok, ich sehe schon, dass ich das mit dem Netzteil nochmal überdenken
muss. Denke ich versorge die Masterplatine erstmal mit einem externen
Schaltnetzteil und kümmere mich um ein internes Netzteil später. Für den
Master und die Slaves werd ich dann vorerst mit 7805 arbeiten (zu
Testzwecken mit wenigen Slaves) bis der Bus und das Protokoll mal läuft.
Später werd ich dann eher auf Schaltregler umsteigen. Finde DC DC
Wandler relativ teuer, wenns mal mehrere Slaves werden.
@Ulrich P.:
Das mit dem "Verdrahtschutz" ist ein guter Hinweis, werd ich mir was
überlegen.
Ulrich P. schrieb:> Nimm fürs Gröbste ein paar TVs Dioden und> vielleicht auch ein paar schnelle Varistoren in die Datenleitungen.> Fertig.
Das versteh ich nicht ganz, was meinst du mit TVs?
Ich dachte eine galvanische Trennung wäre sinnvoll, weil das Buskabel
evtl. zusammen mit 230V-Leitungen verlegt wird. Daher habe ich mich auch
für EIB Kabel entschieden. Oder braucht man wirklich nur galvanisch
trennen, wenn man verschiedene Spannungsquellen nutzt?
Hi!
TVS Dioden sind Transienten-Schutz-Dioden. Das Problem bei
Schutzmaßnahmen ist, dass sie entweder sehr schnell sind, aber nur kurz
belastbar, wie eine Diode, oder langsam aber kräftig, wie ein Varistor.
Kombiniert man beides, ist der Schutz schon mal sehr gut.
Dass Du die Leitungen neben 230V verlegen willst ist so kein Problem.
Die Abstrahlung eines konstanten Stromes wird Dir den Pegel vielleicht
etwas anheben, aber das Signal ist ja differentiell also werden die
Daten weiterhin sauber erkennbar am Empfänger ankommen.
Was der Optokoppler abfangen soll, sind die schnellen Transienten, die
durch das Schalten größerer Lasten oder schlecht gearbeiteter
Billignetzteile in Deine Schaltung einschlagen. Diese vernichten wir
jetzt aber schon durch die TVS Dioden. Wirklich kräftige Störungen
vernichten die Varistoren.
Zum Preis der DC/DC Wandler ist nur zu sagen, dass das relativ zu sehen
ist. Ein 250mA LT1934 kostet ca. 4,50€, dazu noch die Induktivität von
1,50€, der Rest ist Kleinkram. Das ist ca. 10x so viel wie ein 7805.
Wenn Du jedoch 30*1W*24h*365Tage rechnest, sind das 372kWh*0,20€ = ~74€
74€/6€ = ~12€ also hast Du die Kosten dafür nach 2 Jahren Existenz
Deiner Schaltung an der Stromrechnung wieder raus.
Der LT1934 ist preislich im Mittelfeld, u.A. weil er per Widerstand auf
die Ausgangsspannung eingestellt werden kann. Damit kann man die
Schaltung frei zwischen 3.3V und 5V auslegen. Bei den fest eingestellten
DC/DC Wandler Bausteinen gibt es günstigere Kandidaten, damit sind die
Mehrkosten schneller wieder drin.
Außerdem musst Du ja bei der Optokoppler-Schaltung ebenfalls die
Versorgung auf beide Seiten bringen. Dann musst Du also entweder den
RS485 Tranceiver aus dem Bus und die CPU aus einem eigenen Netzteil
versorgen, was teurer wäre als ein DC/DC und ein paar Schutzdioden, oder
Du musst einen Trenn-DC/DC Wandler einsetzen, der ebenfalls teurer ist.
Naja, eigentlich musst Du sogar zwei mal von 15V auf 5V runter, denn der
Tranceiver will ja auch 5V haben.
Wenn Du einen AVR oder STM8/32 einsetzt, der nur irgendwelche Taster
abfragt oder ein paar Relais steuert, dann stecke auch etwas Zeit ins
Powermanagement. Die Relais versorgst Du ja schon direkt aus dem Bus,
der Controller und ein paar LEDs (Low-Current bei 0.5..2mA) benötigen
dann kaum noch etwas. Dazu noch der RS485 Tranceiver. Taster auf
Interrupt Pin legen, wenn es mehrere Taster sind schauen, dass sie als
Matrix geschaltet sind. Dann alle Spalten auf Interrupt Eingänge legen,
alle Zeilen auf Masse klemmen und die CPU schlafen legen. Durch
Tastendruck wird die CPU per IRQ geweckt und lässt dann die
Tastenmatrix-Abfrage laufen.
Mit etwas Gehirnschmalz kann man dann ganz schnell von einem 16MHz Quarz
auf ein 1,xxxMHz Quarz oder weniger zurück gehen und benötigt statt 20mA
nur noch 1mA. Statt eines 250mA LT1934 kann man dann den 60mA LT1934-1
nehmen. Der kostet glatt die Hälfte. Bauteilkosten also schon nach einem
Jahr wieder drin. Setzt man pro Slave 100mA bei 8MHz und Vcc=5V an dann
kostet der Betrieb ~26€ im Jahr. Bei 1Mhz und 20mA und Vcc=3.3V sind es
nur noch ~3€.
Ich habe natürlich keine Ahnung, wie viel Deine Schaltung machen soll
und wie aktiv sie sein muss um ihre Aufgabe zu erfüllen. Wenn Du damit
ein paar schwere Lasten steuerst, die selbst etlich kWh im Monat
verbrauchen und Du sparst mit der Schaltung schon etliches davon, dann
ist die ganze Rechnung wirtschaftlich gesehen hinfällig, weil sie nur
noch Bruchteile zum Sparen beitragen kann. Aber wenn es um Lampen,
Heizkörper und Rollos geht, dann sieht das anders aus. Gerade eine
Rolladen-Steuerung sollte so wenig Strom wie möglich verbrauchen, sie
wird ja i.d.R. nur zwei mal am Tag betätigt.
Die ganzen Rechnungen sind überschlägig, weil ich natürlich nicht weiß,
welche genaue CPU Du einsetzt, was noch auf der Platine sitzt und was
Dein Energieversorger für kWh Preise von Dir erpresst. Sie zeigen
Tendenzen und geben Dir eine Hausnummer nach der Du Dich richten kannst.
Und sie geben Dir damit auch einen Hinweis auf einen Punkt, der in
vielen Home-Automation Bastel-Projekten gerne übersehen wird.
Welche Komfort gewinne ich, aber was kostet es mich, wenn ich das 10
Jahre lange betreibe.
Gruß, Ulrich
Danke für deine ausführliche Antwort!
Du hast Recht, man ist am Anfang eines solchen Projektes mit so vielen
Fragen und Entscheidungen konfrontiert, dass man das Powermanagement
gerne vernachlässigt. Wenn man dann ein passendes Layout hat, ist es
auch wieder mühsam rum zu ändern und zu optimieren.
Ulrich P. schrieb:> Dass Du die Leitungen neben 230V verlegen willst ist so kein Problem.>> Die Abstrahlung eines konstanten Stromes wird Dir den Pegel vielleicht>> etwas anheben, aber das Signal ist ja differentiell also werden die>> Daten weiterhin sauber erkennbar am Empfänger ankommen.
Könnten durchaus auch eine Leitung mit einem Phasenanschnitt sein, aber
ich denke das ist nicht weiter schlimm, oder?
Mit den Kosten für die DC DC Wandler hast du natürlich recht: Ich spare
ja durch das Weglassen der galv. Trenn. ne ganze Menge an Wandlern ein.
Dann werde ich die Versorgungsspannung wohl doch über DCDC auf 5V bzw.
3.3V bringen.
Ulrich P. schrieb:> Wenn Du einen AVR oder STM8/32 einsetzt, der nur irgendwelche Taster>> abfragt oder ein paar Relais steuert,
Genau so ist es geplant. Arbeite mit AVRs und will ein paar Taster
abfragen, Relais steuern, Phasenanschnitt machen, Temperatur messen usw.
Für jede Funktion ist dann ein eigenes kleines Modul vorgesehen. Im
Falle der Relais natürlich mehrere Relais pro Modul. Dadurch will ich
eine gewisse Flexibilität und Erweiterungsmöglichkeit erhalten.
Ulrich P. schrieb:> Die ganzen Rechnungen sind überschlägig, weil ich natürlich nicht weiß,>> welche genaue CPU Du einsetzt, was noch auf der Platine sitzt und was>> Dein Energieversorger für kWh Preise von Dir erpresst.
Die genauen CPUs weiß ich selber noch nicht. Werde erstmal mit Atmega8
je ein Testmodul auf Lochraster aufbauen und wenn die Software soweit
läuft, weil ich davon noch ein paar herumfliegen habe.
Danach gucke ich, welche Anforderungen meine Software an den uC stellt
und wähle dann einen möglichst sparsamen aus, bevor ich das endgültige
Layout entwerfe.
Zur Zeit erpresst er ca. 0,18€ pro kWh, aber die Tendenz ist wohl eher
steigend.
Ich werde mal versuchen deine Hinweise bezüglich TVS Dioden und
Varistoren in einen Schaltplan umzusetzen und poste ihn dann mal.
Danke nochmal!
Sieht doch schon mal ganz gut aus. Würde aber auch in der Busversorgung
zwei entsprechende Bauteile unter bringen. Die Terminierung von 330R ist
mir neu. Ich dachte da nimmt man 120R und auch da reichen 1/4 Watt.
Bei den LEDs solltest du Low-Current nehmen. Die leuchten auch bei 1k2
noch hell genug.
Gruß, Ulrich
Hi!
330R war natürlich Blödsinn. Sollten 120R sein.
Dachte ich müsste 1W nehmen, da ich bei der Differenz von -5V bis +5V an
120R eine Verlustleistung von 0,83W habe (P=U²/R). Oder ist das bei der
kurzen Signaldauer egal?
Wie sieht es mit der Dimensionierung der Varistoren aus? Sind 30V nicht
eigentlich zu hoch? Hab bei Reichelt für kleinere Spannungen nur SMD
Varistoren gefunden. Wäre es besser auf eine kleinere Spannung zu gehen?
Hatte in der obigen Schaltung die Pullup/Pulldown-Widerstände der A- und
B-Leitung vertauscht.
Ich denke so hab ich alle Leitungen gegen Störungen und Verpolung
geschützt, oder? Für einen Kurzschluss in der Busleitung hab ich noch
eine Polyswitch eingebaut, oder ist die zu träge; sollte ich lieber ne
flinke Sicherung nehmen?
Hi!
Wo ist das Problem mit SMD? 0804 oder 0603 kann man super zwischen zwei
Bahnen Streifenraster oder zwei Lötpunkte auf einer Lochraster Platine
löten. Das gleiche gilt für die ganzen Widerstände und Kondensatoren.
Das ganze bedrahtete Zeug ist viel zu friemelig weil man die Beinchen
immer sauber umbiegen muss und beim Umdrehen verrutscht einem immer
alles irgendwie, wenn man sich nicht mit einem Blatt Papier oder Karton
behilft. Da ist das Leben mit SMD viel einfacher.
Der MAX481 kann übrigens nur 32 Slaves bedienen. Es gibt Pin-kompatible
Bausteine von Maxim und anderen, die bis zu 128 Slaves bedienen können.
Ich meine damit nicht Slaves im eigentlichen Sinne, sondern ein Sender
kann nur 32 Hörer am Bus treiben.
Schau noch mal in der Datenblatt vom MAX, dann wirst Du sehen, dass der
Bus nicht mit +/-5V sondern nur mit +1.5V..+5V / 0V betrieben wird.
Außerdem teilen sich die beiden Widerstände an beiden Enden die Last. Du
hast also maximal 1/2W über die Widerstände. Dazu kommt der
Leitungswiderstand.
Die Signaldauer ist eine andere Sache. Normalerweise ist der Bus offen,
weil alle am Bus hören. Damit fällt keine Leistung über den Widerstand
ab. Er muss also nur die mehr oder weniger kurzen Protokoll überstehen.
Man kann also problemlos einen 1/4W Terminator nehmen und etwas
Kupferfläche stehen lassen. Aber mathematisch richtig wäre 1/2W und wir
bauen ja kein Massenprodukt bei dem es auf jeden 1/2ct ankommt.
Gruß, Ulrich
Das ist richtig. Der PullUp / PullDown ist ja nur dafür da, den Bus in
einen stabilen zustand zu zwingen, wenn alle Devices hören. Dann ist der
Bus nämlich floating was zu merkwürdigen Zeichen führen kann obwohl
niemand was sendet.
Die Kombi 120R/1uF ist cool. Die kannte ich noch nicht.
Gruß, Ulrich
Hallo,
die AC-Terminierung ist zwar cool, da sie weniger Verluste mitbringt,
dafür funktioniert sie auch nur mit "niedrigen" Baudraten. Je nach
Auslegung ist da bei 57600 Schluß und die überbrückbare Leitungslänge
nimmt wegen der schlechteren Signalqualität auch ab. Da du aber eh keine
Anforderung an schnellere Übertragung hast, ist das für dich sicher eine
Lösung.
Grüße
Fasti
Ok,
die Baudrate reicht für meinen Fall aus. Ich werde es mal so probieren.
Falls es doch Probleme gibt, kann man den Kondensator ja immernoch
kurzschließen.
Bei der Ansteuerung der Relais kann man auch noch etwas Verlustleistung
sparen indem man nach Anziehen des Relais den Strom reduziert.
Als Hardware Lösung wird hierzu ein Kondensator paralell zu einem
Widerstand verbaut. Der Widerstand muss so dimensioniert sein, dass er
das Relais halten kann. Der Ladestrom durch den Kondensator lässt das
Relais anziehen. Zu beachten ist dabei allerdings, dass nach Abschalten
der Spannung der Kondensator sich erst über den Widerstand entladen muss
bevor das Relais wieder anziehen kann - ist also nicht für jeden
Anwendungsfall geeignet.
Alternativ, mit einer PWM den Strom reduzieren. Hier lässt sich dann in
der Software bestimmen ab welchem Tasverhältnis das Relais noch
ordentlich hält. Das Ganze ist natürlich nur dann sinnvoll, wenn das
Relais relativ lange aktiv ist.
Es gibt Stimmen, die sagen, "was sollen die paar mW, wenn die
angeschlossene Lampe 50W vebrät?". Einerseits ok, aber andererseit, wenn
man das in PWM macht und keinen all zu großen Hardware Aufwand hierzu
treibt sind dass ja mW, die keinem nützen und somit des Sparens wert
sind.
Hi!
Mir geht es nicht primär darum Energie zu sparen, aber wo es möglich
ist, versuche ich natürlich so wenig wie möglich zu verschwenden.
Ich hätte gern die Möglichkeit den Bus als Stern zu verkabeln.
Würde dann einen Knotenpunkt machen, an dem alle Slaves eingesteckt
werden.
Ist es möglich die Signale A und B über jeden Slave zu führen, so dass
ich physikalisch eine Linienstruktur habe aber trotzdem für die
Verkabelung einen Knotenpunkt?
Um ein Ausfall des Busses zu verhindern, falls ein Slave ausgesteckt
wird, würde ich dann mittels eines Miniaturrelais (70 bis 90mW) die
Signale umschalten, wie im Schaltplan angedeutet. Der Slave gibt dazu
über die Leitung "Slave Switch" ein Signal an einen weiteren
Microcontroller, der im Knoten sizt und dieser schaltet dann das Relais.
So habe ich zwar kurzzeitig einen Ring in der Leitung, aber ich hoffe,
dass das für ein paar ms nicht schlimm ist. Könnte natürlich auch das
Relais direkt über die Leitung "Slave Switch" schalten.
Ist das Unterbrechen des Busses im laufenden Betrieb möglich. Verlorene
Daten könnte man ja durch das Protokoll erneut senden lassen. Dabei soll
auch nicht davon ausgegangen werden, dass dieser Fall oft vorkommt.
Carlo
und wenn du nun noch die Reihenfolge von Transzorbs und Varistoren
tauscht weisst du auch schon wie du die im Layout platzieren musst.
Die Transzorbs sind schneller als die Varistoren und gehören desshalb
näher zum IO-Port. Das heist allso so nahe wie möglich an den Stecker.
Das mit den Bus-Umschaltern halte ich für übertrieben. Du kannst die
Steckleiste an der Platine gerne als Durchführung verwenden. Mach Dir
eine passende Blind-Buchse, die Du aufsteckst für den Fall, dass Du mal
eine Platine entfernen musst. Wenn Du nagst hast, dass Du die nach ein
paare Jahren nicht mehr findest, dann spendiere jedem Busstecker eine
solche durchverdrahtete Blindbuchse und knote sie mit einem kurzen
Seilchen daran fest.
Es ist ein Bus, der nur alle paar Minuten wirklich was wichtiges zu
übertragen hat, es ist also teuer und überflüssig Relais für die
Bus-Umschaltung einzusetzen, damit diese in Millisekunden den fehlenden
Knoten überbrücken.
Du könntest aber auch eine andere Vereinfachung machen:
Du entwickelst eine Bus-Interface-Platine, die DC/DC Wandler oder 7805
und den RS485 Tranceiver trägt. Diese wird unten in die Dose geschraubt
und an ihr der Bus angeschlossen. Über einen PullDown wird der RS485
Tranceiver pauschal auf Empfang gehalten.
Auf dieser Platine ist eine Buchsenleiste, auf der dann der Knoten
eingesteckt wird. Damit kann man das Modul mit der Software und dem
eigentlichen Entwicklungsaufwand leicht ausziehen und der Bus bleibt
vollständig.
Bei vielen Relais auf einer Platine ist vermutlich die umgekehrte
Anordnung interessant, allein aus Stabilitätsgründen. Hier würde man die
Busplatine auf die Relais/Controller Platine aufstecken.
Gruß, Ulrich