Powerline mit AVR

Wechseln zu: Navigation, Suche

Hier soll ein Projekt zur Entwicklung eines einfachen, modularen Powerline-Moduls mit einem AVR entstehen.

Bisherige Diskussion siehe: [1]

Hardware

Anforderungen

  • Sollte für UP-Dose und Hutschiene geeignet sein
  • Für UP-Dose kommt man vermutlich nicht um SMD Bauteile herum
  • Modularer Aufbau: Einheitliches Basismodul durch Stapeln erweiterbar
  • Überlastschutz (Temperaturüberwachung am Triac)
  • Die Module arbeiten dezentral
  • Die Abfrage und Steuerung der Module ist über ein Modem möglich
  • Das Modul hat mehrere Funktionen die durch Software parametrierbar sind
  • als Zeitschalter (Einschaltverzögerung, Ausschaltverzögerung)
  • als Ein/Ausschalter (schaltet im Nulldurchgang)
  • Eingänge: Taster
  • Ausgänge: 230V Schaltausgang

Hinweise

  • Stromleitungen sind keine Datenleitungen und strahlen das aufmodulierte Signal in die Umgebung ab.
  • Es können Funkdienste gestört werden. (Polizei, Feuerwehr, Rettungsdienst)
  • Stromleitungen werden als Datenleitungen missbraucht.
  • Nicht umsonst haben sich viele Energieversorger vom PLC Markt zurückgezogen.
  • (scheinbar niederfreqentes Datensignal => weniger Störung)???
  • Die Module sollten so konzipiert werden dass sie die Vorschriften in DIN EN 50065-1 VDE 0808 einhalten: C-Band von 125-140 KHz, CSMA/CD - Protokoll, max. 116 dbµV (evtl Probleme durch zu hohen Sendepegel und durch evtl entstehende Oberwellen, da AVR keinen Sinus liefert, sondern dies mehr oder wenig durch das LC-Filter erledigt wird)

Mindestvoraussetzungen an den AVR

  • UART
  • 2 externe Interrupts
  • Analogkomparator
  • PWM

In Frage kommen (nicht vollständig):

AVR Flash UART A-Comp ADC PWM INT
ATtiny2313 2k 1 1 - 4 2
ATmega8 8k 1 1 8 3 2
ATmega128 128k 2 1 8 8 8

Übersicht AVR

neue AVR Typen low Power mit hi-speed PWM: ATtiny461

Funktionsweise (vgl TDA5051)

  • Modulation:

Der AVR moduliert auf die Netzspannung ein 140 kHz Signal. Die 140 kHz werden über den PWM-Ausgang erzeugt und anschließend verstärkt. Der PWM-Ausgang wird mittels INT0 getaktet. Durch eine Verbindung mit TXD werden somit schon alle Daten der UART auf das Netz moduliert.

  • Demodulation:

Über ein RC-Filter (neue Version: LC-Filter) wird die Netzspannung nach hochfrequenten Anteilen durchsucht. Die Spannung wird von einem Transistor verstärkt und dann mit 2 Schottkydioden gleichgerichtet. Eine Siliziumdiode begrenzt das Signal noch auf ca. 0,5V. Das Signal wird anschließend dem AVR-Komparator zugeführt (neue Version ADC-Konverter). Über einen (software-) PWM-Ausgang kann die Schaltschwelle eingestellt werden. Das dekodierte Signal liegt dann an PD4 an und geht in die UART.

  • Phasenanschnitt:

Über 2 x 1 MOhm Widerstände wird mittels INT1 die Netzfrequenz abgetastet. Bei jedem Nulldurchgang wird ein Zähler auf 255 gesetzt. Dieser zählt mittels Timer (alle 64 µs) auf ca. 100 herunter. Stimmt der Zähler mit dem Ausgangswert des jeweiligen Kanals überein, so wird ein Zündimpuls zum Triac ausgegeben.

Module

Schaltplan mit funktionaler Gruppierung

Basismodul UP-Dose

Hier mal ein erster Vorschlag (noch nicht vollstandig) für ein UP Basismodul mit SMD-Technik:

Kann mal jemand mit OP-Amp-Kenntnissen kontrollieren, ob die Sendeendstufe so funktioniert?

OP-Amp würde ich lieber einen Input per Spannungsteiler auf 2,5V legen. Bitte unbedingt auch mal den neuen Schaltplan im Downloadbereich meiner Projektseite ansehen (LC Input Filter)
http://www.k13zoo.de/vdr/homeautomation/download/
(erledigt)

Anmerkung: Der OP vom Typ 741 kann nicht bis an die Versorungsspannung ausgesteuert werden. In diesem Fall wird der Ausgang den 0V Pegel nicht erreichen. Die minimale Spannung wird bei ca. 1,5 V liegen.

Ist das so schlimm? Die Schwankung sollte doch reichen, oder?

--> Vorschlag OP Typ Rail-to Rail Input and Output TS922 (dual, 12V 80mA out)

Warum wurde die Transistorschaltung durch einen OP ersetzt. Welche Vorteile bringt dies?

Weniger Überkreuzungen, weniger Platzverbrauch, weniger zu löten.

Im Eingangskreis halte ich eine OP-Schaltung für geeignet. Dort könnte mit dem OP-Schaltung die aufmodulierte Frequenz durch einen Bandpass gefiltert werden. Gruß Reinhold

Kannst du dafür einen richtig dimensionierten Schaltplan zeichnen?

Schutz vor Überspannung einplanen, z. B. Dioden -->

Evtl kann man einen 2-Fach OP verwenden und den zweiten als Eingangsverstärker bzw. Gleichrichter verwenden.

Dann müsste die Empfangsstufe aber auch die ungeregelte Eingangsspannung als Quelle für den OP verwenden.

Update: Was haltet ihr von dem Board als Standard für UP-Dosen? Habe versucht es so zu designen, dass auch eine erweiterte Version mit ATmega8 möglich ist.

--> einfachere Stromversorgung ohne galvanische Trennung: Supertex SR086 /SR087

Das Board halte ich für zu groß, da ich glaube, dass du keinen Platz mehr zum Anklemmen der Leitungen hast.

So besser?

Ich würde auf einen ATmega umsteigen, da dieser einen AD-Wandler hat, der dann evtl. die Abtastung des Trägers übernimmt. Außerdem hat er mehr Speicher

neue Typen: ATtiny 261, 461 im SO20 (oder ATtiny 15 im SO8)

Ich wollte eine Ultra-Low-Cost-Version mit ATtiny2313 (hat außerdem 4 PWM!) und eine mit ATmega8.
Mit Standard meine ich eigentlich die Abmessungen und Anschlussbelegung des Boards. Wenn es ausgereift ist, könnte man größere Mengen herstellen lassen um Kosten zu sparen.

Ist es überhaupt nötig, die Abtastung separat zu machen? Der UART tastet doch auch schon 16 mal pro Bit ab. Man müsste dann nur den Offset einstellen können.

Schaltplan
Eagle
ATtiny2313 Board
Eagle
ATmega8 Board
Part     Value          Device               Package      Library    Reichelt
B1                      B-DIL                B-DIL        rectifier  B80C800DIP
C1       220µF          CPOL-EUE5-10.5       E5-10,5      rcl        RAD 220/25
C2       33nF 630V      C-EU102-043X133      C102-043X133 rcl        MKS-4-1000 33N
C3       33nF           C-EUC1206            C1206        rcl        X7R-G1206 33N
C5       100pF          C-EUC1206            C1206        rcl        NPO-G1206 100P
C6       10nF           C-EUC1206            C1206        rcl        X7R-G1206 10N
C7       1nF            C-EUC1206            C1206        rcl        NPO-G1206 1,0N
C8,C11   22µF           CPOL-EUE2-5          E2-5         rcl        
C9,C10   100nF          C-EUC1206            C1206        rcl        X7R-G1206 100N
D1,D4    Schottky       DIODE-D-2.5          D-2.5        diode      
D3       1n4148         DIODE-D-2.5          D-2.5        diode      1N 4148
F1                      SHK20L               SHK20L       fuse       PL 120000
IC1      uA741D         uA741D               SO08         linear     µA 741 SMD
IC2      78L05          78XXS                78XXS        v-reg      µA 78L05
IC3      ATTINY2313-20S ATTINY2313-20S       SO20L        avr        ATTINY 2313 SO
JP1      AVR-ISP-6      AVR-ISP-6            AVR-ISP-6    atmel      
L1       47µH           L-EU0204/7           0204/7       rcl        SMCC 47µ 
L2       47µH           L-EUL4532P           L4532P       rcl        LQH3C 47µ
LED1                    LED3MM               LED3MM       led       
Q1       4MHz           CRYTALHC49S          HC49/S       crystal    4-HC49U-S
R1,R17   10k            R-EU_0207/2V         0207/2V      rcl        
R2       2k2            R-EU_0207/12         0207/12      rcl       
R3                      R-EU_R1206           R1206        rcl           
R4,R7    10k            R-EU_R1206           R1206        rcl         SMD 1/4W 10K
R6       470k           R-EU_M1206           M1206        rcl         SMD 1/4W 470K
R8       1k             R-EU_0207/5V         0207/5V      rcl       
R9       20k            R-EU_R1206           R1206        rcl         SMD 1/4W 20K
R10      51k            R-EU_R1206           R1206        rcl         SMD 1/4W 51K
R18      100k           R-EU_0207/2V         0207/2V      rcl         SMD 1/4W 100K
SV1,SV2                 FE10-1               FE10         con-lsta    BL 1X10G8 2,54
T4                      BC847A-NPN-SOT23-BEC SOT23-BEC    transistor  BC 847A SMD
TR1      9V             EE20-1               EE20-1       trafo       EE 20/6,1 109
X1                      AK500/3              AK500/3      con-ptr500  AKL 101-03

Phasenanschnitt UP-Dose

USB-Modul UP-Dose

Basismodul Hutschiene

Software

Protokoll

Das Protokoll ist multimasterfähig, jedes Paket muss quittiert werden. Kommt keine oder eine fehlerhafte Quittierung an, so wird ein paar mal versucht das Paket nochmal zu senden. Eine Sequenznummer garantiert die einmalige Verarbeitung, selbst wenn das Paket öfter empfangen wurde.

Protokollaufbau

Byte 7 6 5 4 3 2 1 0 Funktion
1 0 1 0 1 0 0 1 0 Header: "R"
2 0 1 0 1 0 0 0 0 Header: "P"
3 C C C C L L L L C, wie oft das Paket wiederholt gesendet wurde (wegen ausbleibenden Ack). L: Länge der Payload bis zum CRC-Byte (also mindestens 3)
4 A ID ID ID ID ID ID ID Ack-Flag, Destination ID
5 0 ID ID ID ID ID ID ID Source ID
6 x x x x x x x x Sequenznummer
L - 3 Bytes x x x x x x x x Daten
L + 4 x x x x x x x x CRC ab Byte 3

Zuerst wird nach dem Header gescannt (bei Manchestercodierung müssen wahrscheinlich vor dem Header noch ein paar Dummy-Daten gesendet werden, damit sich die AGC einstellt)

Dann kommt die Länge und der wievielte Versuch dies ist, dieses Paket zu übertragen.

Die Moduladresse hat momentan 7 Bit (also 128 Module), ein Bit ist zur Signalisierung, dass dies ein Ack-Paket ist. Das Gerät für welches das Ack-Paket bestimmt ist, löscht sein aktuell zu sendendes Paket aus dem Sendepuffer, da es weiß, dass seine Daten erfolgreich angekommen sind. Bleibt das Ack-Paket aus, so wird nach einer (pseudo-) zufälligen Zeit bis zu 8x versucht, das Paket erneut loszuwerden.

Es kann jetzt passieren, dass der Empfänger das Paket 8x korrekt empfängt und nur das Ack-Paket nicht korrekt zurück kommt. Die Sequenznummer (welche für das aktuell zu sendende Paket immer gleich ist) garantiert aber, dass das Paket nur 1x verarbeitet wird. Um ein Paket als gültig anzusehen muss entweder C = 0 sein (erster Versuch das Paket zu senden) oder die Sequenznummer sich von der des letzten Paketes unterscheiden (hier kann es im Moment noch zu Problemen kommen, wenn mehrere Module untereinander kommunizieren). Weiterhin muss natürlich die Destination ID Übereinstimmen.

Der Teil Daten wird dann von der nächsten Protokollebene behandelt.

Das erste Byte ist der Befehl aus dem sich auch die Länge weiter Daten ableitet

Momentan gibt es erst 2 Befehle:

 "s"    <Speicherstelle>  <wert>  //speichert Wert in entsprechenden Konfig-Ram
 Modul antwortet mit "!"
 "q"    <Speicherstelle>          //Liest Wert aus Konfig-Ram
 Modul antwortet mit "=" <Wert>

Im Konfig-Ram werden sowohl die Phasenanschnittwerte als auch die Tastzustände gehalten. Ein Überschreiben führt also sofort dazu, dass der entsprechende Ausgang den Wert ausgibt.

Vorschläge

  • Es ließe sich evtl. noch Platz sparen, wenn man einen Kondensator statt dem Trafo verwendet. Habe jetzt schon einige Schaltungen damit laufen mit bis zu 80 mA.
Sehr interessanter Artikel im elko: http://www.elektronik-kompendium.de/public/schaerer/cpowsup.htm
  • Wie soll die Adressierung aussehen?
Jedes Modul eine Adresse mit 8 Bit
oder jede Funktion eine Adresse mit 16 Bit
  • Broadcasts für z. B. Erkennung vorhandener Geräte
wie wäre es hier die Adresse 000 zu verwenden?
  • Jedes Gerät sollte sich und seine Funktionen bekannt machen können
Anfrage "(C)apabilities" wird mit ACK-Packet beantwortet (siehe Steuerprotokoll)
  • Countdown zum automatischen Ausschalten (per Web-Oberfläche einstellbar)
  • Unabhängiger Sender ohne Rechner mit z. B. Display Steuerung, Web-Oberfläche?
  • VERSIONSANFRAGE Modul mit Ethernet (incl. Webserver) für die zentrale Steuerung
  • Steuer-Protokoll Protokoll: (s)et / g(et) / m(emory) / a(ck) / e(rror)
als beispiel für die komponenten (s)witch / a(nalog) / p(wm) / c(apabilities)
  • CSMACD fehlt noch !!

"s s0 01001100" setzt die Schalter 2,5 und 6 auf dem Modul und wird mit
"a s0 01001100" quitiert, die Header mit den Adressen,der Sequenznummer etc. hab ich mal weggelassen.
"g c" liefert
"a c s2a4p2", also 16 Schalter(2x8), 4 AD-Ports, 2 PWM Ports

  • evtl. Sicherung einplanen?