解码从ATM90E32AS电能表IC接收的数据



我写了一个python代码(树莓派)从ATM90E32AS电能表IC接收电压,电流和功率值。我使用spidev库与电能表IC进行SPI通信。我初始化了两个字节数组(每个4字节宽)用于读取和写入电能表IC,如

writeBuffer = bytearray ([0x00,0x00,0x00,0x00])
readBuffer = bytearray ([0x00,0x00,0x00,0x00]) 

例如,读取有效的R相电压,我初始化寄存器值,如

VrRead_Reg = bytearray ([0x80, 0xD9])

我尝试用下面的子程序将上述值写入IC以读取R相电压

def Vr_read():
writeBuffer[0] = VrRead_Reg[0]
writeBuffer[1] = VrRead_Reg[1]
#print(writeBuffer)
readBuffer = spi.xfer(writeBuffer)
print("Vr:",readBuffer)
time.sleep(0.5)

我得到的输出像

Vr: [255,255,89,64]
Vr: [255,255,89,170]
Vr: [255,255,89,220]
Vr: [255,255,89,1]
Vr: [255,255,89,10]

我测量了电源电压,显示为230V。然后我尝试将上述输出与测量电压相匹配。这里第三个字节89对应于230V。然后我用一个变量来改变电压,这一次对于220V,第三个字节的值变成了85,对于210V是81,对于100V是39,等等。

我不知道如何将89与230V联系起来,也不知道其他字节。请帮忙解码上面的输出

做一些比率计算:

(consider the max value of a byte is 255)
255 / 89 * 230 = 658.99 (approximately 660V)
85 / 255 * 660 = 220(220V)
81 / 255 * 660 = 209.65(210V)
39 / 255 * 660 = 100.94(100V)

但你最好找到设备手册以获得参考。

最新更新