有感FOC算法学习与实现总结
文章目录
基于STM32的有感FOC算法学习与实现总结
1 前言
Field Oriented Control
磁场定向控制 (FOC
),FOC
是有效换向的公认方法。FOC
的核心是估计转子电场的方向。一旦估计了转子的电角度,就将电动机的三相换相,以使定子磁场垂直于转子磁场。本文参考了TI
,microchip
的相关文档,基于STM32F103
系列单片机实现了带编码器的FOC
算法,实现了对通用伺服电机(表贴式PMSM
)的控制。
2 FOC算法架构
FOC
算法的整体架构如下图所示,采用了双闭环的控制系统,包括速度环和电流环,也叫转矩环,而传统的伺服驱动器还需要位置环,图中并未给出,这个后面另外描述,反馈部分采用双电阻采样,和增量编码器。
所以,从上图可以了解到,实现FOC
算法总共需要以下几个部分;
- 坐标变换,由于
PMSM
是非线性的复杂系统,为了实现控制上的解耦,需要进行坐标变换;Clark
变换;Park
变换;
SVPWM
模块;- 反馈量采集部分
- 相电流采集
- 编码器信号采集
- 闭环控制部分可以分为三个环节;当然,根据需求,双闭环也比较常见;
- 位置环
- 速度环
- 电流环
下面会对每个环节的关键部分做一下介绍,具体的实现与细节由于篇幅有限会另外开篇幅做介绍。
3 坐标变换
OABCOABCOABC三相坐标到静止坐标系αβ\alpha\betaαβ坐标系可以分为恒幅值变换和恒功率变换,两者的主要区别就是变换系数不同,下文统一使用恒幅值变换。
3.1 Clark变换
三相电流ABC分别为iAi_{A}iA,iBi_{B}iB,iCi_{C}iC,根据基尔霍夫电流定律满足以下公式:
iA+iB+iC=0i_{A}+i_{B}+i_{C} = 0iA+iB+iC=0
静止坐标系αβ\alpha\betaαβ,α\alphaα轴的电流分量为iαi_{\alpha}iα,iβi_{\beta}iβ,则Clark
变换满足以下公式:
iα=iAiβ=13∗iA+23∗iBi_{\alpha} = i_{A} \\
i_{\beta} = \cfrac{1}{\sqrt{3}}*i_{A}+\cfrac{2}{\sqrt{3}}*i_{B}iα=iAiβ=31∗iA+32∗iB
3.2 Park变换
Park
变换的本质是静止坐标系αβ\alpha\betaαβ乘以一个旋转矩阵,从而得到dqdqdq坐标系,其中;
- ddd 轴又叫直轴,方向与转子磁链方向重合;
- qqq 轴又叫交轴,方向与转子磁链方向垂直;
所以,帕克变换又叫交直变换,由静止坐标系αβ\alpha\betaαβ上的交流量最终变换到dqdqdq坐标系上的直流量;
Park
变换满足以下公式;
id=iα∗cosθ+iβ∗cosθiq=−iα∗cosθ+iβ∗cosθi_{d}=i_{\alpha}*cos\theta+i_{\beta}*cos\theta \\
i_{q}=-i_{\alpha}*cos\theta+i_{\beta}*cos\thetaid=iα∗cosθ+iβ∗cosθiq=−iα∗cosθ+iβ∗cosθ
3.3 Park反变换
Park
又叫直交变换,满足以下公式:
iα=id∗cosθ−iq∗sinθiβ=id∗cosθ+iq∗cosθi_{\alpha}=i_{d}*cos\theta-i_{q}*sin\theta \\
i_{\beta}=i_{d}*cos\theta+i_{q}*cos\thetaiα=id∗cosθ−iq∗sinθiβ=id∗cosθ+iq∗cosθ
4 SVPWM
实际的马鞍波如下图所示;
5 反馈部分
反馈部分需要采集相电流,电角度和速度,如下图所示;
红色曲线表示 iAi_{A}iA;
黄色曲线表示 iBi_{B}iB;
蓝色曲线表示电角度 θe\theta_{e}θe;
图中黄色箭头所指的点,可以看到满足以下条件:
θe=0iA=0\theta_{e} = 0 \\
i_{A} = 0θe=0iA=0
5.1 相电流
相电流采样通常有三种方案;
- 单电阻采样;
- 双电阻采样;
- 三电阻采样;
5.2 电角度和转速
电角度的测量需要通过对编码器进行正交解码,STM32
的TIM
定时器自带编码器接口,可以很轻松实现对正交编码器的正交编码;
6 闭环控制
6.1 电流环
最终给出电流闭环的结构,如下图所示;
红色曲线表示 iαi_{\alpha}iα
黄色曲线表示 iβi_{\beta}iβ
粉色曲线表示 iqi_{q}iq
蓝色曲线表示 idi_{d}id
由于使用的表贴式PMSM
,满足以下条件:
Ld=Lq=LsL_{d} = L_{q} = L_{s}Ld=Lq=Ls
所以,ddd轴和qqq轴可以共用同一套PI
参数,可以通过经验试凑法进行参数整定,或者可以通过测量电机参数,计算PI
参数的大致范围,然后再进行细调。
6.2 速度环
电流环调节稳定之后,速度环需要调整速度PI控制器,这里可以参阅如何调试PI
参数。
6.3 位置环
红色曲线表示给定位置;
黄色曲线表示实际位置;
粉色曲线表示给定转速;
蓝色曲线表示实际转速;
写在最后
经过一段时间的调试,终于完成了从零到一的FOC
算法框架,由于能力有限,有的地方理解不到位,需要细加斟酌,如有错误的地方,希望斧正,另外由于FOC
内容较多,篇幅较长,时间有限,后续会进一步进行补充,细节的部分会单独开篇进行讨论。
有感FOC算法学习与实现总结的更多相关文章
- BLDC有感FOC算法理论及其STM32软硬件实现
位置传感器:旋转编码器 MCU:STM32F405RGT6 功率MOS驱动芯片:DRV8301 全文均假设在无弱磁控制的情况下 FOC算法理论 首先,我们要知道FO ...
- DSP算法学习-过采样技术
DSP算法学习-过采样技术 彭会锋 2015-04-27 23:23:47 参考论文: 1 http://wr.lib.tsinghua.edu.cn/sites/default/files/1207 ...
- 算法学习之C语言基础
算法学习,先熟悉一下C语言哈!!! #include <conio.h> #include<stdio.h> int main(){ printf(+); getch(); ; ...
- Python之路,Day21 - 常用算法学习
Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...
- C / C++算法学习笔记(8)-SHELL排序
原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...
- 算法学习之BFS、DFS入门
算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...
- 二次剩余Cipolla算法学习笔记
对于同余式 \[x^2 \equiv n \pmod p\] 若对于给定的\(n, P\),存在\(x\)满足上面的式子,则乘\(n\)在模\(p\)意义下是二次剩余,否则为非二次剩余 我们需要计算的 ...
- Manacher算法学习笔记 | LeetCode#5
Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
随机推荐
- C++常用注意事项
new和delete:现在还没有new[][]和delete[][],所以在用这些的时候最好用循环解决,先一个指针的数组,然后再初始化,每个元素再new一下,这样就满足了多维数组的条件:比如: int ...
- 无序map 记录一下
unordered_map<int ,int >mp; unordered_map是基于hash表实现的,查找元素的复杂度可以达到o(1),查找n个元素,复杂度为o(n). map是基于红 ...
- Spark SQL源码解析(二)Antlr4解析Sql并生成树
Spark SQL原理解析前言: Spark SQL源码剖析(一)SQL解析框架Catalyst流程概述 这一次要开始真正介绍Spark解析SQL的流程,首先是从Sql Parse阶段开始,简单点说, ...
- [linux][nginx] 通过nginx扩展nginx-rtmp-module简单做了一个流媒体直播
做的过程出现很多问题,环境其实就需要nginx就可以,然后就是在播放的问题,m3u8的格式,mac直接访问就支持,苹果系统原生H5支持m3u8,还有就是手机直接访问也支持!但是其他其他系统PC端不支持 ...
- 设计模式-原型模式(Prototype)【重点:浅复制与深复制】
讲故事 最近重温了一下星爷的<唐伯虎点秋香>,依然让我捧腹不已,幻想着要是我也能有一名秋香如此的侍女,夫复何求呀,带着这个美好的幻想沉沉睡去... 突然想到,我是一名程序猿呀,想要什么对象 ...
- Springboot:员工管理之国际化(十(3))
1:IDEA编码设置UTF-8 2:创建国际化文件 i18n\login.properties #默认语言 i18n\login_en_US.properties #英文语言 i18n\login_z ...
- 看完肯定懂的 Java 字符串常量池指南
字符串问题可谓是 Java 中经久不衰的问题,尤其是字符串常量池经常作为面试题出现.可即便是看似简单而又经常被提起的问题,还是有好多同学一知半解,看上去懂了,仔细分析起来却又发现不太明白. 背景说明 ...
- python信息收集(一)
在渗透测试初期,需要进行大量的信息收集.一般情况下,信息收集可以分为两大类----被动信息收集和主动信息收集. 其中,被动信息收集主要是通过各种公开的渠道来获取目标系统的信息,例如:站 ...
- 使用pthread进行编程
使用pthread进行并行编程 进程与线程 进程是一个运行程序的实例:线程像一个轻量级的进程:在一个共享内存系统中,一个进程可以有多个线程 POSIX® Threads: 即 Pthreads,是一个 ...
- PHP如何实现判断提交的是什么方式
function get_request_method() { // $_SERVER包含了诸多头信息.路径.以及脚本位置等等信息的数组,这个数组中的项目有web服务器创建. if (isset($_ ...