0

我正在从 Atmel 电能表 IC (M90E32AS) 读取功率值。我正在使用 spidev 库进行 SPI 通信。我在 Raspberry PI 中使用 python 代码从电能表 IC 中读取功率值。这是电能表IC的数据表。

在读取功率值之前,我计算了电压、电流值并在控制台中显示。由于 P = V x I,我手动将电压和电流值相乘,并尝试与来自电能表 IC 的接收功率值相关联。但计算值存在差异。例如,r相电压为233 V,r相电流为21 A。如果我手动乘以,我得到4893 W作为功率值。但是从能量计我收到的值是 4281 W。请你帮我找出为什么会发生这种变化。这是我从电能表 IC 读取功率值的子程序。

# global declarations
pwRT = TotPwrR = 0
writeBuffer = bytearray ([0x00,0x00,0x00,0x00])
readBuffer = bytearray ([0x00,0x00,0x00,0x00]) 

PowrR_Reg = bytearray([0x80,0xB1])
PowrRLSB_Reg = bytearray([0x80, 0xC1])

def PowrR_read():
    global pwRT
    writeBuffer[0] = PowrR_Reg[0]
    writeBuffer[1] = PowrR_Reg[1]
    readBuffer = spi.xfer(writebuffer)
    print("Pr:",readBuffer)
    pwR2 = hex(readBuffer[2])
    pwR3 = hex(readBuffer[3])
    pwRT = ((int(pwR2,16)<<8) | int(pwR3,16))
    time.sleep(0.5)

def PowrLSB_read():
    global pwRT, TotPwrR
    writeBuffer[0] = PowrRLSB_Reg[0]
    writeBuffer[1] = PowrRLSB_Reg[1]
    readBuffer = spi.xfer(writebuffer)
    print("PrLSB:",readBuffer)
    pwR2LSB = hex(readBuffer[2])
    pwR3LSB = hex(readBuffer[3])
    pwRTLSB = ((int(pwR2LSB,16)<<8) | int(pwR3LSB,16))
    TotPwrR = ((int(hex(pwRT),16) << 16) | (int(hex(pwRTLSB),16)))*0.00032
    print("PrTot:",TotPwrR)
    time.sleep(0.2)

当我打印 readBuffer 时从能量 IC 接收到的原始功率数据如下所示

Pr: [255,255,0,205]
PrLSB: [255,255,214,59]
PrTot: 4316.71136

其对应的电压和电流值如下所示

Vr: 234.44
Ir: 21.729

我的输出截图

与电压电流相关的功率值截图

4

0 回答 0