我正在从 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
我的输出截图