无刷电机驱动复习--智能车竞赛极速越野组复盘(1)

         本篇博文的主要目的一方面是为我之后的答辩提供参考,另一方面是为现在正在参加智能车竞赛的同学们提供一个参考。首先先对无刷电机进行介绍,然后会讲一讲具体的驱动原理,最后讲一讲其他的驱动方式。语言方面可能不太欠缺专业性,希望多多包涵。

一、无刷电机的基本参数及选用

        首先介绍无刷电机的基本参数,方便选择一款合适的无刷电机:(以我们使用过的一款典型无刷电机HOBBYWING Xerun v10 G3为例,主要是手上目前只有它的参数。在这里插一句,获取一个产品的详细性能参数是极其重要的,不亚于data sheet和user manual相当于嵌入式编程的重要性)

        主要关注几个关键参数:适用锂电(即推荐电压,几s就是几块锂电池,一块充满电的锂电池电压大概为3.2V),KV值(空载转速,它的数值的意思是每伏电压提升多少转速,将kv值乘以电压值即得空载理想转速),扭矩(比如13.5T,指的是标称扭矩,要与所带负载保持一个很好的平衡,根据直流电机的转矩特性,负载越大时电枢电流越大,一方面电机容易发热,另一方面驱动板容易烧坏),外径和长度(关注这个参数主要是为了保证你买的电机能安上你的车),电机进角(电机外壳上有一个可以调节电机机械进角的地方,该参数与齿比(比赛不能调节)相配合,增大进角会使转速提高,效率降低,发热增多,主要是微调的作用,调节过程中要尤其注意电机温度)

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第1张图片         

二、无刷电机的运行原理

           再讲一下无刷电机的运行原理,主要参考逐飞的无刷电机教程。逐飞科技基于MM32SPIN360C的智能车BLDC开源项目: 受组委会及灵动委托,逐飞科技针对第十七届智能汽车竞赛室外极速组的BLDC应用需求,精心设计了符合赛事需求的MM32 BLDC驱动开源方案供大家参考,该方案使用MM32SPIN360C,此单片机具有3个运放及3个比较器,无需外加运放与比较器。电机为内转子、2860Kv、电压为12V。开源项目具有的功能,目前支持电机正反转、内部速度闭环、支持刹车、支持电机加速度可调、支持堵转保护。

            无刷电机的内部结构如图(三槽两极电机):

  

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第2张图片

        作为一个永磁直流电机,运行原理其实并不复杂,学过电机学的同学应该明白有刷电机的运行机理,即通直流电后,绕组上产生磁场,此磁场最多只能使电机旋转半圈,所以设计了转向器和电刷,起到了一个机械式逆变器的作用,电机每运行半圈都会是磁场极性反转,从而运行完剩下半圈。

        我们知道相比于有刷电机,无刷电机最大的优点即是舍弃了电刷的结构,但是仍需一个换向的过程,这里我们就需要采用无刷驱动板当中的三相逆变电路来将直流电逆变成三相交流电来驱动无刷电机转子,驱动程序的主要内容也是通过控制MOS管的导通关断来实现这一过程。对于三槽两极电机来讲,分为六步换向,换向图如下:

        这里插一嘴:在比赛的过程中我们曾经尝试过有刷电机,实际上有刷电机也可以达到很快的速度,极限在400m/32-36s左右,缺点是电机转速过快(换向过快)会产生火花,以及换向器的严重损坏,电机严重发热。而无刷电机则不然,无刷电机可以达到更快的速度,我们达到的极限是400m/25s,这时的空载转速甚至可以达到5-6w转每分。挑选一款合适的电机尤为重要,这么快的速度会使电机驱动板处于一个危险的状态。

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第3张图片

  三、无刷电机的驱动原理

        根据无刷电机的结构,有无霍尔传感器分为有感无刷和无感无刷,相比于有感无刷,无感无刷的驱动程序更为复杂,但是需要的接线少了以及少了霍尔传感器的成本。驱动方式分为三类:无感无刷驱动和有感无刷驱动,以及还有一种FOC驱动方式(更为精细但是计算量尤其大)

1、有感驱动

        先简单谈一下霍尔传感器,在这里作为一款转速传感器和位置传感器,是如何工作的。首先为何使用霍尔传感器,霍尔传感器结构简单,频率极高适合高转速的测量。在无刷电机内盖中每隔120°安装一个霍尔传感器,每当转子(转子磁场)转至某处时,利用霍尔传感器的开关特性,霍尔传感器输出高电平(不一定是高电平,这里用于举例)。

        下面是一个例子:假设霍尔传感器I,II,III如图安装,那么可以判别的位置有六个,假设电机顺时针旋转,那么霍尔传感器的逻辑取值就如图所示是( 1 3 2 6 4 5),注意到无刷电机的六个运行状态,其实这个值可以与上面的逆变电路的取值一一对应,具体对应情况可以自己设计,这里为(B+C-, A+C-, A+B-, C+B-, C+A-, B+A-)+表示H桥上桥臂,-表示H桥下桥臂为了获取转子位置信息,我们采用一个频率极高的ADC中断,在三个霍尔传感器取值发生改变时触发,在这个ADC中断中完成两件至关重要的事:1、获取距离上次换相的时间(为了计算实际速度进行速度PI闭环);2、读取此次霍尔取值,根据上面的逻辑取值顺序进行换相。

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第4张图片

        以上我们已经指导控制电机转动起来了,那么如何驱动MOS管的开关和控制电机的转速呢?无刷电机的三个半桥通过我们有三种驱动方式,方式一上桥给PWM信号下桥通过IO控制开启与关闭(采用这种方式)。方式二上桥通过IO控制开启与关闭下桥给PWM信号。方式三上下桥都给PWM信号,但是需要注意的是上下桥的PWM信号必须是互补的,因为上下桥不能同时导通,否则出现电源与地短路的情况,由于MOS开关具有延时,所以互补PWM信号还必须设置死区,作用是当其中一个桥关闭之后要延时一段时间再打开另外一个桥,避免出现电源对地短路的情况。上桥的PWM控制转速,下桥的IO主要控制正反转。

        假设由主板给驱动板一个占空比的PWM转速信号,首先我们需要通过定时器捕获这个PWM,获取其中的转速信息,与目前速度比较,从而改变换相时间,而换相由MOS管控制,需要通过高级定时器生成三路互补PWM波,大致波形如下(通过了预驱):图1,2为同一波形放大占空比大致为70%,图三为占空比接近100%。最后改变了电机的转速。

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第5张图片        

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第6张图片无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第7张图片

        还可以根据需要添加其他的功能:比如在ADC中断中添加采集母线电流用以保护,比如换相同时反转某个IO回传至主板用以读取速度,比如超前换向等等。

        这里主要讲一下超前换相:仅在电机转速过快时才会采用,在电机高速运转的时候霍尔有滞后,我们采用的方法是,当霍尔出现滞后之后,我们换相的时候并不是换到下一相,而是换到了下下相,这样就相当于超前换相了,所以我们需要加一定的延时去匹配,从而得到一个最佳的换相点。此时霍尔表就有所改变,比如超前一相(2 1 4或3 5 6),可以发现这样超前一相虽然可以使电机转速在高速时达到更丝滑的转速,但是也出现了一个负面效果:只有一半的MOS管在使用中,这样MOS管的压力会更大,发热会更明显,采用时需要谨慎!

  

2、无感驱动

        在无感驱动的部分,我们无法使用霍尔传感器,那么该如何来获取转子位置和速度呢?首先需要明确一点,无感驱动最大的难点在于无法获取转子的初始位置,这也是它的一个劣势,即低速下不够丝滑。再讲讲大致思路:

        1、预定位:强制给某一相通电一段时间,让电机转子定位到该位置;

        2、启动:逐步强制换相,缓慢加速;

        3、正常运行

        为了获取转子的位置,我们采用反电势过零点检测法,就能获得一个电周期内转子的六个关键位置。非导通相反电势过零点延时30°即为换相点。那么如何检测各相绕组反电势过零点呢?我们可以通过检测非导通相端电压,与中性点电压比较,具体方法有三种:

        1、PWM开通时检测未导通相反电势,与母线电压一半比较,仅适用于某些PWM调制的电机驱动;

        2、使用三相对称星型电阻网络构建虚拟中性点(通过驱动板电路做到,将电机三相接入这个电阻网络,所以虚拟中性点点电压是容易得到的),与需要检测的电机端电压(每相电压)进行低通滤波后比较(所以也叫作比较器法),滤波会导致出现一定的电压相位延时,需要进行软件处理。

        3、构建虚拟中性点的方法与2一致,ADC采样将端电压进行计算,与虚拟中性点进行比较,省去了比较器(也叫ADC检测法),但是对于ADC的采样精度、速度以及MCU的计算能力都有较高要求。

        这里采用比较器法。首先讲一讲端电压检测的原理:

$$ \left\{ \begin{array}{l} U_{AG}=Ri_A+L\frac{di_A}{dt}+e_A+U_N\\ U_{BG}=Ri_B+L\frac{di_B}{dt}+e_B+U_N\\ U_{CG}=Ri_C+L\frac{di_C}{dt}+e_C+U_N\\ \end{array} \right.
        其中R、L是绕组等效电阻和电感,e是反电势,UN是中性点电压;例如要获取C相的过零点

\left\{ \begin{array}{l} e_A+e_B+e_C=0\\ i_A+i_B=0\\ \end{array} \right.

        可得e_C=U_{CG}-\frac{U_{AG}+U_{BG}}{2}+\frac{e_A+e_B}{2},当到达C相过零点时

e_C=0,U_{CG}=U_N=\frac{U_{AG}+U_{BG}}{2}; e_C>0,U_{CG}>U_N; e_C<0,U_{CG}<U_N;

        通过上面的公式我们可以得到一个简单的获取每相过零点的方法:将浮空相(三相同一时刻只导通两相)端电压与虚拟中性点电压进行比较,得到了下面的一张表格:

电角度 0-60° 60-120° 120-180° 180-240° 240-300° 300-360° 360-420°
相对逻辑霍尔值(自己定义,与有感类似) 2 3 1 5 4 6 2
通电顺序(和霍尔值要匹配) A-B+ A-C+ B-C+ B-A+ C-A+ C-B+ A-B+
浮空相 C B A C B A C
触发边沿 下降沿 上升沿

                如果不好理解,我还画了一张图方便理解(从这张图可以很清楚的看到非导通相反电势过零点延时30°即为换相点这一点):

       无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第8张图片

         通过以上步骤我们可以获取转子位置了,按理来说只要按照有感无刷一样驱动就行了,但是这里还有关键性的一步:如何启动?我用的方法是先随便给某两相通电,比如给A,B相通电,具体方法参考有感无刷的通过定时器输出互补PWM,设置一个较小的占空比来启动,霍尔逻辑值即为2和5。然后检测速度达到既定值之后,进入正常的六步换向顺序,与有感驱动无异。

        但是一定要记住一点:会了原理不等于会了编程,要多动手实践,看看这原理怎么用程序写出来。(就比如我已经看了无数次卡尔曼滤波的原理了,可具体实现卡尔曼滤波传感器融合一直到比赛结束还没有学会。。。)

        (tips:关于编程的小贴士:如何确定当前是哪一相呢?根据上面的原理,利用比较器比较浮空相与虚拟中性点的电压即可确定当前位置,但是该如何编程呢?我想到的办法是,在启动时2,5换相,假设一开始的相是2,选择了比较器1(AB相),再触发比较器中断后在中断内读取比较器值,若是0,那么此时是2,否则是5;进入正常换相也类似,通过启动已经判断好的目前相,不断更换比较器的同时换相)(比较器有一个功能就是为这个准备的,具体叫什么名字忘了,可以三个同相输入与同一个反相输入比较,共享一个中断)

3、FOC驱动

        这个我就只能为大家提供原理上的参考了,因为我自己也没有实现。还是前面一句话,理解原理不等于会软件实现。这一部分主要参考稚晖君在知乎上的一篇文章。

        首先简单介绍一下FOC驱动,使用了SVPWM技术,全名是磁场定向矢量驱动,可以实现电机精确的驱动,一般用于机械臂等需要精确控制的场所。单纯追求高速其实不必使用FOC,因为计算量太大了,比如无刷电调追求高速,里面使用的就是有感或无感驱动一样。

        照例先讲一下基本流程:

1、三相电流采样得到Ia、Ib和Ic;

2、clark变换得到Iα、Iβ;

3、park变换得到Iq、Id;

4、计算Iq、Id与设定Iq_ref、Id_ref的误差

5、输入PI控制器得到Uq、Ud;

6、反park变换得到Uα、Uβ;

7、Uα、Uβ电压矢量合成,输入SVPWM模块调制,输出三半桥状态编码;

8、控制MOS开关

9、循环;

       介绍一下前面提到的一些名词:

        1、clark变换

        采样电路设计时可参考开尔文接法,确保采样精度。

        此时有Ia + Ib + Ic = 0;

        由电机学的基本知识我们知道,三相电流并不正交而是在空间上相差120°,由此我们考虑将基向量(Ia,Ib,Ic)转换为正交的基向量(Iα,Iβ),可减少一个控制量:

        \left\{ \begin{array}{l} I_{\alpha}=I_a-\cos \left( \frac{2\pi}{3} \right) I_b-\cos \left( \frac{2\pi}{3} \right) I_c\\ I_{\beta}=\sin \left( \frac{2\pi}{3} \right) I_b-\sin \left( \frac{2\pi}{3} \right) I_c\\ \end{array} \right.

        \left[ \begin{array}{c} I_{\alpha}\\ I_{\beta}\\ \end{array} \right] =\left[ \begin{matrix}{} 1& -\frac{1}{2}& -\frac{1}{2}\\ 0& \frac{\sqrt{3}}{2}& -\frac{\sqrt{3}}{2}\\ \end{matrix} \right] \left[ \begin{array}{c} I_a\\ I_b\\ I_c\\ \end{array} \right]

        但显然若采用开尔文接法,Ic=-(Ia+Ib),同一时刻只需要采样两相(假设是A,B相),上式可转化成:(但注意控制时可不能只控制两相,下式只可用于进行clark变换,方便计算)

        $$ \left[ \begin{array}{c} I_{\alpha}\\ I_{\beta}\\ \end{array} \right] =-\frac{3}{2}\left[ \begin{matrix} 1& 0\\ \frac{1}{\sqrt{3}}& \frac{2}{\sqrt{3}}\\ \end{matrix} \right] \left[ \begin{array}{c} I_a\\ I_b\\ \end{array} \right]

        2、park变换

        将此α-β坐标系旋转θ角度(其实坐标系就是跟随转子一同旋转,这个角度可以有各种传感器得到),可以得到Iq和Id:

        \left[ \begin{array}{c} I_d\\ I_q\\ \end{array} \right] =\left[ \begin{matrix} \cos \theta& \sin \theta\\ -\sin \theta& \cos \theta\\ \end{matrix} \right] \left[ \begin{array}{c} I_{\alpha}\\ I_{\beta}\\ \end{array} \right]

        此步的目的主要是将控制变量线性化,使之可以使用线性控制器(说白了就是PID)

        3、三闭环控制

        (内->外)(电流环->速度环->位置环)物理含义式是电流反馈控制电机电流(扭矩),控制扭矩从而控制转速,控制转速从而控制位置,流程图如下:

        无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第9张图片

        Iq和Id的实际物理意义也很明确,控制起来就很方便 ,Iq是需要的量,代表期望的力矩输出;而Id是不需要的量,控制为0;

        在速度快且不需精确控制的情况下,使用速度+电流环;

        速度过慢时使用位置+电流环;

        4、SVPWM模块

        这部分涉及到电力电子技术这门课的内容,听不懂的同学可以去先学习一下。电机驱动板的原理前面已经提到过,输入直流通过一个三相可控逆变器输出三相交流电,接到电机的三相星型绕组上,如下图:

        无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第10张图片

         这部分在电力电子技术当中的逆变电路中提到过,相电压波形是那个阶梯状的,我这里没有图就不放出来了。

        相电压在空间上也相差120°,我们可以将三相相电压合成,得到U,表征了希望转子的方向(生成磁场的方向),U幅值不变为Udc,以\omega =2\pi f的速度匀速旋转。

        SVPWM技术的实质就是用三相桥开关状态来表示出空间电压矢量U,可以推导得到下面的扇区分布图,U0(0 0 0)、U1(0 0 1)... U7(1 1 1)分别为六个基向量和两个0矢量(0 0 0)和(1 1 1),在每一扇区选择相邻的两基向量和零矢量,按照伏秒平衡原则可以合成任意电压矢量,只要配置不同基向量的占比(占空比)即可以实现这一过程

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第11张图片        举例说明,例如如图的电压矢量Uref 

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第12张图片     

         根据正弦定理有:

$$ \frac{\left| U_{ref} \right|}{\sin \frac{2\pi}{3}}=\frac{\left| \frac{T_6}{T}U_6 \right|}{\sin \theta}=\frac{\left| \frac{T_4}{T}U_4 \right|}{\sin \left( \frac{\pi}{3}-\theta \right)}

        得到:$$ \left\{ \begin{array}{l} T_4=mT\sin \left( \frac{\pi}{3}-\theta \right)\\ T_6=mT\sin \theta\\ \end{array} \right.

        其中m称为SVPWM的调制比$$ m=\sqrt{3}\frac{\left| U_{ref} \right|}{U_{dc}},显然m设置的越大,期望的力矩就越大

        同时零矢量的分配时间$$ T_0=T_7=\frac{1}{2}\left( T-T_4-T_6 \right)

        各个状态切换顺序(一个周期内)如下(这种切换顺序是为了减少MOS开关次数,降低损耗):

无刷电机驱动复习--智能车竞赛极速越野组复盘(1)_第13张图片            同理可得其他扇区的切换顺序:

        I区 0-4-6-7-7-6-4-0

        II区 0-2-6-7-7-6-2-0

        III区 0-2-3-7-7-3-2-0

        IV区 0-1-3-7-7-3-1-0

        V区 0-1-5-7-7-5-1-0

        VI区 0-4-5-7-7-5-4-0

        以上就是FOC驱动无刷电机的基本原理,但是可以很明显的发现运算量相比于有感无感驱动不止大了一点。

四、结束语

        断断续续写了两三天,总算完成了这个无刷电机的全篇总结,由于本人的水平限制,可能存在很多疏漏和不合理的地方,希望大家能够指正。(希望有大佬指点一下FOC的嵌入式程序实现)

        下一篇博文应该是关于智能车比赛中的传感器融合和卡尔曼滤波的,不过我还没有完全弄明白,所以也不知道什么时候去了。

你可能感兴趣的:(单片机,嵌入式硬件,学习)