项目分享| STM32G474双向超级电容控制器
Robomaster比赛颠覆传统的机器人比赛方式,激烈的对抗,震撼人心,感兴趣的可以去搜一下比赛视频。与电赛、智能车相比,Robomaster观赏性
Robomaster比赛颠覆传统的机器人比赛方式,激烈的对抗,震撼人心,感兴趣的可以去搜一下比赛视频。与电赛、智能车相比,Robomaster观赏性更多,需要多学科协同作业。本次项目分享是来自大连理工大学的光速翼分享的双向超级电容控制器。超级电容在电赛、智能车中也是频繁出现,因此分享给大家作为参考,本项目软硬件开源
为什么会分享超级电容控制器呢,主要原因是在 Robomaster 比赛中官方对底盘的功率限制,促使各个战队投入一定精力研发超级电容。为了进一步追求能量利用效率,光速翼在战队前辈的基础上继续钻研数字电源方案,勇于创新的同时加以理性分析,最后开发出了本方案,已经在实验室进行过烤机测试和实际场地的飞坡测试。
和普通的超级电容控制器不同,这个超级电容控制器具有以下突出特点:
1)可以将电容组的电压利用到1V以下,极高的能量利用率
2)电调电压恒定为电源电压
3)可以额外负责裁判系统解析实现缓冲能量闭环和底盘运动控制
4)铝基板和四层板级联可以做到强悍的散热和高集成度
5)尺寸为80*55*25(单位:mm),约为一张银行卡左右的大小
6)200w充放电效率大于95%
总体设计
控制器采用四层板和铝基板的结合方案。主要功率器件放在铝基板,控制和测量电路放在四层板。铝基板散热性能非常强,四层板可以在相同面积下放置更多的电子元件,同时可以保证完整的地层和电源层,提高 pcb 抗干扰能力。铝基板和四层板采用捷配和嘉立创的特价打样(太穷了没办法),五块 PCB 只需要五块钱。
✔ 控制器板设计:
【嵌入式物联网单片机学习】大家可以加我微信一起学习,我整理了100多G(全网最全)的学习资料包(持续更新)、最新的学习路线思维导图。各种学习群、项目开发教程。还可以围观我朋友圈中的一手行业消息,每周的技术大咖直播答疑吹水
由于需要高控制精度,即需要 HRTIM 模块,所以可以排除掉 STM32F103 等单片机。可选方案有 STM32F3系列和 G4 系列以及 TI 的DSP。其次考虑开发难度,首先排除TI 单片机,做过电赛都知道MSP430 这玩意不是一般人能拿捏的。STM32有丰富资料和强大的 cubemx,最后考虑性能,最终选择G4 系列,主频高达 170M ,有5路ADC转换器和更丰富的模拟外设,可硬件过采样,三路 fdcan 更如虎添翼。还有一点,G4在ST介绍中是专为电机控制和数字电源而生。
控制器板的测量分为电压测量和电流测量部分,全部采用差分线减小噪声的影响。电路运放使用AD8052 和OPA2350。电流采样使用INA199 高边采样芯片,内置反馈电阻也可以减小温飘。电压同理用个差不多的轨到轨运放即可。
电源部分采用DCDC降压芯片 xl1509 降压到12V为MOS驱动供电,12V在经过LDO降压给单片机和其他部分供电。由于压差过大导致静态功耗过高,所以使用两路DCDC,其中一路降压到12V,另一路降压到5V在经过LDO降压到 3.3V为单片机供电。
板子当时画的时候太着急了,有两个 bug:
第一个是电压调理和两个ADC接反了。当时整了好久百思不得其解为啥同样代码不好使,最后发现是这个智障问题大呼上当(或许这样接线会更短,笔者当时应该这样考虑的)。解决办法很简单,软件里面调换一下计算就 ok 了。
第二个是理想二极管部分。起初考虑到了反向供电时候供电自锁问题,所以加上了理想二极管。但是换上 LM5050 后发现这个会将输出电压升高到 28V,因为这个特点烧了三个 3508 电调然后才亡羊补牢(感谢老板不杀之恩),最后通过软件方式解决了这个问题。详见代码。如果有条件可以采用凌特的 LTZ7001 高边开关解决(太贵了)。
✔ 功率部分:
半桥驱动器选用UCC27211,MOS管选用CSD19536。理由有两点。第一是这两个元件性能强悍。UCC27211 自带自举二极管且开关时间短。MOS 管内阻低,Qgs 小。这两点有助于降低开关损耗,提高功率上限。
代码设计及调试心得
代码里包含了需要用到的所有外设,并且写好了中文注释。代码详见 code 下子文件夹下 Technical validation 文件夹,其中工程中 txt 文档包含每一个版本的测试内容。在实测中 adc 会产生微小偏移,以及内部 opamp 失调电压过大,测量电流会产生较大误差。所有代码可以在“达尔闻说”回复:超级电容,获取。代码内容包括了开环升降压到最后的上场比赛版本的代码。
以下是嵌入式代码调试心得:
ADC测量改进:此部分一定要做好滤波和校准。如果不做校准那么会产生飘移电压,这对电流测量影响巨大,而且由于是给超级电容充电,微小的过压也会触发保护芯片工作导致静态损耗,这是无法接受的。滤波的作用是避免偶然错误的数据干扰控制此外滤波还可以一定程度降低PID控制中引入高频微分噪声。此外,考虑到裁判系统是高边采样,因此控制板也采用了高边采样代替低边采样。
代码速度优化:STM32G474 有 ccmram 区,可以稍微加快代码执行速度。即使不是很多也要追求极致。实测PID计算可以降低 5us 左右。此外,使用 cmsis 数学加速库或者将滤波中的冒泡排序更换为快速排序都可以提高代码执行速度,从而提高控制频率和采样频率,达到更快速的响应。
避免 double 类型参与重复:计算起初的代码执行一次数据获取和控制需要 40us,对于数字电源来说控制周期太长。逐步测试后发现ADC数据线性变换部分用的是 double(当时写错了)改为 float 后一次中断中执行周期降低为 20us。但在校准初始化部分使用了 double 类型,因为这部分代码只需运行一次
将ADC校准数据写在条件编译部分:由于校准的必要性,这里需要每个ADC采集两个点的真实数据和测量数据。五个ADC加起来就是 20 个数。并且因为不同批次的模块ADC,模拟前端部分的误差各不相同,所以不能将同一个校准参数应用于所有做出来的模块。这里在模块显眼位置用马克笔标记序号,并在 ADC校准初始化部分逐个标定。最后将代码段选择性编译,这样可以避免多个工程调试和升级的麻烦。
END
转载自:达尔闻说
文章来源于项目分享| STM32G474双向超级电容控制器
原文链接:项目分享| STM32G474双向超级电容控制器