跳转至

超电教学文档(基础知识篇)

声明:本文档只负责超电控制板的设计思路和软件系统大体框架的介绍,不涉及具体的调试和使用,关于此部分内容请移步超电教学文档(实操篇),而代码部分只给出部分的讲解,不涉及具体执行逻辑,如果要弄懂这部分内容,可以自己结合ai去理解。

一、超电控制板主拓扑原理

1.1 Buck和Boost电路的基本了解

在知晓超电控制板之前,我们首先得知道两种电路:Buck(降压)电路和Boost(升压)电路,其电路简图如下:

而关于大致的原理,鉴于文字说明过于匮乏,这里直接给出视频连接:

爱上半导体讲buck电路:

[https://www.bilibili.com/video/BV1644y1q74w/?spm_id_from=333.337.search-card.all.click&vd_source=b1059a5595d173eb67a591bd904caf5a]{.ul}

爱上半导体讲boost电路:

https://www.bilibili.com/video/BV1iM4y1K7iG?spm_id_from=333.788.recommend_more_video.-1&vd_source=b1059a5595d173eb67a591bd904caf5a

工科男孙老师讲buck电路:

https://www.bilibili.com/video/BV1Jv411P7Qc?spm_id_from=333.788.recommend_more_video.-1&vd_source=b1059a5595d173eb67a591bd904caf5a

工科男孙老师讲boost电路:

https://www.bilibili.com/video/BV1G34y1d7m4?spm_id_from=333.788.recommend_more_video.-1&vd_source=b1059a5595d173eb67a591bd904caf5a

这里给出一些概念:

占空比:脉冲信号中高电平持续的时间占整个周期的比值,一般用字母D表示。

电源纹波:这里一般是指开关电源输出的电压电流具有的波动性,纹波值我们这里一般指输出的峰峰值。

工科男孙老师讲纹波:

https://www.bilibili.com/video/BV1u64y1J72F/?spm_id_from=333.337.search-card.all.click&vd_source=b1059a5595d173eb67a591bd904caf5a

其他的概念需要再说。

下面再给出四个电路图的理想公式:

1.2 双边BuckBoost电路的基本结构

接下来,我将基于同步的Buck和Boost的占空比公式(已用红框圈出),来推导Buck-Boost电路的基本原理。下面给出双边BuckBoost电路的基本结构:

以上电路你可能觉得陌生,那么如果我们稍微改一下画图,不改变电路结构,仅仅改变电路的视觉效果,可以得到如下电路:

我们先以左边为输入端(Vi),右边为输出端(Vo);四个开关SW1-4的占空比分别为D1、D4、D2、D3。当占空比为90%时及以上时,约等于常闭合;当占空比为1%及以下时,约等于常断开;下面我将以常断开和常闭合代指这两种占空比。

令SW3常闭合,SW4常断开,则该电路可以等效图7所示的Buck电路:

则有公式为D1=Vo/Vi,Vo=Vi*D1

与此类似的,我们令SW1常闭合,SW2常断开,则该电路可等效为图8所示的Boost电路:

则有公式为:Vo=Vi/(1-D3) ,由于D1与D4互补(D1+D4=1),D2与D3互补(D2+D3=1),故公式可以化简为:

Vo=Vi/D2

Vi=D2*Vo

由上述公式Vo=Vi*D1以及公式Vi=D2*Vo可以发现这二者具有高度相似性,假设常闭合时占空比约等于1,则可得出双边BuckBoost电路公式:

Vo/Vi=D1/D2(左输入右输出)

当为Buck电路时,D2=1,D3=0,带入上式刚好得出Vo=Vi*D1;当为Boost电路时,D1=1,D4=0,带入上式刚好得出Vi=D2*Vo。由此我们就证明了当以左侧为输入(Vi),右侧为输出(Vo)时,双边BuckBoost电路公式的正确性。

这里我们再引入新的名词:Buck侧桥臂(Vi所在处的桥臂),Boost侧桥臂(Vo所在处的桥臂),Buck侧占空比(Db(Dbuck)),Boost侧桥臂(Du(Dup)),则公式可写成:

Vo/Vi=Db/Du(Boost侧电压比上Buck侧电压)

当左侧为输入端,右侧为输出时,左侧即为Buck侧桥臂,右侧即为Boost侧桥臂;此时Db=D1,Du=D2则有公式:

Vo/Vi=Db/Du=D1/D2

当右侧为输入端,左侧为输出时,右侧即为Buck侧桥臂,左侧即为Boost侧桥臂;此时Db=D2,Du=D1则有公式:

Vo/Vi=Db/Du=D2/D1

以下为名词的图示:

观察图10和图11以及公式Vo/Vi=Db/Du=D1/D2和公式Vo/Vi=Db/Du=D2/D1可知,当D1=1,而D2为任意小于90%的占空比时,此时D1>D2,则当左侧为输入,右侧为输出时,此电路为一个Boost电路,左侧电压小于右侧电压,即Vi\<Vo;当右侧为输入,左侧为输出时,此电路为一个Buck电路,右侧电压大于左侧电压,即Vi\<Vo。当D2=1,而D1为任意小于90%的占空比时,此时D1\<D2,则当左侧为输入,右侧为输出时,此电路为一个Buck电路,左侧电压大于右侧电压,即Vi>Vo;当右侧为输入,左侧为输出时,此电路为一个Boost电路,右侧电压小于左侧电压,即Vi>Vo。

所以D1与D2我们可以给一个名称为相对占空比,当左侧占空比(Dl(Dleft)也是D1)大于右侧占空比(Dr(Dright)也是D2)时,左侧电压(Vl)小于右侧电压(Vr);当左侧占空比(Dl)小于右侧占空比(Dr)时,左侧电压(Vl)大于右侧电压(Vr)。符号表示为:

当Dl>Dr时,Vl\<Vr;当Dl\<Dr时,Vl>Vr

我们可以最终得出结论:双边BuckBoost电路两侧的电压大小,取决于两侧的占空比的大小,当左侧占空比大于右侧占空比时,左侧电压小于右侧电压;当左侧占空比小于右侧占空比时,左侧电压大于右侧电压;公式表达为:

Dl/Dr=Vr/Vl

或写成D1/D2=V2/V1

占空比的比值与电压比的比值成反比。

1.3 主拓扑原理图

基于以上原理,我们就可以设计出我们这块超级电容控制板最核心的电路结构——双边BuckBoost电路的主拓扑:

红色框起来的电路为控制四个MOS管开关的电路,这里可以先不看;则其余部分仔细观察你就会发现,与我们刚刚一直讨论的双边BuckBoost电路结构一模一样,无非就是滤波电容给的多(即蓝色框起来的电容),这里绿色框起来的为开关。

二、超电控制板的作用

在介绍作用之前,我们得先知道一些其他的东西。我们得知道,机器人是由大疆电池供电的,电池会将电送到电源管理模块,再由这个模块分成不同功率的电量,给机器人不同的模块供电,其中有一支电量就是分给底盘的。一开始,这股电量只有50W,对于底盘而言,50W的功率并不能发挥出它的真正性能,但这只是对于初级机器人而言,比赛中,随着得分的增加,机器人会升级,电源管理模块分给底盘的功率也就会变多,那么底盘也就可以跑的更快,发挥出更多的性能。但比赛现场,所谓一寸长一寸强,底盘有的功率越多,则跑的越快;那有没有什么办法可以让机器人在低等级的时候就发挥出高等级机器人的底盘性能呢?换句话说,有没有办法让机器人的底盘在初始电源管理模块给电只有50W的情况下,得到高于50W的供电呢?

答案就是再多加一个我们自己的供电源,这个电源可以提供额外的电量给底盘,加上原来的50W,使得底盘获得超过50W的功率,例如供给100W的功率给底盘,翻倍的功率让机器人跑出更快的速度,这样别人的机器人还在蜗牛似的走时,我们的机器人可以飞一般的冲出来,在战场上形成优势。

而要做到提供额外的供电不是单单多接一个电源就行,还需要一种可以调控两种电源的控制板,也就是我们的超电板。而考虑到电源需要不断快速的充放电,传统锂电池显然不能胜任,而超级电容这一元器件由于其储能时具备的快充快放性质,以及悠久的寿命,成了另一个电源不二之选。所以我们也就知道了超电板的作用就是给底盘提供额外的功率,以及协调电池功率、电容功率和底盘功率三者的配比。

所以我们的超电板有三个主要接口,分别为电源端,电容端和底盘端,分别负责对接来自电源管理模块的供电、来自超级电容的供电以及给底盘供电。而关于接法简单示意图,如下所示:

下面我将带你过一遍整个过程:

首先,机器人刚启动,此时底盘不需要移动,所以不用供电,电源将50W的电量通过双边BuckBoost电路给超级电容模块充电,由于我们给超级电容模块设定了一个最大电压(假设为20V)和最小电压(假设为5V)以保护电容,起初为5V,在50W的供电下逐渐将电压升到20V后,不再给超级电容充电。

其次,当底盘开始移动,且仅需要30W供电时,由电源直接提供30W电量,其余20W给超级电容充电,若超级电容已达到最大电压,则停止充电。

接着,当底盘需要50W供电时,电源功率全部给底盘,此时无论超级电容电压如何,都不会得到供电。

然后,当底盘需要60W供电时,除了电源将50W供电全部给底盘外,超级电容也放出10W电量供电给底盘。

再然后,当超级电容放电到5V后停止供电,此时底盘功率从60W掉回50W。

接下来,当底盘所需功率仅20W时,电源分出20W给底盘,剩余30W给超级电容充电。

通过上述我们不难看出,超级电容在整个过程中起到补充额外功率的作用,并且超级电容在比赛过程中需要不断充放电;电源优先满足底盘功率,底盘功率还不够时便需要超级电容参与,当底盘所需功率低于50W时,电源在满足底盘供电后盈余功率给超级电容充电;当底盘所需功率高于50W时,电源功率全给底盘,并让超级电容加入供电。而这一切过程都由超电板来控制。

接下来我们再思考一个问题:超级电容是如何充放电的呢?

这里给出的答案是压差。我们电源电压固定为24V,则到达双边BuckBoost电路左侧的电压为24V。假设超级电容初始电压为10V,则双边BuckBoost电路通过升降压,让自己右侧的电压大于10V,如12V、15V、18V等,由于这些大于10V的电压与10V形成压差,使得电流流向超级电容,实现了超级电容的充电,压差越大,充电越快;当充到20V后,双边BuckBoost电路将右侧电压稳定在20V,进而维持超级电容的电压在20V左右。而放电过程而是让双边BuckBoost电路的右侧电压低于超级电容电压,形成一个反向的压差,使得超级电容放电出来,放到5V后,双边BuckBoost电路的右侧电压维持在5V,以保护超级电容电压不低于5V。

而双边BuckBoost电路怎么让右侧电压可以依据超级电容电压调整,这个的实现就涉及到PID算法,为代码部分,这里先不展开。

那么通过以上的内容,想必你应该已经大概知道了我们超电板的主要作用,这边提醒一下:以上数据均为假设数据,实际数据以实物为主。

三、超电板的设计思路

在第二部分中我们已经知道了超电板的主要作用,而第一部分点出了超点板发挥主要作用的电路结构——双边BuckBoost电路。那么接下来,我们就要设计其他的电路,来让双边BuckBoost电路可以正常工作,同时让四个开关可以依据外部功率的变化做到智能调整。为此,我们可以将电路板分为两部分,一部分负责超电板各自电压的转换,另一部分负责控制超电板的电压升降以及接收外部功率信息还有与外部通信、烧录等功能。我们称其为上板(MCU板)和下板(功率板)。

上板的设计

MCU板作为控制板,需要一块单片机和若干传感器,负责接收外部的电压电流值,计算出功率,并进行PID运算,最后输出四路PWM信号传给下板的四个MOS开关管来控制它们的开关频率,进而控制主拓扑电压的升降。而我们选用STM32F334芯片作为主控芯片,至于为何选择它这里不做出解释,需要的自行查阅数据手册。设计主控芯片外围电路以维持主控的基本功能,如外部晶振、复位电路等。而由于单片机需要3.3V供电,所以我们需要一个线性稳压芯片来提供优质的3.3V电压,我们采用LP5907线性稳压芯片来实现将下板传上来的5V电压转变为3.3V。

根据原理,我们需要知道电源的功率和电容的功率以及底盘的电流,依据P=UI,我们知道需要三个电流检测电路和两个电压检测电路;至于底盘的功率,则是由机器人其他模块传给单片机的,不需要超电板检测,所以不用电压检测电路。而电压检测电路采用差分运放来实现,芯片为OPA2350运放芯片;而电流采样芯片采用INA240,分别采集来自电源端、底盘和超级电容的电流,并与单片机的ADC相连。

我们还需要预留烧录口和串口通信口,分别进行烧录和串口通信的功能。除此之外,为了可以更加直观的知道超级电容电压值的大小,我们可以增加指示灯,在不同电压下有着不同的显示效果。为了与其他模块保持通信,我们加增了CAN口及其外围通信电路来实现CAN通信。

最终我们完成了上板电路的设计,详细请看传承PCB。

下板的设计

下板负责各种电压的转换和主拓扑(双边BuckBoost电路)的运行,首先我们要想,主拓扑最重要的是什么?是四个开关。而MOS管作为开关使用无疑是好的,但是我们得想,开关的驱动PWM的电压能不能驱动四个MOS管的开关?换句话说,直接从单片机输出的PWM信号可不可以直接控制四个MOS管?答案是不能。所以我们需要一种可以放大PWM信号的电路,一个放大左侧桥臂的两路PWM,一个放大右侧桥臂的两路PWM,使其输的PWM可以驱动四个MOS管,于是我们使用UCC27211这款芯片作为PWM放大信号的芯片来使用,以提供可以驱动MOS管开关的PWM信号。

但是通过手册可知,该芯片需要的供电为12V,而我们电源输入的固定电压为24V,所以我们需要一个24降12V的电路给UCC27211芯片供电,这里我们找到了TPS54540作为24降12V芯片来使用。而考虑到还需要给单片机供电,需要输出一个3.3V的稳定电压,而我们不能直接将24V降到3.3V,这样输出的电压纹波过大,不够优质,所以我们采用分布降压,先设计一个24降5V的电路,再将5V通过线性稳压芯片降到3.3V,以输出优质电源,而这个24降5V所用的芯片也为TPS54540。而5V降3.3V所用芯片为线性稳压芯片LP5907,位置在上板靠近单片机的地方。

而上板的五个采样芯片均需要3.3V供电,而上板的线性稳压为了保证供电的唯一性,仅给单片机供电,故我们还需要额外的5降3.3V降压电路,这里我们采用SY8089芯片来实现。

下板有三个降压模块,我们可以在其输出端接入LED显示状态,若成功降压且有输出的话,则可以点亮LED。

上板与下板之间还有两个连接的XT口,分别在双边BuckBoost电路的两侧,实现了上下板的主干电量的流通。

而关于降压电路怎么设计的这个问题,芯片手册一般有给示例电路,改一改即可拿来使用。

下面给出实物图:

上板实物:

下板实物:

四、代码的粗略阐释

相信通过上面三部分的学习,你应该对超电板有了一个基本了解了,那么,接下来我将粗略的带你走一遍代码,让你对超电板的运行逻辑有个了解。

首先我们打开代码可以看到以下内容:

其中,core.c文件为代码执行的主逻辑;ADC_DMA.c文件执行对采样芯片采集到的电压电流值进行过滤校准和转运;packaged.c文件里包含一些初始化和控制桥臂的操作;pid.c文件则是执行pid算法;vofa.c文件负责将采集到的数据实时传给电脑软件vofa+显示;dj_can.c文件则是执行can通信协议。

1.主函数与主循环粗略讲解

主函数void maincore(void) 首先进行初始化操作,包括ADC、PID、定时器、can操作以及占空比。在占空比初始化之前,还有一个用于判断电池电压是否在要求电压之间的代码,以保证在启动之前电池就已经处于正常工作电压(一般为24V),如图22所示。

占空比初始化则是为了保证一开始的占空比处于一个安全的状态,保证启动时不会让占空比低于最低值或高于最大值。

开启pid时,要把pid标志位置1,这样方便后续程序知道你开了pid;

主循环函数void corewhile(void)函数中反复执行ADC初始化、防逆流、RGB显示这三个功能。这里不详细展开,请自行查询AI。

而在core.c中,还有一个函数为void PID_control(void)函数,负责通过PID调控电容的充放电,而具体执行的函数在pid.c中,由PID_goal_duty()函数执行。而为什么这么写,在代码中已有注释,请结合注释和AI自行理解。

core.c中有个函数为CLAMP(),我们可以在core.h中找到以下内容:

#define CLAMP(x, min, max) ((x) \< (min) ? (min) : ((x) > (max) ? (max) : (x)))

上面代码的主要功能为将限制在min和max之间,即,将占空比限制在最大值和最小值之间。

2.其余部分的粗略解释

ADC_DMA.c文件下的代码主要做三个事情:1.存储采集到的原始数据;2.对原始数据进行滤波;3.将过滤后的数据带入公式计算出接近真实的电压电流值。

以上数据会随着时间的流逝产生偏移,需要进行校准,而校准方法请移步实操篇。

代码中关于如何存储以及滤波原理都比较简单,使用AI可以学会,这里不详细展开;而关于真实值的计算公式,具体原理可以不用掌握,会使用即可。

dj_can.c代码是关于can通信的代码,这里可以去看江科大的CAN总线入门教程,学习完之后你对该部分的代码就可以看懂个七七八八了。其余部分可以结合AI去了解。这里给出视频链接:

https://www.bilibili.com/video/BV1vu4m1F7Gt/?spm_id_from=333.337.search-card.all.click

vofa.c的代码可以去vofa+中看,里面有代码示例,这里给出网站链接:

[JustFloat |VOFA-Plus上位机]{.ul}

而pid.c代码主要为串级pid,想要看懂这部分的内容,也可以去江科大中看pid入门教程,这里也给出链接:

PID入门教程-电机控制 倒立摆 全程手把手打代码调试_哔哩哔哩_bilibili

关于代码部分的解释,受限于我本人的理解以及篇幅太长,这里更多鼓励大家亲自去看AI解析以及我所给出的视频,结合硬件原理和代码注释,慢慢看懂代码的作用。如果想要参考,可以进入NAS中,下载我上传的6C1版超电代码注释,与新版代码有所不同(旧版代码适配旧版超电,但其核心思想不变,看懂旧版再看新版几乎差不多),但其大部分内容一致,并且我已标注了丰富的注释和AI结果图,可以帮助你更快理解,但可能存在错误内容,请辩证看待,内容仅供参考。

以上便是关于原理部分的讲解,更多偏向硬件原理。希望看完上述内容后,对大家理解超电有所帮助。