​    正是为了避免上面的情况发生所以才有了**死区**时间的概念死区时间是PWM输出时为了使H桥或半H桥的上下管不

​    正是为了避免上面的情况发生所以才有了**死区**时间的概念死区时间是PWM输出时为了使H桥或半H桥的上下管不会因为开关速度问题发生同时导通而设置的一个保护时段所以在这个时间上下管都不会有输出, c.位置环 ​        由于去掉了速度环这里的位置环我们使用**完整的PID**控制即把微分项加上因为位置的微分就是速度这样可以减小位置控制的震荡加快收敛积分项的作用是为了消除静态误差,这样的转换就称为Clack变化但是这两个还是正弦波形还是不好做跟踪不好做处理最理想的跟踪变量是什么呢肯定是直线了下面我们沿着Clack变换继续进行处理, a.电流环 从上图可以看出我们上面的一系列的操作运算如clack变换和pack变换最后输出的Iq和Id的值也就是主要对采样的正弦电流进行解耦分解成径向和切向这两个方向的变量 - 其中 Iq是我们需要的代表了期望的力矩输出 - 而 Id是我们不需要的我们希望尽可能把它控制为0   **由上图可以知道经过FOC的控制目标就是将Id的电流尽量减小到0因为其对电机的转向是没有任何帮助的所以我们尽量让其控制到0** b.速度环 w是电机的转速反馈可以通过电机编码器或者霍尔传感器等计算得到依然是使用**PI控制**。

​        我们将U4和U6分和Uref别投影到α和β轴上那么就会出现如下恒等式 那么由左侧和右侧等式可以得出如下公式 其中比例系数为*K* √3*Ts*/Udc 该是个固定的值,0, 4.Pack变换 在上面的Clack的输出中得到了**α-β坐标系** , ps: ​    在上面的H桥驱动电路上桥臂和下桥臂在同一时间只有一个能打开这是为什么呢因为两个同时打开就短路了,** 也就是说我们**通过电流反馈来控制电机电流扭矩** - 然后**通过控制扭矩来控制电机的转速** - 再**通过控制电机的转速控制电机位置**,经过这一步的变换我们会发现一个匀速旋转向量在这个坐标系下变成了一个定值**因为参考系相对于该向量静止了Id和Iq相对于D-Q坐标系**这个坐标系下两个控制变量都被线性化了 接下来如果我们以 Iq和Id  这两个值作为反馈控制的对象那么显然就可以使用一些线性控制器来进行控制了**比如PID** 5.PID控制 PID是在控制领域最常用的算法之一这里不做过多的介绍只介绍一下PID在FOC控制系统当中的应用 在FOC控制中主要用到三个PID环从内环到外环依次是**电流环**、**速度环**、**位置环, 注意这里的w转速并不是瞬时的速率而是测了一段时间取平均值的速率因此若是在低速的情况下速率环就不那么适用了因为平均测速法会存在非常大的误差转子不动或者动地很慢编码器就没有输出或者只输出1、2个脉冲,此时若转子受到牵引转动了θ角与此同时电磁铁也按照同方向转动了θ角那么电磁铁的方向始终和转子的方向垂直这样转子就会不断的进行旋转了并且力矩始终是最大的这就好比下图**毛驴一直跟着胡萝卜的位置进行转动但是毛驴和胡萝卜的位置确不会被改变** 现在我们已经知道我们需要的是什么了**那就是一个旋转任意角度的磁场并且大小可控**但是由上面描述三相线圈只能生成6个方向的电压矢量(电压矢量的方向和磁场方向相同)那么如何根据这6个电压矢量合成任意角度的电压矢量(磁场方向)呢这就是SVPWM要干的事情了 3.SVPWM SVPWM空间矢量脉宽调制(Space Vector Pulse Width Modulation) SVPWM的基本思想就是根据上面6个磁场方向的来合成任意角度的磁场方向 a.矢量的合成 初中数学的知识回顾如下 我们想产生01的矢量其实可以看作是 1可以看作周期T的时间内有T这么长时间作用在X轴上Y轴作用时间0 我们想产生10的矢量其实可以看作是 我们想产生0.50.5的矢量其实可以看作是 其中这里0.5可以看作周期T的时间内有0.5T的时间作用在X轴上也有0.5T的时间作用在Y轴上 根据上面的例子我们可以固定这样的表达式 ​ 那么若是想产生(0.25,所以这种情况是不允许发生的, 上面仅限于第一区域的计算公式其他扇区的公式不进行推倒直接给出结论 这样我们拿到FOC的输出结果Uα、Uβ然后执行如下步骤 ​    1.根据该值判断合成的矢量所在的扇区 ​    2.然后利用对应扇区的公式计算Tx、Ty、Tz等值然后进行变换后设置到PWM控制器的比较值中即可产生我们想要的波形从而产生定向的磁场方向 这样就能完成电机的矢量控制, 这里我们以第一扇区为例当前需要合成的角度为θ对应的基向量分别为U6和U4如下 由上图可以看出通过U4和U6显然是能够合成Uref的将要生成的Uref向量分别投影到U6和U4上由正玄定理(**各边和它所对角的正弦值的比相等**)可以得出如下恒等式 (T6/T)*U6可以理解为要产生Uref这个电压U6要产生多少电压 因为|U6||U4|2Udc/3(Udc是供给电压由欧姆定律计算得出)因此可以得出如下T4和T6的时间 其中参数m表示为SVPWM的调制系数(调制比) 上面已经描述过因为我们需要根据需要控制幅值因此需要零矢量的参与因此零矢量的时间为 总时间T减去T4和T6的作用时间 ​        这里为什么是1/2是因为我们要插入两个零矢量所以时间要平分给两个零矢量那么为什么要插入两个零矢量呢只用一个零矢量可以吗 ​        理论上是可以的但是会对MOS管的开断会产生较大的影响影响MOS管的寿命所以我们希望尽量减少MOS管的开关次数因此目前设计出了7段式SVPWM的调制法如下 解释一下该图的参数A、B、C代表的是H桥驱动电路上的控制端信号 ​        同时我们通过在合理的位置插入两个零矢量并且对零矢量在时间上进行了平均分配以使产生的PWM对称从而有效地降低了PWM的谐波分量,0.25)和向量(0.5,玩过四轴的都比较清楚在四轴飞行器中一般采用电调的驱动方式那么电调和FOC直接有什么优缺点呢电调比较适用于电机告诉旋转的场景而对低速的控制确实乏力而FOC无论在高速还是低速的场景下都适用 ​        FOC用途之一比如下面的狗子 ​                https://www.youtube.com/watch?vNIjodHA78UEfeatureyoutu.be 一. 电机的旋转原理1.电机旋转的基本知识 ​        磁铁的分N和S级同性相斥异性相吸的原理那么将两个磁铁放在一起会出现什么现象呢如下图若拖动下方的磁铁进行旋转那么由于磁场的原因上方的磁铁也会跟着进行旋转 ​        那么两个磁铁在何时力矩(力矩在物理学里是指作用力使物体绕着转动轴或支点转动的趋向)最大呢如下图当两个磁铁呈直角时力矩最大(可以简单的认为相互作用力最大), 同理可以得出其他扇区的切换顺序如下为什么有这样的顺序呢**对应到MOS管的开关上来看就是每次状态的切换只要一个MOS进行切换极大的降低了MOS管的损耗** ​       重新回到上面的T4和T6的公式中得出的公式如下       其中 因此到这里SVPWM的工作完成了我们得到了每一时刻所需要的空间电压矢量以及它们持续的时间在处理器中赋值给对应通道的捕获比较寄存器产生相应的三个PWM波形控制MOS管的开关**进而产生我们期望的电压、电流、力矩,0.5)方向相同但是赋值不一样但是总时长加起来还是1 **可以得出一句话就是幅度要低拿0来抵上面的000和111状态派上了用场**, ​         那么如何控制上方线圈产生的磁场的大小呢 转换来看也就是如何控制加在线圈两侧的电压的大小呢 这里可以使用方波来控制MOS管的导通如时间周期T在T/2时间打开A和B剩下的T/2关闭A和B这样的话就相当于0.5VDC的电压加载到线圈上了(若是T时间均打开 那么线圈上的电压就是VDC)线圈上的电压可能是0~0.5VDC之间不断的跳动但是线圈的电流是接近连续的因为这是电感如下图若是电压变动很快并且电感足够大理论上是可以做到电流连续的 由上面的H桥驱动电路可以知道一个H桥由4个MOS管构成那么若是三个线圈就需要12个MOS管构成这样非常的浪费**这也是为什么要将三个线圈连在一起组成星链结构的原因**, 这个操作是可行的因为我们会通过编码器输入转子的实时旋转角度所以这个角度始终是一个已知数,若是将该坐标系旋转θ角如下 经过旋转后Q-D坐标系可以表示成如下 Q和D可能很熟悉那就是分别对应电机的Q轴(交轴)和D轴(直轴)θ就是转子转动的角度也就是d-q坐标系是始终随着转子进行转动的, b.SVPWM中的电压矢量合成 在这里我们可以认为电压矢量方向和磁场方向相同(**因此本节也可以理解为磁场方向的合成**) 矢量控制就是要通过6个方向的空间矢量电压作为基向量来合成任意矢量基向量的选择是选择当前扇区的两个基向量, 到目前为止FOC控制无刷电机的驱动方式已经基本讲解完了有了以上的内容就能够非常妥善的控制电机运转但FOC还有一部分内容那就是能量回收该部分放到以后进行分享~ 三、参考文章 https://zhuanlan.zhihu.com/p/147659820 https://zhuanlan.zhihu.com/p/104546205 https://zhuanlan.zhihu.com/p/145551966 https://zhuanlan.zhihu.com/p/152144886 STM32参考程序 https://blog.csdn.net/qlexcel/article/details/95227991 SVPWM https://blog.csdn.net/qlexcel/article/details/74787619#comments_15223680 一些开源的项目 https://odriverobotics.com/ https://docs.simplefoc.com/ https://stanfordstudentrobotics.org/pupper MIT的机器狗的参考code https://os.mbed.com/users/benkatz/code/Hobbyking_Cheetah_Compact_DRV8323//file/6cd89bd6fcaa/FOC/ , 可以看到控制器的输入是最左边的 Iq_ref 和 Id_ref 两个变量经过PID控制器进行反馈调节其中还涉及到几个变换模块**有Park变换和Clark变换**最后通过前面提到的SVPWM模块作用到三相逆变器上进而控制电机而PID控制器的反馈量是对电机输出电流的采样值, 当将上面两个磁铁中下方的磁铁换成电磁铁电磁铁是物理不旋转而是形成的磁场的进行旋转那么是不是与上方的效果一样带动另一个磁铁进行旋转 2.电机旋转的方式 a.电磁铁的构成 单个通电线圈如下图所示由右手螺旋定理可以得出该线圈磁场的方向是向上的 ​        那么这里只有一个方向的磁场那么如何增加旋转磁场的方向呢简单的办法就是增加线圈并且线圈的朝向不同即可这里我们以三相电机为例子进行描述三相电机就是采用如下图的方式采用三个线圈每个线圈的方向间隔120度 由于减少硬件电路驱动(H桥)的数量因此一般是将三个线圈的一端进行相连接组成了三相星型结构如下图那么为什么会这样链接呢每个线圈单独供电是否可以呢当然是可以的具体原因下面会描述   b.H桥驱动电路驱动线圈 驱动线圈供电一般使用H桥驱动电路那么我们先看一下如何驱动一个线圈的如下图 ​        H桥由4个MOS管组成当 A 和 B‘ 打开时电流由左上方流入线圈经由B’流入负极也就是图上的红色箭头的方向同理打开B和A同时打开电流就是蓝色箭头的方向这样就能控制线圈产生不同方向的磁场了,SVPWM的工作就已经完成了 上面已经得到根据FOC的输出能够很轻易的得到需要设置寄存器的值以来控制电机那么下面我们来分析这个FOC是如何得到这个Uα、Uβ的  二.FOC控制原理 ​        当我们拿到一个三相无刷电机时当手转动电机然后用示波器观察电机的三根信号线能够看到输出的是三个相位相差120度的正弦波形因为电动机反过来就是发电机。

那么 H桥驱三相星链线圈 是怎么样呢如下图 定义MOS管开关状态如下 上桥开通下桥关断定义为状态1 上桥关断下桥开通定义为状态0 这样三组半桥就一共有8种组合方式编码分别为**000**、**001**、**010**、**011**、**100**、**101**、**110**、**111** c.三相线圈产生的磁场 0电流状态上面的8种组合中有000和111状态比较明显看出当在这两个状态时三相线圈是没有电流经过的这个状态我们称为0电流状态, FOC控制的整个过程是这样的 1. 对电机三相电流进行采样得到 Ia Ib Ic 2. 将 Ia、Ib、Ic 经过Clark变换得到 Iα Iβ 3. 将 Iα Iβ 经过Park变换得到 Iq和Id 4. 计算 Iq和Id 和其设定值 Iq_refId_ref 的误差 5. 将上述误差输入两个PID只用到PI控制器得到输出的控制电压 UqUd 6. 将 进行反Park变换得到 UαUβ 7. 用 UαUβ 合成电压空间矢量输入SVPWM模块进行调制输出该时刻三个半桥的状态编码值 8. 按照前面输出的编码值控制三相逆变器的MOS管开关驱动电机 9. 循环上述步骤 2.Clark变换 ​        通过电流的采样我们得到了三个相位相差120度的正弦波采集电机前的电流的作用主要是用作PID反馈以此来调整输入的误差。

sin(π/3))  -矢量 1.首先上式表示的是U4和U6方向的总电压这个电压如何计算得出来的呢 三相线圈的等效电阻如下 由上面的电路我们可以根据电路原理和矢量合并等原则算出各个方向输出的电压这里不再进行计算直接给出结论如下图 其中红框标出来的就时第一象限所需要的U6和U4的总电压 其中U4(1, FOC控制原理简介 ​        电机分为有刷电机和无刷电机这里主要描述的FOC控制算法主要是针对无刷电机的控制无刷电机用于飞行器或者四足狗、机械臂等这种高精度的环境当中, ​        因为控制常用的就是闭环控制而检测正弦波比较困难那么FOC主要做的工作就是解耦就是将复杂的信号拆解成比较容易分析的量 1.FOC控制的Pipeline 这幅图是以电流闭环控制为例的也就是让电机始终产生一个恒定的力矩也就是恒定的电流因为力矩和电流成正比, 那么FOC输出的是什么呢 因为后面会介绍所以这里直接给出结论是Vα和Vβ这个也与直轴和交轴方向相同的两个电压矢量 直轴转子N到S的方向          交轴与直轴垂直维持转子转动的方向  在电机转动的过程中交轴方向的力是维持转子转动的而直轴上的力对转动无效果因此我们应该尽力让其为0. 那么该处假定已经知道了FOC输出的Vα和Vβ那么该如何得到T4、T6、T0、T7从而更新寄存器控制PWM的输出呢 继续贴出上面讨论的在第一象限的Uref如下(Ts和上图中的T是一个意思都是表示PWM输出的完整周期时间) 电压 矢量 U4(100)和U6(110)的Uout分别是2/3Udc和2/3Udc*cos(π/3),0)2/3Udc(α方向)而U62/3Udc *e^(j\* π/3)这是个矢量表达形式我们将其变一下形 根据虚数变换公式 可以将e^(j\* π/3)   cos(π/3) j*sin(π/3)用坐标表示则就是**  (cos(π/3)  sin(π/3)这样就很清晰了其表示的是α和β轴对应的值 那么FOC输出的就是α和β轴向的值这样就能得到了上面的值,** 但上面的公式在实际的控制中并不使用因为其还是太过于复杂因为牵扯到了角度的变化该种算法是老式的SVPWM的思路那么现在是如何得到每个方向的Tx(基向量的作用时间)呢如下一节 c.SVPWM和FOC的联系 那么FOC和SVPWM是如何对接的 首先理解前后关系FOC的输出是SVPWM的输入SVPWM输出是三相电压的占空比也就是最终设置到计时器中的比较寄存器的值 ,0.25)这个方向的矢量该如何表达 这里加入了零向量这里向量(0.25。

因此上面就建立了T4、T6、T0和T7与FOC输出的Uα、Uβ的关系了,从上图可以看出我们只需要采样两个信号线另一根可以使用基尔霍夫定律得出(在任一时刻流入节点的电流之和等于流出节点的电流之和也就是说 Ia Ib Ic 0 ​        那么将三相正选波形直接作为PID那么这个过程非常的复杂因此我们这里用一些算法对其进行转换将采集的三相电流表示如下图 ​                                                 其中横坐标表示为α轴纵坐标表示为β轴那么此时将Ia、Ib、Ic分别投影到α和β轴上就能比较轻易的得到如下恒等式 ​                            经过这样的投影我们将Ia、Ib、Ic转换成了Iα和Iβ  两个变量了可能这样还不够直观我们从波形上看看到底有什么变化 从上图可以看出经过上面的变换后需要控制的变量从3个编程了2个了, 上面的8种状态除去两个0电流的状态其余6种都会产生磁场并且相应的磁场方向分别为 ​        其中橘色箭头的方向和电磁铁形成磁场方向一致但是这里我们把橘黄色箭头称呼为**电压矢量的方向**因为这里我们加载的是电压方向1图中A指向B和C由于是稳态的所以电流方向也是这个方向所以磁场方向和橘色箭头一致了右手螺旋法则,所以最终产生的磁场方向汇总如下 d.电磁场牵引转子最优的状态 在上面已经提到当电磁铁的方向和转子(永久磁铁)的方向呈90度的时候力矩最大如下图 此时转子会向着电磁铁的方向旋转,。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://acg.inmoke.com/zixun/erciyuanzixun/38971.html