目录

STM32G4-SVPWM-VF开环强拖电机

STM32G4 SVPWM VF开环强拖电机

一、STM32G4 SVPWM VF开环强拖电机

1 SVPWM

1.1 SVPWM技术简介
  • SVPWM控制策略是依据变流器空间电压(电流)失量切换来控制变流器的种新颖思路和控制策略,其主要思想在于抛弃原有的SPWM算法,采用逆变器空间电压矢量的切换以获得准圆形旋转磁场,从而在不高的开关频率条件下使得交流电机获得较SPWM算法更好的控制性能。
    https://i-blog.csdnimg.cn/direct/54da9a330592443e845e92e26d333496.png
  • 6种电机控制状态,1代表上桥臂打开,0代表下桥臂打开,根据上图可以看出三相电流无法同时达到最大,所以输出是内部的蓝色圆Uout而不是外部红色圆U1
    https://i-blog.csdnimg.cn/direct/21a54b7965d74149a67a71b21c3fa4b4.png
  • 几个电压之间的关系
    https://i-blog.csdnimg.cn/direct/40194b6dfec74f3c9878ed8a6e31163e.png
    https://i-blog.csdnimg.cn/direct/9a3cae84b5cd449b97c3b713483a0f54.png
  • 111和000是电感续流状态,这时候电感的电流无法进行突变,适合进行三相电流采样
    https://i-blog.csdnimg.cn/direct/6765d93b57a4466295291a4b2e1a13d5.png
1.2 基于零序分量注入的SVPWM算法的实现
  • 三次谐波的电流注入可以模拟出马鞍波,所以可以采用零区注入来实现SVPWM
  • 这种方法计算量会小很多
  • 为了提高直流电压的利用率,考虑在调制波信号中注人零序分量,其调制波表达式为:
    https://i-blog.csdnimg.cn/direct/315999cde6374640bc95f317553241d1.png
  • 基于以上公式在 simulink 中建立模型,打开上一章模型;
  • 将 AntiPark 变换得到的 Valpha及 Vbeta 电压,通过 AntiClark 变换得到 Va,Vb,Vc;
    https://i-blog.csdnimg.cn/direct/a58d98124b1e4a5b8ee19c9ecbd754b5.png
  • 找到Va,Vb,Vc 中的最大值及最小值,计算V0;
    https://i-blog.csdnimg.cn/direct/f85d1228a3f74ac097b5f01729d81945.png
  • Va,Vb,Vc加V0,得到调制波;
    https://i-blog.csdnimg.cn/direct/0dbf4000e5454cf083a1f34b78894469.png
  • 计算 a,b,c三相电压占空比;使用三相调制波除以母线电压Vdc,然后乘以MCU定时器的计数值,即得到Ta,Tb,Tc的三相电压切换时间;
    https://i-blog.csdnimg.cn/direct/b07fb5146a18456887ed81eb8cc3c062.png
  • 模型中计算出来的三相调制波电压乘-1;乘-1的原因与的STM32G4的TIM1的发波模式有关,如下图,CH1,2,3为 PWM mode 1,即TIM计数值大于CCR值,CH1为低电平,而此处计算出来的三相调制波电压是对应PWM mode 2,与mode1刚好相反,故此处需要乘-1。
  • SVPWM模型建立完成
    https://i-blog.csdnimg.cn/direct/246756866ef2446caa97130c4386913d.png

2. VF开环强拖电机

结合前文的AntiPark模块及SVPWM模块即可实现VF模式来驱动电机开环转动;

  1. 将AntiPark模块及SVPWM 模型按如下连接;其中输入的 ud,ug,Freq及Vbus均为标量,可在软件中自行定义其值;输出的Ta,Tb,Tc直接写入MCU TIMER的比较值寄存器;
    https://i-blog.csdnimg.cn/direct/1f34d3a4d48c4a90aa7b8e1a5fd485b6.png

  2. 增加表贴式PMSM电机模型,写入电机参数及采样时间;并在数据字典中增加电机相关参数,将增加的电机参数的类定义为struct,并将struct命名为motor:该方法生成的代码为结构体数据,便于后期更改电机参数;

    • 这里需要先连接到之前文章使用的数据字典
      https://i-blog.csdnimg.cn/direct/04869742b56d42868c5e427443be1992.png
      https://i-blog.csdnimg.cn/direct/63730d0321ca4327a9024c044741866b.png
  3. 增加一个将SVPWM输出的Ta,Tb,Tc时间转化为一个占空比时间的模块;
    https://i-blog.csdnimg.cn/direct/29980bab8128458ca6976738281131a8.png

  4. 使用Simulink自带的逆变器转换模块,将三相电压占空比转化为实际的三相电压;并在数据字典中增加母线电压Udc参数,24V;
    https://i-blog.csdnimg.cn/direct/0aa2a74590704eb1832e24f24510c2f2.png

  5. 将各个模块连接
    https://i-blog.csdnimg.cn/direct/0e9943dbec7b4f4e832ec0bde1563759.png

  6. 电机运行,查看三相电流及速度波形;电流的频率与我们设计输入的频率一致;电机转速稳定在8左右;tABC输出标准的马鞍波;
    https://i-blog.csdnimg.cn/direct/79ab77bcabcf46e08409d4deb2eb4b57.png
    https://i-blog.csdnimg.cn/direct/739b843aca5a46eeac7b3e694b928de0.png
    https://i-blog.csdnimg.cn/direct/5dbffaf703da4cbb89f434242e8be889.png

3. VF启动电机实验现象

  1. 将 simulink中 VF mode 模块,右键点击生成嵌入式代码;生成代码流程可参考之前的文章;
    https://i-blog.csdnimg.cn/direct/1385372b90b842d2b0e4d9acfbe7cc51.png
  2. 将生成的代码,拷贝至keil工程中的 MATLAB 文件夹;
    https://i-blog.csdnimg.cn/direct/2a2d7f0028904380a5afd4db4b3d5bc4.png
  3. 打开Keil工程,在Project窗口中MATLAB 文件夹中增加VF.c文件;
  4. 修改的部分代码:
    在外设初始化函数后增加对 VF算法的输入赋值,在while 循环中实时采样Vbus 电压;
    https://i-blog.csdnimg.cn/direct/52bb921dadff498a8eaf55db6f7bd4a3.png
    在按键三的回调函数中,启动和暂停PWM输出:
    https://i-blog.csdnimg.cn/direct/40bbcad88ea04747bf972a836311fba0.png
    在ADC中断回调函数中,读取三相电流值;将VF算法的输出的三相计数值写入CCR寄存器:并将电流及计数值上传至VOFA上位机实时显示;
    https://i-blog.csdnimg.cn/direct/893a1676da1542238954477759b868ac.png
  5. 按照之前文章的方法连接电机,编译并下载程序,打开Keil debug,打开VOFA上位机,可以说看到输出的三项计数值和马鞍波
    https://i-blog.csdnimg.cn/direct/ba48e340c6a3477a8aa09fe8a4779e6d.png
  6. 按下按键3,电机旋转,ab项的电流值显示正常
    https://i-blog.csdnimg.cn/direct/d8b64f00567d42ee871cdb5b232a63d3.png
  7. 在 keil 的 dubug watch 串口中,输入变量rtU,修改 Freq值,即可修改电机转速

附学习参考网址

欢迎大家有问题评论交流 (* ^ ω ^)