TI中文支持网
TI专业的中文技术问题搜集分享网站

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

你好,我现在用MCU跟PL455通信时,读到器件状态寄存器(81)的数据为0x01,我看这的解释是系统正在进行初始化,然后我要是给寄存器2发送采集命令0x20的话,采集不到数据,455的Fault引脚为低电平;如果我要是给寄存器(81)写0x39的话,MCU有时就能读到数据,有时读不到,并且读到的电压数据都不对(实际的电池电压为3.8V,采集回来的显示电压为10mv~40mV),请问这是什么原因,为什么芯片会一直在进行初始化?

Cheng.W:

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上的数据,

xianggui Li:

回复 Cheng.W:

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

Cheng.W:

回复 xianggui Li:

1F是字节长度-1, 就是返回除首字节 共32 byte, 再加2个CRC

32byte 应该就是16节电池电压,

电池有正常接入么?芯片的采样配置是如何配置的?

NCHN是多少? CHANNEL是多少? SAMPLE PERIOD

VM一般只影响部分功能,检查一下硬件上是否有问题。

xianggui Li:

回复 Cheng.W:

谢谢及时回答,电池有接入,我用万用表量过芯片输入每节电压都是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.1000VnSent = 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输出不正常,是电源输入那块吗?

xianggui Li:

回复 xianggui Li:

还有个现象是,我接上电池或者不接电池,寄存器81到98寄存器中都只有81寄存器读出的数据是0x01,其他都是0,可我并没有在寄存器104到111中屏蔽错误,为什么系统检测不出欠压错误?

Cheng.W:

回复 xianggui Li:

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

xianggui Li:

回复 Cheng.W:

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

Hugo Zhang:

回复 xianggui Li:

这些电压都是正常的

xianggui Li:

回复 Hugo Zhang:

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

Cheng.W:

回复 xianggui Li:

芯片有给过wakeup 信号么?

赞(0)
未经允许不得转载:TI中文支持网 » bq76PL455采集不到电压,系统一直在进行初始化问题
分享到: 更多 (0)