STM32控制永磁同步电机 | FOC电机控制算法概述
1. FOC基本概念
参考:https://www.sohu.com/a/432103720_120929980
FOC(field-oriented control)为磁场导向控制,又称为矢量控制(vector control),是一种利用变频器(Variable-frequency Drive,VFD)控制三相交流马达的技术,利用调整变频器的输出频率、输出电压的大小及角度,来控制马达的输出。其特性是可以分别控制马达的磁场及转矩,类似他激式直流马达的特性。由于处理时会将三相输出电流及电压以矢量来表示,因此称为矢量控制。是目前无刷直流电机(Brushless Direct Current Motor,BLDCM)和永磁同步电机(Permanent-Magnet Synchronous Motor,PMSM)高效控制的最佳选择。FOC精确地控制磁场大小与方向,使得电机转矩平稳、噪声小、效率高,并且具有高速的动态响应。由于FOC的优势明显,目前已在很多应用上逐步替代传统的控制方式,在运动控制行业中备受瞩目。
FOC按照电机有无传感器来区分,可以分为有感FOC和无感FOC。对于有感FOC,由于电机的传感器(一般为编码器)能反馈电机转子的位置信息,因此在控制中可以不使用位置估算算法,控制起来相对无感FOC简单,但是对带传感器的电机应用来说,往往对控制性能要求较高。对于无感FOC,由于电机不带任何传感器,因此不能通过简单读取传感器的测量值来得到电机转子的位置信息,所以在控制中需要通过采集电机相电流,使用位置估算算法来计算转子位置。虽然无感FOC的控制难度较大,但是它可以避免传感器故障的风险,并且省去了传感器的成本,同时简化了电机与驱动板间的布线。目前,无感FOC多应用在风机类的场合中。
矢量控制可以适用在交流感应马达及直流无刷马达,早期开发的目的是为了高性能的马达应用,可以在整个频率范围内运转、马达零速时可以输出额定转矩、且可以快速的加减速。不过相较于直流马达,矢量控制可配合交流马达使用,马达体积小,成本及能耗都较低,因此开始受到产业界的关注。矢量控制除了用在高性能的马达应用场合外,也已用在一些其他行业中。目前就有太兆智控公司以矢量控制技术为核心,将矢量控制广泛应用于服务机器人、家电、AGV、电动工具和工业控制等行业中,并不断拓展其他领域。
稚晖君关于FOC的总结:https://zhuanlan.zhihu.com/p/147659820
2. FOC的最简理解
参考:https://bbs.elecfans.com/jishu_538586_1_4.html
FOC作为目前使用较多的控制算法,对于初学者来说要迅速理解该其中理论确实有很多问题,但在学习该理论之前,我们先在脑海里建立一个磁场定向控制(FOC)的直观概念,理解起来就显得容易多了。
顾名思义,FOC是磁场定向控制,所以我们控制的是磁场方向,转子的力矩正比于定子磁场向量与转子磁场向量的X乘(矢量积)。因此当定子磁场向量与转子磁场向量垂直时,我们可以得到最大转矩。
有了以上概念,剩下的便是通过驱动电路来产生电压继而得到电流来产生相应磁场,其中,磁场正比于电流且两者方向一致。
电压->电流->磁场
那么这里就有两个问题:
1、三相电压如何确定?
2、电流向量,即磁场向量的方向如何确定?
先来说第一个问题:三相电压如何确定?
电压与电流应该是同频同向,只是由于感性负载的原因,电流相位上滞后于电压,所以比较普遍的做法是通过建立PI控制器,输入为电流,输出为电压来得到需要的电流。具体实现请查找相关文献。
再来说第二个问题:电流向量,即磁场向量的方向如何确定?
电流向量的方向与转子垂直,因此需要得到转子实时位置,这里分有无传感器两种方式。有了转子的位置后,我们就可以得到控制电流的方向。
在FOC里常用的控制模式有两种:
1、力矩模式
2、速度模式
力矩模式为直接控制电流向量大小,而速度模式通过PID控制器,输入为参考速度与实际速度,输出为电流向量大小。
3. FOC实现概述
FOC控制的其实是电机的电磁场方向。转子的转子力矩正比于定子的磁场向量与转子磁场矢量的矢量积。由矢量的关系可知,若使电机的转矩时刻保持最大,则定子磁场向量应与转子磁场向量相互垂直。又因为磁场的大小与方向与电流的大小与方向有着直接的关系,所以在用FOC控制算法控制BLDC时的关键就是控制三相输入的电流大小与方向。而控制电流产生定子磁场与转子磁场垂直的关键在:控制稳定的三相输入电压及其电流向量,并且我们得知道转子的实时位置。
输入电流的方向控制,FOC给出了空间电流矢量的概念。其实质是将三相的电流矢量结合,再分解为垂直和平行于转子磁体轴方向的两个分量即d-q结构。垂直方向的电流分量所产生磁场正交于转子的磁场,这就产生了旋转力矩。而平行于转子磁轴方向的电流分量,所产生的磁场与转子磁场一致,就不会产生任何的力矩。另外,一个好的控制算法就需要使这个平行于转子磁轴方向的电流分量尽量最小化,因为,这个电流分量只会使电机产生多余的热量,并加剧轴承的磨损。我们需要控制线圈的电流,以使垂直于转子磁轴方向的电流分量达到最大。由此而得到的电机力矩和这个电流分量的大小成比例。
为了使与转子磁场同向的定子电流矢量最小化(为零)且垂直的磁场最大化,定子线圈内的弦波电流需要随着转子的转动角度实时地进行相位调整。控制稳定的三相电流输入可以建立P-I控制器,P-I控制是在不停的调制输入,一旦电机电流被转化成d-q结构,控制将变得非常简单。我们需要两路P-I控制器;一个控制平行与转子磁场的电流,一个控制垂直向电流。因为平行向电流的控制信号为零,所以这就使电机平行向的电流分量也变成零,这也就驱使电机的电流矢量全部转化为垂直向的电流。由于只有垂直向电流才能产生有效的力矩,这样电机的效率被最大化。另一路P-I控制器主要用来控制垂直向的电流,以获得与输入信号相符的需求力矩。这也就使垂直向电流按照要求被控制以获得所需的力矩。
3.1 FOC算法原理
参考:https://www.cnblogs.com/yueze/p/7078486.html
FOC原理框图如下:
其中涉及到两种坐标转换:
1. Clark变换:常规的三相坐标系→静止的二相坐标系α、β
正变换矩阵
逆变换矩阵
2. Park变换:二相静止坐标系α、β→二相旋转坐标系d、q
正变换矩阵
逆变换矩阵
其中最关键的一步是确定转子位置和速度。FOC的应用可分为异步电机和永磁同步电机(PMSM):
1. 在异步电机的控制中,根据磁链观测方法的不同,FOC又可分为直接磁场定向控制和间接磁场定向控制。直接磁场定向控制通过磁场检测或者运算来确定转子磁链矢量的空间位置,方法简单,但受电机齿槽影响较大,检测信号有脉动,实际难以应用,通常通过一定计算估计磁链位置,因此又称为磁链观测法。间接磁场定向控制通过控制转差频率实现,计算方便。
磁链观测法有电流模型和电压模型,电流模型严重依赖于转子时间常数T,高速时,如果T存在偏差,会引起磁通震荡,因此电流模型适用于中低速;电压模型依赖于定子电阻R,R易受负载和温度的影响而变化,且低速时,电压检测困难,因此电压模型适用于中高速。实际中长结合两者使用。但因需要计算反正切,计算量较大。
为了减少计算量,更多使用间接观测法。
2. 对于同步电机的FOC控制,有位置传感器(比如编码器)的情况下,转子位置和速度可由HALL传感器或编码器得到;
在无感情况下,通常用估算器法(滑模观测器(SMO)和PLL估算器)、MRAS法(模型参考自适应)、卡尔曼滤波法、高频注入法及神经网络等方法。
FOC的控制策略:id =0控制、最大转矩电流比控制、最大输出功率控制、弱磁控制等。
3.2 SVPWM算法实现
- 采集到两相电流
- 经过clarke变换后得到两轴正交电流量,
- 经过旋转变换后得到正交的电流量 Id、Iq,其中Iq与转矩有关,Id与磁通有关。在实际控制中,常将Id置为0。得到的这两个量不是时变的,因此可以单独的对这两个量进行控制,类似直流量控制一样。而不需要知道具体要给电机三相具体的电压为多少。
- 将第3步中得到的Iq与Id量分别送进PI调节器,得到对应的输出Vq和Vd;
- 通过传感器得到电机转过的角度。
- 进行逆park变换,得到二轴电流量。
- 对第6步中的Va,Vb进行逆clarke变换,得到实际需要的三相电压输入给逆变电桥,驱动电机转动。
其实现流程大致如下所示:
1. 判断合成矢量所在扇区
将U、V、W三相电压矢量合成矢量电压Uref并在二相坐标系中形成分量Uα、Uβ(在FOC中由逆Pack变换得到)由合成矢量落在各扇区的充分必要条件分析可知合成矢量所属扇区。
2. 计算相邻矢量作用时间
4. 更新相应寄存器值
将上面计算出的TCM1、TCM2、TCM3送入单片机定时器寄存器即可产生SVPWM
三电阻电流采样的可行性:
由于逆变器三相桥臂的上下桥的IGBT的开通与关断是互补的,则每一桥臂的上下桥臂的控制信号也应均是互补输出。假定对其单一相位,如A相位,进行导通取样。当IGBT2导通,IGBT1必然关断,此时电流流向应与A相电流大小相等方向相反。因此将此时采样到的电流进行取反就能得到A相电流。(由于IGBT的开关频率非常高,从而导致采样频率也就远大于相电流频率,由采样定理可知,此时根据采样电流即可恢复出为A相电流的值)
参考:http://blog.sina.com.cn/s/blog_8e32a5940102xy78.html
该博主的FOC控制记录博客:http://blog.sina.com.cn/s/articlelist_2385683860_0_1.html
4. 影响电流采样的一个因素——延迟源
参考:https://mp.weixin.qq.com/s/4PBl62YVFx_6bp4ghrJWkA
在电机驱动的FOC控制开发过程中,如果出现电机噪声过大、效率偏低甚至无法运转的情况,有可能源于相电流的采样异常,从而导致FOC算法中无法重建正确的三相电流!这里分析影响电流采样的一个因素——延迟源!
在双电阻采样的电机驱动FOC控制中,采样点设置为驱动桥下管打开的中间时刻。注意,这里是驱动桥下管打开的中间时刻,而不是MCU输出的PWM周期中间时刻。因为从MCU计算生成PWM到电流信号送入MCU的ADC模块,这个典型的驱动拓扑中,存在多达七个延迟源!
4.1 延迟类型及典型时间
下面表格详细指明了电机驱动系统拓扑中存在的七个延迟源及其典型的时间。这些延迟将叠加在一起,产生的影响是:实际输出PWM波形滞后于MCU计算预期输出的PWM波形,按照这个计算,相电流采样点需要滞后于MCU计算预期输出的PWM波形的中间时刻。
4.2 延迟源详细分析
(1)PWM死区时间插入
在三相无刷电机驱动系统中,需要三个桥臂来控制相线电流流向,在每个桥臂上有两个功率器件,如MOSFET、IGBT。这一对功率器件不能同时导通,否则就会出现短路的情况。这里以MOSFET作为功率器件来说明。在控制中,必须插入死区时间以确保上部和下部MOSFET不会同时处于打开状态。死区时间的典型值可能在100ns到2μs之间,具体取决于系统中的各种因素,如MOSFET驱动电压、MOSFET型号。
在所需的PWM波形插入死区时间之后,我们得到的是PWM中点和上升沿都向右移动。因此,在FOC控制算法计算出适当的PWM之后,我们立即开始看到第一个延迟,即死区时间。
(2)光耦延迟和预驱动器延迟
在MCU控制FTM模块输出PWM波形到MOSFET栅极受控制的那一刻之间,各种光电耦合器和预驱动器的信号响应导致了额外的延迟。
与MCU引脚输出的波形相比,预驱动器的输出延迟了一段时间(Delay1)。
(3)晶体管开关延迟
经过预驱动器后,PWM波形到达MOSFET晶体管,但由于其固有特性,所有晶体管都需要一定的时间导通和截止。根据晶体管类别及导通/截止之间切换所需要的电压电平,此延迟时间有所不同。
Delay2为相线电压理论切换点(CMP2)与实际切换点的时刻之间的整个延迟。
最后,栅极电压到达了能令晶体管导通的程度,电流通过相线和采样电阻,在采样电阻两端产生电压差,红色波形为理想状态下的相电流波形。此时与MCU计算生成的PWM周期中点存在延迟总时间如图中“相电流中点移位”。
(4)其他延迟
如下图所示,影响电流采样的最后延迟链是由放大器转换速率、MCU引脚上的低通滤波器和ADC转换速率构成的。图中用红色圆圈标记的时刻为正确的电流采样时刻,可以看出,与FTM输出的PWM中点相比,相电流采样点大大延迟。
所有的电子电路中,都会存在信号的延迟问题。信号延迟不可能被完全消除,但可通过选用低延迟的器件以减小影响。
在电机驱动中,除了选用合适的器件外,还需要对信号延迟进行软件补偿。文中提及的这些延迟源的精确延迟时间,我们可以通过示波器和计算得出,在软件上补偿这些延迟,才可得出正确的电流采样时刻。这样在正确的时刻采集到的数据才能作为FOC控制中重建电机三相电流的数据来源。
STM32控制永磁同步电机 | FOC电机控制算法概述的更多相关文章
- 基于stm32f427实现SVPWM控制永磁同步开环转动
1.SVPWM原理简介 PWM(Pulse Width Modulation)脉宽调整,这是一种利用面积等效原理实现的控制技术.SVPWM(Space Vector PWM)空间矢量PWM控制,因为控 ...
- 永磁同步电机 spmsm 和 ipmsm 的区别总结
layout: post tags: [motor control] comments: true 永磁同步电机的分类 永磁同步电机根据转子上永磁体的位置不同,可以分为: 表贴式永磁同步电机--S-P ...
- STM32 控制步进电机 28BYJ-48
STM32 控制步进电机 28BYJ-48 http://blog.chinaunix.net/uid-12664992-id-300272.html 步进电机驱动最简化的逻辑: //四相八拍:A- ...
- MPU6050工作原理及STM32控制MPU6050
源:MPU6050工作原理及STM32控制MPU6050 MPU6050 介绍
- stm32控制电机
一.总体思路 使用端口GPIOA来连接电机,所以给GPIOA编程就可以控制电机.使用系统时钟SysTick来周期性的给电机发送脉冲.用四个按钮来控制需要发送脉冲的个数,每个按钮被按下就设置 ...
- stm32控制步进电机加减速
实习公司项目需要控制步进电机,电机方面主要包括控制运动.加减速.限位.下面介绍一下在电机控制方面的心得,由于对于电机的控制不需要很精确,并且自身能力有限,相比于大牛有很大的差距. 1.需要实现的功能 ...
- 使用STM32控制TMC5160驱动步进电机
首先先来了解一下TMC5160的3种工作模式 TMC5160通过两个引脚来控制它的工作模式:SD_MODE和SPI_MODE. 1.当SD_MODE接地,SPI_MODE拉高,TMC5160即工作在模 ...
- STM32 控制红外线收发
买了一块STM32的板子,这次需要将IR的code移植到STM32上面,因为STM32成本比树莓派低得多,所以 一些简单的外设挂在STM32上就行了. 我买的板子的型号是STM32F103C8T6,价 ...
- stm32通过电调带动电机(可按键调速)
这几天在做32通过电调带动电机的实验,上网一查,发现这方面的资料很少,经过自己的亲自实践,总结出以下经验,供大家参考. 论坛上也有很多人说自己在做,但是都遇到了同样的瓶颈.我想他们大多是pwm的频率和 ...
随机推荐
- Solution -「APIO 2016」「洛谷 P3643」划艇
\(\mathcal{Description}\) Link & 双倍经验. 给定 \(n\) 个区间 \([a_i,b_i)\)(注意原题是闭区间,这里只为方便后文描述),求 \(\ ...
- 看我如何使用 shell 来获取所有 KVM 虚拟机的 IP 地址
文章目录 脚本说明 脚本展示 效果展示 此脚本的初衷是因为,KVM创建的桥接网卡的虚拟机,无法使用virsh domifaddr命令获取IP,而创建的nat网卡的虚拟机,则可以直接使用virsh do ...
- 记录一次elasticsearch-5.6.4宕机排查经历
犯罪现场~~ es: 三节点,配置相同 内存: 248G CPU: 没注意看 磁盘: 2T data: 380G左右 indices: 近9800条 在下才疏学浅,目前跟着大佬学习,这个问题还没解决, ...
- JMM之Java线程间通讯——等待通知机制及其经典范式
在并发编程中,实际处理涉及两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体). 通信是指线程之间以何种机制来交换信息.在共享内存的并发模型里,线程之间共享程序的公共状 ...
- (待补充)diff 算法解析
今天,学习React的时候,底层提到了 diff算法,顺藤摸瓜, 也发现了VUE也使用了diff算法. mark一下,后续补充 infoq-VUE-diff算法 react-diff算法
- IDEA 端口占用,启动失败,提示Web server failed to start. Port 8080 was already in use.
问题描述: 使用IDEA开发Spring Boot项目,今天启动提示端口占用,导致启动失败!(我昨天也是用的这个端口,可以正常启动) *************************** APPLI ...
- Consul安装启动
1.安装 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://rpm.releases.hashicorp ...
- cs144 lab0 lab1记录
这个叫什么?Write Up吗 lab0 lab0要做的事,实现buffer部分的功能,要自己写变量以及实现接口. 成员函数 write()向buffer内写数据,peek_out() pop_ou ...
- Django模板的继承与模板的导入
目录 一:模版的继承 1.什么是模板继承? 2.使用继承流程原理 3.模板继承语法 二:模板的继承使用 1.案例需求 2.总结模板继承 三:模版的导入 1.模板导入 2.模板导入格式 3.模板导入使用 ...
- weblogic自动化打补丁脚本
转至:https://www.it610.com/article/1294086996750311424.htm 目的 weblogic每个季度都会有psu更新,打补丁操作也变成了每个季度都要做的事情 ...