最近在学习和电机驱动有关的知识,其中涉及了PWM控制脉宽周期以及输出电压电流,FOC驱动算法,H桥驱动电路,PID控制......信息量过大,在此记录一下以防忘记,学习主要参考正点原子官网的电机资料以及下面的一些链接
【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术 - 知乎 (zhihu.com)
PWM 驱动电路的结构 - 知乎 (zhihu.com)
peng-zhihui/Dummy-Robot: 我的超迷你机械臂机器人项目。 (github.com)
TB67H450FNG (szlcsc.com)
克拉克变换(Clarke Transformation)
这是一块由东芝出品的基于PWM输入的斩波型直流有刷电机驱动器(对于两相步进电机也适用),额定输出电压为50V,有前进/倒挡/刹车/停车四种模式,允许大电流驱动,
宏观上的四种模式由这两个输入口决定,特别注意的是当IN1和IN2均为低电平进入休眠模式后过1ms会进入准备状态
而从准备模式进入工作模式也有30微秒的延时
我们先看一下宏观逻辑图
特别强调一点,由于电机线圈是电感类元器件,因此在工作时会涉及能量的循环利用,为此设计者配置了三种不同的模式来利用这部分能量,这在后面会提到
明白了逻辑后我们再看引脚图就会清晰很多
这里的输入信号即为单片机发出的PWM信号,在提PWM之前我们先来看看斩波电路
简单来说,斩波电路就是将恒定的输入信号转换为目标信号的电路,通常为DC-DC,大致原理为:将连续的信号斩断成一节一节的脉冲信号,斩波电路一般有降压斩波电路、升压斩波电路、升降压斩波电路、Cuk斩波电路、Sepic斩波电路、Zeta斩波电路,我们来简略介绍一下前三种
我们看左边的电路图,Ui为电压源,U0为负载电压,V是一个可控开关,当V导通时,负载电压等于电压源电压,当V断开时,二极管D续流,此时U0为0,因此在一个单位周期T内,负载的电流等于Ui*α,其中α为占空比,即一个周期内V导通的时间Ton/T
因此我们不难得出,U0的最大电压只能为Ui,此时α=1,如果减小占空比单位负载电压也会随之减小,故称该电路为降压斩波电路
和之前的配置差不多,当V为导通态时,Ui会持续给电感L1充电,同时给C1充电,C1再给U0充电,当电路处于稳态时,电感在一个周期内吸收到的能量为Ui*I1*Ton
当V断开时,电感和电压源一起给U0充电,此时电感的电压为Ui-U0,由于稳态系统能量守恒,
Ui*I1*Ton = (Ui-U0)*I1*Toff
不难得出U0 = (T/Toff)*Ui,因此无论何时T/Toff >= 1,故称之为升压斩波电路
根据图中信息我们可以得知,当V导通时电压源Ui给L1充电且给U0充电,当V断开时电感给U0充电且方向与Ui相反,因此易得U0 = (Ton/T-Ton)* Ui,因此当占空比0<α<0.5时为降压电路,反之为升压电路
现在我们知道PWM信号控制的是输入信号的占空比进而控制斩波电路的输出信号,那么我们在之前步进电机原理部分学习到,电机线圈上的电流每发生一次换向电机转子移动一个步距角,用于改变电机电流方向&大小的方法即为----H桥
先不急着看这些衰减模式到底有何作用,我们就从最左边的图来分析H桥,该电路简单来看就是由四个MOS管开关组成,将输入的交流信号转换为直流信号,或者将直流信号转换为交流信号,通过开关的在时间节点上的关断实现,不难理解,我们来聊聊衰减模式
快速衰减就是断开加在电机绕组线圈的电压,同时将其内部储存能量释放给其他用电器,由于
Q = I*R^2*T,含有电阻元件的用电器消耗能量快,进而衰减速率快,因此称为快速衰减
和上面形成对比,在慢速衰减模式下,断开加在电机线圈绕组的电压,同时将电机绕组正负极相接,由于绕组没有电阻元件,此时能量消耗较慢,称为慢速衰减
一般根据电机的转速来选择衰减方式:转速高进快速衰减,转速低进慢速衰减,高速衰减会出现震动大有噪声的情况,慢速衰减会导致电机转矩不够进而定位不准
导致上述现象的原因为,快速衰减时PWM信号断开,再到重新启动的过程中会存在一个较大的死区,信号需要从0加载回目标值,而慢速衰减时会有一个大的电流信号无法流向其他负载而是直接流向H桥,严重可能导致烧坏,所以我们一般采用混合衰减模式,高速用快速衰减,降到低速换回慢速衰减
相信大部分学过自控的朋友都有涉猎过,三个参数P(比例)I(积分)D(微分),我简单带过一下全局PID算法
通俗地说就是目标值和测量值之间存在误差Δ,我们就用P*Δ去逼近目标值,有时候这个逼近的过程太慢或者出现稳态误差(在未到达目标值之前系统就收敛)
我们就需要引入积分项I令其乘上累计误差,我们用I*Δ + P*Δ即为比例积分输出,但有时候可能会出现响应过快的情况(超调)
此时我们就需要引入第三个参数:微分项D,其计算公式为D*(Δi - Δi-1),此时输出的计算公式就可以称为一个完整的PID系统
在提FOC之前,我们先来看看FOC的一般应用场合----直流无刷电机(BLDC)&永磁同步电机(PMSM),在之前也提到了步进电机的内部组成,广义地说,步进电机也能算是无刷直流的一个子集,电机驱动都离不开MOS管开关
那么BLDC的驱动原理也应该和步进电机类似----控制加载在电机绕组上的电流值来精准控制电机转子的转动,那么只是普通的给绕组电流肯定是不够的,之前提到了电机驱动软件细分的原理就是通过PWM持续发送离散的正弦信号给线圈进而控制电流,这样能够使电机输出的转动更为丝滑,个人拙见认为FOC与其有异曲同工之妙
拿三相电机举例,如果我们想让转动时的精度最高,效果最好,那么不难得出我们要尽可能地控制电机输出的三个相信号之间要存在120°的相位差(360°/3),为此,FOC便诞生了
补充一下BLDC的驱动原理----三相逆变电路,和H桥类似,只不过这里用了三组半桥MOS管组成电路,通过按一定顺序控制MOS管的关断就可以控制三组绕组按一定次序的工作,注意这里的MOS自带了二极管,其目的是为了后面利用电机绕组电感产生的电流
但我们知道如果输入给驱动器的信号大小不变的话,绕组产生的力也不变且转子转动的角度不好控制,为此我们就要引入FOC算法,在那之前我们要先介绍FOC中的一些数学知识----Clark变换&Park变换
当我们用手转动PMSM的输出轴时,通过示波器我们可以观测到输出的信号为三组正弦波
我们已经知道了三相逆变电路的工作流程,不难想象当电机稳定工作时传感器能采样到的电流应该如下如图所示(相位差120°)
那么如果我们反过来给电机三组正弦波信号,电机就能匀速丝滑的转起来,但是作为一个系统来说,这个系统是非线性的,运算量过大,因此我们需要利用数学工具来线性化系统
创建一个三维CUBE并将其投影到二维平面
投影的图像方向与a',b',c'相同,我们需要乘上一个比例系数K1,以a为例,a在二维平面上的电压大小会变为Ua = K1*Ua’*sinθ
在经过三维->二维的变换后,我们现在只需要通过一组正交基就可以表达三相信号
为了防止产生相位差,我们令α坐标与a'重合,此时α = K2*α,K2为新的比例系数,利用三角函数以及矢量合成可以得出最终Uα和Uβ分别为
这样一个Clark变换就算初步完成了,但还需要做一些调整
我们假设在变换前电机三相绕组数为N1,变换后电机二相绕组数为N2
从下图公式可以看出,当a与α同方向时,Umax = 3/2Ua,根据幅值不变原理,我们需要在最终得到的结果前乘上2/3
故N1/N2 = 2/3
利用齐次方程组表示为
再利用基尔霍夫电流定律(KCL)可以求解方程最终解
于是我们便成功地将三个正弦波转换成了两个正弦波
但两个正弦波直接并不是线性无关的,还没有完全解耦,控制起来难度还是很大,所以接下来就要引入Park变换
Park变换简单来说就是将静态的坐标系变为动态的,变换后的坐标系会随着转子一直持续转动,这样就能得到最终解耦出的信号,分别为励磁分量和转矩分量,其中励磁分量从狭义上来讲就是通过电机绕组的电流量,这两个分量始终相互垂直,线性无关
简单地说,Park变换就是通过变换矩阵改变坐标系的位置进而实现解耦,和机械臂中的空间变换矩阵有类似的效果
具体计算即为下面这个简单的变换矩阵
经过Park变换后,坐标系始终与运动中的电机转子保持同步,这个向量最终变成了一个定值,两个控制变量都完成了线性化
因为我们要尽可能地减少励磁效应带来的电流误差,我们要尽可能得到精确的力矩分量
但最后我们还需要进行逆Park变换,这是为什么呢,因为三相逆变电路的输入信号是SVPWM,该信号计算需要用到静态的坐标系,因此在我们经过PID闭环处理后需要进行一次逆Park变换交给SVPWM处理
在介绍SVPWM之前,我们要先提一下空间矢量电压的概念,直观地说就是在三相线圈上的电压值按照矢量合成的结果
在三相电路中,各相位电压的表达式如下,其中Um为输入的最大电压,而最右侧的式子是经欧拉公式转换得到的
经过了Park逆变换后,动态坐标系变为静态,此时角速度为0,经过简化得到最终的合成矢量电压
由结果可以看出得到的结果为一个旋转的空间矢量,它的幅值不变,为相电压峰值的 1.5 倍,且以角频率 ω= 2πf 按逆时针方向匀速旋转的空间矢量
我们知道三相电路的六个半桥MOS管能够产生8种输出(2^3),全部可能组合共有八个,包括 6 个非零矢量 Ul(001)、U2(010)、U3(011)、 U4(100)、U5(101)、U6(110)、和两个零矢量 U0(000)、U7(111)
举个例子,当我们MOS管状态为100时,A相上半桥导通,B,C相下半桥导通,等效电路如下
不同的输入产生不同的电压值
这些不同的MOS管状态就产生了不同的相位扇区
因此我们可以用这六个扇区的矢量电压以及两个零电压来表示所有的电压值,公式的直观解释就是控制单位时间内不同电压的占空比来控制最终的输出电压
下面给出公式推导
最后我们就可以求得每个扇区所占用单位周期的比重(脉宽调制比)
在做完这些操作以后,我们还需要做最后一步,那就是设计MOS开关的顺序,为了减少资源消耗,我们要尽可能地让每次状态切换只产生一个相位的改变,因此就需要用到七段式SVPWM调制法
最终,在经过这样有序的周期性SVPWM输出调节后,我们的电机总算能够稳定且丝滑地被驱动了
总结一下驱动的整体流程,我们要先通过力矩环即电流环来实现对Iq&Id的控制,然后进入速度环进行控制,利用编码器读取电机输出的脉冲信号计算速度,将速度环的输出传递给电流环作为输入,这样就形成了双闭环控制,亦或者我们可以将速度环直接替换成位置环,这在机械臂运动中应用性更好
闭环部分介绍完了就该介绍FOC部分了,我们先将三相信号经过Clark变换变为‘二相’信号,再经由Park变换变为线性信号传给PID闭环,然后再逆Park变换回静态坐标系给SVPWM部分做静态矢量计算,将要控制的脉宽系数传递给三相逆变驱动,最后成功驱动电路