README For SuperCapControl
超级电容 ultracapacitor
@Rodeson
Email:lds947003754@outlook.com
控制板功率板
电容组
- 使用4Buckboost电路,实现升降压控制。
- 将控制板和功率板进行拆分设计,两个板子对应接口固定,PWM控制线通过FPC排线连接,电源接口使用XT30接口连接。
- 更改设计后,V2.0板子实际面积更小,在舵轮上安装方便。
- 在实际使用过程中,为方便了解超级电容工作状态,视觉上增加RGB灯显示板子工作情况,听觉上增加蜂鸣器,能够在工作异常时第一时间了解情况。
- 传感器选型上使用ina240a1和opa2350ua,使用adc读取模拟信号,上一代超级电容使用ina226容易出现i2c通信掉线情况。
- 增加板载温度传感器MCP9700AT-E_TT,监测超级电容工作温度。
- PCB设计时,减小PCB上大电流走线距离,板载大电流开窗布线。
- 增加可交互的五维按键和OLED显示屏,方便现场调参。
2.1.1接口采样电路
2.1.2电流传感器
2.1.3电压传感器
battery_in.I_now = buckboost_control.BUCKBOOST_IN_C;
battery_in.U_now = buckboost_control.BUCKBOOST_IN_V;
battery_in.P_now = battery_in.I_now * battery_in.U_now;
chassis_out.I_now = buckboost_control.BUCKBOOST_OUT_C;
chassis_out.U_now = buckboost_control.BUCKBOOST_IN_V;
chassis_out.P_now = chassis_out.I_now * chassis_out.U_now;
dcdc_in.I_now = buckboost_control.BUCKBOOST_IN_C - buckboost_control.BUCKBOOST_OUT_C;
dcdc_in.U_now = buckboost_control.BUCKBOOST_IN_V;
dcdc_in.P_now = dcdc_in.I_now * dcdc_in.U_now;
dcdc_out.I_now = buckboost_control.BUCKBOOST_CAP_C;
dcdc_out.U_now = buckboost_control.BUCKBOOST_CAP_V;
dcdc_out.P_now = buckboost_control.BUCKBOOST_CAP_C * buckboost_control.BUCKBOOST_CAP_V;
/****************************
24V CAP
Q1------| |------Q3
|-----|
| L |
|-----|
Q2------| |------Q4
*****************************/
#define Q1_PWMControl_TIM htim1
#define Q1_PWMControl_TIM_CH TIM_CHANNEL_1
#define Q2_PWMControl_TIM htim1
#define Q2_PWMControl_TIM_CH TIM_CHANNEL_2
#define Q3_PWMControl_TIM htim1
#define Q3_PWMControl_TIM_CH TIM_CHANNEL_3
#define Q4_PWMControl_TIM htim1
#define Q4_PWMControl_TIM_CH TIM_CHANNEL_4
typedef struct
{
uint8_t data_update; //1更新
uint8_t buckboostmode; //0为初始关闭模式 1为降压模式 2为升压模式
uint8_t loop_mode; //环路模式0:cv 1:cc 2:cp
float efficiency; //总效率 ,热耗散
uint8_t power_dir; //能量方向0正向充电1反向放电
uint16_t max_power_lim; //裁判系统最大功率
float power_pass; // 裁判系统花去功率板与板子测量误差经过pid结果用于传递
uint8_t referee_power;
uint8_t referee_buff;
float powerbuffer ; //缓冲能量
PID_Regulator_t BuckBoostLoopCcompare_PID;//输出电流环
PID_Regulator_t BuckBoostLoopVcompare_PID;//输出电压环
PID_Regulator_t Robot_Buffer_PID;//缓冲能量环
PID_Regulator_t Robot_Power_PID;//功率环
double BUCKBOOST_CAP_C;
double BUCKBOOST_CAP_V;
double BUCKBOOST_IN_C;
double BUCKBOOST_IN_V;
double BUCKBOOST_OUT_C;
double BUCKBOOST_NEED_C;
float BUCKBOOST_IN_P;
float BUCKBOOST_OUT_P;
float BUCKBOOST_CAP_P;
float BUCKBOOST_NEED_P;
float charge_power;//功率环计算OUT
float charge_current;// = charge_power/inV
float cloop;
float vloop;
float ratio_pass;//计算升降压比例
uint8_t POWER_LIMIT_MODE;//超级电容功率限制模式 0使用电容 1不使用电容
} BUCKBOOST_STRUCT;
发送函数
void supercap_sendmessage(uint16_t Vcap)
{
static uint8_t supercap_tx_data[2];
Tx1Message.StdId=0x211;
Tx1Message.IDE =CAN_ID_STD;
Tx1Message.RTR=CAN_RTR_DATA;
Tx1Message.DLC =0x08;
memcpy (supercap_tx_data, &Vcap, sizeof(Vcap));
HAL_CAN_AddTxMessage(&hcan1, &Tx1Message, supercap_tx_data ,&pTxMailbox);
}
实例应用(发送超级电容电压数据 由于是无符号16位整数 因此需要将浮点数乘以1000并发送整数)
supercap_sendmessage(buckboost_control.BUCKBOOST_CAP_V * 1000);
接收函数(接收裁判系统底盘参数 为当前等级底盘最大功率及实时缓冲能量)
void get_supercap_measure(BUCKBOOST_STRUCT *cap, uint8_t aData[])
{
cap -> referee_power = aData[0];
cap -> referee_buff = aData[1];
}
实例应用(该函数 扔在can线接收中断里面)
void CAN1_Getdata(CAN_RxHeaderTypeDef *pHeader,uint8_t aData[])
{
switch (pHeader->StdId)
{
case 0x0210:
{
//得到超级电容数据
get_supercap_measure(&buckboost_control,aData);
}
default:
{
}break;
}
}
20220731 舵轮No.3 贺道明
问题描述:超级电容上电后,裁判系统电源管理模块直接停止工作,所有供电全部断掉,出现短路现象。但后续重新上电,超级电容模块恢复正常使用。
问题分析:长时间未使用超级电容,导致超级电容电压低于12V。后续上电过程中,进入大电流充电模式,导致电池输出电流较大,电池管理误判断电池短路,触发电池保护机制,断掉电池输出。
问题解决方法:临时解决方法,使用超级电容前,确保超级电容电压高于12V。后续解决方法,程序判断超级电容电压,增加电容低电压充电模式,避免上电后大电流充电。(仅限于长时间未使用,电容组电压过低情况)。