.: 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. |
.: 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 |
wie kann ich eine Verbindung zwischen 2 Busankopplern ziehen? Soweit ich gesehen habe gibt es nur 2 Klemmen für den Busanschluß und keine weiterführenden Buchsen.
Kann man das Modul auch mit dem 5248 TSM von Jung betreiben? Wie teuer ist ein RS485 Busankoppler und kann man diesen bei Ihnen beziehen? Ist dieser dann schon fertig gelötet oder bieten Sie diesen nur als Bausatz an? Mit freundlichen Grüßen
Henry Juhl
In jede Klemme passen zwei Drähte bis max. 0,8mm Durchmesser, somit kann man von einem Taster zum nächsten verkabeln.
Mit den neuen Jung Tastern sollte es auch funktionieren, allerdings muss die + und die - Klemme an den Tastern auf Masse gelegt werden.
Das Projekt dient eigentlich mehr als Nachbauanleitung und es ist eigentlich nicht Platinen zu verkaufen (noch nicht von dieser Version). Die reinen Bauteilkosten liegen bei etwa 25,- inkl. Platine und Gehäuse. Schick mir ansonsten einfach mal ein E-Mail, vielleicht lasse ich mal wieder ein paar Platinen fertigen, dann kannst du auch welche haben.
Christian