基于LTC3300的主动电池均衡系统实现
一、硬件架构设计
1. 系统组成
+-------------------+ +-------------------+ +-------------------+
| STM32F407 |<----SPI---->| LTC3300-1 |<----SPI---->| LTC3300-2 |
| (主控制器) | | (均衡控制器) | | (级联扩展) |
+-------------------+ +-------------------+ +-------------------+
| | |
| | |
v v v
+-------------------+ +-------------------+ +-------------------+
| LTC6804-2 | | 电池组1 (6S) | | 电池组2 (6S) |
| (电压采集) | | (3.7V×6=22.2V) | | (3.7V×6=22.2V) |
+-------------------+ +-------------------+ +-------------------+
2. 关键连接说明
- SPI总线:STM32的SPI1连接LTC3300,SPI2连接LTC6804
- 均衡控制:LTC3300的SYNC引脚连接STM32的TIM2_CH1(PWM)
- 电源管理:LTC3300的VREG引脚接10μF+1μFπ型滤波器
- 保护电路:每个电池组配置TVS管(SMBJ36A)和自恢复保险丝
二、SPI通信协议实现
1. SPI初始化(STM32 HAL库)
void MX_SPI1_Init(void)
{
hspi1.Instance = SPI1;
hspi1.Init.Mode = SPI_MODE_MASTER; // 主模式
hspi1.Init.Direction = SPI_DIRECTION_2LINES; // 全双工
hspi1.Init.DataSize = SPI_DATASIZE_8BIT; // 8位数据
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW; // CPOL=0
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE; // CPHA=1(模式1)
hspi1.Init.NSS = SPI_NSS_SOFT; // 软件控制片选
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; // 1MHz时钟
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB; // 高位优先
hspi1.Init.TIMode = SPI_TIMODE_DISABLE; // 关闭TI模式
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; // 关闭CRC
if (HAL_SPI_Init(&hspi1) != HAL_OK)
{
Error_Handler();
}
}
2. LTC3300寄存器配置
// 写入LTC3300寄存器
void LTC3300_WriteReg(uint8_t regAddr, uint8_t *data, uint8_t len)
{
HAL_GPIO_WritePin(LTC3300_CS_GPIO_Port, LTC3300_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, ®Addr, 1, 100);
HAL_SPI_Transmit(&hspi1, data, len, 100);
HAL_GPIO_WritePin(LTC3300_CS_GPIO_Port, LTC3300_CS_Pin, GPIO_PIN_SET);
}
// 读取LTC3300寄存器
void LTC3300_ReadReg(uint8_t regAddr, uint8_t *data, uint8_t len)
{
HAL_GPIO_WritePin(LTC3300_CS_GPIO_Port, LTC3300_CS_Pin, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, ®Addr, 1, 100);
HAL_SPI_Receive(&hspi1, data, len, 100);
HAL_GPIO_WritePin(LTC3300_CS_GPIO_Port, LTC3300_CS_Pin, GPIO_PIN_SET);
}
三、主动均衡核心算法
1. SOC均衡策略
// 均衡状态机
typedef enum {
IDLE,
VOLTAGE_SCAN,
SOC_CALC,
BALANCE_EXECUTE,
FAULT_HANDLER
} Balance_State;
Balance_State currentState = IDLE;
void Balance_Process()
{
static float soc_values[12] = {0};
static uint32_t last_balance_time = 0;
switch(currentState) {
case IDLE:
if(Get_CellVoltage(0) > 4.1f || Get_CellVoltage(11) < 3.0f) {
currentState = VOLTAGE_SCAN;
}
break;
case VOLTAGE_SCAN:
for(int i=0; i<12; i++) {
soc_values[i] = LTC6804_GetSOC(i); // 通过LTC6804获取SOC
}
currentState = SOC_CALC;
break;
case SOC_CALC:
float avg_soc = 0;
for(int i=0; i<12; i++) avg_soc += soc_values[i];
avg_soc /= 12;
for(int i=0; i<12; i++) {
float delta = soc_values[i] - avg_soc;
if(delta > 0.03f || delta < -0.03f) { // 3%阈值
Start_Balance(i, delta);
currentState = BALANCE_EXECUTE;
last_balance_time = HAL_GetTick();
break;
}
}
break;
case BALANCE_EXECUTE:
if(HAL_GetTick() - last_balance_time > 5000) { // 5秒超时
Stop_Balance();
currentState = FAULT_HANDLER;
}
break;
}
}
2. 均衡控制函数
// 启动均衡
void Start_Balance(uint8_t cell, float delta)
{
uint8_t cmd[2] = {0};
cmd[0] = 0x10 | (cell & 0x0F); // 选择电池通道
cmd[1] = (uint8_t)(delta * 100); // 3%对应0x1E
LTC3300_WriteReg(LTC3300_REG_COMMAND, cmd, 2);
HAL_TIM_Base_Start_IT(&htim2); // 启动PWM控制
}
// PWM中断处理
void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM2) {
static uint8_t phase = 0;
switch(phase) {
case 0: // 充电阶段
HAL_GPIO_WritePin(BALANCE_CHG_GPIO_Port, BALANCE_CHG_Pin, GPIO_PIN_SET);
phase++;
break;
case 1: // 放电阶段
HAL_GPIO_WritePin(BALANCE_DISCHG_GPIO_Port, BALANCE_DISCHG_Pin, GPIO_PIN_SET);
phase++;
break;
case 2: // 关闭阶段
HAL_TIM_PWM_Stop_IT(htim, TIM_CHANNEL_1);
phase = 0;
break;
}
}
}
四、安全保护机制
1. 硬件保护
- 过压保护:LTC3300内置OVLO引脚,阈值可设为4.25V
- 欠压保护:UVLO引脚阈值设为2.5V
- 温度监控:NTC连接至LTC3300_TEMP引脚,温度>60℃时禁用均衡
2. 软件保护
// 定期检测保护状态
void Check_Protection()
{
uint8_t status[2] = {0};
LTC3300_ReadReg(LTC3300_REG_STATUS, status, 2);
if(status[0] & 0x80) { // OV故障
Stop_Balance();
Log_Error("Over Voltage Detected!");
}
if(status[1] & 0x01) { // 温度超限
HAL_TIM_Base_Stop_IT(&htim2);
Enable_Fan(); // 启动散热风扇
}
}
参考代码 电池均衡 LTC3300的均衡程序 主动均衡 www.youwenfan.com/contentzhg/70399.html
五、调试与验证
1. 典型调试流程
1. 初始化检查
- SPI通信测试(发送0xAA应答0x55)
- 电压采样校准(对比万用表实测值)
2. 均衡测试
- 强制触发单节均衡(手动设置SOC差值)
- 监测均衡电流波形(示波器观察MOS管VDS)
3. 长期稳定性测试
- 72小时循环测试(充放电各500次)
- 记录温度曲线和电压漂移
2. 常见问题解决
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 均衡电流波动大 | MOS管驱动信号抖动 | 增加10nF栅极滤波电容 |
| SOC计算偏差 | LTC6804采样延迟 | 优化SPI读取时序(增加1μs延时) |
| 过温保护频繁触发 | 散热设计不足 | 增加铜箔面积或添加散热片 |
| SPI通信错误 | 片选信号干扰 | 添加100Ω电阻+0.1μF RC滤波 |