ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《DMG474电机控制专题教程V1.1 》第27章 FOC(1-6)

《DMG474电机控制专题教程V1.1 》第27章 FOC(1-6)

原创 嵌入式/内核开发 作者:正点原子 时间:2026-05-09 12:18:24 0 删除 编辑

第27章 FOC(1-6)


       为了进一步提升无刷电机的可控性,引入了FOC控制方式。本章主要以PMSM为例带领大家一起学习FOC的控制方式。

       本章分为如下几个小节:

       27.1 FOC原理介绍

       27.2 FOC硬件平台

       27.3 FOC开发工具

       27.4 FOC例程创建

       27.5 FOC下载验证

       27.6 ST MCSDK库源码介绍


        27.1 FOC原理介绍

       FOC(field-oriented control)为磁场定向控制,又称为矢量控制(vectorcontrol),是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最佳选择。FOC可以精确地控制磁场大小与方向,使得电机转矩平稳、噪声小、效率高,并且具有高速的动态响应。目前已在很多应用上逐步替代传统的控制方式,在运动控制行业中备受瞩目。

       我们都知道,电流可以产生磁场,并且磁场大小与电流大小成正比,因此为了使定子构造最合适的旋转磁场,需要精确控制线电流。想要磁场旋转就需要线电流做着正弦变化,而3组线圈绕组的角度差,就使得三相电流需要时刻做相位差为120度的正弦变化,这时可使定子构造最合适的旋转磁场,显然简单的6步换向无法控制三相电流做正弦变化,转矩在一定程度上会有跳变,这样无法输出稳定转矩,因此需要FOC来保持转子的扭矩时刻连续稳定可调。下面总结六步换向和FOC控制方式的对比表,如表27.1.1:


表27.1.1 控制方式对比表


       27.1.1 FOC框图介绍


图27.1.1.1 电流闭环控制FOC框图


       图27.1.1.1是以电流闭环控制为例,也就是让电机始终保持一个恒定力矩(力矩与电流成正比)。

       从上图可以看到最左边的Iq_Ref和Id_Ref两个变量经过PID控制器进行反馈调节,其中涉及到几个变换模块,包括:Clarke 变换、Park变换以及反Park变换,最后是SVPWM模块作用到三相逆变器进而控制电机旋转。相信大家对上面这些过程不是很理解,没关系,我们先来大致的概括下FOC的整个控制框图,后面会对整体框架进行拆分讲解。

       ① 对电机三相电流进行采样得到:ia、ib、ic;

       ② 将ia、ib、ic经过clarke变换得到iα、iβ;

       ③ 将iα、iβ经过park变换得到iq、id;

       ④ 计算iq、id和其设定值iq_Ref、id_Ref的误差;

       ⑤ 将上述误差输入到两个PID(只用到PI)控制器,得到输出的控制电压Vq、Vd;

       ⑥ 将Vq、Vd进行反park变换得到Vα、Vβ;

       ⑦ 将Vα、Vβ输入SVPWM模块进行调制,合成电压空间矢量,输出该时刻三个半桥的开关状态进而控制电机旋转;

       ⑧ 循环上述步骤。

       下面我们来分别介绍每一步的具体操作以及意义。


       27.1.2 FOC坐标变换

       假设我们将一个PMSM电机手动让其匀速旋转,此时使用示波器观察它的三相输出电压(反电动势),我们会发现示波器上会得到三组正弦波,并且三组正弦波之间两两相位差为120°。如图27.1.2.1:


图27.1.2.1 PMSM电机运转时三相电流波形


       所以反过来我们在三相无刷电机的三相线圈上输入上述三相正弦电压,那么就可以驱动无刷电机平稳高效地旋转了。而这正是FOC驱动无刷电机的基本手段,但是从控制的角度来看,我们根本就不想跟三个正弦波打交道,因为对于非线性的信号进行准确控制就要使用复杂的高阶控制器,这对于建模成本、处理器算力、控制实时性等都是非常不利的,那么有没有什么方法可以将被控制量线性化呢?答案是当然有的,只需要应用一些数学技巧。


       27.1.1.1 Clarke变换

       当PMSM电机匀速运转时,将采集到相位相差120°的三相电流Ia、Ib、Ic使用三相坐标系表示,如下图绿色线所示:


图27.1.2.1.1 三相坐标系


       我们可以利用一些数学小技巧,将三相坐标系变换成直角坐标系,我们把新的直角坐标系命名为α-β坐标系(如图27.1.2.1.1红色线所示),变换原则是电流产生的磁场相等。

       Clarck变换用于将三相静止坐标系变换到两相静止坐标系,变换前后在坐标系中产生的磁场等效。


图27.1.2.1.2 Clarck变换


       假设变换前三相定子绕组匝数为N3,变换后的两相定子绕组匝数为N2,根据磁动量守恒可得:



       提取iα和iβ可以得到:



       遵循恒幅值不变原理可得:



       所以:



       根据基尔霍夫定律(KCL):



       所以归纳:



       最后化简得:



       经过Clarke变换后就变成了直角坐标系啦!变换前后的波形如图27.1.2.1.3:


图27.1.2.1.3 经过Clarke变换前后的波形


       可以看到变换后还是正弦波,虽然少了一个需要控制的变量,但是新的变量还是非线性的(正弦),控制它依旧难度很大,那有没有办法把它们线性化呢,当然有的,接着就看下Park变换


       27.1.1.1 Park变换以及反Park变换

       Park变换可以将电机从两相静止坐标系变换到两相旋转坐标系(dq坐标系),从而解耦出电机转矩分量和电机的励磁分量,这两个分量相互垂直、互不影响。反Park变换即为Park的逆变换。

       首先我们来看下Park变换的原理,这里将Clarke变换后的α—β坐标系旋转θ度,其中θ为转子旋转的角度,如下图:


图27.1.2.2.1 Park变换


       图27.1.2.2.1中,d轴方向与转子内磁场方向重合,称为直轴;q轴方向与转子内磁场方向垂直,称为交轴。如图27.1.2.2.2所示:


图27.1.2.2.2 d-q轴示意图


       此时我们将α—β坐标系变换到d-q坐标系,即Park变换;依据坐标变换,Park变换矩阵为:



       变换公式如下: 



       在将Park变换后的结果在经过PID控制器,PI运算后的输出结果在进行反Park变换,反Park变换矩阵为:



       变换公式如下:



       首先α—β坐标系经过Park变换后,即为d-q坐标系,该坐标系是始终跟着转子旋转的,旋转角度θ需通过编码器/霍尔传感器读取。经过这一步的变换,我们会发现,一个匀速旋转向量在这个坐标系下变成了一个定值!(因为参考系相对于该向量静止了),这个坐标系下两个控制变量都被线性化了!Park变换前后波形如图27.1.2.2.3所示:


图27.1.2.2.3 Park变换前后波形


       Park变换后的控制量为Iq、Id,很显然线性化后的控制量我们就可以使用PID来进行控制了;但是为什么我们还要进行反Park变换,将其又变换为α—β坐标系呢?因为SVPWM算法的实现需要用到静止的α—β坐标系,所以当我们完成了控制信号的PID运算后,还需进行反Park变换。关于PID控制部分这里就不赘述了,大家可以查看第八章的PID专题讲解。


       27.1.3 FOC的目的

       经过前面的一通操作我们将转子磁链进行了解耦,分解为转子旋转的径向和切向这两个方向的变量:Iq以及Id,那这两个控制量到底代表什么含义呢?我们通过图27.1.3.1来进行讲解。


图27.1.3.1 Iq、Id的含义


       我们可以看到对于图27.1.3.1中的人来说,他想驴能一直往前走,即iq是他需要的驱动力,iq越大驴走得越快,iq越小驴走得越慢,而id对于他来说无关紧要。对于电机来说也是一样的道理,即FOC的目的如图27.1.3.2所示:


图27.1.3.2 FOC的目的


       经过上述分析,我们得知:

       1、Iq是我们需要的。代表了期望的力矩输出;

       2、Id是我们不需要的。我们希望尽可能把它控制为0;

       至此整个FOC框架基本捋清楚了,只差最后一个步骤就是“SVPWM”,下面我们开始对SVPWM做一个详细的介绍。


       27.1.4 SVPWM解析

       从前面的学习,我们知道如果要平稳地驱动三相电机转动,我们就需要生成三个相位相差120度的正弦波

       为了使输出电流近乎于正弦波,可以使用PWM的方式,通过调整占空比使等效电流近似为正弦波,这种PWM也就是SPWM。SPWM是从电源的角度出发,构造出旋转所需的正弦电压,这种方式比较适合用作逆变器,但是对于无刷或者永磁同步电机,调节过的电源实际在定子线圈中产生的电流并不一定是所需的结果。这也就是所谓的开环,是没有反馈的。所以这种控制方式还是不能较为准确的控制定子电流。因此这种永磁无刷电机直接通三相交流电并不一定能很平稳的旋转起来。不然的话纯硬件就可以产生规则的电流,哪还需要微控制器做复杂运算。

       隆重介绍,SVPWM,是的,它还是PWM,既然用MOS管调制就离不开PWM,它和SPWM的区别是SVPWM依靠的是MOS管的开关顺序和开关时间来调制有效电流。而SPWM不依赖开关顺序,3相独立调制。SVPWM是依赖开关顺序的,需要把控整体的3相开关,让它们组合出不同顺序和时间的开关序列,以此模拟出正弦电流。SVPWM 癿优点主要有:优化谐波程度比较高,消除谐波效果要比SPWM好,实现容易,可以提高电压利用率。比较适合数字化控制系统。

       SVPWM的主要思想是以三相对称正弦波电压供电时三相对称电机定子理想磁链圆为参考标准,以三相逆变器不同开关模式作适当的切换,从而形成PWM波,以所形成的实际磁链矢量来追踪其准确磁链圆。传统的SPWM仅电源的角度出发生成一个可调频调压的正弦波电源,而SVPWM将逆变系统和异步电机看作一个整体来考虑,模型比较简单,也便于微处理器的实时控制。

       普通的三相全桥是由六个开关器件构成的三个半桥。这六个开关器件组合起来(同一个桥臂的上下半桥的信号相反)共有8种安全的开关状态. 其中000、111(这里是表示三个半桥的开关状态)这两种开关状态在电机驱动中都不会产生有效的电流。因此称其为零矢量。另外6种开关状态分别是六个非零矢量。它们将360度的电压空间分为60度一个扇区,共六个扇区,利用这六个基本非零矢量和两个零量,可以合成360度内的任何矢量。

       当要合成某一矢量时先将这一矢量分解到离它最近的两个基本矢量,而后用这两个基本矢量去表示,而每个基本矢量的作用大小就利用作用时间长短去代表。用电压矢量按照不同的时间比例去合成所需要的电压矢量。从而保证生成电压波形近似于正弦波。

       在变频电机驱动时,矢量方向是连续变化的,因此我们需要不断的计算矢量作用时间。为了计算机处理的方便,在合成时一般是定时器计算(如每0.1ms计算一次)。这样我们只要算出在0.1ms内两个基本矢量作用的时间就可以了。由于计算出的两个时间的总和可能并不是0.1ms(比这小),而那剩下的时间就按情况插入合适零矢量。 由于在这样处理时,合成的驱动波形和PWM很类似。因此我们还叫它PWM,又因这种PWM是基于电压空间矢量去合成的,所以就叫它SVPWM了。

       SVPWM的主要特点有:

       1、在每个扇区虽有多次开关切换,但每次开关切换只涉及一个器件,所以开关损耗小。

       2、利用电压空间矢量直接生成三相PWM波,计算简单。

       3、逆变器输出线电压基波最大值为直流侧电压,比一般的SPWM逆变器输出电压高15%。


       27.1.4.1 SVPWM算法讲解

       设直流母线侧电压为,MOS管3相调制输出电压分别为U AO、U BO、U CO,其分别加在空间上互差120°的三相静止坐标系上,如图27.1.4.1.1所示:


图27.1.4.1.1 三相绕组示意图


       定义三个电压空间矢量uAO、uBO、uCO,方向分别在其轴线上,大小随时间按正弦规律变化,相位差120°,设Um为相电压基波峰值,f为电源频率则:



       在三相静止坐标系下:



       则三相电压空间矢量的合成矢量us(t)为:



       可见us(t)是一个旋转的空间矢量,它的幅值不变,为相电压峰值的1.5倍,且以角频率ω= 2πf按逆时针方向匀速旋转的空间矢量。

       由于驱动器三相桥臂依靠6只MOS管,而MOS管只有导通和非导通状态(PWM信号输入),因此三相开关全部组合有8种情况,这里定义一个开关函数Sx<x=a、b、c>,abc分别代表三相绕组,当Sa=0时,代表A相上桥臂导通,当时,代表A相下桥臂导通,其他相同理。

       那么(Sa、S b、Sc)的全部可能组合共有八个,包括 6个非零矢量Ul(001)、U2(010)、U3(011)、U4(100)、U5(101)、U6(110)、和两个零矢量 U0(000)、U7(111)。下面我们以非零矢量U4(100)为例来进行分析,即 ( Sa、S b、Sc) = (100),代表a相上桥臂导通,b相下桥臂导通,c相下桥臂导通,如图27.1.4.1.2所示:


图27.1.4.1.2  U4(100)导通情况


       此时等效电路如图27.1.4.1.3所示:


图27.1.4.1.3  U4(100)等效电路


       根据串联分压定理,得:



       剩下的三相开关组合情况同理,可得各矢量开关状态、线电压、相电压如下:


表27.1.4.1.1 各矢量线电压和相电压对比


       6个非零矢量幅值一致,均为⅔Udc,从前面已知合成的电压向量的幅值是每个相所加相电压的1.5倍。我们用SVPWM重现该合成电压向量,希望重现的合成电压向量的幅值和所加相电压的幅值完全一样,所以在这里乘以 ⅔。

       8中开关状态可将360度的电压空间分为60度一个扇区,共六个扇区,利用这六个基本非零矢量和两个零量,可以合成360度内的任何矢量。如图27.1.4.1.4所示:


图27.1.4.1.4 矢量扇区


       在每一个扇区,用相邻俩电压矢量及零矢量按照伏秒平衡原则来合成每个扇区内的任意电压矢量。



       其中,Uref为期望电压矢量;Ts为开关周期;Tx、Ty、T0分别为对应两个非零电压矢量Ux、Uy和零电压矢量U0在一个采样周期的作用时间;其中Udeact可表示U0或U7两个零矢量。上式的意义是,矢量Uref在Ts时间内所产生的积分效果值和Ux、Uy、U0分别在时间Tx、Ty、T0内产生的积分效果相加总和值相同。


图27.1.4.1.5 第一扇区


       以第一扇区为例,则有:



       令Uref和U4的夹角为θ,由正弦定理可得:



       整理得出



       求得:



       现在一个周期内所有状态的持续时间我们都得到了,还差一个顺序,也就是各个状态切换的顺序。

       以减少开关次数为目标,基本矢量作用顺序原则为:在每次开关状态转换时只改变其中一个相的开关状态,并且平均分配零矢量,使PWM对称、降低PWM的谐波分量。常用方式有7段式和5段式SVPWM。我们这里主要讲解7段式SVPWM。

       以第Ⅰ扇区为例,三相调制波形在时间段Ts时段中如下图所示:


图27.1.4.1.6 扇区1通电顺序


       图中电压矢量出现先后顺序为U0、U4、U6、U7、U6、U4、U0,各电压矢量的三相波形对应三相调制开关状态,零矢量过后Uref角度增加γ,然后重新计算T0、T4、T6、T7,每一次载波周期合成一个新的矢量,角度逐渐增大,直至超过60度,然后进入Ⅱ扇区,开关顺序切换如下:


图27.1.4.1.7 扇区2通电顺序


       然后按照Ⅱ扇区开关切换顺序合成角度递增的新的矢量,直至超过120°范围,进入下一个扇区,直至旋转360,然后依次循环。 

       通过上述推导可知,要实现信号调制,首先要知道参考电压矢量所在扇区位置,然后利用扇区相邻两个非零矢量和零矢量来合成,然后以旋转矢量为目标,在每个扇区内通过不同的开关顺序合成矢量来跟随目标旋转矢量。

       空间矢量调制第一步需要判断空间电压矢量所处的扇区,假设合成电压矢量在Ⅰ扇区,则0°<θ<60°,由tan(θ)=Uβ/Ua,可知θ=arctan( Uβ/Ua) ,所以:



       且满足:



       可求知,当合成电压矢量在Ⅰ扇区时的充要条件是:Uα>0,Uβ>0,  Uα/ Uβ<√3。其他扇区同理,可得:


表27.1.4.1.2 扇区判别条件


       由上可以看出,电压矢量扇区由三个式子决定。



       整理得出:



       进行化简,得:



       至此我们得到了每一时刻所需要的空间电压矢量以及它们持续的时间,同理可计算得其他扇区基本空间矢量的作用时间。在处理器中赋值给对应通道的捕获比较寄存器产生相应的三个PWM波形,控制MOS管的开关,进而产生我们期望的电压、电流、力矩。


图27.1.4.1.8 矢量边界


       当俩零电压矢量作用时间为0时,一个PWM周期内非零电压作用时间最长,合成空间电压矢量幅值最大,其最大值不会超过正六边形边界,否则就会过调,输出电压波形就会失真,SVPWM调制模式下能够输出的最大不失真旋转电压矢量为正六边形的内切圆,赋值为 √3/2*2/3Udc= √3/3Udc,相对SPWM最大为1/2Udc,因此SVPWM方式电压利用率高出 √3/3/1/2-1=15.47%。

       到目前为止,为了使电机旋转起来,还需要知道电机转子的位置,根据位置来合成旋转磁场矢量,使转子跟着旋转,对于一般的直流无刷电机,可以依据霍尔传感器来反馈转子位置,如果通过编码器来获取转子位置则更加精确,不过只使用编码器还需要启转前的校准,也就是找到转子对齐定子时刻的编码器位置,一般是通一段时间的小电流,将转子吸过去,然后将变化之后的编码器位置设置为零点,不过每次断电重启时都需要对齐一次,如果同时具备霍尔传感器和编码器,就可以相辅相成。而如果霍尔传感器和编码器都没有就有点麻烦了,和编码器方式一样,先通电流利用旋转磁场把转子带起来,通过电流的采集估测转子位置,转子位置采用观测器来估算,常用的有滑膜环观测器法、隆伯格观测器法、高频注入法等。

       不同电流模式下的控制策略主要有:最大转矩电流比控制(保持转矩需求的情况下调节直轴交轴电流比例使电机定子输入电流最小)、id=0控制(标贴式无刷电机常用策略)、弱磁控制(电机转速超过额定转速时通过减小直轴电流降低电枢电流从而减小反电动势以提供扭矩电流进一步加速)、cosφ=1控制(功率因数恒为1)等。

       至此,FOC的理论基础已经全部介绍完毕。下面接着介绍FOC所需的硬件平台。


        27.2 FOC硬件平台


       27.2.1 驱动板硬件电路介绍

       这部分内容跟无刷驱动板是完全一致的,所以这里不再赘述。简单介绍下驱动器板载功能,驱动器主要搭载了电流检测单元、过零检测单元、传感器反馈单元、反电动势检测单元、刹车单元等,可以有效的反馈驱动板电压、驱动板温度、三相电流及反电动势、过零信号、霍尔及编码器信号。大家如果想了解可以查看无刷专题驱动硬件介绍,更多关于ATK-PD6010B 驱动板原理介绍请查看《ATK-PD6010B直流无刷驱动板用户手册.pdf》。

       1、实物接线

       下面我们将手把手地教大家搭建FOC硬件平台,这一部分内容十分重要,大家一定要掌握。首先我们需要准备一些材料,如图27.2.1.1所示:


图27.2.1.1 硬件平台搭建所需材料


       图27.2.1.1中,不同的序号对应的材料如下:

       ① 电机开发板;

       ② 直流无刷驱动板;

       ③ 传感器接口8pin端子;

       ④ 电机插口转接板(PMSM电机专用);

       ⑤ PMSM或者BLDC电机;

       ⑥ 专用24pin排线;

       由于PMSM电机的传感器接口为DB15,所以为了方便连接至驱动板我们使用转接板进行转接(如果是BLDC电机直接按照无刷专题的接法即可)。除了之外,我们还需要准备一个符合电机工作电压的直流电源,例如我们教程中所使用的无刷电机的工作电压是24V,这里就准备一个24V的直流电源即可。

       有了这些材料之后,我们接下来就进行实物的接线。这里以开发板的直流有刷/无刷电机驱动接口1为例,接线如图27.2.1.2所示:


图27.2.1.2 实物连接图


       27.2.2 电机参数介绍

       由于BLDC以及PMSM电机都是支持FOC控制的,所以下面我们列出了关于我们店铺这两款电机的一些技术参数,如下表:


表27.2.2.1 店铺的BLDC与PMSM电机参数


        27.3 FOC开发工具

       相信经过前面的学习,大家已经对FOC的理论基础部分有了一定的了解,但是想要实现FOC算法部分还是有一定的难度,所以我们可以借助ST提供的FOC开发套件——“X-CUBE-MCSDK”,来帮助我们生成FOC控制代码 。

       X-CUBE-MCSDK:ST推出的电机控制软件开发套件。其中包括永磁同步电机(PMSM)固件库(FOC控制)以及STM32电机控制工作台(用于配置FOC固件库参数)。如下:


图27.3.1 X-CUBE-MCSDK组件


       其中FOC驱动库就是FOC的核心算法实现,MCWorkbench为一款PC软件,用于配置FOC固件库参数。


       27.3.1 Motor Control Workbench简介 

       Motor Control Workbench是一款PC软件,它可以大大减少STM32 PMSM FOC固件配置所需的设计工作量和时间。用户通过GUI生成项目文件,并根据应用程序的需要,初始化对应的库。而且可以对所使用算法的某些变量实时监控和更改。


       27.3.2 Motor Control Workbench获取与安装

       前面介绍了很多,接着我们开始来安装FOC开发所需的这些软件,首先安装“Motor Control Workbench”软件。它的软件安装包获取方法有两种:

       1、在ST的官网:https://www.st.com中直接搜索关键词“MC SDK”,如下图27.3.2.1所示:

       2、可在光盘直接找到软件并安装,路径:“A盘\5,软件资料\3,MCSDK”。


图27.3.2.1 搜索结果


       可以看到上图共有两种版本: X-CUBE-MCSDK 和 X-CUBE-MCSDK-FUL,其中 X-CUBE-MCSDK 在一些核心的算法使用 lib 的形式提供给用户,可以直接下载; X-CUBE-MCSDK-FUL 则是完整的源码,需要官方验证用户信息后才可下载。我们资料已提供完整版文件X-CUBE-MCSDK-FUL,路径“电机A盘\5,软件资料\3,MCSDK”中获取。安装过程很简单双击X-CUBE-MCSDK-FUL_5.4.4.exe 的安装包,之后只需要一直点击下一步即可。注意安装路径一定不能有中文!!! 

       安装完成后会在桌面生成 MotorControlWorkbench 5.4.4 和 Motor Profiler 5.4.4 两个软件, 其中Motor Profiler 5.4.4 是用于自动测量电机参数的软件,不过该软件针对的是使用 ST 相关的主板和电机驱动板,这里就不介绍该软件的使用方法。 MotorControl Workbench 5.4.4 才是我们需要的软件,可以使用该软件配置电机驱动板等参数后并生成源代码。

       完成了X-CUBE-MCSDK-FUL的安装,接着我们还需要安装STM32CubeMX,因为使用X-CUBE-MCSDK-FUL配置完之后,在生成代码时需要使用到STM32CubeMX。


       27.3.3 STM32CubeMX的获取与安装

       由于CubeMX是运行在JAVA环境下的,所以安装CubeMX之前需要先安装JAVA(JAVA8及以上版本)。对于Java运行环境,大家可以到Java官网 下载最新的Java软件,也可以直接从我们光盘复制安装包,路径是“A盘\5,软件资料\4,JAVA”,双击“chromeinstall-8u77.exe”即可进行安装:


图27.3.3.1 java安装包


       这里大家需要注意,STM32CubeMX的Java运行环境版本必须是V1.7及以上,如果你的电脑安装过V1.7以下版本,请先删掉后重新安装最新版本。

       对于Java运行环境安装,我们这里就不做过多讲解,大家直接双击安装包,根据提示安装即可。安装完成之后提示界面如下图27.3.3.2:


图27.3.3.2 Java安装成功提示界面


       安装完Java运行环境之后,为了检测是否正常安装,我们可以打开Windows的命令输入框,输入:java –version 命令,如果显示Java版本信息,则安装成功。提示信息如图27.3.3.3所示:


图27.3.3.3 查看Java版本


       JAVA环境已经安装完成以后就可以安装CubeMX,可以选择在线下载或者使用光盘软件资料的安装包直接安装,官网下载地址:  https://www.st.com/en/development-tools/stm32cubemx.html?sc=stm32cubemx ,资料盘路径:“A盘\5,软件资料\2,CubeMX”,双击“SetupSTM32CubeMX-5.5.0.exe”即可进行安装:


图27.3.3.4 CubeMX安装包


       至此已经完成CubeMX软件的安装。注意:请确保上述的三个软件安装路径均没有中文以及特殊字符!!


        27.4 FOC例程创建

       打开ST Motor Control Workbench软件,然后点击新建一个电机控制工程,如下:


图27.4.1 新建工程


       选择应用类型,单/双电机控制以及硬件类型等,如下:


图27.4.2 选择应用类型


       针对不同负载类型的FOC可选应用类型,可选通用、泵、压缩机、空调、洗碗机、风扇、无人机,作为示例,我们直接选择通用类型即可。主设计界面如下:


图27.4.3 主界面


       然后根据无刷驱动板输入电源范围设置母线电压,如下:


图27.4.4 设置母线电压


       然后修改控制器型号,板载芯片是STM32G474VET6,但是这里并没有对应芯片型号,所以选择型号较接近的即可,即STM32G474QE,如下:


图27.4.5 修改MCU


       要注意的是,外部晶振这里只能选择24M,但是板载的外部高速晶振为8M,后续需要在CubeMX中修改。接着点击电机参数配置,不同电机参数不同,需根据电机手册的参数填写,我们店铺的PMSM/BLDC电机技术参数可查看27.2.2小节。


图27.4.6 电机参数设置


       传感器设置如下,这里使用的是霍尔传感器,大家可根据自己的电机硬件(传感器类型)选择编码器或者霍尔传感器,勾选对应选项即可。如需使用无感控制,则都不勾选。注意本店铺的PMSM电机内置霍尔传感器以及编码器;BLDC内置霍尔传感器。


图27.4.7 传感器设置


       以霍尔反馈方式为例,速度反馈使用霍尔传感器采集,则速度传感器设置如下:


图27.4.8 速度反馈设置


       MOS管设置,高电平有效,三相驱动配置完全一致,如下:


图27.4.9 MOS管设置


       MOS管最大开关频率和死区时间设置如下:


图27.4.10 MOS管频率设置


       母线电压检测设置,根据无刷电机驱动板原理图设置如下:


图27.4.11 电压检测设置


       温度传感器及保护设置如下,由于此设置只针对ST的温度传感器,所以直接默认设置即可。


图27.4.12 温度保护设置


       电流传感器设置,需根据驱动板的电流采集硬件电路设置对应参数,我们驱动板使用的是0.02Ω的采样电阻,差分电路的放大倍数为6倍,所以设置如下:


图27.4.13 电流传感器设置


       电流采集运放可按照驱动板参数设置,Calculate选框主要协助计算放大倍数,鉴于我们已知放大倍数,所以我们直接填写倍数值即可,Calculate选框可以不设置,默认参数如下:


图27.4.14 运放设置


       接着设置过流保护功能,如下图设置:


图27.4.15 过流保护设置


       右击Fireware Driver Management选择驱动设置,设置驱动参数设置如下:


图27.4.16 驱动设置


       控制模式选择速度模式作为演示,PWM频率选择16KHz,左下侧速度环PID参数是我们测试过的数据,运转情况良好,为了直接生成即可运行我们就直接输入调试测试过的PID参数。接着设置电压保护如下:


图27.4.17 电压保护设置


       数字输入输出设置根据开发板连接关系进行选择,以电机接口1为例,PWM使用定时器1,霍尔传感器使用定时器5,调试串口使用串口1,使用按键KEY2用于启停开发板,相应管脚设置如下:


图27.4.18 数字输入输出接口设置


       电流采集模拟接口设置如下:


图27.4.19 电流采集设置


       电源电压采集模拟接口设置如下:


图27.4.20 母线电压采集设置


       温度采集模拟接口设置如下:


图27.4.21 温度采集设置


       DAC设置用于调试时候观测FOC数据,例如将电机的电角度、交轴电流通过DAC方式输出,这样就可以使用示波器实时观测数据的变化,一般无需使用时直接选择不用即可,如下:


图27.4.22 DAC设置


       配置完之后,就要检测IO分配是否有误,点击选项 ,IO分配无误后显示check ok。如下图:


图27.4.23 引脚检测


       最后就可以保存工程,注意路径不能含有中文。


图27.4.24 保存工程


       点击 按钮,生成CubeMX工程,第一次点击生成,选择编译器平台,后续在该工程下进行的修改只需要更新即可:


图27.4.25 生成过程


       开始生成工程,如下:


图27.4.26 工程生成中


图27.4.27 工程生成完成


       生成结束后可以打开CubeMX添加自己的设置,由于无刷驱动板默认不输出,因此需要通过CubeMX打开SHUTDOWN引脚,并配置为输出功能;另外还需要修改系统时钟配置部分,因为我们板载的外部高速晶振是8M的,并且配置为170M的系统主频。点击RUN STM32Cube…打开CubeMX,设置关断引脚,如下:


图27.4.28 使能关断引脚功能


       直接将SHUTDOWN引脚默认状态设置成拉高,即使能SHUTDOWN引脚,半桥芯片可正常输出,然后接着修改系统时钟配置:


图27.4.29 系统时钟配置


       将外部高速晶振修改为板载的8M,并配置系数使系统主频配置为170M,然后点击保存即可:


图27.4.30 保存CubeMX工程


       点击CLOSE关闭生成完成窗口,重新回到MCWorkbench,点击 按钮,生成工程,由于工程文件已经存在,为了避免覆盖用户配置,直接点击UPDATE更新即可。


图27.4.30 更新工程


       更新完成后关闭窗口,打开前面保存项目路径的文件夹找到MDK工程并打开,可直接编译,会发现编译后会提示一个报错:在stm32g4xx_hal_msp.c文件中的函数HAL_PWREx_DisableUCPDDeadBattery未定义,解决方法就是直接将该函数屏蔽即可。如下图:


图27.4.31 编译报错图


       按照上述操作后重新编译,即0错误,0警告,此时可直接将程序下载进开发板。

       要注意的是,上述配置是以电机的霍尔传感器反馈位置的配置截图,如果是以编码器反馈位置,配置几乎一样,只有两部分的配置需要修改,具体修改如下图所示:


图27.4.32 编码器反馈位置修改步骤一


图27.4.33 编码器反馈位置修改步骤二


       编码器与霍尔的区别只需要修改上面两步骤,其余步骤与前面霍尔传感器的配置基本一致!代码成功生成且按上述步骤修改后,可直接下载到开发板进行验证!


        27.5 FOC下载验证

       编译上述创建好的FOC控制工程并下载程序到开发板,连接开发板和驱动板及电机。由于永磁同步电机传感器接口为DB15接口,可以使用转接模块连接,比较方便,实物连接如下。


图27.5.1 FOC验证实物连接图


       将开发板串口1用USB线连接至电脑:


图27.5.2 串口连接至电脑USB


       打开上位机的监控功能,如下:


图27.5.3 打开监控界面


       选择正确的串口号并点击插头按钮连接到开发板,如下:

 

图27.5.4 连接开发板


       此时显示已连接状态,并且显示MCSDK版本,由于未连接驱动板电压,这时左侧状态栏可能会报低压警告,给驱动板通电并且点击右侧的Fault Ask按钮即可消除警告。

 

图27.5.5 串口连接成功


       点击右侧的Start Motor按钮即可启动电机,电机开始旋转,拖动界面中间的圆形旋钮即可调节转速,同时可以看到测量到的母线电压、温度、实际转速等信息。通过板子上的KEY2按键也可以控制电机的启动和停止。

 

图27.5.6 FOC运转

 

图27.5.7 电机运行情况


       点击 按钮可以打开折线图窗口,用于观测速度变化,如下:

 

图27.5.8 速度监控折线图


       如果需要进一步调节PID,可以点击Advanced按钮切换到参数调整,如下:

 

图27.5.9 参数调整界面


       修改好PID之后可以点击 按钮把参数上传到开发板,观测运行效果。如果使能了DAC输出,还可以选择DAC设置,默认是输出a和b电流。


        27.6 ST MCSDK 库源码 介绍

       以5.4版本的MCSDK库为例,源码目录如下:

 

图27.6.1 电机库总目录

 

图27.6.2 SDK源码目录


       其中MCLib文件夹存放的是核心程序,其目录下有两个目录,如下:

 

图27.6.3 MCLib目录


       其中Any文件夹存放的是公共核心程序,G4xx文件夹存放的是G4系列的单片机和硬件相关的驱动源文件,如果是以F1单片机则会生成F1xx的文件夹,Any文件夹中包含Src和Inc文件夹,分别存放核心算法的源文件和头文件,源文件内容如下:

 

图27.6.4 MCSDK核心程序源文件


       头文件如下:

 

图27.6.5 MCSDK核心程序头文件


       G4xx目录同样分为源文件和头文件目录,内容如下:

 

图27.6.6 MCSDK核心程序G4相关源文件


       SystemDriveParams文件夹用于存放驱动参数,没有相应改动的话一般为空。UILibrary文件夹同样分为源文件、头文件目录,源文件如下。源文件主要功能是方便上位机或者用户和SDK通信,早起版本是支持屏幕交互的,也可能是此原因保留了文件夹命名为UILibrary。

 

图27.6.7 MCSDK通信相关源文件


       学习SDK最好的方式便是阅读帮助文档,通过ST MC Workbench打开帮助文档的方法如下:

 

图27.6.8 MC Workbench帮助文档


图27.6.9 SDK文档


       文档详细描述了SDK的文件构成、API介绍等内容,对于学习SDK有帮助。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3117396/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    763863