最近做完了一个直流无刷电机的电机调速项目,查阅了各种大神所写的博客和论文,在这里我只做一下小小的总结:(PS最近有遇到相关课题,发现以前的描述并不完整,因此又补充了一些。)
FOC(Filed Oriented Control)是采用数学方法实现三相马达的力矩与励磁的解耦控制。
主要是对电机的控制电流进行矢量分解,变成励磁电流IdIdId 和交轴电流IqIqIq ,励磁电流主要是产生励磁,控制的是磁场的强度,而交轴电流是用来控制力矩,所以在实际使用过程中,我们常令Id=0Id=0Id=0 。之后我将详细介绍一下这个算法的数学原理和一些自己的理解。
#FOC矢量控制总体算法简述
输入:位置信息,两相采样电流值,(3相电流、电机位置或者电机速度)
输出:三相PWM波
所需硬件:两个ADC,一个光电或磁编码器,主控,依据电压等级的不同有mosfet或者IGBT或者SiC功率模块组成的三个半桥
FOC算法在本质上就是一些线性代数中的矩阵变换,我在这里讲述的是有传感器的FOC算法,转子的位置信息是通过绝对式磁编码器反馈的,直接是数字量。

第一步:根据AD采样得到ia,ibi_a,i_bia​,ib​两相电流值;

通过ADC采样得到电机的ia,ibi_a,i_bia​,ib​ 两项电流信息,由于基尔霍夫电流定律,同一个节点流入电流值与流出电流相等,我们可以计算出ici_cic​。三个电流的相位差为120°。

ia+ib+ic=0i_a+i_b+i_c=0ia​+ib​+ic​=0

第二步:通过Clark变换,将三相定子坐标系(三个轴互为120°,ia,ib,ici_a,i_b,i_cia​,ib​,ic​)转化为两相的定子直角坐标系(iα,iβi_{\alpha},i_{\beta}iα​,iβ​)

这个过程有点类似于力的矢量分解,把三相映射到两相的坐标轴之上,如下图所示。

第三步:通过Park变换将两相定子坐标系变换到两相转子坐标系

因为我们主要控制的是转子的旋转,所以需要通过Park变换将两相定子坐标系变换到两相转子坐标系(iq,idi_q,i_diq​,id​),本质上就是矩阵的旋转变换,在这里,我们用到的转子的位置信息

{Iq=Iβcos(θ)−Iαsin(θ)Id=Iαcos(θ)+Iβsin(θ)\begin{cases} I_q=I_{\beta}cos({\theta})-I_{\alpha}sin({\theta})\\ I_d=I_{\alpha}cos({\theta})+I_{\beta}sin({\theta}) \end{cases}{Iq​=Iβ​cos(θ)−Iα​sin(θ)Id​=Iα​cos(θ)+Iβ​sin(θ)​
该位置信息便是由磁编码器返回的绝对角度信息,(其实也可以用增量式编码器,我感觉应该只是在电机位置校准的时候需要定义零点,其他的应该一样,我暂时还没有做过,属于猜想的,当然有的还可以通过无位置的控制方式,通过三相采样电流值计算转子位置信息,还有需要注意的是得到的是角度信息,我们需要将其转化为电角度信息, 电角度=角度∗磁极对数电角度=角度*磁极对数电角度=角度∗磁极对数),其中 idi_did​ 为励磁电流分量, iqi_qiq​为转矩电流分量,可以建立两个PI调节器分别对两个电流分量进行调节。
当励磁电流分量为0时,磁通完全由永磁体提供。电机所有的电流全部用来产生电磁转矩,只用控制 iqi_qiq​就可以控制电机转矩,就实现了电机的静态解耦。(其实这里很好理解,根据左手定则,F=BIL,这个公式中L是电机的固有参数,B磁通由两部分组成,一是由永磁体提供,二是由电流变化产生磁场;所以如果我们要实现给定的力距,需要控制单一变量:电流,则需要让B保持恒定,也就是使 idi_did​ =0)

第四步:根据PI调节器输出电压Vq,VdV_q,V_dVq​,Vd​

这里需要注意有一个前提调节,那就是你已经基本调通了SVPWM波,电机可以正在旋转了,FOC控制算法主要是电机的稳定性控制,而不是电机本体的驱动。Vq,VdV_q,V_dVq​,Vd​本身的参考值已定,iq,idi_q,i_diq​,id​只是根据给定值与实际返回值得差值调节电机的稳定性。
在调参的时候,人为给定iqref=0,idref=XXX(参考电流值)i_qref=0,i_dref=XXX(参考电流值)iq​ref=0,id​ref=XXX(参考电流值),通过与实时采样电流比较,调节电流环PID,调节的目标是启动响应速度足够快,平稳运动波动足够小,通过DAC输出实时采样电流来进行调试;

第五步通过反Park变换将Vq,VdV_q,V_dVq​,Vd​(两相转子坐标系)转换为Uα,UβU_{\alpha},U_{\beta}Uα​,Uβ​两相定子坐标系

{Uα=Vdcos(θ)−Vqsin(θ)Uβ=Vdsin(θ)+Vqcos(θ)\begin{cases} U_{\alpha}=V_dcos({\theta})-V_qsin({\theta})\\ U_{\beta}=V_dsin({\theta})+V_qcos({\theta}) \end{cases}{Uα​=Vd​cos(θ)−Vq​sin(θ)Uβ​=Vd​sin(θ)+Vq​cos(θ)​

第六步:得到Uα,UβU_{\alpha},U_{\beta}Uα​,Uβ​之后,通过SVPWM算法计算UA,UB,UCU_A,U_B,U_CUA​,UB​,UC​

SVPWM是磁场定向控制中常用的PWM波调制技术。其全称是空间矢量脉宽调制(Space Vector Pulse Width Modulation)是由三相功率逆变器的六个功率开关原件组成的特定开关模式产生的脉宽调制波,能够使输出电流波形尽可能接近于理想的正弦波。理论基础是平均值等效原理,即在一个开关周期内通过对基本电压矢量加以组合,使其平均值与给定电压矢量相等。
假设三相电压分别为UA,UB,UCU_A,U_B,U_CUA​,UB​,UC​ ,且相互之间相位差为120°,假设UmU_mUm​为相电压的有效值,f为电源频率,则有:
{UA(t)=2Umcos(2πft)UB(t)=2Umcos(2πft−2π3)UC(t)=2Umcos(2πft+2π3)\begin{cases} U_A(t)=\sqrt{2}U_mcos(2\pi ft) \\ U_B(t)=\sqrt{2}U_mcos(2\pi ft-{2\pi \over 3}) \\ U_C(t)=\sqrt{2}U_mcos(2\pi ft+{2\pi \over 3}) \end{cases}⎩⎪⎨⎪⎧​UA​(t)=2​Um​cos(2πft)UB​(t)=2​Um​cos(2πft−32π​)UC​(t)=2​Um​cos(2πft+32π​)​
则三相电压空间矢量相加的合成空间矢量U(t)U_{(t)}U(t)​ 就可以表示为:
U(t)=23[UA(t)+UB(t)ej2π3+Uc(t)ej4π3]=2Umej2πftU_{(t)}={2 \over 3}[U_A(t)+U_B(t)e^{j {2\pi \over 3}}+U_c(t)e^{j{4 \pi \over 3}}]=\sqrt2 U_me^{j2\pi ft} U(t)​=32​[UA​(t)+UB​(t)ej32π​+Uc​(t)ej34π​]=2​Um​ej2πft
U(t)U_{(t)}U(t)​ 是一个旋转的空间矢量,幅值不变,为相电压的峰值,且以角频率w=2πfw=2 \pi fw=2πf按逆时针方向旋转,其在三相坐标轴上的投影就是对应的三相正弦量。
其实SVPWM算法的原理我也搞得有点懵,不过应用上倒是相对简单,可以把SVPWM算法想象成一个字典,根据Uα,Uβ,θU_{\alpha},U_{\beta},{\theta}Uα​,Uβ​,θ的大小关系确定输出值。完全当成一个表在查就好了。
FOC算法的优点有:
1、当负载变化时,速度响应快而且精确;
2、电机的瞬时效率高;
3、能实现位置控制;
FOC和PID调节的方式参考了
http://bbs.elecfans.com/jishu_546001_1_1.html
主要为先调试内环之后调试外环;
1、首先应该调试ADC和编码器,看是否可以得到正确的采样电流和编码器数值;
2、调试FOC算法中的SVPWM环节,认为的给定UαU\alphaUα 和UβU\betaUβ 两个值,看电机是否运行,确保SVPWM没问题
3、 人为给定id,iqi_d,i_qid​,iq​ 参考值,通过实时采样电流,调节电流环的PID,调节的目标是启动响应速度足够快,平衡运行波动足够小,通过DAC输出实时的采样电流来进行观测调试(这里我直接在算法中让idi_did​ 为0,所以只给定iqi_qiq​ 的值)。
4、人为给定速度,调试速度环PID,输出iqi_qiq​ ,调节的目标是根据在足够宽的速度范围内平稳启动和运行。可以采用专家PID算法;
5、位置环调节,输出为速度,调节目标,从一个位置快速的到达另一个位置来回跑,停止静差足够小,速度增减足够快,即瞬时速度大且需要合理的根据位置路径的长度规划一个速度曲线。
注意:如果要达到较高的速度精度,可能需要针对不同的速度值设置不同的速度PID参数,且需要进一步实时的调节观测器、PLL及速度PID参数。
##其他的一些知识总结:
###FOC与DTC控制区别
(参考知乎一位大神的):
来源:https://www.zhihu.com/question/265079828/answer/291686684
FOC(电机矢量控制)要求严格的转子磁场定向,对于BLDC电机而言转子磁场方向始终与转子位置一致,因此其控制输入需要准确的转子绝对位置信号
DTC(直接转矩控制)实际上与基于定子磁场定向,而定子磁场则是依据电压积分估算获得,在这个过程中跟转子位置没有关系,其控制过程中用到的量也都是静止坐标系下的量,因此DTC控制相比于FOC控制要简单很多,完全不需要求解三角函数、坐标变换,如果需要用DTC进行速度闭环则需要测量电机的速度,但是依然不需要准确的绝对位置。
总结下来,从硬件的角度DTC相比于FOC可以省略一个位置传感器!当然,现在有很多改进的DTC算法需要用到电机的绝对位置。
但是在电机控制中,无论是DTC控制还是FOC控制,最后倒要基于PID调节实现稳定控制。
###市场上电调分类
1、FOC电调:矢量控制,效率高,转矩脉动小,电机噪音小,减速制动快
2、普通电调:六步换向控制,方波驱动
STM32有BLDC开发套件
###BLDC电机控制算法:
PID控制,专家PID控制,模糊PID控制,神经PID控制,基于遗传算法整定的PID控制,鲁棒控制,滑膜控制等;
###电机方面的知识:
1、根据《无刷电机控制系统》中所讲述:目前国内外对无刷直流电机的定义一般有两种:一种定义认为只有梯形波/方波无刷直流电机才可以称为无刷直流电机,而正弦波无刷电机则被称为永磁同步电机(Permanent Magnet Synchronous Motor,PMSM);另一种定义认为梯形波/方波无刷电机和正弦波无刷电机都是直流无刷电机。
2、直流电机的调速是用直流电压来控制,电压越高,转的越快,不过单片机并不能输出可调的直流电压,于是只好变通采用PWM的方式来控制电机的输入电压。PWM占空比越高,等效电压就越高,当然单片机给出的PWM波形只是控制信号,而且最高电压只有5V,其能量并不足以驱动无刷直流电机,所以必须要再接一个功率管来驱动电机,功率管可以是MOSFET(场效应管),也可以是IGBT(绝缘栅双极晶体管)。
3、一般而言,电机的绕组数量都和永磁极的数量是不一致的(比如用9绕组6极,而不是6绕组6极),这是为了防止定子的磁极与转子的磁钢相互吸引对其,产生类似于步进电机的效果,此种情况下转矩会产生很大的波动。
4、外转子无刷直流电机比内转子电机要慢,但是力矩更大,例如四旋翼等可以不通过减速器直接驱动螺旋桨旋转。
5、无刷直流电机KV值定义为:转速/V,意思是输入电压每增加1V,BLDC电机空转转速增加的转速值。同系列同外形尺寸的无刷电机,根据绕线匝数的多少,会表现出不同的KV特性。绕线匝数多的,KV低,最高输出电流小,扭力大;绕线匝数少的,KV高,最高输出电流大,扭力小;
###自己的一些经验:
1、计算角度信息一定要用电角度,而不能直接计算
2、电机的最高转速与电流和编码器采样频率也有一定关系;

另外一篇经典FOC与SVPWM波详述(稚晖君):https://zhuanlan.zhihu.com/p/147659820

BLDC电机控制算法——FOC简述相关推荐

  1. [转]BLDC电机控制算法是很难 那是你没搞清原理

    转自:http://www.sohu.com/a/129710878_464086 BLDC电机控制算法 无刷电机属于自换流型(自我方向转换),因此控制起来更加复杂. BLDC电机控制要求了解电机进行 ...

  2. 4.BLDC电机控制算法

    BLDC电机控制算法 无刷电机属于自换流型(自我方向转换),因此控制起来更加复杂. BLDC电机控制要求了解电机进行整流转向的转子位置和机制.对于闭环速度控制,有两个附加要求,即对于转子速度/或电机电 ...

  3. 一文读懂BLDC电机控制算法

    BLDC电机控制算法 无刷电机属于自换流型(自我方向转换),因此控制起来更加复杂. BLDC电机控制要求了解电机进行整流转向的转子位置和机制.对于闭环速度控制,有两个附加要求,即对于转子速度/或电机电 ...

  4. FOC 无感 代码 算法 电机控制 PMSM 基于中颍SH32F2601的洗衣机量产无感bldc控制方案,电机控制算法完全手写

    FOC 无感 代码 算法 电机控制 PMSM 基于中颍SH32F2601的洗衣机量产无感bldc控制方案,电机控制算法完全手写,MCU寄存器配置完全手写,未用到任何库文件 ID:34500065518 ...

  5. 干货 | 什么是FOC?一文带你看BLDC电机驱动芯片及解决方案

    目前不管是工业自动化领域.汽车领域,还是生活家电领域,各个终端市场对 BLDC 电机控制性能提出了更高的要求.它们不仅需要电机能够做到高效率和多功能控制,还需要电机在追求高转速的同时实现低噪音低振动的 ...

  6. stm32捕获占空比_【电机控制】六步法驱动BLDC电机,使用硬件COM事件,STM32+CUBEMX(HAL库)配置...

    现在我也只能说是电机入门,但是想要把电机作为终身事业,从有霍尔到无霍尔,从方波到正弦波,现在把其中的一些知识点分享出来,因为电机控制其实的资料比较难找的,前人栽树,后人乘凉,如果我有什么错误,在知乎上 ...

  7. 【电机控制】六步法驱动BLDC电机,使用硬件COM事件,STM32+CUBEMX(HAL库)配置

    已经做了半年的BLDC驱动器了,目前是做到了电流转速双闭环,期间遇到了很多很多问题,一个是资料难找,再加上公司要求使用CUBEMX,本身HAL库的资料也难找,难上加难啊,可能是用CUBEMX做出来的大 ...

  8. 蛋蛋弹车3-具有功能安全EPS系统设计(电机控制算法-PID)

    蛋蛋弹车3-具有功能安全EPS系统设计(电机控制算法-PID) 前言 一.直轴交轴PI控制 二.Simulink中搭建电机PID控制器 三,具体结果计算 总结 前言 无论在电机控制还是别的一般工业控制 ...

  9. BLDC电机控制和矢量控制的理解

    最近打算重新温故一下电机的理论知识,翻阅了大量大神关于矢量控制的解释,所以这里做一个小小的总结,如果不足或者错误的地方还请见谅! 1.BLDC电机控制 无刷电机主要由旋转的永磁体(转子)和三组均匀分布 ...

最新文章

  1. ora00936缺失表达式怎么解决_正则表达式替换函数
  2. git commit 提交的时候报错husky > pre-commit hook failed 或者‘lint-staged‘ 不是内部或外部命令,也不是可运行的程序(解决办法)
  3. python tableview绑定字典_TableView索引的添加
  4. reactnative 获取定位_【React Native】定位获取经纬度,当前城市等地址信息
  5. linux ntfs 用户权限,linux权限及ntfs文件系统权限的知识
  6. 创新高!韩国反垄断部门重罚高通8.54亿美元
  7. Git异常:fatal: V1.0 cannot be resolved to branch.
  8. 【优化算法】蝴蝶优化算法(MBO)【含Matlab源码 952期】
  9. 简单测试Content-Length和Chunked两种不同的数据传输方式
  10. ar电力远程巡检可视化系统强化员工现场作业能力
  11. echarts地图外边缘添加阴影投影或外发光
  12. python读excel两列为字典_python交换数据的两列,python处理excel数据,  python交换...
  13. C语言求三角形斜边长
  14. 练习7-9 计算天数(15 分)
  15. Windows10 CUDA11.0安装cudnn8.0.4安装环境配置VS运行及卸载方法
  16. Unity线程与协程
  17. (九十三) Android O 连接WiFi AP流程梳理续——保存网络
  18. Sql Server 字符串、日期函数 收藏
  19. STM32F407获取OV7670摄像头图像及上位机解码(一维码二维码)
  20. gopro7怎么回看视频_要案解读:IPTV限时回看不侵犯信息网络传播权

热门文章

  1. 数据库系统概论(王珊 第五版)复习要点
  2. 关于 CPU的 基础知识
  3. 论文初稿终于完成了!
  4. 【人工智能】人工智能行业研究:史上最伟大的科技革命
  5. 计算有机物的相对分子质量
  6. 软件工程实践项目1:课程评价系统
  7. 2012年3月30日
  8. 网页设计与制作主页模板
  9. java 编译war包_javaweb程序打包成war文件的步骤
  10. SpringBoot集成knife4j接口文档