微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > TI电源管理交流 > BQ76PL455电压检测的问题

BQ76PL455电压检测的问题

时间:10-02 整理:3721RD 点击:

使用BQ76PL455EVM和TMS57004 LaunchPad 开发板,接入16节串联电池组。只有在读取电压的那一行程序处设置断点,程序运行至断点才能读取到正确的电压。但是如果不设置断点,让程序运行起来,就会读取到全部相同的错误的电压。帖子的最后附上我程序的压缩包

以下是断点处读取的电压

以下是错误的数据:

最后附上我的程序:

/* Include Files */

#include "sys_common.h"
#include "system.h"

/* USER CODE BEGIN (1) */
#include "gio.h"
#include "sci.h"
#include "rti.h"
#include "sys_vim.h"
#include "swi_util.h"

#include "pl455.h"

int UART_RX_RDY = 0;
int RTI_TIMEOUT = 0;
BYTE  bFrame[39];
/* USER CODE END */

/** @fn void main(void)
*   @brief Application main function
*   @note This function is empty by default.
*
*   This function is called after startup.
*   The user can use this function to implement the application.
*/

/* USER CODE BEGIN (2) */
/* USER CODE END */
void delay_loop();
void main(void)
{
/* USER CODE BEGIN (3) */
 systemInit();
 gioInit();
 sciInit();
 sciSetBaudrate(scilinREG, BAUDRATE);
 rtiInit();
 vimInit();

 _enable_IRQ();

 WakePL455();

 CommClear();

 CommReset();

 // initialize local variables
 int nSent, nRead, nTopFound = 0;
 int nDev_ID, nGrp_ID;

 uint32  wTemp = 0;


 nSent = WriteReg(0, 13, 0x10, 1, FRMWRT_ALL_NR); // 选中16节电池
 nSent = WriteReg(0, 3, 0xFFFF00C0, 4, FRMWRT_ALL_NR);
 while(1)
 {
   nDev_ID = 0;
   nSent = WriteReg(nDev_ID, 2, 0x00, 1, FRMWRT_SGL_R); // send read sampled values command
   nSent = WaitRespFrame(bFrame, 39, 0);// 24 bytes data + packet header + CRC, 0ms timeout
   gioToggleBit(gioPORTA, 2);  //此处设置断点
   delayms(500);
//   delay_loop();

 }

/* USER CODE END */
}

void delay_loop() {
 long x, y;
 for (y = 0; y < 10; y++)
  for (x = 0; x < 50000; x++) {
  }
}

/* USER CODE BEGIN (4) */
/* USER CODE END */

把while循环的指令改成

 nSent = WriteReg(nDev_ID, 2, 0x00, 1, FRMWRT_SGL_NR); // send sample and store command

delayms(6);

 nSent = WriteReg(nDev_ID, 2, 0x20, 1, FRMWRT_SGL_R); // send read sampled values command

 nSent = WaitRespFrame(bFrame, 39, 0);// 24 bytes data + packet header + CRC, 0ms timeout

我把While循環裏面改了,結果還是一樣的,讀到的一直是D0BA,這是爲什麽?

/* USER CODE BEGIN (0) */
/* USER CODE END */

/* Include Files */

#include "sys_common.h"
#include "system.h"

/* USER CODE BEGIN (1) */
#include "gio.h"
#include "sci.h"
#include "rti.h"
#include "sys_vim.h"
#include "swi_util.h"

#include "pl455.h"

int UART_RX_RDY = 0;
int RTI_TIMEOUT = 0;
BYTE  bFrame[39];
/* USER CODE END */

/** @fn void main(void)
*   @brief Application main function
*   @note This function is empty by default.
*
*   This function is called after startup.
*   The user can use this function to implement the application.
*/

/* USER CODE BEGIN (2) */
/* USER CODE END */

void main(void)
{
/* USER CODE BEGIN (3) */
 systemInit();
 gioInit();
 sciInit();
 sciSetBaudrate(scilinREG, BAUDRATE);
 rtiInit();
 vimInit();

 _enable_IRQ();

 WakePL455();

 CommClear();

 CommReset();

 // initialize local variables
 int nSent, nRead, nTopFound = 0;
 int nDev_ID, nGrp_ID;
 sciSetBaudrate(scilinREG, BAUDRATE);
 uint32  wTemp = 0;


 nSent = WriteReg(0, 13, 0x10, 1, FRMWRT_ALL_NR); // set number of cells to 16
 nSent = WriteReg(0, 3, 0xFFFF00C0, 4, FRMWRT_ALL_NR);


while(1)
 {
   nDev_ID = 0;
//   nSent = WriteReg(nDev_ID, 2, 0x00, 1, FRMWRT_SGL_R); // send read sampled values command
//   nSent = WaitRespFrame(bFrame, 39, 0);// 24 bytes data + packet header + CRC, 0ms timeout
//   gioToggleBit(gioPORTA, 2);
//   delayms(500);

   nSent = WriteReg(nDev_ID, 2, 0x00, 1, FRMWRT_SGL_NR); // send sample and store command
   delayms(6);
   nSent = WriteReg(nDev_ID, 2, 0x20, 1, FRMWRT_SGL_R); // send read sampled values command
   nSent = WaitRespFrame(bFrame, 39, 0);// 24 bytes data + packet header + CRC, 0ms timeout
   delayms(6);
}

/* USER CODE END */
}

/* USER CODE BEGIN (4) */
/* USER CODE END */

我將While循環裏的程序替換成您提供的程序后,仍然只能在程序跑起來后讀取到完全相同的D0BA的值,只有設置斷點才能讀取到正常的電壓值,請問您能再幫我解答一下嗎?

已找到问题所在,是CCS软件本身的问题,发出的数据没有错。

我也在做这方面东西,可以一起讨论一下么 大哥,我qq595658552

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top