主题中讨论的其他器件:TMS570LS0432、 BQ76PL455EVM
您好!
我将 BQ76PL455EVM 评估板与通过 UART 连接的 TMS570LS0432控制器搭配使用、用于电池管理系统。 我的通信正常、现在我正在尝试在发送"采样和存储"和"读取存储的值"命令后解释 PL455s 响应帧。 我已将8节电池连接到评估板上的电池通道。
这是我与 PL455芯片通信的部分:
WriteReg (0、3、0xFFFFFFE0、4、FRMWRT_SGL_NR); //选择16节电池、所有 AUX 和温度 写入寄存器(0、2、0、 1、FRMWRT_SGL_NR); //发送同步采样并存储命令 WriteReg (0、2、0x20、1、FRMWRT_SGL_R); //发送读取存储值命令 WaitRespFrame (g_ui8PL455Data、57、0); // 54字节数据+数据包标头+ CRC、0ms 超时
一切工作正常、我获得了 g_ui8PL455Data[]阵列中存储的响应:
十六进制代码中的值为:
35 11FC 0068 0067 0072 006A 006B 0068 0083 BE0B B783 B170 B3DE C33A B99B C066 C415 FFDB FFDB FFDB FFDB FFDB FFDB FFDB FFDB FFDB FFDB FFDB 818C 64EB 5BC6 71F3
在 PL455s 数据表中、我可以看到第一个字节是响应字节的数量- 1、因此有0x35 + 0x1 = DEC 54响应字节、最后两个字节是 CRC 校验和。 在数据表中、我还发现、PL455以16位值对电池电压进行返调、因为我使用8 x 过采样和平均、这会在14位 ADC 值之外产生两个额外的位。 我找到了四个公式、将电池电压和 AUX 通道电压从16位整数转换为浮点值、单位为伏特:
- V_CELL =[(2×VREF)/ 65535)×READ_ADC_VALUE
- V_AUX =[(2×VREF)/ 65535)×READ_ADC_VALUE
- 内部数字芯片温度°C =(V_ADC–2.287)×131.944
- 内部模拟芯片温度°C =(V ADC–1.8078)×147.514
但我无法按开关顺序找到电池电压、AUX 电压和温度电压的传输、因此我对接收到的十六进制代码进行了逆向工程、以确定它们在帧中的位置。
以十进制表示的响应帧16位值(忽略帧初始化字节和两个 CRC 字节)为:
4604 104 103 114 106 107 104 131 //电池16 - 9 (未连接/浮动)
48651 46979 45424 46046 49978 47515 49254 50197 //电池8 - 1 (连接3.7V 电池)
65499 65499 65499 65499 65499 65499 65499 65499 65499 65499 // Aux 8 -1 (未连接、仅板载上拉电阻)
33164 25835 23494 //温度和内部电源电压
由于未连接电池通道16至9、如果我将它们放在上面的公式中、我猜这是前8个数字、在0.01至0.35伏之间浮动一点。 电芯通道8至1可以是48651 至50197的以下8个数字、提供3.7至3.8伏的电压。 接下来的8个数字必须是带有上拉电阻器的辅助通道、因为它们都具有相同的值、可提供4.997伏的电压。 我认为最后3个数字是数字芯片的温度电压(2.53V ^= 32°C)、模拟芯片的温度电压(1.97V ^= 24°C)和1.79V ~= 1.8V 内部数字电源电压。
有人能告诉我在什么位置可以在其数据表中的 PL455s 响应帧中找到电压的顺序吗? 我的建议对吗?
此致
米歇尔