Powermeter: Unterschied zwischen den Versionen
Siro (Diskussion | Beiträge) (+beschreibung) |
Siro (Diskussion | Beiträge) (+prettytables) |
||
Zeile 22: | Zeile 22: | ||
Wie alle CAN-Geräte kann das Powermeter über diesen eine neue Firmware aufgespielt bekommen, so das es fest installiert werden kann. | Wie alle CAN-Geräte kann das Powermeter über diesen eine neue Firmware aufgespielt bekommen, so das es fest installiert werden kann. | ||
== | == Umsetzung == | ||
=== Bauteile === | === Bauteile === | ||
* 3 Stromwandler für 50A (L1, L2, L3) [http://www.csd-electronics.de/data/pdf/AC1050.pdf] | * 3 Stromwandler für 50A (L1, L2, L3) [http://www.csd-electronics.de/data/pdf/AC1050.pdf] | ||
* ATXMEGA 192A3-AU | * ATXMEGA 192A3-AU | ||
* Gehäuse HUT 4-C | * Gehäuse HUT 4-C | ||
* CAN | * CAN | ||
Zeile 39: | Zeile 33: | ||
* SIM1-0505 SIL4 (5V DC/ 5V DC galvanische Trennung) ist ungeregelt also Linearregler nach schalten | * SIM1-0505 SIL4 (5V DC/ 5V DC galvanische Trennung) ist ungeregelt also Linearregler nach schalten | ||
* ZR431L (ADJUSTABLE PRECISION SHUNT REGULATOR) SOT23 1.24V | * ZR431L (ADJUSTABLE PRECISION SHUNT REGULATOR) SOT23 1.24V | ||
=== Xmega-ADC === | === Xmega-ADC === | ||
Zeile 46: | Zeile 39: | ||
* Messwerte sind +/- 11bit 0x031F == 3,3V, 0x0000 == 1,65V, 0xFCE0 == 0V | * Messwerte sind +/- 11bit 0x031F == 3,3V, 0x0000 == 1,65V, 0xFCE0 == 0V | ||
Layout | ''Layout'' | ||
* Messbereich: 35A max | * Messbereich: 35A max | ||
**Um = SQRT(2)*35A/1000* 33 Ohm = +-1.63 V | **Um = SQRT(2)*35A/1000* 33 Ohm = +-1.63 V | ||
Zeile 59: | Zeile 52: | ||
**mit R1 = 33k und R2 = 100k | **mit R1 = 33k und R2 = 100k | ||
**Vout=(0,33+1)*1.24V=1,6492V | **Vout=(0,33+1)*1.24V=1,6492V | ||
=== Energiebedarf === | === Energiebedarf === | ||
Zeile 81: | Zeile 73: | ||
== Gehäuse Pinbelegung == | == Gehäuse Pinbelegung == | ||
Pin | {| {{prettytable}} | ||
| '''Pin''' | |||
| '''Funktion''' | |||
|- | |||
|2 - 5 | |||
|CAN | |||
|- | |||
|10 | |||
|L1 | |||
|- | |||
| 11 | |||
|L2 | |||
|- | |||
| 12 | |||
|L3 | |||
|- | |||
| 13 | |||
|N | |||
|- | |||
| 18 - 21 | |||
|StromWandler Labor | |||
|- | |||
| 22 - 25 | |||
|StromWandler Tankstelle | |||
|- | |||
|} | |||
== ATXMega 192A3 == | == ATXMega 192A3 == | ||
Zeile 111: | Zeile 121: | ||
'''PA / ADC1 - Spannung''' | '''PA / ADC1 - Spannung''' | ||
{| {{prettytable}} | |||
| '''Pin''' | |||
| '''Funktion''' | |||
|- | |||
|PA0 | |||
| Nullpunkt | |||
|- | |||
|PA1 | |||
| Nullpunkt | |||
|- | |||
|PA2 | |||
| L3 Spannungsteiler | |||
|- | |||
|PA3 | |||
| L2 Spannungsteiler | |||
|- | |||
|PA4 | |||
| L1 Spannungsteiler | |||
|} | |||
'''PB / ADC2 - Strom''' | '''PB / ADC2 - Strom''' | ||
{| {{prettytable}} | |||
| '''Pin''' | |||
| '''Funktion''' | |||
|- | |||
|PB0 | |||
| Nullpunkt | |||
|- | |||
|PB1 | |||
| Nullpunkt | |||
|- | |||
|PB2 | |||
| x Stromwandler | |||
|- | |||
|PB3 | |||
| L2 Stromwandler | |||
|- | |||
|PB4 | |||
| x Stromwandler | |||
|- | |||
|PB5 | |||
| L1 Stromwandler | |||
|- | |||
|PB6 | |||
| L3 Stromwandler | |||
|- | |||
|PB7 | |||
| x Stromwandler | |||
|} | |||
'''CAN - MCP2515''' | '''CAN - MCP2515''' | ||
{| {{prettytable}} | |||
| '''Pin''' | |||
| '''Funktion''' | |||
|- | |||
| PD1 | |||
| INT | |||
|- | |||
| PD2 | |||
| CLK | |||
|- | |||
| PD4 | |||
| cs | |||
|- | |||
| PD5 | |||
| mosi | |||
|- | |||
| PD6 | |||
| miso | |||
|- | |||
| PD7 | |||
| sck | |||
|} | |||
''' RGB-LED common Anode''' | ''' RGB-LED common Anode''' | ||
{| {{prettytable}} | |||
| '''Pin''' | |||
| '''Funktion''' | |||
|- | |||
| PC0 | |||
| BLUE | |||
|- | |||
| PC1 | |||
| GREEN | |||
|- | |||
| PC2 | |||
| RED | |||
|} | |||
=== LED - Status === | === LED - Status === | ||
Zeile 147: | Zeile 217: | ||
* LED blau - Powermeter misst Daten | * LED blau - Powermeter misst Daten | ||
* LED cyan - Powermeter berechnet Leistungsaufnahme | * LED cyan - Powermeter berechnet Leistungsaufnahme | ||
* LED rot | * LED rot - Fehler | ||
== Software == | == Software == | ||
Zeile 161: | Zeile 231: | ||
check_can_handler | check_can_handler | ||
if(ADC_data_ready){calculate RAW power} | if(ADC_data_ready){calculate RAW power} | ||
error | check for error | ||
} | } | ||
} | } | ||
Zeile 283: | Zeile 353: | ||
|} | |} | ||
== TODO == | |||
* Layout gnd gnd_iso mit x2 / widerstand und Überspannungsschutz nach Spannungsteiler | |||
* Kalibirierung | |||
* (optional) sqrt asm routine ?? -> geht auch so | |||
== Gemessene Messwerte == | == Gemessene Messwerte == |
Version vom 16. August 2013, 17:01 Uhr
Powermeter Release status: stable [box doku] | |
---|---|
Description | |
Author(s) | Pl4nkton, siro |
Last Version | 1.00 |
Platform | AVR (ATXmega192a3) |
License | Source: GPL |
Download | c Code, trac |
Echtzeit Leistungsmessung der Labor Stromversorgung (und an 32A Außenleitung der Drehstromladekiste). Ein Xmega übernimmt die analoge Spannungsmessung und berechnet die Wirkleistung, den RMS-Strom, die RMS-Spannung und die Scheinleistung für jede Phase.
Details
Es werden 2 ADCs verwendet, die ihre Daten per DMA direkt in den sram schreiben. Ein Timer legt die Abtastrate fest. Diese beträgt momentan 128 Samples pro Periode der Netzspannung. (Limitierung des DMA, Max 255 möglich). Die berechneten Werte werden über CAN an den Laborserver geschickt. Es gibt eine RGB Status Led, welche den Zustand des Powermeter anzeigt. Die Schaltung beinhaltet eine galvanische Trennung zum CAN, da der Xmega direkt mit dem Stromnetz verbunden ist. Wie alle CAN-Geräte kann das Powermeter über diesen eine neue Firmware aufgespielt bekommen, so das es fest installiert werden kann.
Umsetzung
Bauteile
- 3 Stromwandler für 50A (L1, L2, L3) [1]
- ATXMEGA 192A3-AU
- Gehäuse HUT 4-C
- CAN
- MCP2515
- TI ISO1050
- SIM1-0505 SIL4 (5V DC/ 5V DC galvanische Trennung) ist ungeregelt also Linearregler nach schalten
- ZR431L (ADJUSTABLE PRECISION SHUNT REGULATOR) SOT23 1.24V
Xmega-ADC
- differential ADC signed mode, negativer Pin auf Vref (1,65V)
- alle Spannungen am ADC Eingang müssen zwischen GND - Vcc (0 - 3,3V) liegen !
- Messwerte sind +/- 11bit 0x031F == 3,3V, 0x0000 == 1,65V, 0xFCE0 == 0V
Layout
- Messbereich: 35A max
- Um = SQRT(2)*35A/1000* 33 Ohm = +-1.63 V
- Messbereich: 250 V Max (Außenleiter-Nullleiter)
- U = SQRT(2)*250V=354V
- Spannungsteiler 215:1
- mit R1=470k und R2=2k2 Spannungsteiler von 214.63:1
- Um=SQRT(2)*250V*2200/472200=+-1,647V
- Spannungsreferenz Vref = 3.3V/2 = 1.65V
- Vout=(1+R1/R2)*1.24V
- R1/R2 = 1.65V/1.24V -1 = 0,330645161
- mit R1 = 33k und R2 = 100k
- Vout=(0,33+1)*1.24V=1,6492V
Energiebedarf
3,3V muss > 1W sein
- Xmega max 18mA + 6 mA ADCs + x
- mcp 2515 5mA
- iso 1050 2mA
5V
- iso 1050 73 mA
Spannungen
Nicht isoliert vom Bus
- 12-24V Canbus power
- 5V vom DC/DC aus 12-24V
Isoliert vom Bus
- 3,3V 1W vom DC/DC aus 5V
- 12V OLED ?
Gehäuse Pinbelegung
Pin | Funktion |
2 - 5 | CAN |
10 | L1 |
11 | L2 |
12 | L3 |
13 | N |
18 - 21 | StromWandler Labor |
22 - 25 | StromWandler Tankstelle |
ATXMega 192A3
Verwendete Peripherie
- Taktgenerator (32Mhz Interner PLL)
- Timer0 (16Mhz Takt an PD2)
- RTC
- Interrupt
- Events (startet den ADC, startet DMA Block transfers)
- ADC1, ADC2 (Messung der Spannungen)
- DMA0, DMA1 (Transfer der Messergebnisse in den SRAM)
- USARTC1 (Debugging)
- Timer1 (generiert Events, welche die ADCs starten)
- GPIO (LEDs,...)
Pinbelegung
PDI
- 56 - PDI_DATA
- 57 - RESET / PDI_CLK
PA / ADC1 - Spannung
Pin | Funktion |
PA0 | Nullpunkt |
PA1 | Nullpunkt |
PA2 | L3 Spannungsteiler |
PA3 | L2 Spannungsteiler |
PA4 | L1 Spannungsteiler |
PB / ADC2 - Strom
Pin | Funktion |
PB0 | Nullpunkt |
PB1 | Nullpunkt |
PB2 | x Stromwandler |
PB3 | L2 Stromwandler |
PB4 | x Stromwandler |
PB5 | L1 Stromwandler |
PB6 | L3 Stromwandler |
PB7 | x Stromwandler |
CAN - MCP2515
Pin | Funktion |
PD1 | INT |
PD2 | CLK |
PD4 | cs |
PD5 | mosi |
PD6 | miso |
PD7 | sck |
RGB-LED common Anode
Pin | Funktion |
PC0 | BLUE |
PC1 | GREEN |
PC2 | RED |
LED - Status
- LED aus - Powermeter aus, Energieversorgung überprüfen
- LED grün - Powermeter ist an, misst keine Daten
- LED blau - Powermeter misst Daten
- LED cyan - Powermeter berechnet Leistungsaufnahme
- LED rot - Fehler
Software
main() { //configure powemeter_driver using Eventsystem: //Timer1 -> ADCA & ADCB -> DMA -> SRAM -> DMAInterrupt -> Timer1 -> ... //DMAInterrupt setzt Bit ADC_data_ready um Hauptprogramm zu signalisieren, das genug Daten im SRAM liegen //RAW-Werte im Hauptprogramm berechnet, danach die Seite im SRAM wieder freigegeben für weitere Messwerte //einmal pro Sekunde werden die RAW Werte über CAN geschickt while(1){ check_can_handler if(ADC_data_ready){calculate RAW power} check for error } }
Die Softare liefert RAW-Werte:
Die Spannung muss mit 0,1732177734375 = (1,65*215)/2048 multipliziert werden, um die Spannung in V zu berechnen. Der Strom muss mit 0,0147964015151515 = 1000/(33*2048) multipliziert werden, um den Strom in A zu berechnen. Die Leistung mit dementsprechend mit 0,0025629997253418 = (1,65*215*1000)/(33*2048*2048) multipliziert werden, um die Leistung in VA zu bekommen.
Lapcontrol
Die Daten des Powermeter können über lapcontrol powermeter ausgegeben werden. Bis jetzt wird aber nur der Gesamtverbrauch ausgegeben, nicht getrennt nach Phase.
lapcontrol -s kvm powermeter
CAN
Die Daten werden einmal pro Sekunde über den Can-Bus geschickt. Powermeter CAN Adresse: 0x05 Port: 0x06 TODO: was soll in Packet1 ?
Paket | Länge | data[0] | data[1-7] | Kennzeichner | Beispiel |
1 | 4 | 0x00 | (uint8_t)periods per Second, (uint16_t) ADC samples per second | Status Paket | 0x00 0x32 0x0136 |
2 | 5 | 0x01 | (uint32_t)WirkleistungC1 | Phase 1 Wirkleistung | 0x01 0x0001fdes |
3 | 5 | 0x02 | (uint32_t)WirkleistungC2 | Phase 2 Wirkleistung | 0x02 0x0001fdes |
4 | 5 | 0x03 | (uint32_t)WirkleistungC3 | Phase 3 Wirkleistung | 0x03 0x0001fdes |
5 | 5 | 0x04 | (uint32_t)ScheinleistungC1 | Phase 1 Scheinleistung | 0x04 0x0001fea5 |
6 | 5 | 0x05 | (uint32_t)ScheinleistungC2 | Phase 2 Scheinleistung | 0x05 0x0001fea5 |
7 | 5 | 0x06 | (uint32_t)ScheinleistungC3 | Phase 3 Scheinleistung | 0x06 0x0001fea5 |
8 | 5 | 0x07 | (uint32_t)SpannungC1 | Phase 1 Effektivspannung | 0x07 0x00000552 |
9 | 5 | 0x08 | (uint32_t)SpannungC2 | Phase 2 Effektivspannung | 0x08 0x00000551 |
10 | 5 | 0x09 | (uint32_t)SpannungC3 | Phase 3 Effektivspannung | 0x09 0x00000553 |
11 | 5 | 0x0a | (uint32_t)StromC1 | Phase 1 Effektivstrom | 0x0a 0x0000af43 |
12 | 5 | 0x0b | (uint32_t)StromC2 | Phase 2 Effektivstrom | 0x0b 0x00007c43 |
13 | 5 | 0x0c | (uint32_t)StromC3 | Phase 3 Effektivstrom | 0x0c 0x0000d035 |
TODO
- Layout gnd gnd_iso mit x2 / widerstand und Überspannungsschutz nach Spannungsteiler
- Kalibirierung
- (optional) sqrt asm routine ?? -> geht auch so
Gemessene Messwerte
Spannungsteiler
- P1: 100/0,4650
- P2: 100/0,4647
- P3: 100/0,4647
Strom-Shunt
- P1: 32,9 Ohm
- P2: 32,9 Ohm
- P3: 32,9 Ohm
Stromkasten Vortragsraum Farbe der Phasen Labor
Strom:
- L1: grün (Pin 3 8P8)
- L2: braun (Pin 1 8P8)
- L3: blau (Pin 5 8P8)
Spannung:
- L1: 7
- L2: 8
- L3: 9
Nächste Version
- ADE7858
- Rogowski spulen zur Strommessung
- Display
Hilfreiche Links
Ähnliche Projekte:
Verwandtes Projekt von dem man lernen kann:
Brauchbarer Schaltplan zur Strommessung über Shunt: (Seite 5)
Mathe:
- http://de.wikipedia.org/wiki/Wirkleistung#Drehstromnetz
- http://de.wikipedia.org/wiki/Blindleistung#Drehstromnetz
- http://www.zabex.de/frames/wirkleistung.html
- http://openenergymonitor.org/emon/node/59
Xmega zeug:
- http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=650685&sid=71172b31999915f30ac06da374c7a479#650685
- http://www.fourwalledcubicle.com/LUFA.php
- http://fourwalledcubicle.com/blog/archives/486
- http://de.farnell.com/atmel/at90usb162-16au/avr-usb-mcu-16k-flash-smd-tqfp32/dp/1455073
- http://www.elektronik-projekt.de/thread.php?threadid=6215
weblabctrl
- http://wl/power/ Auswertung über den aktuellen Verbrauch (10 Sekunden auf ersten Wert warten)
- http://bastel/power/ Auswertung über den aktuellen Verbrauch