FOC控制算法

news2025/1/15 23:22:30

目录

一、FOC介绍

二、FOC基本概念

1、为什么是三相?

2、FOC矢量控制总体算法简述

3、为什么FOC不一定需要电流采样?参考链接

4、FOC的分类

(1)有感FOC与无感FOC

三、FOC中电流采样 参考链接

1、高端采样

2、低端采样

(1)单电阻采样

(2)双电阻采样

(3)三电阻采样

3、采样方式的选取

四、FOC原理

1、Clark变换

2、Park变换

3、PID控制

(1)电流环(最内环)

(2)速度环(第二层)

(3)位置环(最外层)

(4)位置控制时采用 位置环+电流环 控制

4、SVPWM变换

五、FOC控制算法调试


一、FOC介绍

        最近为了精确控制电机旋转的角度、速度、力矩,采用三相直流无刷电机控制,采用FOC磁场定向控制算法,在这里记录一下自己的学习过程。

        从家电到汽车和重工业机器人——都采用无刷直流(BLDC)和交流电机,因为它们能效高,可定制性更广。交流和BLDC电机在许多应用中都是首选,因为它们的缺点很少,如微控制器成本和复杂的控制算法。

        FOC是驱动电动马达的最有效方式之一。FOC的主要目标是保持正交的定子和转子磁场以产生最大扭矩。一种方法是不断监测三个时变相电流,并调制每个施加的相电压以实现正确的时变定子磁场方向。

二、FOC基本概念

1、为什么是三相?

        无刷直流电机(BLDC:Brushless Direct Current Motor),也被称为电子换向电机(ECM或EC电机)或同步直流电机,是一种使用直流电(DC)的同步电机。无刷直流电机实质上为采用直流电源输入,并用逆变器变为三相交流电源,带位置反馈的,永磁同步电机。

        一个典型的永磁同步电机的3相绕组在空间120°电角度布置,绕组里面分别通相位相差120°的三相交流电。为什么需要通相位相差120°的三相交流电?为了产生一个幅值大小不变的圆形旋转磁动势。

        三相交流电通定子线圈,定子线圈是静止的,但线圈产生的磁场是与转子永磁体产生的磁场相互作用,转子在转,线圈产生的磁场也在同步转。

2、FOC矢量控制总体算法简述

输入:位置信息,两相采样电流值(或3相电流、电机位置或者电机速度)

输出:三相PWM波

所需硬件:ADC至少需要一到三个电流检测输入,一个光电或磁编码器,主控,依据电压等级的不同有mosfet或者IGBT或者SiC功率模块组成的三个半桥

        FOC算法在本质上就是一些线性代数中的矩阵变换,我在这里讲述的是有传感器的FOC算法,转子的位置信息是通过绝对式磁编码器反馈的,直接是数字量。

3、为什么FOC不一定需要电流采样?参考链接

        FOC磁场定向控制。其原理在于调制电机三相的电压,使电流产生的磁场矢量方向与定子磁铁(励磁产生或永磁铁)成90度。为什么成90度?因为90度的时候力矩最大。如果小于90或者大于90,实际上电机也能转,只是达不到最大力矩而已。基本上60-120度都能转。

        我们先不考虑电流,因为我们能直接控制的实际上只有ABC三相的电压(怎么控制呢?SVPWM)。我们通过控制这三相电压的大小,就可以得到一个方向和幅值都可以控制的电压矢量。

        电压采样:把目标v_q直接经过坐标变换和svpwm输出而不经过pid运算,而v_d则直接赋予0,确实可以达到还行的效果。这样做的问题在于并不能保证i_d为零,i_q等于目标值,因此电机并不能工作在效率最高的状态,力矩控制也是不准确的, 只是这样磁场矢量与定子磁铁的角度不是90度,而是略小一点。

        如果没有电流环没有电流采样也可以工作,电流采样的作用是获取三相电流做坐标变换后得到实际的id,iq,如果不要电流环,只有速度环反馈或者位置环反馈其实也可以达到还行的效果。

4、FOC的分类

(1)有感FOC与无感FOC

        在FOC算法中,转子的磁场角必须是已知的,以保持正交的定子和转子磁场。这可通过编码器或旋转变压器的位置反馈来实现(有感FOC),也可通过反电动势/磁通观测器软件来测量相电流以估计转子角(无感FOC)。

三、FOC中电流采样 参考链接

1、高端采样

        直接采样桥臂输出电流,软件上无需再进行电流重构计算,采样值即真实输出电流,使用方便简单高效,较为稳定,但成本过高。由于该位置采样所选器件需要承受母线电压,在电源非隔离条件下,运放的抗共模电压指标需要大于等于母线电压(多数选母线电压的2倍),否则无法正常工作。而电源隔离条件下,其参考地(GND)不同,所以无需考虑该问题。因为电机三相电流遵循Ia+Ib+Ic=0,故实际实现时只需采样任意两相电流即可获得完整三相输出电流。

2、低端采样

        分为单、双、三电阻采样,易受公共地噪声影响。

(1)单电阻采样

        单电阻采样又称为母线电流采样,一般将采样电阻串联在直流母线来进行采样,受逆变桥开关状态影响,其采样电流与相输出电流有差异,且在特定占空比条件下难以获取输出电流,故需在一个周期内至少采样2次,并对采样电流重构补偿,同时把握好采样时刻才能获取有效电流数据,因而过程复杂,难度过大,不过由于成本低廉(仅使用一个运放,且不需要考虑高共模电压影响)。

(2)双电阻采样

        通过采样逆变任意2个下桥臂电流来获取有效数据。在实际操作过程中,需要在下桥臂开关管开通时采样(蓝色波形),并在软件上对采样数据重构获取输出电流。

(3)三电阻采样

        如果我们使用的是三电阻方式采样的话,选用的ADC模块必须至少要有三个通道同时采样的功能,这样才能确保采样得到的三相相电流是同一时刻的电流,此时才能保证Iu+Iv+Iw=0,这个公式成立。这样的话,可以对采样窗口小的一相电流进行重新计算,这样得到的结果准确度是最高的

3、采样方式的选取

    在电机控制中,对电流采样的采样转换方式一般都是使用PWM触发ADC来转换

    当PWM模块设置的触发点匹配之后,触发信号就会给到ADC模块,此时采样开关就会断开,然后ADC模块开始转换,转换完成即可得到对应的采样电流的电压信号的AD数值,在程序中使用这个数值进行算法编写验证即可。

四、FOC原理

1、Clark变换

        三相交流电,我们是否可以把它整成两相?就好比我们看一个三维的问题,我总是倾向于转化到二维去解决。三相交流电相互间相位相差120°,那我们是否可以构建一个坐标系α-β,使用它来表示三相交流电。

Ia,Ib,Ic投影到该坐标系α-β,则有:

写成矩阵形式为:

2、Park变换

        虽然\alpha -\beta坐标系下少了一维变量,但是新的变量还是正弦非线性的,接下来用Park变换将它们线性化。经过这一步的变换,我们会发现,一个匀速旋转向量在这个坐标系下变成了一个定值。

变换公式为:

写成矩阵形式:

我们一通操作将转子磁链进行了解耦,分解为了转子旋转的径向切向这两个方向的变量:

  • 其中Iq是我们需要的,代表了期望的力矩输出
  • 而 Id是我们不需要的,我们希望尽可能把它控制为0

3、PID控制

        将上一步得到的Iq,Id两个值作为反馈控制的对象,作为PID算法的输入。

        由于这里的电压和电流的传递函数会发现这其实就是一个一阶惯性环节,所以这里只需要PI控制即可。

        在FOC控制中主要用到三个PID环,从内环到外环依次是:电流环速度环位置环。

我们通过电流反馈来控制电机电流(扭矩) ->  然后通过控制扭矩来控制电机的转速 

-> 再通过控制电机的转速控制电机位置

(1)电流环(最内环)

(2)速度环(第二层)

(3)位置环(最外层)

(4)位置控制时采用 位置环+电流环 控制

        在实际使用中,由于编码器无法直接返回电机转速 ,往往计算一定时间内的编码值变化量来表示电机的转速(即平均速度代表瞬时速度)。当电机转速比较高的时候,这样的方式是可以的;但是在位置控制模式的时候,电机的转速会很慢,这时候用平均测速法会存在非常大的误差(转子不动或者动地很慢,编码器就没有输出或者只输出1、2个脉冲)。

此时需要对位置环做一点变化:

4、SVPWM变换

     前面有Park变换对应反Park变换,但是没有反Clark变换,取而代之的是SVPWM变换。使用反Park变换和SVPWM变换可以把计算出来的数据转换成开环的旋转磁场。

        在这里我就不详细说明SVPWM原理了,写这篇文章目的是自己能徒手写出代码,现在有现成的SVPWM模块,可以把FOC的控制结果转换为定时器6个通道的占空比,从而驱动三相逆变模块控制定子绕组产生旋转磁场,拖动转子旋转。

五、FOC控制算法调试

        由于作者还没有做到FOC算法调试这个步骤,后续调试算法时,会具体补充这一部分,大家可以参考:参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1052577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT 学习笔记 | 什么是 Prompt-tuning?

文章目录 一、前言二、主要内容三、总结 🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、前言 Prompt-tuning is an efficient, low-cost way of adapting an AI foundation model to new downstream tasks without retraining the model and upd…

redo日志(下)

title: “redo日志(下)” createTime: 2022-03-06T15:52:4108:00 updateTime: 2022-03-06T15:52:4108:00 draft: false author: “ggball” tags: [“mysql”] categories: [“db”] description: “” redo log的刷盘时机 log buffer 空间不足时&…

No167.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

通用返回结果类ResultVO

1. 定义通用返回结果类 ​ 定义ResultVO类&#xff0c;作返回给前端的对象结构&#xff0c;主要有4个字段 code : 错误码 data : 内容message : 消息description : 具体描述 import lombok.Data; import java.io.Serializable;/*** 通用返回结果类* param <T>*/ Data …

ABAP Web dynpro layout动态可见

ABAP Web dynpro layout动态可见 新增的元素设置不可见 在视图初始化方法中下&#xff0c;获取选中数据&#xff0c;当选中数据不在配置表中&#xff0c;对该视图中容器的子元素显示出来 效果图&#xff1a; 完整代码&#xff1a; DATA lo_nd_nod_pay_info TYPE REF TO if_…

Cocos Creator3.8 实战问题(一)cocos creator prefab 无法显示内容

问题描述&#xff1a; cocos creator prefab 无法显示内容&#xff0c; 或者只显示一部分内容。 creator编辑器中能看见&#xff1a; 预览时&#xff0c;看不见内容&#xff1a; **问题原因&#xff1a;** prefab node 所在的layer&#xff0c;默认是default。 解决方法&…

CentOS上网卡不显示的问题

文章目录 1.问题描述 1.问题描述 ifconfig下看不到ens33网卡了。systemctl status network #查看网卡状态报下面的问题网上说的解决方式有以下三种&#xff1a; 第一种&#xff1a; 和 NetworkManager 服务有冲突&#xff0c;这个好解决&#xff0c;直接关闭 NetworkManger 服…

简单三步 用GPT-4和Gamma自动生成PPT PDF

1. 用GPT-4 生产PPT内容 我想把下面的文章做成PPT&#xff0c;请你给出详细的大纲和内容 用于谋生的知识&#xff0c;学生主要工作是学习&#xff0c;成年人的工作是养家糊口&#xff0c;这是基本的要求&#xff0c;在这之上&#xff0c;才能有更高的追求。 不要短期期望过高…

26940-2011 牡蛎干 思维导图

声明 本文是学习GB-T 26940-2011 牡蛎干. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了牡蛎干的要求、试验方法、检验规则、标签、包装、贮存和运输要求。 本标准适用于养殖或野生牡蛎(Ostrea spp.)为原料&#xff0c;经取肉、…

9.30国庆作业1

消息队列实现进程之间通信方式代码&#xff0c;现象 接收消息 #include<myhead.h>//消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_ds;#define SIZE sizeof(Msg_ds)-sizeof(long) //正文大小int main(int a…

小谈设计模式(7)—装饰模式

小谈设计模式&#xff08;7&#xff09;—装饰模式 专栏介绍专栏地址专栏介绍 装饰模式装饰模式角色Component&#xff08;抽象组件&#xff09;ConcreteComponent&#xff08;具体组件&#xff09;Decorator&#xff08;抽象装饰器&#xff09;ConcreteDecorator&#xff08;具…

数据集划分——train_test_split函数使用说明

当我们拿到数据集时&#xff0c;首先需要对数据集进行划分训练集和测试集&#xff0c;sklearn提供了相应的函数供我们使用 一、讲解 快速随机划分数据集&#xff0c;可自定义比例进行划分训练集和测试集 二、官网API 官网API sklearn.model_selection.train_test_split(*a…

ubuntu安装PhotoPrism,并开启安卓照片同步

之前安装了黑群晖7.2&#xff0c;并开启了Photo&#xff0c;照片同步用的挺好。唯一的缺陷是群晖的照片搜索太弱鸡了&#xff0c;基本上关键字搜索是一点不可用&#xff0c;常见的“花”&#xff0c;“山”&#xff0c;“文件”&#xff0c;“证件”都是不可用的。 后来了解到了…

NLP 02 RNN

一、RNN RNN(Recurrent Neural Network),中文称作循环神经网络它一般以序列数据为输入通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出。 传统神经网络(包括CNN)&#xff0c;输入和输出都是互相独立的。但有些任务&#xff0c;后续的输出和之前…

《Operating Systems: Three Easy Pieces》 操作系统【一】 虚拟化 CPU

&#xff08;一&#xff09;操作系统介绍 1.虚拟化 CPU 书上代码 &#xff1a; #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <assert.h> #include "common.h"int main(int argc, char *argv[]) {if (argc ! …

TensorFlow学习1:使用官方模型进行图片分类

前言 人工智能以后会越来越发达&#xff0c;趁着现在简单学习一下。机器学习框架有很多&#xff0c;这里觉得学习谷歌的 TensorFlow&#xff0c;谷歌的技术还是很有保证的&#xff0c;另外TensorFlow 的中文文档真的很友好。 文档&#xff1a; https://tensorflow.google.cn/…

使用 gst-element-maker 创建一个完全透传的 videofilter 插件

系列文章目录 创建 gstreamer 插件的几种方式 使用 gst-template 创建自己的 gstreamer 插件 使用 gst-plugins-bad 里面的 gst-element-maker 工具创建gstreamer 插件 使用 gst-element-maker 创建一个完全透传的 videofilter 插件 文章目录 系列文章目录前言一、使用gst-ele…

亿图脑图新版本支持思维导图一键生成PPT、音视频等格式,办公提效再升级

近日&#xff0c;国产思维导图软件——亿图脑图MindMaster发布了全新版本V10.9.0&#xff0c;本次亿图脑图的升级给用户带来了极大的惊喜。全新升级的亿图脑图MindMaster不仅支持20格式的文件智能解析成思维导图&#xff0c;还支持思维导图一键生成PPT、音频、视频等内容形式&a…

公认黑客守则

1、不要恶意的破坏任何系统&#xff0c;恶意的破坏他人的软件或服务器将要承担法律责任&#xff0c;如果你只是使用计算机&#xff0c;也是非法的&#xff0c;千万不要破坏别人的文件或数据 2、不要修改别人的任何系统文件&#xff0c;如果你是为了进入而修改它&#xff0c;请在…

计算机视觉与深度学习-Transformer-【北邮鲁鹏】

目录 引入基本组成编码器多头自注意力机制&#xff08;Multi-Head Self-Attention&#xff09;多头自注意力的计算过程头数与维度关系前馈神经网络&#xff08;Feed-Forward Neural Network&#xff09; 编码器中的ADD&NORM加法操作&#xff08;Addition&#xff09;归一化…