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.

bq76PL455采集不到电压,系统一直在进行初始化问题

你好,我现在用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上的数据,

  • 我的按这种方法做了延迟,现在读出来的数据是第1个字节是0x1F,中间都是0x00,第34个字节是0xA5,第35个字节是0xC4,我设置的通道是采样16节电池电压;另外我请问下455的VM引脚是不是要输出-5V才正常?我量了下我的电路VM输出基本是0V,请问这是什么情况?

  • 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中屏蔽错误,为什么系统检测不出欠压错误?

  • 一般硬件正常不会出这个问题, 检查VP, VDIG, VIO, V5VAO, VREF等电压,把原理图发一下,或者抓一下完整的通讯帧。

  • 我测量过VP, VDIG, VIO, V5VAO电压都是5V多一点,VREF是2.5V,原理图见附件。

    3.pdf
  • 这些电压都是正常的

  • 我用示波器量得那个VM脚输出一直是0.3V左右,会不会是这个原因,还有要是方便的话麻烦帮我检查下原理图正不正确。

  • 芯片有给过wakeup 信号么?

  • 谢谢回答,能采集到电压了,之前是因为有个电源引脚接触不良造成的;不过现在有一新的问题:就是第1节电池电压采集不准,有时是正常的,有时误差有60mV左右,请问这是什么情况?

  • 是不是Cell0 的采样线和供电地线是共用的,采样线上有电流流过会产生线阻上的压降

  • 平常采集没有这个问题,只有开均衡时第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电压基本都为零,是否意味着芯片未唤醒?同样的程序之前使用是正常的,是否是芯片某些寄存器的配置出现了问题?您能否帮忙解答下