matlab左移函数_matlab与运算

matlab左移函数_matlab与运算永磁同步电机控制&FOC驱动本文首先对永磁同步电机(PMSM)进行了数学建模,基于磁场定向控制方法建立了磁链方程、电压方程和力矩方程,并在之后搭建了Simulink模型,作为后续多轮协调控制的仿真框图之一。接着,基于电机磁场定向控制的原理,实现了FOC控制算法,并在已有硬件上进行了

永磁同步电机控制&FOC驱动   本文首先对永磁同步电机(PMSM)进行了数学建模,基于磁场定向控制方法建立了磁链方程、电压方程和力矩方程,并在之后搭建了Simulink模型,作为后续多轮协调控制的仿真框图之一。接着,基于电机磁场定向控制的原理,实现了FOC控制算法,并在已有硬件上进行了调试,能够正常运行,为之后控制算法的部署打下基础。   //本文PMSM建模部分主要参考自[1] 如何快速理解永磁同步电机?   PMSM数学模型   故事可以从电流的磁效应讲起:奥斯特-发现电流的磁效应;磁场强度的单位是O。1820年7月发表电流的磁效的文章,所以一开始的磁场强度是和电流强度挂钩的一个量。安培定理:在恒定电流的磁场中,磁场强度 H矢量 沿任何闭合路径 C (即环路积分)的线积分等于其所包围的电流强度的代数
\oint_C \vec{H}\cdot d\vec{r}  =  Ni 法拉第电磁感应定律的定量描述为:线圈中感应的电动势(Electromotive Force),简称EMF,与每匝线圈中磁通量的变化率以及匝数成正比
{e}=-N\frac{d{\phi}}{dt}磁通量
\phi 是磁通密度B矢量在区域内的面积分。而磁通密度的定义是由洛伦兹公式而来的:
\vec{F} = q\vec{v}\times \vec{B} 我们可以通过电荷大小、运动速度以及所受到的力来反推周围磁场的大小,这个磁场的大小就是磁通密度,也叫磁感应强度,单位是特斯拉(Tesla)。而上面提到的两个描述磁场的单位,有相应的转换关系:B-H曲线。 磁通密度B和磁场强度H是两个描述磁的量,他们不同,但有所联系。我们一般会把磁场密度B 和 磁场强度 H 的比值称为磁导率μ:
\mu = \frac{\vec{B}}{\vec{H}} 磁导率描述的是电荷感受的磁场(输出)与电流产生的磁场(输入)的比值,描述前者随着后者的响应。电荷感受的磁场,洛伦兹力,可以理解为输出;而磁场的输入——导线电流产生磁场。电流和H相关,力矩和B相关。许多文献中会用flux这个量来描述电机的输出,磁链:导电线圈或电流回路所链环的磁通量。磁链等于导电线圈匝数N与穿过该线圈各匝的平均磁通量φ的乘积,故又称磁通匝。电机方程:磁路分析——磁链方程
\vec{\mathbf{\Psi_s}} = \vec{\Psi_s}e^{j\omega_et} 电路分析——电压方程
\vec{\mathbf{u_s}} = \vec{u_s}e^{j\omega_et} 机械分析——转矩方程
\mathbf{\vec{T}_e}   其中旋转的矢量加粗表示。电机的电角度和机械角度:
\omega_e 为电角度,
\omega_r 为机械角度当极对数
p 大于1时,这样沿机械一周,电信号就会变化
p 个周期,可见,
\omega_e=p\cdot\omega_r   磁链方程   对于永磁电机而言,转子一般是永磁体,所以只对定子线圈进行磁链计算即可。电感的定义方式:
L=\frac{\Psi}{i} 即单位电流产生的磁链,电感和电阻类似,虽然是通过磁链和电流来定义和计算的,但是其本质是由磁路的物理结构决定的。电机中的磁场来源可以分成两部分,一部分是线圈是产生的,一部分是永磁产生。
\mathbf{\vec{\Psi_s}} = \mathbf{\vec{\Psi_c}} +\mathbf{\vec{\Psi_m}} =L_s\mathbf{\vec{i_s}}+\mathbf{\vec{\Psi_m}}  电压方程法拉第电磁感应定律:线圈在磁场中运动时产生的电动势,等于磁链随时间变化率的负值
e=\frac{-dΨ}{dt} 考察定子线圈中的磁链变化:
\frac{d  \vec{\mathbf{\Psi_c}}}{dt} 存在是因为线圈中电流变化,导致了
\vec{B} 变换而其引起的,其大小可用电感来表征,因此称之为感生电势或者是变压器电势;
\frac{d  \vec{\mathbf{\Psi_m}}}{dt} 存在是因为永磁体产生的旋转磁场导致了线圈有效面积 S 发生改变而引起的,因此称之为动生电势或反电动势,也可以用E来表示。线圈中总的感应电势即是感生电势和动生电势之和。
\mathbf{\vec{u}}=R\mathbf{\vec{i_s}}+\frac{d\vec{\mathbf{\Psi_s}}}{dt}=R\mathbf{\vec{i_s}}+\frac{dL_s\mathbf{\vec{i_s}}}{dt}+\frac{d\mathbf{\vec{\Psi}_m}}{dt} =R\mathbf{\vec{i_s}}+L_sj\omega_e\vec{i_s}+j\omega_e\vec{\Psi}_m
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   上图很好的展示了定子中的电压旋转矢量合成,分为感生电动势
jX_s\vec{\mathbf{i_s}} 和反电动势E,以及电阻分压   力矩方程   尝试从能量守恒的角度来推导力矩方程。电机,本质是一个能量转换装置,对于电动机来说,就是将电能转换成机械能。在复平面域,计算出的功率称之为复功率。
matlab左移函数_matlab与运算= \vec{\mathbf{u_s}}\cdot\vec{\mathbf{i_s}^*}” eeimg=”1″> 总功率=热损耗+有效功率。i*是i的共轭复数。
matlab左移函数_matlab与运算}& =\left( R_s\vec{\mathbf{i_s}}+j\omega_e \vec{\mathbf{\Psi_s}} \right)\cdot\vec{\mathbf{i_s}^*}\\ & = R_s\vec{\mathbf{i_s}}\cdot\vec{\mathbf{i_s}^*}+ \left( j\omega_e \vec{\mathbf{\Psi_s}} \right)\cdot \vec{\mathbf{i_s}^*} \\ & = R_s\left| \vec{{i_s}} \right|^2+j\omega_e \vec{{\Psi_s}} \cdot\vec{{i_s}^*} \end{aligned}” eeimg=”1″> 对于第二项的复数功率:
\vec{{\Psi_s}} \cdot\vec{{i_s}^*} = \left| \vec{{\Psi_s}}  \right|\left| \vec{{i_s}^*} \right|\left( \angle\vec{{\Psi_s}} +\angle \vec{{i_s}^*}\right) =\left| \vec{{\Psi_s}}  \right|\left| \vec{{i_s}} \right|\left( \angle\vec{{\Psi_s}} -\angle \vec{{i_s}}\right) 对于复功率而言,实部是有功功率,虚部是无功功率。取这一项的实部即为有功功率:
Re\left\{ j\omega_e \left| \vec{{\Psi_s}}  \right|\left| \vec{{i_s}} \right|\left( \angle\vec{{\Psi_s}} -\angle \vec{{i_s}}\right)\right\}= -\omega_e \left| \vec{{\Psi_s}}  \right|\left| \vec{{i_s}} \right|sin\left( \angle\vec{{\Psi_s}} -\angle \vec{{i_s}}\right) 用叉乘简化:
P_e = \omega_e \vec{\Psi_s} \times \vec{i_s} \cdot\left| \vec{n} \right| 式中
\left| \vec{n} \right| 表示叉乘后的方向,加上它是为了形式上一致,因为点乘后标量,叉乘后是矢量。这个时候我们就很容易计算转矩了,假定转子的转速是
\omega_r ,则转子上的力矩为:
\vec{ \mathbf{T}}=\frac{P_e}{\omega_r}=\frac{\omega_e}{\omega_r} \vec{\Psi_s} \times \vec{i_s}=p\vec{\Psi_s} \times \vec{i_s} 上面的磁链方程对
\vec{\Psi_s} 做了一定的分解,注意到
 \vec{\Psi_c}\times \vec{i_s}=L_s\vec{i_s}\times\vec{i_s}=0 所以:
 \vec{ \mathbf{T}}=p\vec{\Psi_s} \times \vec{i_s}=p(\vec{\Psi_m}+\vec{\Psi_c}) \times \vec{i_s}=p\vec{\Psi_m} \times \vec{i_s}   DQ坐标系分析   
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   定义上给出的dq分别是转子磁极direct 和 quadrature方向的合成电流矢量的分量。他们听名字应该是垂直的,但是由于转子有多个极对,所以q-d角度也是相差90/p,即控制对应方向的定子线圈电流大小。不过对于转子磁极,我们还是可以按照正交的dq轴来理解:
\vec{\mathbf{u_s}}=\vec{u_s}e^{j\omega_et}=(u_d+ju_q)e^{j\omega_et}
\vec{\mathbf{i_s}}=\vec{i_s}e^{j\omega_et}=(i_d+ji_q)e^{j\omega_et}
\vec{\mathbf{\Psi_s}} = \vec{\Psi_s}e^{j\omega_et} =(\Psi_d+j\Psi_q)e^{j\omega_et} 然后将dq坐标下的三矢量带入磁链、电压和扭矩方程:
\vec{u_s}e^{j\omega_et}=R_s\vec{i_s}e^{j\omega_et}+\frac{d}{dt}\left( \vec{\Psi_s}e^{j\omega_et} \right)
\vec{u_s}=R_s\vec{i_s}+j\omega_e\vec{\Psi_s}+\frac{d\vec{\Psi_s}}{dt} 对上式中的
\vec{\Psi_s} 分解,到qd两个轴上,我们知道永磁产生的磁链分量一定是和d轴相同的,而旋转电流可以有dq两个轴的分量,所以:
\Psi_d=L_di_d+\Psi_m
\Psi_q=L_qi_q 将分解后的磁链,
\Psi_s=\Psi_d+j\Psi_q 带入上面的电压方程,分别上虚部实部相等:
u_d=R_si_d+\frac{d\Psi_d}{dt}-\omega_e\Psi_q=R_si_d+L_d\frac{di_d}{dt}-\omega_eL_qi_q
u_q=R_si_q+\frac{d\Psi_q}{dt}+\omega_e\Psi_d=R_si_q+L_q\frac{di_q}{dt}+\omega_e(L_di_d+\Psi_m) 再考虑力矩方程:
\vec{T}=p\cdot\vec{\Psi_s}\times\vec{i_s}=p\left( \Psi_di_q-\Psi_qi_d \right)=p\left[ \Psi_mi_q+(L_d-L_q)i_di_q \right] 很多教程、论文都是直接给出上面的力矩方程。有一些会在前面加上3/2 这是因为使用Clarke&Park transform,这种变换的矩阵保持了电压幅值不变,但功率变为了原来的2/3。由P=wT可得,为保证估计的电磁转矩正确,T也应用系数3/2扩大。恒功率变化则没有系数。永磁同步电机的力矩包含两个部分,一是
p\Psi_mi_q ,这是由永磁体产生的力矩,一般称之为励磁力矩或对齐力矩(Alignment Torque);另一部分
T=p(L_d-L_q)i_qi_d 是由于磁路上磁阻不均匀(
L_d\ne L_q )引起的,所以称之为磁阻力矩,如果磁路交直轴磁阻相等,则这部分力矩消失。对于一些简化的模型,会直接忽略磁阻力矩,进而得到力矩值和电流值正相关的结论。PMSM控制方法
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   FOC方法是目前电机控制最主流的方法,其是电机控制的最后一环,输入是力矩,输出是PWM开关信号。而在矢量控制方法中,转矩指令先通过电流控制策略到电流指令。一般FOC算法会使用最简单的Id=0控制,而在电动车中为了达到最佳的控制效果, 也有MTPA MTPUI控制。在本小节中主要讲不同的电流控制策略原理。
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   根据dq坐标的力矩方程可以画出上面的图,对于单位电流,其横坐标
\gamma=tan(i_d/i_q) ,橙线和紫线分别是励磁力矩和磁阻力矩曲线,相加得到绿色的和力矩曲线。我们最常见的id=0控制,即励磁力矩最大,磁阻力矩为0。此外还有合成力矩最大:Max T/A,即给定电流下的最大转矩,将电流控制在最大转矩电流比的点,也就是MTPA。此外,在高阶一些的教程中,会提电压极限椭圆和电流极限圆。电流极限圆很好理解,
\sqrt{i_d^2+i_q^2}=I_m 驱动电路最大电流限制电压极限圆,我们考虑dq坐标系下的电压方程:
u_d=R_si_d+\frac{d\Psi_d}{dt}-\omega_e\Psi_q=R_si_d+L_d\frac{di_d}{dt}-\omega_eL_qi_q
u_q=R_si_q+\frac{d\Psi_q}{dt}+\omega_e\Psi_d=R_si_q+L_q\frac{di_q}{dt}+\omega_e(L_di_d+\Psi_m) 先忽略电阻
R_s (通常比较小),稳态时
\Psi_d
\Psi_q 不再变化,所以:
u_d=-\omega_eL_qi_q
u_q=\omega_e(L_di_d+\Psi_m) 两边平方相加,再配成椭圆方程:
L_d^2\left( \frac{\Psi_m}{L_d} +i_d\right)^2+\left(L_qi_q \right)^2=\left( \frac{V_{smax}}{\omega_e} \right)^2
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   
V_{smax} 是最大驱动电流,椭圆的x轴心左移
\frac{\Psi_m}{L_d} ,椭圆的大小和转速相关,转速越大椭圆越小   电流曲线控制   对于确定的电机,
T=f(i_d,i_q) ,因此任意的
i_d
i_q 都会对应一个力矩值。根据力矩方程,我们把力矩相同的点用线连起来就得到一组等力矩曲线,如下图的三条黑色的等力矩线。同一个等力矩的曲线会和不同的电流圆相切,产生一系列的切点,这些切点的轨迹就是MTPA(最大力矩比电流)控制点,因为在一定的电流极限下,该切点是力矩最大的点。同一个等力矩的曲线会和不同的电压椭圆相切,产生一系列的切点,这些切点的轨迹就是MFPT(最大转速比力矩)控制点,因为在一定电压极限(电压椭圆和速度相关)下,该切点是速度最大的点
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   在电车控制中,对于不同特性的电机,会有不同的最佳电流策略控制曲线。对于上面这种情况,理想的I控制应该是MTPA->电流极限圆->MFPAT也就是说,在启动情况,速度由小增大,力从最大值(MTPA和电流圆交点)逐渐减小,然后随着转速再增大,进入弱磁控制阶段,再加速会受到电压椭圆的影响,驱动力矩减小地更快。
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   上图[2]显示了不同电流圆和电压椭圆关系时的力矩-电流最优控制策略以及 速度-力矩曲线和速度-功率曲线。这也解释了电动车相较于燃油车的一个优势——启动时低速转矩更大。同时,从图中也能推出Id=0电流控制策略的速度-力矩曲线,效果会比MTPA差一些。   此外,上面的等力矩线是对于凸极型PMSM而言的,而对于内隐(表面贴片式)PMSM,Ld=Lq,从力矩方程可知T至于iq相关,所以等力矩线是一系列横向直线,MTPA线也就和id=0重合了   MATLAB仿真   电机驱动控制研究大多都要基于MATLAB仿真,网络上有非常多的教程和参考例程。首先找到官方的一个FOC驱动PMSM的模型:见:MATLAB帮助中心-永磁同步的的磁场定向控制这个模型是simulink的高级应用,模型嵌套非常复杂,涉及到tensor flow、硬件连接和实时调试
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   具体的参数可以在速度环和电流环中调节。
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   输出的下发转速 阶跃响应:
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   使用slbuild 可以生成c代码,方便集成到嵌入式软中,生成的代码给出了.c .h文件,和在main.c中的示例调用生成的 Controller 函数一千多行,几乎没有可读性,移植部署也需要实际操作一番。MATLAB里自带的PMSM控制例程模块复杂一些,考虑的东西多一些,适合工业应用,不适合入门学习。找到了一本比较好的书,永磁同步电机控制原理及MATLAB仿真。本书给出的仿真模型实现比较简单,照着书本和控制原理搭建了一遍仿真模型:
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   其中电PMSM模块的参数设置按照书中给出的示例参数,逆变器使用三相逆变器,SVPWM的实现基于[5]中给出的仿真原理。电流控制策略使用最基本的Id=0策略,电流环与速度环的参数调节也参照书本中的设置方法。输入响应是一个1000 转每分的阶跃信号在电机的Tm施加一个 在0.2s开始 值为10的干扰力矩。观察输出:
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   左图是输出转速,右图是输出力矩,时域响应符合预期,受到干扰后也能够恢复。   FOC驱动   磁场定向控制(Field-Oriented Control,简称FOC)是一种电机控制方法,主要用于永磁同步电机(PMSM)和感应电机的精确控制。FOC的目标是将电机控制问题从三相坐标系(abc坐标系)变换到两个坐标系:静止坐标系(静止dq坐标系)和旋转坐标系(旋转dq坐标系)。   控制框图   总体框图:
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   FOC,Field-Oriented Control 在干的事情用一句话概括:定向控制定子线圈产生的磁场,让转子按照想要的方式旋转。
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   通过三相线圈的电流控制,可以控制三个线圈产生的三个磁场矢量,他们矢量叠加就是定子线圈生成的磁场定向,是一个二维矢量。当定子磁场定向和转子磁场定向重合时,电机会趋向于“固定”;当定子磁场定向和转子磁场定向垂直,此时驱动转子转动的力矩最大。简而言之,就是可以通过控制定子磁场定向来控制电机转子的力矩、速度和位置。FOC控制中,经过一大堆变化,到最后对于电机的输入只有两个量:Iq Id。 在开环控制链中,Iq Id通过Revpark变换,我们想要控制的和转子固连的矢量,通过二维旋转坐标变换变成和定子坐标系固连的二维正交矢量 Vα Vβ。然后通过SVPWM可以产生相应的电流, Vα Vβ变换到三个控制三相电桥的通断,从而控制三相定子线圈产生的磁场定向。关于SVPWM:控制PWM合成特定的空间矢量。最后和电机三线接口打交道的是三相开断电路的三个输出VS1 VS2 VS3。而关于Clark变换和park变换,文章中给出的直观解释:相位差120°的三相交流电:
i_a=i_0cos(\omega t)
i_b=i_0cos(\omega t-2\pi/3)
i_c=i_0cos(\omega t+2\pi/3) 绕组中产生的磁动势为旋转的圆:
{F_s(t)}=N_si_a+N_si_be^{j\frac{2\pi}{3}}+N_si_ce^{-j\frac{2\pi}{3}}=\frac{3}{2}N_si_0e^{j\omega t} 将矢量分解到α β两个轴:
F_s(t)=\frac{3}{2}N_si_0\left( cos{\omega t} +isin(\omega t)\right) 将α β两个轴的矢量分解到相差120°的三相矢量:这就是Clark变换
\begin{bmatrix}I_{\alpha}\\I_{\beta} \end{bmatrix}=\begin{bmatrix}1 & -\frac12 &  -\frac12 &\\ 0 & \frac{\sqrt3}2 & -\frac{\sqrt3}2 \end{bmatrix} \begin{bmatrix}I_a\\I_b\\I_c \end{bmatrix} 而Park变化就是根据定子和转子的转角θ,把定子的电流控制变换到转子dq坐标上:
\begin{bmatrix}I_d\\I_q \end{bmatrix}=\begin{bmatrix}cos{\theta} & sin{\theta} &\\ -sin{\theta} & cos{\theta}\end{bmatrix} \begin{bmatrix}I_{\alpha}\\I_{\beta} \end{bmatrix} 电流环反馈会用到Park变换和Clark变换,而而从FOC的前向控制而言,就是从Id Iq输入,到最后得到三相电流。首先经过逆Park变换得到Iα Iβ ,然后如果通过逆Clark变换得到三相电流进而调整PWM占空比,则是SinePMW调制过程;而目前主流的方法是SVPWM调制过程,也就是通过扇区划分、规划各基向量时间长度进而调制各相占空比。典型的FOC框图,最内环是电流环。虽然大多数时候只有一个PI环节,但该控制器设计还需要考虑控制器后的采样延时环节、PWM环节、干扰和感抗带来的延时。电流内环的作用是在电机启动过程中能够以最大电流启动,同时在外部扰动是能够快速恢复,加快动态跟踪响应速度,提高系统的稳定性。在本次开发的FOC驱动中,由于硬件没有电流环反馈,所以电流控制是开环控制。而速度环方面,速度反馈是基于hall位置传感器差分得到,受传感器精度限制,需要添加滤波环节。   硬件分析   目前手上有的KNOB硬件原理图:
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   MO_IN 123 是MCU三个IO口输出PWM波。HO/LO 1/2/3 分别控制六个MOS管。VS1/2/3是控制通道,可以避免上下桥直通。EG2133栅极驱动芯片的数据手册:atta.szlcsc.com电路的设计是六通道转三通道,即HI 1\2\3输入PWM来控制六个MOS开关,而且上下只有一个MOS能导通,同一对上下MOS状态必然是相反的。反馈通道是霍尔效应磁编码器MT6701,没有反馈电流检测。如果之后的电流反馈通道要自己设计,可以在VS2到地端接一个采样电阻(开尔文接法(Kelvin connections)),之后可能还需要运放。可以参考的开源硬件-simpleFOC画的电路 https://github.com/simplefoc/Arduino-SimpleFOCShield   ESP-FOC   基于已有的硬件和esp-idf平台,实现了FOC控制组件具体代码和项目说明可以查看:GitHub – yiyangc18/ESP-FOC: the foc driver on esp-idf
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   之前做电机相关的项目都是用的已有的库,自己写一遍foc算法后,能够更好地将理论框图和算法中各个环节对应上,实际调参、debug时有了更深入的理解,也不像之前那么“玄学”了。实现的FOC算法组件没有用到ESP-IDF的API,便于移植到其他平台,只有esp_hw_link.c中与硬件连接的函数实现与ESP-IDF相关,如果在其他平台上使用,只需要修改这个文件中的函数实现即可。文件功能encoder.h编码器功能,包括电机转子速度、位置更新和位置归零fast_math.h快速计算的math库filter.h低通滤波器的数据结构和相关函数foc.h电机FOC算法具体实现pid.hPID算法的数据结构和函数foc_config.hFOC控制参数配置esp_hw_link.h与硬件连接相关的函数   FOC驱动实现难点记录   1.motor pwm control   之前使用的PWM驱动是由高级定时器控制IO输出实现的,这种方法需要PCU参与,影响性能。而FOC中电流环和速度环的调用频率会影响控制的效果,所以pwm驱动最好使用basic timer,基于硬件触发的PMW,让渡CPU资源。阅读ESP-IDF相关文档,发现可以使用mcpwm相关api实现三相pwm驱动。调试后发现因为时钟配置错误导致三相PWM的占空比调整无法正常响应,现在分别使用三个时钟 生成三路pwm 可以正常驱动。To make the APl simpler, each Timer is automatically associated by the APl to drive an Operator of the same index, e.g. Timer 0 is associated with Operator 0.   2.速度更新环节   把FOC控制框图中各个框图单独debug。先调试foc_calibrate_phase();和encoder_zeroing();观察输出和电机情况,相序判断初始化和位置初始化完成与否。修复了机械角度从2pi到0 导致的速度跳变问题:   固定Id,累加电角度,让电机接近匀速转动,测试速度检测效果:   重写写了低通滤波器,之前参考的是一个RC模拟滤波器离散化的lpf,在调整loop频率时可能由滤波器参数不匹配的问题。改用了时间平滑滤波器,其中时间常数与设置的速度更新频率相关。   观察速度输出:
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   左图为采样频率为50hz的速度曲线,右图为采样频率为400Hz时的速度曲线。因为打印耗时占比已经比较高,在每次打印间隔会有明显的速度跳动,不过滤波器处理结果也还行。3.电机无法减速   在调整速度环时,发现会出现失稳现象,电机一直以最大速度旋转。观察速度环输出参数时发现:Iq为负时,希望是电机减速,但电机反而转的更快   在之前的foc_calibrate_phase环节 已经确定了uvw 相序电压,电角度增大, 机械角度也会增大。   测试在Iq恒为正的情况下 电机正转   但是只要Iq是负的 即使是-0.1 也会以最大力矩驱动motor转动   也就是说输入负的Iq并不能让电机减速,问题应该在SpaceVectorPWM 算法中重新过了一遍了SVPWM算法,添加以下语句:   这时候设置Iq为负,电机能够减速。具体原因是:SVPWM算法中会根据输入的Uq Ud 来计算需要合成的电压矢量在哪个扇区
matlab左移函数_matlab与运算
matlab左移函数_matlab与运算   而计算的方法是:   这个从理论上讲是没问题的,但是Uout = Uq / VBUS 在之后的环节是要参与到扇区基向量占空比计算的,而占空比无法是负值,所以导致合成的电压矢量不能是Iq为逆的。而加上Uq的相序判断: if(Uq < 0) elect_angle += _PI;直接让电角度旋转180°,这样让合成矢量反向,也就减速了。   参考文献   [0] 袁雷 现代永磁同步电机控制原理及MATLAB仿真 北京航天航空大学出版社知乎专栏[1] 如何快速理解永磁同步电机?[2] 深入浅出谈车用永磁同步电机控制[3]【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术[4]如何深入理解SVPWM?[5]彻底吃透SVPWM如此简单

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/27981.html

(0)
上一篇 2024年 9月 12日 下午10:36
下一篇 2024年 9月 12日 下午10:42

相关推荐

关注微信