|
本帖最后由 Tiny。P 于 2018-12-20 17:03 编辑 在上一个贴子中,我利用了STM32F334做的一个同步降压BUCK数字电源,帖子网址https://www.stmcu.org.cn/module/forum/thread-606783-1-1.html 本次做的充电器也是利用我们做的另一款BUCK-BOOST升降压变换器,加入三段式充电算法程序。锂电池的充电要求,大家可参阅网络资料,总的说就是预充、恒流充、恒压充三段式充电,这里直接贴出代码: float32 CHARGE_VOLTAGE = 0; //充电电压 float32 CHARGE_CURRENT = 0; //充电电流 uint8 dp_ChargeState(void) { static volatile uint8 ChargeSta = CHARGE_IDLE; static uint32 precharge_time = 0; static uint32 charge_time = 0; static uint16 iflat_db = 0; switch(ChargeSta) { case CHARGE_IDLE: CHARGE_CURRENT = (float32)CHARGING_IFLOAT; CHARGE_VOLTAGE = (float32)CHARGING_VOLTAGE; iflat_db = ( Iout >= CHARGING_ISTOP ) ? iflat_db+1 : 0; if(iflat_db > 10) { ChargeSta = CHARGE_PRECHARGE; iflat_db = 0; precharge_time = 0; } break; case CHARGE_FAULT: CHARGE_CURRENT = (float32)CHARGING_ISTOP; CHARGE_VOLTAGE = (float32)FLOATING_VOLTAGE; flat_db = 0; break; case CHARGE_DONE: CHARGE_CURRENT = (float32)CHARGING_ISTOP; CHARGE_VOLTAGE = (float32)FLOATING_VOLTAGE; if( Vout<0.9f*FLOATING_VOLTAGE )ChargeSta = CHARGE_IDLE; break; case CHARGE_PRECHARGE: CHARGE_CURRENT = (float32)PRECHARGE_ILIM; CHARGE_VOLTAGE = (float32)CHARGING_VOLTAGE; iflat_db = (Vout > CUTOFF_VOLTAGE) ? iflat_db+1 : 0; if(iflat_db > 10)ChargeSta = CHARGE_CHARGING; if(precharge_time > PRECHARGE_TIME)ChargeSta = CHARGE_FAULT; precharge_time++; break; case CHARGE_CHARGING: CHARGE_CURRENT = (float32)CHARGING_ILIM; CHARGE_VOLTAGE = (float32)CHARGING_VOLTAGE; iflat_db = (Vout > FLOATING_VOLTAGE && Iout < CHARGING_ISTOP) ? iflat_db+1 : 0; if(iflat_db > 10)ChargeSta = CHARGE_FLOAT; if(charge_time > CHARGE_TIME || Vout < CUTOFF_VOLTAGE)ChargeSta = CHARGE_FAULT; charge_time++; break; case CHARGE_FLOAT: CHARGE_CURRENT = (float32)CHARGING_IFLOAT; CHARGE_VOLTAGE = (float32)FLOATING_VOLTAGE; iflat_db = (Iout < CHARGING_ISTOP) ? iflat_db+1 : 0; if(iflat_db > FLOATING_TIME)ChargeSta = CHARGE_DONE; if(charge_time > CHARGE_TIME)ChargeSta = CHARGE_FAULT; charge_time++; break; }//switch(..) return ChargeSta; } 为满足用户给电池(或超级电容)充电需求,在双向Buck-Boost升降压电源板的基础上增加了电池的充电算法(三段式充电),本实验是对超级电容进行充电的测试示例。用户只需根据自己的电池型号进行修改如下参数(主函数内)即可,需注意的是电池的充电电流均要在板子最大输出电流之内。本实验所用超级电容参数:本实验充电对象是由12个单体电压为2.7V,电容为350F组成的额定电压为32.4V,容量为29F的超级电容组。 电容组充电的各参数设置情况如下图所示:
参数设置
超级电容组
实验台 本实验充电波形如下图所示(主要为检测三段式充电的控制策略的可行性,实际上超级电容的充电不一定非要实现三段式充电): 第一阶段为预充阶段,充电电流设为1A,电容电压由2V充至5V。 第二阶段为充电阶段,充电电流设为3A,电容电压由5V充至所设置的27.6V。 第三阶段为浮充阶段,充电电流逐渐降低,使得电容电压可以最终稳定在所设置的28V左右。
充电过程电压电流值(绿色为电流,蓝色为电压) =========================================================================================== 数字电源交流1群: 474805564 数字电源交流2群: 183376789 |
| 谢谢分享~ |
好东西,多多交流 |
优秀![]() |
|
好东西,顶顶顶 |
STM32
超强工具——STM32CubeMX 你会用吗?
集结出发! STM32全国研讨会系列之一:ST智能门铃中国首秀
关于STM32启动文件的几个小问题
【银杏科技ARM+FPGA双核心应用】STM32H7系列35——USB_VCP_FS
【银杏科技ARM+FPGA双核心应用】STM32H7系列28——USB_HID
粉丝分享 | 图说CRC原理应用及STM32硬件CRC外设
STM32L151进入低功耗,并由RTC唤醒的故事
[转]stm32控制NFC模块(PN532)源码(P2P,模拟卡,读写卡等
STM32G070RB+LVGL移植
微信公众号
手机版