曾经有同行开玩笑,MATLAB除了不能生孩子,什么都能做!
这个玩笑可能比较夸张,但其实某种程度上也说出了一部分真理,比如利用Simulink搭建的仿真模型,是可以广泛应用于各种行业的,尤其是电机控制的专业开发。(这还不算“万能”吗?绝对算!)
从业十余年,我一直坚持用Simulink辅助电机控制开发工作,哪怕足够应付自己的工作,但我认为我用到的MATLAB功能恐怕还不到1‰,注意是千分之一,不是百分之一!
在电机行业,MATLAB的熟练应用,是FOC控制高薪岗位的硬性条件!
资深的FOC工程师,绝对是包含熟练使用Simulink验证算法的,常见的招聘条件如下:
MATLAB在电机行业,可以快速完成控制算法的验证和迭代,为实物验证节省大量时间。
具体能干什么?直接上干货:
经过Simulink搭建参考文献中的控制方法进行验证。在搭建好平台之后,把观测器,速度环,电流环,转矩补偿等等封装成各自的模块。
需要验证哪个模块,即进行对应的修改。经过simulink验证的方法,基本都可以在实物中实现。
各个独立的模块就像写代码一样,包括SVPWM, speed loop, current loop, ADC sampling, position and speed estimation.
强大的示波器查看功能,可以清晰看到电机从起步到加速带载的相电流波形:
电流环计算完毕后输出 Ud, Uq,需要进行反park变换输出 Ualpha 和 Ubeta。
负载转矩和电机输出电磁转矩对比:
我们以一个简单的低通滤波器为例,常规的低通滤波器参数,按照定点写法,20kHz,200Hz的低通滤波器如下图:
那么搭建Simulink的低通滤波器仿真模型:
通过右上角示波器查看输入和输出的滤波前后波形:
通过波形可以看出,输入200Hz的正弦波,经过截止频率200Hz一阶低通滤波器,输入幅值1,输出幅值0.707,相位滞后45°,这与MATLAB的低通滤波器伯德图是完全匹配的:
Motor Control Blockset 电机控制组件提供了用于FOC的整个环路及硬件接口,可以快速实现自动代码生成。
具体模块包含坐标变换、滑模和flux观测器、SVPWM及其他相关模块。
电机离线参数辨识,MATLAB有开发对应的工具包,搭配TI的28069开发板使用。
离线参数辨识,具体包括定子电阻Rs,同步电感Ld/Lq,反电势常数,电机转动惯量以及摩擦系数。
辨识界面如下:
左边栏,设定使用硬件工况和电机基础参数,包括输入直流电压 input DC voltage, 电机额定电流 norminal current, 电流额定转速,位置传感器信息等。
中间栏,是用户的显示界面,当辨识完成后,会显示电机模型参数:定子电阻 Rs, 同步电感 Ld/Lq, 反电势BEMF,电机转动惯量 inertia, 摩擦系数 Friction constant.
右边栏,显示辨识过程的状态,是否完成或者触发了保护进入了fault状态。
辨识过程顺利完成后,会输出辨识结果,保存为 MAT(.mat)文件。
常规的SVPWM模块,如果不搭配死区设置,是无法输出带死区的PWM波形的,和实际工程应用相比,就有点理想化了。
仿真得到的电流波形过于理想化了:
通过给SVPWM模块添加死区设置,输出得到死区的PWM驱动脉冲:
进而输出的相电流波形带有明显的死区过零点钳位效应:
在这个基础上,可以进行死区补偿的仿真验证。或者验证,不做死区补偿,输出电流带有多大的谐波,位置估算能否正常收敛。
死区时间控制模块:
三角波发生器模拟up-down计数器,添加2个Pulse Generator产生上下桥互补的PWM波形。
SVPWM的过调制,是电流环饱和后必须考虑的控制技巧。
通过对T1/T2矢量幅值判断,是否超出了内切圆,进而进行等比例限幅。
通过MATLAB搭建仿真模块,可以清晰地看到,从线性区进入到过调制区域,PWM三相比较值的变化趋势:
左边处于线性区之内,PWM比较值呈现经典的马鞍波:
右边逐步进入了过调制区域,那么比较值发生畸变,处于等比例限幅的工作状态:
在线性区之内,线电压呈正弦波:
过调制区域,线电压发生严重畸变,存在较大谐波:
这就是为什么,进入到过调制之后,相电流出现较大谐波的原因:
MATLAB用得越多,尤其对生态的投入,让人叹为观止。越学习越感受到自己的无知,只得埋头继续钻研。
强大的工具让开发者的工作事半功倍,仅仅学会使用就需要耗费大量的精力!
在生态这一块,国内的工业软件确实有较大差距,也没有资本进入这一块领域去追赶,所以说MATLAB的短期被替代的可能性也很小。
往期文章:
深圳月薪两万属于什么水平?
电机控制前途如何?
单电阻电流采样原理
这个国产替代不得了
股票被套了。。。