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!
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.
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.
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
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.
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.
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?
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.
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?"
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.
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.
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.
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.
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.
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.
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
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.
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
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
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
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.
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.
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.
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.
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
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.