Forum: Mikrocontroller und Digitale Elektronik Welchen Datenbus für meine Heizungssteuerung?


von Milan (Gast)


Lesenswert?

Hallo,
Ich plane den Eigenbau einer Heizungssteuerung(mit irgendeinem ATmega). 
Benötige dafür Leistungsschaltstufen 230v für 4 Pumpen 4Mischer und 4 
elektrische Kugelvetile. Die befinden sich aber in einer anderen 
Kellerecke als die Steuerung selbst(3m abstand). Nun kam mir der Gedanke 
die Leistungselektrik auszulagern und in der Nähe der Pumpen zu 
verbauen, Ansteuerung von der Steuerung dann über irgendeine Art von 
Datenbus. Vorteil: weniger 230v Kabel, wahrscheinlich übersichtlicher 
und man könnte den Bus auch nutzen um später z.B. ein zusätzliches 
Infodisplay (10m Entfernung)oder ähnliches zu integrieren.
Nun mein Problem: Ich kann mich nicht entscheiden wie ich die 
Datenübertragung bewerkstellige und habe momentan leider auch nicht viel 
Zeit zum Experimentieren.
Ideen bisher:
-Einfach mit Schieberegistern in den Leistungsmodulen, seriell rein 
paralel raus, einfach, funktioniert nur in einer Richtung mehr bräuchte 
ich ja auch nicht. Störanfälligkeit weiß ich nicht.
-I2c Bus. Port expander und viele andere nützliche Bauteile erhältlich. 
einfache Adressierbarkeit. Über die Reichweite und die Eignung für eine 
solche Anwendung liest man verschiedenes und ich selbst habe keine 
Erfahrung damit.
-CAN. Wahrscheinlich die professionellste lösung. Aber ich habe mich 
noch nicht näher damit befasst und fürchte das es eine nummer zu gross 
für mich wird, wie gesagt nicht viel Zeit und vor der Heizperiode sollte 
das Ding zumindest provisorisch laufen.

Wäre Toll wenn mir jemand einen Tipp dazu geben könnte, Danke!

von Dietrich L. (dietrichl)


Lesenswert?

Noch eine Möglichkeit:
- RS485 mit einem wie auch immer gearteten UART-Protokoll: einfach und 
robust.

Gruß Dietrich

von Christoph H. (christoph_b)


Lesenswert?

I2C und einen Booster.
Siehe hier.

http://www.mikrocontroller.net/articles/I2C_als_Hausbus

P82B96 und PCA9600 können statisch 30mA treiben. In der Application Note 
AN10216 (Seite 46) wird von NXP geschrieben das mittels externer 
Transistoren der Strom noch weiter erhöht werden kann. Bei 30kHz wird 
eine mögliche Gesamtlänge von 1km angegeben.

von Christian B. (casandro)


Lesenswert?

Da Du nur in eine Richtung übertragen musst, RS-485. Das ist sehr 
einfach (nur 1 zusätzliches IC welches von vielen Herstellern verfügbar 
ist), billig und robust. Und es ist auch über Optokoppler abkoppelbar.

Aber die Idee mit dem Schieberegister ist auch nicht blöd. Dazu brauchst 
Du 2 Leitungen, eine Taktleitung und eine Datenleitung. Du musst halt 
aufpassen, dass Du die 12 Bits innerhalb einer Millisekunde durch 
schiebst, so dass die Relais nicht reagieren.

von Dietrich L. (dietrichl)


Lesenswert?

Christian Berger schrieb:
> Aber die Idee mit dem Schieberegister ist auch nicht blöd.

Das würde ich aber nicht ohne Schutzbeschaltung über 10m und im 
Heizungskeller betreiben. Dann ist es doch einfacher, gleich RS485 oder 
(wenn Du nur eine Richtung brauchst) RS422 (bzw. RS485 ohne 
Richtungsumschaltung) zu nehmen. Zusätzlicher Vorteil: man kann mit dem 
PC mithören und debuggen, wenn man einen zusätzlichen RS232-Ausgang 
spendiert.

Hinweis: Bei nur einer Richtung verbaust Du Dir aber die Möglichkeit, 
auch mal eine Fernbedienung dranhängen zu können.

Gruß Dietrich

von noname (Gast)


Lesenswert?

Milan schrieb:
> -CAN. Wahrscheinlich die professionellste lösung. Aber ich habe mich
> noch nicht näher damit befasst und fürchte das es eine nummer zu gross
> für mich wird, wie gesagt nicht viel Zeit und vor der Heizperiode sollte
> das Ding zumindest provisorisch laufen.

Wenn Deine Sensoren und Aktoren nur Slaves sind, kannst Du einen eigenen 
RS485 BUS aufbauen:
- alle angemeldeten Slaves nacheinander abfragen, Master-Request and 
Slave-Response
- Datenrahmen hat Zieladresse, Befehl, Länge, CRC
- Timeout planen

Das Ganze geht einfach mit dem UART und einem weiteren Pin für die 
direction.

von Werner (Gast)


Lesenswert?

Christian Berger schrieb:
> Du musst halt aufpassen, dass Du die 12 Bits innerhalb einer
> Millisekunde durch schiebst, so dass die Relais nicht reagieren.

Oder man nimmt welche mit einem Ausgangsregister, dass die Daten nur 
durchschaltet, wenn kein Clock da ist (Nachtriggerbares Monoflop auf 
Clk), z.B. 74HC595 oder TPIC6B595.

von Milan (Gast)


Lesenswert?

Dietrich L. schrieb:
> Zusätzlicher Vorteil: man kann mit dem
>
> PC mithören und debuggen, wenn man einen zusätzlichen RS232-Ausgang
>
> spendiert

Das ist ein echter Vorteil, hatte ich noch grnicht bedacht.
Bei Datenübertragung über UART soll die Genauigkeit des Prozessortaktes 
ja recht wichtig sein, sollte ich dann auf einen externen Quarz gehen 
statt de internen Generators? Der 120 Ohm Abschlusswiderstand im 
Datenblatt, brauche ich den oder gehts bei niedrigen Baudraten auch 
ohne, wenn ja wie niedrig? Denn die meißte Zeit werden keine Daten 
gesendet und wenn ich das richtig verstehe wird dieser Widerstand die 
ganze zeit mit 0,2W beheizt?
 Ansonsten gefällt mir die Idee recht gut, Bräuchte ich aber für jeden 
Empfänger einen eigenen µP, richtig? Wäre ja kein Nachteil, man ist ja 
auch flexibler dadurch.
Über diese eine Zweidrahtleitung könnte ich dann auch bidirektional 
Kommunizieren, wenn ich darauf achte das nicht 2Teilnehmer gleichzeitig 
sprechen, richtig?

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Nehme CAN, denn da managt die HW schon das Senden/Empfangen.
Bei RS485 musst du das selbst per SW implementieren.

CAN ist dafür bestens geeignet und ich habe das in meinem Haus auch 
schon realisiert.

von noname (Gast)


Lesenswert?

Milan schrieb:
> Bei Datenübertragung über UART soll die Genauigkeit des Prozessortaktes
> ja recht wichtig sein, sollte ich dann auf einen externen Quarz gehen
> statt de internen Generators?
Bei niedrigen Baudraten ist der Fehler kleiner.

Milan schrieb:
> Bräuchte ich aber für jeden
> Empfänger einen eigenen µP, richtig?
Ein MSP430 oder ATinny für 50Cent ist drin.

Milan schrieb:
> Über diese eine Zweidrahtleitung könnte ich dann auch bidirektional
> Kommunizieren, wenn ich darauf achte das nicht 2Teilnehmer gleichzeitig
> sprechen, richtig?
Schaust Du hier: Beitrag "Re: Welchen Datenbus für meine Heizungssteuerung?"

von Werner (Gast)


Lesenswert?

noname schrieb:
> Bei niedrigen Baudraten ist der Fehler kleiner.

Das ist Unfug. Die Taktfehler summieren sich ab der Flanke des Startbits 
und sind, bezogen auf die Bitdauer, proportional zum Baudratenfehler.

von Christian B. (casandro)


Lesenswert?

Milan schrieb:
> Über diese eine Zweidrahtleitung könnte ich dann auch bidirektional
> Kommunizieren, wenn ich darauf achte das nicht 2Teilnehmer gleichzeitig
> sprechen, richtig?

Richtig, wobei Du RS-485 auch mit relativ hohen Bitraten laufen kannst, 
dann sind selbst bei "Fire and Forget" die Wahrscheinlichkeit einer 
Kollision winzig. Sprich wenn Du dann die Nachricht mehrmals 
verschickst, kommt die mit sehr hoher Wahrscheinlichkeit an.

von Berater (Gast)


Lesenswert?

Für Deine Anwendung ist das doch Blödsinn. Du musst eh zu jedem Aktor 
mit 230V, egal ob mit oder ohne Bus. Beim Bus brauchst Du dann nochmals 
jeweils ein Gehäuse/Unterverteiler an jedem Verbraucher.

Mach einen ordentlichen Schaltkasten, und bau dort die Elektronik inkl. 
Leistungselektronik ein. Dann ein paar 3*1,5 und 4*1,5 zum Schaltkasten, 
fertig ist der Lack.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Die Heizungssteuerung sollte in der Tat nur ein Schaltkasten sein, ohne 
Bus.

Der Bus sollte nur in die Wohnung gehen um auf Displays was anzeigen zu 
können.

von noname (Gast)


Lesenswert?

Christian Berger schrieb:
> Richtig, wobei Du RS-485 auch mit relativ hohen Bitraten laufen kannst,
> dann sind selbst bei "Fire and Forget" die Wahrscheinlichkeit einer
> Kollision winzig. Sprich wenn Du dann die Nachricht mehrmals
> verschickst, kommt die mit sehr hoher Wahrscheinlichkeit an.
Ich würde mir den Weg für Sensoren offen lassen und bidirektionale 
Kommunikation vorsehen.

Berater schrieb:
> Für Deine Anwendung ist das doch Blödsinn. Du musst eh zu jedem Aktor
> mit 230V, egal ob mit oder ohne Bus. Beim Bus brauchst Du dann nochmals
> jeweils ein Gehäuse/Unterverteiler an jedem Verbraucher.
Markus Müller schrieb:
> Die Heizungssteuerung sollte in der Tat nur ein Schaltkasten sein, ohne
> Bus.
>
> Der Bus sollte nur in die Wohnung gehen um auf Displays was anzeigen zu
> können.
Naja, je nach komplexität ist das mit dem BUS und lokaler Versorgung 
schon besser. Hier wird über mehrere Räume verteilt. Eine Steckdose wird 
es in jedem Raum geben. Also zieht man nur eine 2 Drahtleitung und nicht 
10 Energie-Kabel.

von noname (Gast)


Lesenswert?

Werner schrieb:
> Das ist Unfug. Die Taktfehler summieren sich ab der Flanke des Startbits
> und sind, bezogen auf die Bitdauer, proportional zum Baudratenfehler.

Nur dass die Bits mehrfach in der Mitte abgetastet werden. Die 
Tastgeschwindigkeit hängt vom UART-Takt (und nicht von der Bd-Rate) ab. 
Je niedrieger die Baudrate, je mehr darf man daneben liegen.

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich weiß jetzt auch nicht wie viele Aktoren in wie vielen Stockwerke 
verteilt sind, da macht ein Bus schon Sinn.

von Dietrich L. (dietrichl)


Lesenswert?

Milan schrieb:
> Bei Datenübertragung über UART soll die Genauigkeit des Prozessortaktes
> ja recht wichtig sein, sollte ich dann auf einen externen Quarz gehen
> statt de internen Generators?

Ja, würde ich empfehlen; denn nach Fehlern bei falscher Baudrate zu 
suchen und dann individuell den µC hinzutrimmen macht keinen Spaß ;-)

> Der 120 Ohm Abschlusswiderstand im
> Datenblatt, brauche ich den oder gehts bei niedrigen Baudraten auch
> ohne, wenn ja wie niedrig? Denn die meißte Zeit werden keine Daten
> gesendet und wenn ich das richtig verstehe wird dieser Widerstand die
> ganze zeit mit 0,2W beheizt?

Es muss ja nicht 120 Ohm sein. Max. Baudrate: ??, aber bis mindestens 
1,2kBd sollte das auch ohne richtigem Leitungsabschluss kein Problem 
sein.
Bei bidirektionalem Betrieb musst Du auch noch Ziehwiderstände nach +5V 
und GND spendieren, um im hochohmigen Zustand den Ruhepegel für die 
Empfänger sicher zu stellen.

> Über diese eine Zweidrahtleitung

Zweidrahtleitung + GND!

> könnte ich dann auch bidirektional
> Kommunizieren, wenn ich darauf achte das nicht 2 Teilnehmer gleichzeitig
> sprechen, richtig?

Ja. Dazu würde ich ein einfaches Single-Master-Protokoll benutzen. Alle 
sonstigen Teilnehmer sind Slaves und dürfen nur antworten, wenn sie 
gefragt werden. Das verhindert Kollisionen und man merkt auch gleich, 
wenn Teilnehmer ausfallen (Time-Out bei der Antwort).

Gruß Dietrich

von noname (Gast)


Lesenswert?

Dietrich L. schrieb:
> Zweidrahtleitung + GND!

Nö, GND ist nicht erforderlich. Es reichen 2 Drähtchen.

von Werner (Gast)


Lesenswert?

noname schrieb:
> Je niedrieger die Baudrate, je mehr darf man daneben liegen.
Dann rechne mal nach:
Wenn der Takt z.B. beim Empfänger 7% zu langsam ist, entsprechen 9 
Zeichenschritte am Sender 8,4 Zeichenschritten am Empfänger. Der 
Empfänger tastet also ungefähr die Bit-Mitte vom 8-ten Datenbit ab, wenn 
der Sender schon auf das Stop-Bit schaltet. Das gilt bei jeder Baudrate.

von Dietrich L. (dietrichl)


Lesenswert?

noname schrieb:
> Nö, GND ist nicht erforderlich. Es reichen 2 Drähtchen.

Aber beide Teilnehmer brauchen einen etwa gleichen Bezug zu GND, d.h. 
der Potential-Unterschied zwischen beiden GNDs darf nicht zu groß sein. 
Sonst wird der Arbeitsbereich der Empfänger überschritten. Das 
einfachste ist also, den GND mitzuführen.

Gruß Dietrich

von Milan (Gast)


Lesenswert?

Berater schrieb:
> Mach einen ordentlichen Schaltkasten, und bau dort die Elektronik inkl.
>
> Leistungselektronik ein. Dann ein paar 3*1,5 und 4*1,5 zum Schaltkasten,
>
> fertig ist der Lack.

Auch ein berechtigter Vorschlag. Oft is einfacher einfach besser. So 
ähnlich hatte ich es vorher, mit einem Mischerkreis weniger, dazu noch 
mit einem kabel vom Kasten zu jedem Temperaturfühler, und ich fand den 
entstandenen Kabelwald weder übersichtlich noch Schön, drum kam ich ja 
auf die Busgeschichte. Zumal die Steuerung aus Platzgründen in eine 
andere Raumecke verlegt werden musste. Konventionell mit 3*1,5 und 4*1,5 
macht das 12 Strippen, dazu Temperaturfühler und Zuleitung. Und es ist 
wirklich eng da unten,ein alter Gewölbekeller in dem ich nur in der 
Mitte einigermaßen aufrecht stehen kann, und darin befinden sich 
mitlerweile historisch gewachsen 30KW Ölkessel 35KW Kolzvergaser 3x800L 
Öltank 3x500lPufferspeicher 150lAusdehnungsgefäß 160lBoiler 
3Mischgruppen Heizung
pumpengruppe solar und der Stromschrank, ich will nicht jammern aber muß 
doch schon mit jedem cm rechnen die eine Kabeltrasse von der Raumhöhe 
klaut.
Der Vorschlag bleibt aber im Rennen, Danke

von spess53 (Gast)


Lesenswert?

Hi

>Nur dass die Bits mehrfach in der Mitte abgetastet werden. Die
>Tastgeschwindigkeit hängt vom UART-Takt (und nicht von der Bd-Rate) ab.
>Je niedrieger die Baudrate, je mehr darf man daneben liegen.

Ein AVR tastet 16 bzw. 8 mal pro Bit ab und zwar ab der fallenden Flanke 
des Startbits. D.h. bei jedem Bit verschieben sich die Abtastpunkte 
immer weiter. Unabhängig von der Baudrate.

MfG Spess

von noname (Gast)


Lesenswert?

Werner schrieb:
> noname schrieb:
>> Je niedrieger die Baudrate, je mehr darf man daneben liegen.
> Dann rechne mal nach

Rechne selber. Natürlich geht das nur bis zu einer gewissen Fehlergröße.

von (prx) A. K. (prx)


Lesenswert?

noname schrieb:
> Nur dass die Bits mehrfach in der Mitte abgetastet werden.

Korrekt.

> Die Tastgeschwindigkeit hängt vom UART-Takt (und nicht von der Bd-Rate)

Nicht korrekt. Vom Baudratentakt, also 16x oder 8x Baudrate.

von Werner (Gast)


Lesenswert?

noname schrieb:
> Rechne selber.

Hab' ich (s.o.). Dreisatz kennst du?

von noname (Gast)


Lesenswert?

A. K. schrieb:
> Nicht korrekt. Vom Baudratentakt, also 16x oder 8x Baudrate.
Dann spielt die Baudrate keine Rolle. Ist das wirklich bei jedem UART 
so? Ich habe das anders im Hinterkopf.

von (prx) A. K. (prx)


Lesenswert?

noname schrieb:
> Dann spielt die Baudrate keine Rolle. Ist das wirklich bei jedem UART
> so? Ich habe das anders im Hinterkopf.

Hab grad nur beim Mega32 reingesehen, aber wie ich schon schrieb ergibt 
eine Mehrfachabtastung nur Sinn, wenn die Abtastrate in einem sinnvollen 
Verhältnis zur Symbolrate liegt. Daher ist es sinnvoll, den 
Baudratentakt zu verwenden, dagegen Unsinn, den von der Baudrate 
unabhängigen Modultakt zu verwenden.

Von einer gewissen Bedeutung ist dabei aber, ob man mit einem 8x 
Basistakt oder dem üblichen 16x Basistakt arbeitet. Bei 8x muss der Takt 
genauer sein als bei 16x. Auch das ist freilich nicht von der Rate 
selbst abhängig, nur von der Anzahl übertragener Bits. Schön beschrieben 
im AVR Datasheet.

von Milan (Gast)


Lesenswert?

Ja, da mit den taktfehlern wird jetzt ein bisschen zu theoretisch...
Über den RS 485 werde ich mich jedenfalls genauer belesen, klingt 
erstmal gut. Oder doch CAN ? oder ohne Bus?
Vielen Dank jedenfalls allen die geantwortet haben!
Gruß Milan

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Ich empfehle dir CAN zu verwenden. Ist viel leichter als RS485, vor 
allem wenn viele Teilnehmer am Bus sind.

Das CAN Telegramm ist entweder eine 11-Bit oder 29-Bit Adresse + 0..8 
Byte Daten. Immer gleich.
Nun kann man sich relativ leicht das Telegramm zusammen basteln indem 
man auf Adressen irgend welche Funktionen und auf die Daten dann den 
Wert legt.
Alle Teilnehmer empfangen gleichzeitig und alle können auch Senden, 
wobei die Hardware automatisch erkennt wann der Bus frei ist.

Deine Ersparnis: Die ganze Bus Logik brauchst du nicht programmieren.
Auch kann bei CAN irgend ein Teilnehmer problemlos ein/ausgesteckt 
werden und der ganze Bus läuft weiter.

Display-Einheiten können so unbegrenzt einfach mit an den Bus, die lesen 
die entsprechenden Adressen mit ohne dass man noch viel programmieren 
muss.

Bei RS485 würde das zwar auch gehen, ist aber deutlich mehr 
Programmieraufwand.

I2C kannst du vergessen, ist nur für Platinen-Intern zu gebrauchen und 
viel zu Störanfällig.

Lese am besten mal hier im Artikel: CAN
Viele Links und weitere Artikel, CAN ist eigentlich viel leichter als 
Seriell.

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.