先放一张矢量控制框图:

一、验证三相逆变模块的正确输出。不接电机,使用高级定时器输出6路互补PWM,改变占空比,测量三相逆变模块的U、V、W对地波形的占空比是否正常。

二、测试相电流采样电路的功能。

1、不接电机,连续采样相电流,此时采样值为相电流为0时的值,此时值应该比较稳定,变化不大,如果变化比较大,说明有问题。

2、接上电机,给U相设置占空比为5%,V、W占空比为0,此时可以用万用表测量取样电阻上的电压值,应该已经有值。再用adc采样相电流,计算相电流采样极性和大小是否正常。根据正电压产生正电流的电动机原则,U相电流应该是正的,V、W两相电流应该是负的,且V、W两相电流应基本相同。若正负号不对,需要进行调整。

三、测试变换程序的正确性。矢量控制的核心其实就在Clark与Park变换上,通过这两个变换实现了直轴与交轴的解耦。如果使用的是官方的库,可以不管本步骤。如果是自己写的,需要通过仿真测试等手段,确保程序的正确性。

四、调试SVPWM模块。通过SVPWM模块可以把FOC的控制结果转换为定时器6个通道的占空比,从而驱动三相逆变模块控制定子绕组产生旋转磁场,拖动转子旋转。为了验证SVPWM模块的功能,需要使用上图中的6、7即反park变换和SVPWM模块,产生开环的旋转磁场。

1、把FOC其他部分注释掉,只保留反park变换和svpwm函数。

2、反park变换的输入参数有3个:Vq、Vd、Angle,将Vq=0,Vd设置为一个较小的值,Angle=0,然后接电机上电,此时svpwm会有输出,电机有力,转子被锁定在当前电角度位置。如果没有力,说明Vd值太小了。同时可以查看CH1、CH2、CH3的波形和svpwm的标准波形做对比。比如,处于svpwm的扇区1,那么CH1、CH2、CH3上的波形关系如下:

你可以在仿真模式下,把CH1、CH2、CH3通道的比较值加入watch窗口,然后手动改变Vd的值。改变Vd的值,3个通道的比较值也会跟着改变。

3、将Angle由0开始,每次增加30°左右,此时电机会跟着旋转,且每次旋转的角度应该是相同的,记录下这个旋转方向,这就是此系统固有的正方向。此时还可以验证电机的极对数,若Angle重复增加N个周期后电机回到起始点(可用记号笔进行标注),电机的极对数即为N。

五、整定d轴、q轴PID参数。

1、把电流采样模块、clark变换、park变换、PID控制器加入。

2、此时系统的输入参数有3个:PID控制器的参考量IQREF、IDREF和Angle。设置Angle=0,IQREF=0,IDREF设置为一个较小值(可以与上面的Vd一样)。

3、d轴和q轴都有PID控制器,将两个PID的参数都设置为0。之后保持q轴的PID为0,然后整定d轴的参数(整定的过程中,可以给电机上电观察效果,目的是使电流采样值经过clark、park变换后的Iq、Id值接近于IQREF、IDREF)。d轴整定完后,把q轴的PID参数设置为相同即可。

六、使用编码器输出角度替代Angle值

改变Angle值,电机旋转起来。旋转状态的Iq、Id值与停止状态一样仍然是接近于IQREF、IDREF的。在程序让Angle自加,使用j-scope观察4个变量的变化:Angle值、编码器返回的角度值、A相电流采样值、B相电流采样值

Angle值、编码器返回的角度值的波形如左边的两个图。两个波形应该都是幅值相同的三角波,如果编码器值的变化方向与Angle不同,那么编码器的输出角度值需要反向。他们两者的波形并不重合,在水平轴上存在偏差值。而这步的目的就是要让他们重合,这样就能用编码器输出值替代Angle值了。

因为Angle值代表的是转子的真实电角度。因此要把编码器输出角度矫正为Angle值。如果是绝对式编码器,就要把编码器返回的角度值减去偏差,使之与Angle值的波形重合。如果是相对式编码器,就需要当电机启动阶段给定一个Angle值进行预定位时,把编码器的输出角度矫正为Angle值。

右边的两个图是相电流的采样值。调试PI控制器参数时也可参考相电流曲线,若曲线发生畸变,不是图中那样的正弦波形,需要降低比例及积分作用。

修改程序,使用编码器的输出角度值替代Angle值。绝对式编码器并不需要特殊的启动过程,因为矫正过后,一上电编码器的输出角度就是与转子的电角度是重合的。使用相对式编码器,在上电时,并不知道转子的位置,因为需要先设定Angle、IqRef为0,IdRef设置为合适值,此时电机转子会自动旋转到零点位置处,然后再把编码器的输出角度值矫正为0,完成编码器值与转子电角度的重合。

七、验证电流闭环

下面依次验证d轴与q轴。因为d轴用于影响转子的磁场,并不产生扭矩(d轴与转子磁场方向在一条直线上,d轴的作用是把转子固定在当前角度,不让转子动)。作用效果如下:

q轴产生的磁场方向垂直于转子磁场方向,于是产生扭矩,吸引着转子旋转。

我们先来验证d轴,将IqRef设置为0,IdRef设置为一个合适的正值,此时电机是不会旋转的,用手转动电机也是可以转动的,只是不同于自由转动状态,此时旋转电机时会感到阻力较大,有一个力始终在维持电机处于当前位置。

验证q轴时同理将IdRef设置为0,IqRef设置为一个合适的值即可。需要注意的是,因为启动电流明显大于稳态电流,如果IqRef的值设置得过小,电机无法旋转起来,而增大IqRef,使电机可以旋转起来后,电机会一直加速到最高转速。为保证安全,需要对输出电压占空比进行限幅。

将IqRef设置为正值时电机应该正转,设置为负值时电机应该反转,且正反转速应该是相同的。此时还可以进一步观察转速采样结果,如果和实际情况符合的话就可以进行下一步了。

八、调试速度闭环

需要先验证转速测量的程序是否正常。然后就可以在电流环的外层添加速度环了。

对于PMSM而言,除了在弱磁控制等情况下,IdRef一般是固定为0的。不过对于异步电机而言,因为要产生绕组电流,IdRef并不是零。IqRef连接至速度环PI控制器的输出上,一般会对IqRef的范围进行限幅,以保证电流在安全范围内。

速度环的PID参数整定就不细说了。

参考:

http://gaomf.cn/2016/11/14/PMSM_Vector_Control/#

https://blog.csdn.net/u010671230/article/details/79478582

PMSM的FOC 矢量控制算法调试流程,新手上手流程相关推荐

  1. 【STM32-HAL库】一步步搭建出FOC矢量控制(附C代码)

    说明 本文为无刷电机或PMSM电机驱动的简易代码,旨在分享一些个人调试过程的小心得,提供一个demo文件,程序仍有许多不完善的地方,建立起个人的FOC底层驱动,可以帮助快速熟悉FOC算法原理与使用方法 ...

  2. 两相步进电机FOC矢量控制Simulink仿真模型 采用针对两相步进电机的SVPWM控制算法,实现FOC矢量控制,DQ轴解耦控制

    两相步进电机FOC矢量控制Simulink仿真模型 1.采用针对两相步进电机的SVPWM控制算法,实现FOC矢量控制,DQ轴解耦控制- 2.转速电流双闭环控制,电流环采用PI控制,转速环分别采用PI和 ...

  3. 【2022年马上开课了】手撕永磁同步电机FOC矢量控制培训讲座

    课程大纲: FOC需要复杂的数学算法,这对于普通的设计人员来说可能并不熟悉,所以在过去,设计师们通常依赖于复杂的数字讯号处理芯片来实现控制. 并且,目前关于FOC技术而言,虽然有多家厂商开发了专用于电 ...

  4. 60v5g无刷电机矢量控制器_完成一个最小FOC矢量控制系统所需的基本模块和功能配置...

    当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受. 因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满 ...

  5. Field-Oriented Control (FOC) 矢量控制 磁场定向控制

    永磁同步电机(PMSM, Permanent Magnet Synchronous Motor)由于它噪声小.高效节能的显著优势,广泛被用于新能源汽车.机器人伺服和家电等领域. 上图是一个 PMSM ...

  6. 小猫爪:PMSM之FOC控制02-Park变换

    小猫爪:PMSM之FOC控制02-Park变换 1 推导 2 Simulink仿真 3 个人理解 END 1 推导   废话不多说,直接就整出一个α-β轴和d-q轴的图:   然后再根据矢量计算得: ...

  7. 关于PMSM电机FOC驱动的一些问题

    关于PMSM电机FOC驱动的一些问题 引用的文章,为尊重原作者,这里放链接: 1.控制框图 2.基本坐标系变换 2.1 clarke变换 2.1 park变换 2.2 ipark变换 3.逆变原理(S ...

  8. 三六相PMSM的FOC算法的数字实现(二)

    三六相PMSM的FOC算法的数字实现(二) 第二章 SVPWM算法 2.1 基本电压矢量的由来 2.2 扇区判断 2.3 非零矢量(基本电压矢量)作用时间计算 2.4 SVPWM的调制原则(开关顺序如 ...

  9. MATLAB数值仿真FOC矢量控制

    MATLAB数值仿真FOC矢量控制 本文通过数值仿真加深对FOC矢量控制的理解.状态空间方程本质上是微分方程,本文的核心之处利用四阶龙格库塔方法求解PMSM状态空间方程.在建模的过程中,整个模型中,忽 ...

最新文章

  1. 深度学习核心技术精讲100篇(四十六)-情感分析算法在阿里小蜜的应用实践
  2. DL之CG:Computational Graph计算图的简介、入门、使用之详细攻略
  3. 这个顶会论文复现比赛,单篇最高现金奖3W!
  4. 【每天一道算法题】Numeric Keypad
  5. Oracle之索引和索引碎片问题解决
  6. k8s学习笔记-调度之Affinity
  7. 跟我学 Java 8 新特性之 Stream 流基础体验
  8. Vue中数组变动监听
  9. vscode 多行 行尾_vscode 常用快捷键
  10. 关于Fedora8中DNS配置问题解决
  11. 如何用法向量求点到平面距离_无论大考小考,无论校考,还是联考,老师钟爱的题型“空间距离”...
  12. css3中3d旋转中rotatex,rotatey,rotatez的旋转正方向
  13. 机器学习之数据预备、清洗与特征工程
  14. 20162320刘先润 2016-2017-2《程序设计与数据结构》课程总结
  15. pytorch.chunk
  16. carsin中创建相邻车道车辆插入场景设置
  17. css单行和多行超出内容省略(注意字母数字的换行)
  18. 面试经验//Java新手如何制定优秀的职业规划?看大牛怎么说!
  19. 各阶段产品经理突破自身瓶颈总结(建议收藏)
  20. vba中IIf使用方法

热门文章

  1. java枚举体_Java枚举体
  2. oracle中查看pga大小,oracle调整sga、pga大小
  3. python编程标准_python编程规范
  4. 什么是实验室人员比对人员_实验室工作人员怎么管?管理人员到底要不要懂技术?...
  5. 脑电分析系列[MNE-Python-8]| 参考电极简介
  6. python判断文件夹是否存在
  7. PNAS:人类首次利用新型脑磁图可视化快速大脑信号
  8. 虚幻4的关卡动态加载机制
  9. android 键盘只顶edittext,EditText Keyboard 未解之谜
  10. 前紫光展锐CTO创业造芯:主打边缘AI视觉,融资10亿,9个月流片