Other Parts Discussed in Thread: HALCOGEN, TMS570LS0432, BQ76PL455EVM-GUI-SW, BQ79616-Q1
BQ76PL455EVM-GUI-SW: 该程序在 CCS 中使用 halcogen (微控制器- TMS570LS0432)和 BQ76PL455A 来检测15节串联锂离子电池的每节电芯电压。 程序执行后、bFrame 和 cellSample 中不会存储任何内容。
/*用户代码开始(0)*/
/*用户代码结束*/
/*包含文件*/
#include "sys_common.h"
#include "system.h"
/*用户代码开始(1)*/
#include "Gio.h"
#include "sci.h"
#include "RTI.h"
#include "sys_vim.h"
#include "swi_util.h"
#include "pl455.h"
//#include "pl455.h"
INT UART_RX_RDY = 0;
int rti_timeout = 0;
双电压;
/*用户代码结束*/
/**@fn void main (void)
*@简介应用程序主要功能
*@注意此功能默认为空。
*
*此函数在启动后调用。
*用户可以使用此函数来实施应用程序。
*/
/*用户代码开始(2)*/
/*用户代码结束*/
空 main (void)
{
/*用户代码开始(3)*/
systemInit();
gioInit ();
sciInit();
sciSetBudrate (scilinREG、BAUDRATE);//更改以 Hz 为单位的波特率
rtiInit();
vimInit;
_enable_irq();
WakePL455 ();//切换唤醒信号
CommClear();
CommReset();
//初始化局部变量
Int nSent、nRead、nTopFound = 0;
int nDev_ID=0、nGrp_ID;
字节 bFrame [132];
UINT32 wTemp = 0;
FLOAT CELLSAMPLE[16];
int incCount=0;
/**代码示例
*以下命令序列是 bq76PL455通信示例文档中消息示例的示例。
*每个消息示例都引用了文档中的章节。
*/
//唤醒所有设备
//唤醒音将唤醒已处于关断状态的任何设备,而断电将关闭任何设备
//这已经是唤醒的。 排序唤醒和断电的最少次数将是执行
//通过板覆盖已唤醒或关闭的板的最坏情况组合。
nsent = WriteReg (nDev_ID、12、0x40、1、FRMWRT_SGL_NR); //发出广播 pwrdown 命令
延迟(5);//~5ms
WakePL455();
延迟(5);//~5ms
//屏蔽客户校验和故障位
Nsent = WriteReg (0107、0x8000、2、FRMWRT_ALL_NR); //清除所有故障摘要标志
//清除并检查所有故障
nDev_ID=0;
nsent = WriteReg (nDev_ID、81、0x38、1、FRMWRT_ALL_NR); //清除系统状态寄存器中的故障标志
nsent = WriteReg (nDev_ID、82、0xFFC0、2、FRMWRT_ALL_NR); //清除所有故障摘要标志
//nRead = ReadReg (nDev_ID、81、&wTemp、1、0); // 0ms 超时
//nRead = ReadReg (nDev_ID、82、&wTemp、2、0); // 0ms 超时
(十)
//自动对所有板寻址(第1.2.2节)
// nSent = WriteReg (0、14、0x19、1、FRMWRT_ALL_NR); //设置自动寻址模式
// nSent = WriteReg (0、12、0x08、1、FRMWRT_ALL_NR); //在所有板上进入自动地址模式,对该 ID 的下一次写入将是其地址
nsent = WriteReg (nDev_ID、10、nDev_ID、1、FRMWRT_ALL_NR);
//启用堆叠中所有电路板上的所有通信接口(第1.2.1节)
//nSent = WriteReg (0、16、0x10F8、2、FRMWRT_SGL_NR); //设置通信波特率并启用所有接口
/*更改为应用中使用的最终波特率(由 pl455.h 中的 BAUDRATE 定义设置)。
*到目前为止,所有的通信都在250Kb ,因为 COMM_RESET 在初始时完成
*启动会将 bq76PL455A-Q1 UART 复位为250Kb。 */
/*根据它们在堆栈中的位置适当地设置通信接口,并且
*针对应用程序中使用的波特率(由 pl455.h 中的 BAUDRATE 定义设置)。
*(第1.2.4节)
*/
//仅适用于一个板
nsent = WriteReg (nDev_ID、16、0x1080、2、FRMWRT_ALL_NR); //设置通信波特率,仅使能板载单端通信端口
//配置 AFE (第2.2.1节)
nsent = WriteReg (nDev_ID、60、0x00、1、FRMWRT_SGL_NR); //设置0多路复用延迟
nsent = WriteReg (nDev_ID、61、0x00、1、FRMWRT_SGL_NR); //设置0初始延迟
//配置电压和内部采样周期(第2.2.2节)
nsent = WriteReg (nDev_ID、62、0xCC、1、FRMWRT_SGL_NR); //设置99.92us ADC 采样周期
//配置过采样率(第2.2.3节)
nsent = WriteReg (nDev_ID、7、0x00、1、FRMWRT_SGL_NR); //设置无过采样周期
//屏蔽客户校验和故障位
Nsent = WriteReg (0107、0x8000、2、FRMWRT_ALL_NR); //清除所有故障摘要标志
//清除并检查所有故障
nsent = WriteReg (nDev_ID、82、0xFFC0、2、FRMWRT_ALL_NR); //清除所有故障摘要标志
nsent = WriteReg (nDev_ID、81、0x38、1、FRMWRT_ALL_NR); //清除系统状态寄存器中的故障标志
//选择要采样的电芯和通道数量(第2.2.5.1节)
nsent = WriteReg (nDev_ID、13、0x0F、1、FRMWRT_SGL_NR); //将电池数设置为15
nsent = WriteReg (nDev_ID、3、0x7FFF00C0、4、FRMWRT_SGL_NR); //选择15个呼叫、所有 AUX 通道、选择模拟和数字芯片温度
//在单个电路板上设置电池过压和电池欠压阈值(第2.2.6.1节)
// Vref = 5V
nsent = WriteReg (nDev_ID、144、0xD708、2、FRMWRT_SGL_NR); //设置 OV 阈值= 4.2000V
nsent = WriteReg (nDev_ID、142、0x8CCC、2、FRMWRT_SGL_NR); //设置 UV 阈值= 2.75V
nsent = WriteReg (nDev_ID、123、0x00、1、FRMWRT_SGL_NR); //关闭所有 GPIO 下拉
while (1)
{
//向单板发送样片请求以进行采样并发送结果(第4.2节)
nsent = WriteReg (nDev_ID、2、0x00、1、FRMWRT_SGL_NR); //发送同步采样命令
nsent = WriteReg (nDev_ID、2、0x20、1、FRMWRT_SGL_R); //发送同步采样命令
nsert = WaitRespFrame (bFrame、53、0);//每2个字节25个通道、因此50个字节的数据+数据包头1个字节+ CRC 2个字节= 53个字节、0ms 超时
for (incCount = 1;incCount < 16;incCount ++)
{
//value =(unsigned int) adc_data_ptr->value;
// voltage [incCount-1]=(value/4095)* 3.3;
CellSample[15-incCount]=(bFrame[incCount*2-1]<<8|bFrame[incCount*2])* 0.000076295;
//cell_data[incCount-1].value=(bFrame[incCount*2-1]<<8|bFrame[incCount*2])* 0.000076295;
}
第41集9.5万人 Lu shi(2000 )- 6.4分
}
/*用户代码结束*/
}
/*用户代码开始(4)*/
/*用户代码结束*/