热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FOC

OC(field-orientedcontrol)为磁场导向控制,又称为矢量控制(vectorcontrol)

OC(field-oriented control)为磁场导向控制,又称为矢量控制(vector control),是一种利用变频器(VFD)控制三相交流马达的技术,利用调整变频器的输出频率、输出电压的大小及角度,来控制马达的输出。其特性是可以个别控制马达的的磁场及转矩,类似他激式直流马达的特性。由于处理时会将三相输出电流及电压以矢量来表示,因此称为矢量控制。

达姆施塔特工业大学的K. Hasse及西门子公司的F. Blaschke分别在1968年及1970年代初期提出矢量控制的概念。Hasse提出的是间接矢量控制,Blaschke提出的是直接矢量控制。布伦瑞克工业大学的维尔纳·莱昂哈德(Leonhard further)进一步开发磁场导向控制的控术,因此交流马达驱动器开始有机会取代直流马达驱动器。

当时微处理器尚未商品化,但已经出现泛用的交流马达驱动器。当时相较于直流马达驱动器,交流马达驱动器的成本高、架构复杂,而且不易维护。而当时的矢量控制需要许多传感器及放大器等元件,因此无法将矢量控制应用在交流马达驱动器中。

派克变换一直被用在同步马达及感应马达的分析及研究,是了解磁场导向控制最需要知道的概念。这个概念是罗伯特·派克(Robert Park)在1929年的论文中提出的。派克变换被列为二十世纪发表电力电子相关论文中,第二重要的论文。派克变换的重要性是可以将马达有关的微分方程,由变系数微分方程变成“时不变”系数的微分方程。

矢量控制可以适用在交流感应马达及直流无刷马达,早期开发的目的为了高性能的马达应用,可以在整个频率范围内运转、马达零速时可以输出额定转矩、且可以快速的加减速。不过相较于直流马达,矢量控制可配合交流马达使用,马达体积小,成本及能耗都较低,因此开始受到产业界的关注。矢量控制除了用在高性能的马达应用场合外,也已用在一些家电中

VFD-VE系列的向量控制核心技术是FOC((Field Oriented Control),也就是业界通称的磁场导向控制或磁束向量控制。愈来愈多的马达驱动器採用磁场导向控制,因为它可让马达在任何时刻都在最佳的扭力之下工作,所以可获得更高的效率,它具有更好的动态反应,能够达到非常精準的可变速度之控制,还有更低的扭力涟波(ripple),在马达启动、运转、和停止时可提供一致和稳定的马达转动。
  矢量控制的由来

先简单说明一下什么是矢量控制。原理是通电导线在磁场中满足左手定则,会受到一个力的作用。PSMS电机的转子为永磁钢,定子为几

FOC的基本控制塬理是在叁相定子侧流动的电流可以合成一个等效的合成电流向量,它的旋转角速度就是输入电源的角频率ω。透过座标转换技巧,可以将此电流向量映射到两轴旋转座标中。如果此两轴座标也同样以角速度ω旋转,则在此座标中电流向量可视为是静止的;换言之,电流向量在此座标中是直流量,既然是直流量,这样就可让马达转矩与电流成正比例关係,但还需要满足一些条件,包括马达的转子磁通必须与图中的d轴重合,而且电流向量的d轴分量必须维持为定值。满足以上的条件后,交流马达的转矩将与定子电流成正比,所以控制定子电流的向量值就可以像控制直流马达般的简易且精準。

工作原理图

foc控制算法及原理详解

1、采集到两相电流

2、经过clarke变换后得到两轴正交电流量,

3、经过旋转变换后得到正交的电流量 Id、Iq,其中Iq与转矩有关,Id与磁通有关。在实际控制中,常将Id置为0。得到的这两个量不是时变的,因此可以单独的对这两个量进行控制,类似直流量控制一样。而不需要知道具体要给电机三相具体的电压为多少。

4、将第3步中得到的Iq与Id量分别送进PI调节器,得到对应的输出Vq和Vd;

5、通过传感器得到电机转过的角度。

6、进行逆park变换,得到二轴电流量。

7、对第6步中的Va,Vb进行逆clarke变换,得到实际需要的三相电压输入给逆变电桥,驱动电机转动。
  FOC 计算公式
  1. PMSM.C 中的ADC1Interrupt()AD中断处理函数中调MeasCurr.S 中MeasCompCurr:

读入ACD1,ACD2(带符号小数)

校正:ADC1CarrADC1-offset=qIa ADC2CarrADC2-offset=qIb
  2. PMSM.C 中的ADC1Interrupt()中调CalculateParkAngle()对相角θ处理

先调用smcpos.c 滑模观测器中SMC_Position_Estimation(),之中

①又调用smc.s 中的CalcEstI 计算估算电流I :

EstIalpha=Gsmopos*(Valpha-Ealpha-Zalpha)+Fsmopos*EstIalpha

---- Isα(n+1)=G*(Vα(n)-Eα(n)-Zα(n))+F*αIs α(n)

EstI beta=Gsmopos*(V beta-E beta-Z beta)+Fsmopos*EstI beta

---- Isβ(n+1)=G*(Vβ(n)-Eβ(n)-Zβ(n))+F*Isβ(n)

②调smc.s 中CalcIError 计算实测电流与估算电流的偏差:

IalphaError = EstIalpha – Ialpha

Ibeta Error = EstIbeta – Ibeta

---- ΔI α= Is α- I α ΔI β= Is β- I β

③调smc.s 中CalcZalpha ,CalcZbeta 计算Z α, Zβ:

当abs(IalphaError)《 MaxSMCError时 Zalpha = (Kslide * IalphaError) / MaxSMCError

当abs(IalphaError)≥ MaxSMCError时

Zalpha 为正时Zalpha= Kslide 为负时Zalpha=-Kslide

当abs(I betaError)《 MaxSMCError时

Zbeta = (Kslide * IbetaError) / MaxSMCError

当abs(I beta Error)≥ MaxSMCError时

Z beta 为正时Z beta = Kslide 为负时Z beta=-Kslide

---- 当|ΔI α|《Δmax 时:Z α= Ks*ΔI α/Δmax

当|ΔI α|≥Δmax 时:|Z α|= Ks

当|ΔI β|《Δmax 时:Z β= Ks*ΔI β/Δmax

当|ΔI β|≥Δmax 时:|Z β|= Ks

④调smc.s 中CalcBEM 按低通滤波器公式计算反电动势: Ealpha = Ealpha + Kslf * (Zalpha - Ealpha)

Ebeta = Ebeta + Kslf * (Zbeta – Ebeta)

两级滤波,后级滤波系数为KslfFinal

---- Eα(n)= Eα(n-1)+Ksf*(Zα(n-1)- Eα(n-1))

E β(n)= Eβ(n-1)+Ksf* (Zβ(n-1)- Eβ(n-1))

⑤调atan2CORDIC.s 中反正切函数atan2CORDIC 计算相角

Theta = atan2CORDIC(-EalphaFinal, EbetaFinal)

---- θ=atan(-Eα/ Eβ)

⑥在smcpos.c 中的SMC_Position_Estimation函数中进行速度预算

PrevTheta = s-》Theta

AccumThetaCnt++

if (AccumThetaCnt == IRP_PERCALC)

Omega = AccumTheta

---- 求累加角Σθ+=θ(n)-θ(n-1)

更新θ(n-1)= θ(n) 累加次数m(θCnt)+=1

当m = M (速度计算需要的PWM 定时次数) 时,速度预算值ω=Σθ

此前仅算出ω(Omega),未算 V(速度Speed) ,即未找到V=Kv*ω

Kv=60/T(测算速度时间)/磁极对数

⑦调smc.s 中CalcOmegaFltred 对ω进行数字滤波

OmegaFltred=OmegaFltred+FiltOmCoef*(Omega-OmegaFltred)

---- ωfl (n)= ωfl (n-1)+ Kωfl *[ω(n)- ωfl (n-1)]

Kωfl:滤波系数=2πFc/Fpwm Fpwm:脉宽调制频率

Fc: 滤波器截止频率(电机最低转速*磁极对数/60)

⑧在smcpos.c 中的SMC_Position_Estimation函数中计算滤波器系数 ??

Kslf = OMEGA0 * _PI / IRP_PERCALC;

KslfFinal = OMEGA0 * _PI / IRP_PERCALC

⑨在smcpos.c 中的SMC_Position_Estimation函数中进行相位补偿计算

ThetaOffset=OmegaFltred*(SLOPEFRACn+SLOPEINTn)+CONSTANTn

不同的速度有不同的补偿,程序分几个频段, 式中3常数取不同值(n 不同)。

---- θΔ =ωfl *(Kscn+Kstn)+ Kcn
  3. PMSM.C 中的ADC1Interrupt()中调clrkepark.s 的ClarkePark 进行座标变化

Ialpha = Ia

Ibeta = IadOneBySq3 + 2Ib*dOneBySq3;

Id = Ialphacos(Angle) + Ibetasin(Angle)

Iq = -Ialphasin(Angle) + Ibetacos(Angle)

─ ---- Iα= Ia Iβ=(Ia+2Ib)/√3

Id = IαCosθ+IβSinθ Iq = -IαSinθ+IβCosθ

4. PMSM.C 中的ADC1Interrupt()中调DoControl()进行Id,Iq,Speed 的PI 迭代

5. 调trig.s 中的SinCos 计算qSin θ q Cosθ值

6. 调InvPark.s 中的InvPark 计算 qVα qVβ值

7. 调CalcRef.s 中的CalcRefVec 由qV α qVβ计算Vr 1 Vr2 Vr3 值

8. 调SVGEN.s 中的CalcSVGen 由Vr 1 Vr2 Vr3计算3相PWM 占空比。

强制角ParkParm.qAngle (输出PWM 角)和滑模估算角Smc1.Theta 电机启动时只用强制角线性递增(称斜坡法) Startup_Lock += 1 达到转速后计算强制角和估算角偏差,对强制角进行修正

计算保存Δθ:Theta_error = ParkParm.qAngle - smc1.Theta 修正量:对强制角修正:ParkParm.qAngle += Startup_Ramp

Δθ每次±0.05°直到≤0.05°:Theta_error += _0_05DEG
  FOC(或矢量控制)算法的简要步骤

以下总结了控制PMSM的FOC算法步骤。

1.先测量三相定子电流ia和ib。根据ia+ib+ic=0,计算来自两个电流传感器的电流。

2.将三相电流转换到2轴坐标系中。该转换根据测量的ia、ib和ic值得到变量iα和iβ。从定子的角度来说,iα和iβ是时变正交电流值。该步骤称为Park变换。

3.采用控制循环上一次迭代时计算的变换角旋转2轴坐标系,使之与转子磁通对齐。该转换根据iα和iβ得到变量id和iq。现在,将正交电流id和iq变换到旋转坐标系中。在稳态条件下,id和iq将保持恒定。该步骤称为Clarke变换


推荐阅读
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 预备知识可参考我整理的博客Windows编程之线程:https:www.cnblogs.comZhuSenlinp16662075.htmlWindows编程之线程同步:https ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • quartus管脚分配后需要保存吗_嵌入式必须会的一些硬件面试题,要试一试吗?你过来呀!...
    1、下面是一些基本的数字电路知识问题,请简要回答之。(1)什么是Setup和Hold时间?答:SetupHoldTime用于测试芯片对输入 ... [详细]
  • ESXi命令行获取帮助的方法为,常用的命令一般都是以esxcli开头,如果忘记命令可以使用帮助:esxcli-- ... [详细]
  • Flink使用java实现读取csv文件简单实例首先我们来看官方文档中给出的几种方法:首先我们来看官方文档中给出的几种方法:第一种:Da ... [详细]
author-avatar
黄勋佩淑青宜合
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有