.: Christians Technikseite :. .: The rotary way of life ... |
|||||||||
|
RS485-Busankoppler für Taster, LEDs und Temperaturfühler.Motivation.Einiger meiner Freunde baute vor einiger Zeit sein Eigenheim und setzte dabei bei der Gebäudeautomatisierung auf eine „SPS-artige“ Steuerung von Loxone. Diese bietet bei einem vernünftigen Preis-Leistungs-Verhältnis jede Menge Komfort. Da die IO-Erweiterungen bei der benötigten Menge schnell teuer werden und die Verkabelung ausartet, suchten wir nach einer alternativen Möglichkeit um Taster mit ihren integrierten LEDs und ein paar Temperatursensoren an die Steuerung zu koppeln. Die Verwendung von KNX-Tastern wäre brauchbar, wenn auch nicht besonders günstig. Somit wurde wieder einmal mein Entwicklertrieb geweckt. Technische Grundlagen.Die Schaltung wurde für die Anbindung von sogenannten SPS- oder Elektronik- Tastern entwickelt. Diese Taster beinhalten bis zu 8 Taster und 8 LEDs in der Baugröße eines herkömmlichen Schalters. Somit können viele Funktionen ohne riesiger Schalterbatterien an den Wänden, übersichtlich realisiert werden. Bei dem Projekt wurden die Jung 4248TSM verbaut, diese Taster haben 8 Taster mit gemeinsamen Wurzelkontakt und 8 LEDs (24V 1mA) mit gemeinsamer Masse. Ähnliche Taster gibt es auch von anderen Herstellern. Beim Betätigen sowie beim Loslassen einer Taste wird ein Telegramm erzeugt, dies ermöglicht der übergeordneten Steuerung eine Auswertung der Länge des Tastendrucks. Die Temperaturmessung wird durch einen MCP9701 erledigt. Dieser gibt eine zur Temperatur proportionale Spannung aus (V = 0,4V + Temperatur (in °C) * 0,0195), die absolute Genauigkeit ist mit ± 2K zwar nicht besonders gut, doch dies lässt sich in der übergeordneten Steuerung kompensieren. Ist ein Temperatursensor am Busankoppler angeschlossen, wird der aktuelle Messwert im 5 Minuten-Takt übertragen. Es gibt noch einen Reserveeingang, welcher als digitaler oder analoger Eingang verwendet werden kann, mögliche Einsatzzwecke wären Feuchtefühler, IR-Empfänger, ... ÜbertragungsprotokollDas Übertragungsprotokoll wurde bewusst einfach gehalten, auch wenn dadurch keine 100%ig zuverlässige Übertragung garantiert werden kann. Bisherige Tests mit mehr als 20 Tastern in einem Wohnhaus, zeigte allerdings keine störenden Ausfälle. Lediglich bei der Ansteuerung der LEDs sollte man mit Umsicht arbeiten und keine wilden Blinkorgien oder Lauflichter realisieren, da dies den Bus unnötig belastet und die Gefahr von Datenkollisionen oder Verlusten steigt. Grundsätzlicher Telegramaufbau:Startzeichen: <0x02> Busbefehle:
Hardware.Technische Daten.
Schaltung.Die 5V Versorgung der Komponenten wird von einem Schaltregler aus der 24V Versorgungsspannung generiert. Der Controller läuft mit 4Mhz, welche von einem Resonator erzeugt werden, dessen Genauigkeit reicht aus um eine stabile Kommunikation zu gewährleisten. Eingänge: Die 8 digitalen Eingänge werden von den Pull-Up-Widerständen auf +5V gehalten und müssen von den externen Tastern auf Masse gezogen werden. Die beiden analogen Eingänge (derzeit nur einer programmiert für den Temperatursensor) können 0V bis 5V verarbeiten. Die Anschlussleitungen sollten nicht länger als 30cm sein, um keine Störungen einzufangen, da keine weiteren EMV-Maßnahmen getroffen wurden. Ausgänge: Die 8 digitalen Ausgänge werden 24V- seitig geschalten. Der MIC5891 ist ein Schieberegister mit integrierten High-Side-Treibern und für diese Aufgabe perfekt geeignet. Die beiden Widerstände R4 und R5 dienen der Strombegrenzung, falls ein ausgangsseitiger Kurzschluss auftreten sollte. Die Anschlussleitungen sollten nicht länger als 30cm sein, um keine Störungen einzufangen. Layout.Die Platine ist fast vollständig mit SMD- Bauteilen bestückt, um die Abmessungen möglichst gering zu halten. Der Einbau erfolgt in ein modifiziertes Vergussgehäuse (Hammond 1596B107) und ermöglicht den Einbau in einer Schalterdose hinter dem eigentlichen Taster. Die Verbindung zu den Tastern, LEDs und dem Temperatursensor, erfolgt mit etwa 12cm langen Flachbandleitungen, welche durch MicroMatch-Stecker mit der Platine verbunden werden. Dies ermöglicht einen unkomplizierten Anschluss der Peripheriegeräte. Ich habe bei meinen Platinen die Buchse K3 (ISP-Anschluss) nie bestückt, zum Programmieren verwende ich einen passenden Pfostenverbinder, der etwas verspannt in die durchkontaktierten Bohrungen gesteckt wird, die Verbindung reicht zum Programmieren des Controllers. Buchse S1 wird ebenfalls nicht bestückt, da diese im Normalfall ebenfalls nur 1x, beim vergeben der Busadresse, benötigt wird. Hier verwende ich einen Drahtbügel, kleine Zange oder sonstiges. Fotos.Firmware.Die Firmware wurde in Bascom geschrieben.Die folgende Beschreibung soll einen groben Überblick über die wichtigsten Teile der Firmware geben. Initialisierung.Nach dem Start wird die Busadresse aus dem ROM gelesen und auf Gültigkeit geprüft, sollte diese außerhalb des gültigen Bereiches (A bis Z) liegen, so kann nur der Programmiermodus der Adresse aufgerufen werden, alle anderen Funktionen sind gesperrt. Der Buskoppler zeigt die Busadresse binär an seinen Ausgängen für 5 Sekunden an. Anschließend zählt er bis 0 und zeigt diesen Zustand binär auf den Ausgängen an. Wenn eine Spannung am Temperatursensor-Eingang anliegt, wird die Temperaturübertragung aktiviert. Abschließend werden die Interrupts aktiviert und in die Hauptschleife gesprungen.Hauptschleife.Programmiermodus:Wird durch das Verbinden der beiden Kontakte von S1 der Programmiermodus aktiviert, werden alle Ausgänge aktiviert und der Buskoppler wartet auf den Befehl zum Setzten der Busadresse (<0x02>*SETx<0x03>), wird eine gültige Empfangen, speichert der Busankoppler die Adresse im ROM und führt über den Watchdog einen Reset aus. Soll keine Adresse gespeichert werden, ist S1 nochmals zu verbinden, dadurch wird ebenfalls ein Watchdog Reset ausgelöst.alle 500µs:Wird der Empfangspuffer auf ein vollständig empfangenes Telegramm abgefragt und wenn nötig ausgewertet.Befinden sich Daten im Sendepuffer und ist der Bus, seit einer durch die Busadresse, ermittelte Mindestzeit frei (Zähler der Sendesperre auf 0), werden Diese gesendet. alle 10ms:Nach 20 Ticks des Timers (500µs) werden die Taster eingelesen und in einem Ringspeicher abgelegt, die letzten beiden Einträge müssen identisch sein und von davor liegenen verschieden. Somit wird eine Flankenerkennung und Entprellung erreicht. Wurde eine Flanke detektiert, werden die entsprechenden Telegramme in den Sendepuffer eingetragen.alle 60s:Wird wenn ein Temperatursensor beim Start erkannt wurde, die aktuelle Temperatur ein einen Puffers geschrieben.alle 300s:Wird aus den Daten des Temperatur-Puffers der Mittelwert gebildet und auf °C umgerechnet. Dieses Ergebnis wird als komplettes Bustelegramm in den Sendepuffer geschrieben.Interrupts.Timer0:Wird im 500µs Takt ausgelöst und incrementiert er den Zähler zur Erzeugung des 10ms-Taktes und decrementiert den Zähler für die Sendesperre.Empfang auf der seriellen Schnittstelle:Puffert das letzte empfangene Zeichen und prüft es.Wird ein Startzeichen (0x02) empfangen, wird der gesamte Puffer gelöscht. Die weiteren Zeichen werden im Empfangspuffer abgelegt, bis der Puffer voll ist oder ein Endzeichen empfangen wurde. Beide Zustände werden der Hauptschleife angezeigt um das Telegramm auszuwerten. Jedes Mal wenn ein Zeichen empfangen wurde, wird der Zähler für die Sendesperre auf den Startwert [(Busadresse + 5) * 500µs] gesetzt. Bedienung.Grundprogrammierung des Mikrocontrollers.Für die Grundprogrammierung des Mikrocontrollers benötigt man das kostenlose Atmel Studio, ein Programmiergerät und die Dateien aus der „RS485_BCU_V0.2.zip“ (siehe Downloads).
Programmierung der Busadresse.
Ändern der Firmware über den RS485-Bus.In der Firmware ist ein Bootloader integriert. Es handelt sich dabei um den Standard-Bootloader von Bascom. Durch den Bootloader ist es möglich die Firmware der Busankoppler über den RS485-Bus zu übertragen und kann sich somit den Ausbau der Busankoppler ersparen.Für das Übertragen der Firmware braucht man einen PC mit direkten Zugriff auf den Bus, über zum Beispiel einen USB-RS485-Adapter oder einen seriellen Netzwerkserver. Wichtig ist, das die Verbindung unter Windows als COM-Schnittstelle eingetragen ist.
Einbindung in Loxone.In den unten gezeigten Beispielen hängen die Taster über einen seriellen
Server am Loxone und werden daher per UDP-Befehle angesteuert.
Bei Verwendung der RS485-Extension gelten die Einstellungen sinngemäß. Tastereingänge.Die Tastereingänge werden als analoge Eingänge konfiguriert. Dies liegt darin begründet,
dass es nur so möglich ist, die 1 im Telegramm als EIN und die 0 als AUS zu interpretieren.
Bei der Auswertung als digitale Eingänge müsste man je einen Eingang für Ein und einen für
Aus anlegen. Diese würden bei jeder Erkennung einen kurzen Impuls liefern, welcher über ein
RS-Flip-Flop in ein brauchbares Signal verwandelt werden müsste. Dies spart man sich alles
durch den analogen Trick. Temperatureingänge.Die Temperatureingänge werden als klarer weise als analoge Eingänge konfiguriert.
Wichtig ist die Vorzeichenerkennung und die richtige Skalierung. LED-Ausgänge.Die LEDs werden über den Befehl bei EIN und Befehl bei AUS angesteuert. Lizenzen.
Download.Schaltplan, Layout, FirmwareKommentare.Kommentare (11)Sortierung frank (riegelsberg, Deutschland) sagt... kann man irgendwo die platinen fertig kaufen ? Admin: Du hast Post. 27 Januar 2016 13.18 Josef sagt... Hallo Christian
Dein Modul RS485 Busankoppler hoert sich sehr gut an. Wie sind denn deine Erfahrungen soweit? Sieht Du bedenken bzgl. Doppel/Dreifach Klich wenn ich damit Taster abfragen moechte?
Gruss Josef Admin: Hallo Josef. Also bis jetzt sind die Erfahrungen im Großen und Ganzen gut. Die Elektronik läuft in 3 Projekten ohne Auffälligkeiten (bis zu 22 Einheiten an einem Bus). Mehrfachklicks sind problemlos. Wo man ein wenig vorsichtig sein sollte, ist viele LED-Ansteuerungen zu realisieren, vor allem wenn dann alle gleichzeitig schalten sollten (Zentral). Das ganze Projekt steht und fällt allerdings mit der Anbindung an Loxone, hier muss man manche Firmware-Versionen einfach überspringen, da sie von Zeit zu Zeit immer wieder eine komplett unbrauchbare online stellen. Christian 26 Mai 2015 21.25 ED (Östereich) sagt... Hallop Christian, ich nochmal: Hast Du vielleicht ein Stückliste der benötigten Bauteile? Danke ED Admin: Stückliste habe ich nun in das ZIP-File hinzugefügt. Bitte einfach nochmal runter laden. Christian 14 Februar 2015 14.35 ED (Östereich) sagt... Hallo Christian, bin gerade dabei Extensions für Loxone zu erwerben. Werde vorher deine RS485 Lösung probieren. gefällt mir sehrt gut !! Brauchst Du vielleicht Prints? Ich werde 10 Stk. bestellen. LG ED Admin: Laufen bis jetzt auch problemlos, zumindest seit dem Loxone ihre RS485-Extension im Griff haben. ;-) Platinen brauche ich keine, danke der Nachfrage. Christian 14 Februar 2015 14.27 Henry (Deutschland) sagt... Ist eine Anbindung an eine S7 300 über den Kommunikationsprozessor CP340 (6ES7340-1CH00-0AE0) möglich?
Technische Daten des CP: Punkt-zu-Punkt ● Leitungslänge, max. 1 200 m ● unterstützte Drucker HP-Deskjet, HP-Laserjet, IBM-Proprinter, Benutzerdefiniert Telegrammlänge, max. — 3964 (R) 1 024 byte — ASCII 1 024 byte Übertragungsgeschwindigkeit, RS 422/485 — mit 3964 (R)-Protokoll, max. 19,2 kbit/s — mit ASCII-Protokoll, max. 9,6 kbit/s — mit Druckertreiber, max. 9,6 kbit/s Admin: Hallo Henry. Ich kenne mich leider mit Siemens SPSen überhaupt nicht aus, da ich normalerweise auf Beckhoff arbeite. Da dieser Kommunikationsprozessor anscheinend nur max. 9600 bit/s kann, müsst man die Firmware der Busankoppler etwas modifizieren. Bedeutet das ASCII-Protokoll bei Siemens, dass man frei definierbare Strings senden und empfangen kann? Christian 15 Januar 2015 16.45 Seite 2 von 3
Kommentar Hinzufügen |
.: WillkommenAuf meiner privaten Homepage, mit allerlei Infos zu technischen Spielereien und Hobbies..: News10.03.2019Projektvorstellung: In Entwicklung: 24V Bewegungsmelder Einsatz die neuen Insta Melder. |
.:
Christians Technikseite
28.02.2015 10:02:43 |