你好,我现在用MCU跟PL455通信时,读到器件状态寄存器(81)的数据为0x01,我看这的解释是系统正在进行初始化,然后我要是给寄存器2发送采集命令0x20的话,采集不到数据,455的Fault引脚为低电平;如果我要是给寄存器(81)写0x39的话,MCU有时就能读到数据,有时读不到,并且读到的电压数据都不对(实际的电池电压为3.8V,采集回来的显示电压为10mv~40mV),请问这是什么原因,为什么芯片会一直在进行初始化?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你好,我现在用MCU跟PL455通信时,读到器件状态寄存器(81)的数据为0x01,我看这的解释是系统正在进行初始化,然后我要是给寄存器2发送采集命令0x20的话,采集不到数据,455的Fault引脚为低电平;如果我要是给寄存器(81)写0x39的话,MCU有时就能读到数据,有时读不到,并且读到的电压数据都不对(实际的电池电压为3.8V,采集回来的显示电压为10mv~40mV),请问这是什么原因,为什么芯片会一直在进行初始化?
jia建议的流程
//发送sample and store 指令, 并delay 5ms,
nSend = PL455_WriteReg(0, 2, 0x00, 1, FRMWRT_ALL_NR);
_delay_ms(5);
nSent = PL455_WriteReg(nDev_ID, 2, 0x20, 1, FRMWRT_SGL_R); // send sync sample command //发送采样命令
nSent = WaitRespFrame(bFrame, 27, 4); // 24 bytes data + packet header + CRC, 0ms timeout //读取采集数据
要先给02 寄存器发00(write without response),使能采样后, 等待一段时间再发20读取(write with response)。
如果是给02 发20(write with response ),那么455A会等待采集好后,直接返回数据, 需要MCU一直开着中断等UART返回数据,
显示的值有问题,要检查CRC是否正确,接收到的数据长度是否完整。 可以用逻辑分析仪抓一下UART上的数据,
1F是字节长度-1, 就是返回除首字节 共32 byte, 再加2个CRC
32byte 应该就是16节电池电压,
电池有正常接入么?芯片的采样配置是如何配置的?
NCHN是多少? CHANNEL是多少? SAMPLE PERIOD
VM一般只影响部分功能,检查一下硬件上是否有问题。
谢谢及时回答,电池有接入,我用万用表量过芯片输入每节电压都是3.8v左右;
芯片采样配置程序是:
nSent = PL455_WriteReg(0, 60, 0x00, 1, FRMWRT_SGL_NR);
nSent = PL455_WriteReg(0, 61, 0x00, 1, FRMWRT_SGL_NR); // set 0 initial delay
nSent =PL455_WriteReg(0, 62, 0xBC, 1, FRMWRT_SGL_NR); // set 99.92us ADC sampling period
nSent =PL455_WriteReg(0, 7, 0x7B, 1, FRMWRT_SGL_NR);
nSent =PL455_WriteReg(0, 81, 0x38, 1, FRMWRT_SGL_NR);
nSent =PL455_WriteReg(0, 82, 0xFFC0, 2, FRMWRT_SGL_NR);
nSent =PL455_WriteReg(0, 13, 0x10, 1, FRMWRT_SGL_NR); // set number of cells to 16
nSent = PL455_WriteReg(0, 3, 0xFFFF0000, 4, FRMWRT_SGL_NR); // select all cell channels 1-16,
nSent = PL455_WriteReg(0, 144, 0xD1EC, 2, FRMWRT_SGL_NR); // set OV threshold = 4.1000V
nSent = PL455_WriteReg(0, 142, 0x6148, 2, FRMWRT_SGL_NR); // set UV threshold = 1.9000V
nSent = PL455_WriteReg(0, 2, 0x00, 1, FRMWRT_ALL_NR); // send sync sample command
__delay_ms(1000);
nSent = PL455_WriteReg(0, 2, 0x20, 1, FRMWRT_SGL_R); // send sync sample command
nSent = WaitRespFrame(bFrame, 35, 4);
我只用了一个455,前面配置好了通信频率跟地址,地址配置就为0,并且我验证过,读出来的寄存器数据是正确的;
执行前面这些代码后读出的数据就是我前面前面描述的那样,电池数据都是0;还有我在__delay_ms(1000);这行代码后边执行过读寄存器81到96的数据,
除了81寄存器的数据是0x01外,其他的寄存器数据都是0x00,这表示没有什么其他故障信息,只是系统一直在进行初始化;我看规格书上说初始化没完成会影响
采样的数据,我想不明白的是系统为什么会一直进行初始化,请问这是软件配置的方法不对还是说跟硬件有关系吗?如果跟硬件有关系,会是什么原因造成这结果的?还有就是什么样的硬件连接会造成VM输出不正常,是电源输入那块吗?
还有个现象是,我接上电池或者不接电池,寄存器81到98寄存器中都只有81寄存器读出的数据是0x01,其他都是0,可我并没有在寄存器104到111中屏蔽错误,为什么系统检测不出欠压错误?
我用示波器量得那个VM脚输出一直是0.3V左右,会不会是这个原因,还有要是方便的话麻烦帮我检查下原理图正不正确。
平常采集没有这个问题,只有开均衡时第1节电池电压会小60mV左右,第16节电池电压会小10mV左右,这个是我量的芯片电池采集引脚的实际输入会小这么多,但是电池端的电压都是一样的,这个是不是避免不了?是开电池均衡的时候不能采集吗?
还有一个小问题:就是接上电池的时候,假如我采集16节电池电压数据,按理说455应该会传给单片机35个数据,程序刚运行的时候是没问题的,不过运行几分钟的样子单片机就收不到35个数据了,要是单片机程序一直在等待所有35个数据接收完成的话,程序就会卡在等待接收这个环节;但是要是不接电池就没这个问题,我现在只能让看门狗强行中断等待接收这个过程,这样虽说不影响测试结果,但总感觉有点不放心,请问有没有更好的解决办法?
我程序的实时采集是在基础配置完成之后循环执行发送WriteReg(0, 2, 0x00, 1, FRMWRT_SGL_NR);后等待100ms,
再执行WriteReg(0, 2, 0x20, 1, FRMWRT_SGL_R);
这种设置有问题吗?
平常采集不会出现这个问题,只有在均衡都开的情况下第1节电池电压会小60mV左右,第16节会小10mV左右;我量的电池端的电压都是一样的,但在455的采集输入端的实际电压会出现这种情况,是不是开均衡时采集电压会不准,这问题是不是避免不了?
还有一个小问题:就是我在基础配置完成之后循环连续发送命令WriteReg(0, 2, 0x00, 1, FRMWRT_SGL_NR); 后等待100ms,再发送WriteReg(0, 2, 0x20, 1, FRMWRT_SGL_R);接上电池测量时,程序运行几分钟后就收不到理论上那么多数据,程序会卡在等待接收数据完成这个环节,我现在是用看门狗强行中断这个过程,这样虽说也不影响测试结果,但总是不放心,请问我这连续采集的设置对吗?有没有更好的解决这个问题的方法?
你好,我在使用bq76pl455EVM时,检查发现程序运行时VM、VREF电压基本都为零,是否意味着芯片未唤醒?同样的程序之前使用是正常的,是否是芯片某些寄存器的配置出现了问题?您能否帮忙解答下