Powermeter: Unterschied zwischen den Versionen

Aus LaborWiki
Wechseln zu: Navigation, Suche
K (code status)
K (can geändert)
Zeile 1: Zeile 1:
{{Workinprogress}}
{{ProjektInfoBox
{{ProjektInfoBox
|name        = Powermeter
|name        = Powermeter
|status      = beta
|status      = stable
|image      = Powermeter.JPG
|image      = Powermeter.JPG
|description =  
|description =  
|author      = [[Benutzer:Pl4nkton|Pl4nkton]], [[Benutzer:siro|siro]]
|author      = [[Benutzer:Pl4nkton|Pl4nkton]], [[Benutzer:siro|siro]]
|username    =  
|username    =  
|version    = 0.99
|version    = 1.00
|update      = 08.09.11
|update      = 08.09.11
|platform    = AVR (ATXmega192a3)
|platform    = AVR (ATXmega192a3)
Zeile 19: Zeile 18:


== Status ==
== Status ==
* (optional) Codeoptimierungen
 
* Layout gnd gnd_iso mit x2 / widerstand und Überspannungsschutz nach Spannungsteiler  
* Layout gnd gnd_iso mit x2 / widerstand und Überspannungsschutz nach Spannungsteiler  
* Kalibirierung
* Kalibirierung
* (optional) DMA für memcpy & memset
* (optional) sqrt asm routine ?? -> geht auch so
* (optional) feste samplewerte (vielfaches von 2) ??
* (optional) sqrt asm routine ??


== Planung ==
== Planung ==
Zeile 39: Zeile 36:
* Überspannungsschutz
* Überspannungsschutz


=== ADC: ===
=== ADC ===
* differential ADC signed mode, negativer Pin auf Vref (1,65V)
* differential ADC signed mode, negativer Pin auf Vref (1,65V)
* alle Spannungen am ADC Eingang müssen zwischen GND - Vcc (0 - 3,3V) liegen !
* alle Spannungen am ADC Eingang müssen zwischen GND - Vcc (0 - 3,3V) liegen !
Zeile 85: Zeile 82:
* 3,3V 1W vom DC/DC aus 5V
* 3,3V 1W vom DC/DC aus 5V
* 12V OLED ?
* 12V OLED ?
== Gehäuse Pinbelegung ==
== Gehäuse Pinbelegung ==
Pin
Pin
Zeile 172: Zeile 170:
Powermeter CAN Adresse: 0x05
Powermeter CAN Adresse: 0x05
Port: 0x06
Port: 0x06
TODO: was soll in Packet1 ?
{| {{prettytable}}
| '''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
|-
|}


*Packet1
**byte0: 0x00
**byte1: id -> TODO
**byte2: length of following data
*Packet2
**byte0: 0x01
**4bytes: (long) Channel1 P
*Packet3
**byte0: 0x02
**4bytes: (long) Channel2 P
*Packet4
**byte0: 0x03
**4bytes: (long) Channel3 P
*Packet5
**byte0: 0x04
**4bytes: (long) Channel1 S
*Packet6
**byte0: 0x05
**4bytes: (long) Channel2 S
*Packet7
**byte0: 0x06
**4bytes: (long) Channel3 S
*Packet8
**byte0: 0x07
**4bytes: (long) Channel1 Ueff
*Packet9
**byte0: 0x08
**4bytes: (long) Channel2 Ueff
*Packet10
**byte0: 0x09
**4bytes: (long) Channel3 Ueff
*Packet11
**byte0: 0x0a
**4bytes: (long) Channel1 Ieff
*Packet12
**byte0: 0x0b
**4bytes: (long) Channel2 Ieff
*Packet13
**byte0: 0x0c
**4bytes: (long) Channel3 Ieff


== Messwerte ==
== Gemessene Messwerte ==
=== Spannungsteiler ===
=== Spannungsteiler ===
* P1: 100/0,4650
* P1: 100/0,4650
Zeile 234: Zeile 294:
* L2: 8
* L2: 8
* L3: 9
* L3: 9
== Hilfreicher Link: ==
 
== Hilfreiche Links ==
'''Ähnliche Projekte:'''
'''Ähnliche Projekte:'''
*[[http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial XMEGA-C-Tutorial]]
*[[http://www.stromflo.de/dokuwiki/doku.php?id=xmega-c-tutorial XMEGA-C-Tutorial]]

Version vom 7. Oktober 2011, 08:59 Uhr

           
Powermeter

Release status: stable [box doku]

Powermeter.JPG
Description
Author(s)  Pl4nkton, siro
Last Version  1.00
Platform  AVR (ATXmega192a3)
License  Source: GPL
Download  c Code, trac




IMGP1609.JPG

Echtzeit Leistungsmessung der Labor Stromversorgung und an 32A Außenleitung der Drehstromladekiste.

Status

  • Layout gnd gnd_iso mit x2 / widerstand und Überspannungsschutz nach Spannungsteiler
  • Kalibirierung
  • (optional) sqrt asm routine ?? -> geht auch so

Planung

Bauteile:

  • 3 Stromwandler für 50A (L1, L2, L3) [1]
  • ATXMEGA 192A3-AU - 2 * 2M samples + dma
  • 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
  • Überspannungsschutz

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

v2

  • ADE7858
  • Rogowski spulen zur Strommessung
  • Display
    • EA DOGL128S-6 könnte passen [2]
    • oled 128*64 3.3V core / 12V led [3]
    • [4] color oled

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
  • TODO: Spannungsoffset

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

  • 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

  • PA0 - Nullpunkt
  • PA1 - Nullpunkt
  • PA2 - L3 Spannungsteiler
  • PA3 - L2 Spannungsteiler
  • PA4 - L1 Spannungsteiler


PB / ADC2 - Strom

  • PB0 - Nullpunkt
  • PB1 - Nullpunkt
  • PB2 - x Stromwandler
  • PB3 - L2 Stromwandler
  • PB4 - x Stromwandler
  • PB5 - L1 Stromwandler
  • PB6 - L3 Stromwandler
  • PB7 - x Stromwandler

CAN - MCP2515

  • PD1 - INT
  • PD2 - CLK
  • PD4 - cs
  • PD5 - mosi
  • PD6 - miso
  • PD7 - sck

RGB-LED common Anode

  • 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 blinkend - Fehler (Bufferoverflow ?)

Software

  • configure powemeter_driver using Eventsystem
    • ... -> Timer1 -> ADCA & ADCB -> DMA -> SRAM -> DMAInterrupt -> Timer1 -> ...
  • main()
    • check can_handler
    • wait for ADC_data_ready
    • calculate RAW power
    • error led blink

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.

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


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

Hilfreiche Links

Ähnliche Projekte:

Verwandtes Projekt von dem man lernen kann:

Brauchbarer Schaltplan zur Strommessung über Shunt: (Seite 5)

Mathe:

Xmega zeug: