基于STM32的有感FOC算法学习与实现总结

1 前言

Field Oriented Control 磁场定向控制 (FOC),FOC是有效换向的公认方法。FOC的核心是估计转子电场的方向。一旦估计了转子的电角度,就将电动机的三相换相,以使定子磁场垂直于转子磁场。本文参考了TImicrochip的相关文档,基于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α​=iA​iβ​=3​1​∗iA​+3​2​∗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 电角度和转速

电角度的测量需要通过对编码器进行正交解码,STM32TIM定时器自带编码器接口,可以很轻松实现对正交编码器的正交编码;

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算法学习与实现总结的更多相关文章

  1. BLDC有感FOC算法理论及其STM32软硬件实现

    位置传感器:旋转编码器          MCU:STM32F405RGT6          功率MOS驱动芯片:DRV8301 全文均假设在无弱磁控制的情况下 FOC算法理论 首先,我们要知道FO ...

  2. DSP算法学习-过采样技术

    DSP算法学习-过采样技术 彭会锋 2015-04-27 23:23:47 参考论文: 1 http://wr.lib.tsinghua.edu.cn/sites/default/files/1207 ...

  3. 算法学习之C语言基础

    算法学习,先熟悉一下C语言哈!!! #include <conio.h> #include<stdio.h> int main(){ printf(+); getch(); ; ...

  4. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  5. C / C++算法学习笔记(8)-SHELL排序

    原始地址:C / C++算法学习笔记(8)-SHELL排序 基本思想 先取一个小于n的整数d1作为第一个增量(gap),把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组 ...

  6. 算法学习之BFS、DFS入门

    算法学习之BFS.DFS入门 0x1 问题描述 迷宫的最短路径 给定一个大小为N*M的迷宫.迷宫由通道和墙壁组成,每一步可以向相邻的上下左右四格的通道移动.请求出从起点到终点所需的最小步数.如果不能到 ...

  7. 二次剩余Cipolla算法学习笔记

    对于同余式 \[x^2 \equiv n \pmod p\] 若对于给定的\(n, P\),存在\(x\)满足上面的式子,则乘\(n\)在模\(p\)意义下是二次剩余,否则为非二次剩余 我们需要计算的 ...

  8. Manacher算法学习笔记 | LeetCode#5

    Manacher算法学习笔记 DECLARATION 引用来源:https://www.cnblogs.com/grandyang/p/4475985.html CONTENT 用途:寻找一个字符串的 ...

  9. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

随机推荐

  1. 架构师修炼之微服务部署 - Docker简介

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是 ...

  2. vue2.x学习笔记(十三)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12595860.html. 组件的注册 注册组件有一些规范约定与注意事项. 组件名的命名规范 在注册一个组件的时候, ...

  3. Centos安装docker+vulhub搭建

    嫌弃平常因为复现搭建环境所带来的麻烦,所以打算用docker来管理搭建靶机 准备一个纯净的Centos系统虚拟机安装,这里已经安装好了就不演示怎么在虚拟机安装 安装Docker最基本的要求是Linux ...

  4. 使用NLP从文章中自动提取关键字

    背景 在研究和新闻文章中,关键词构成了一个重要的组成部分,因为它们提供了文章内容的简洁表示.关键词在从信息检索系统,书目数据库和搜索引擎优化中定位文章方面也起着至关重要的作用.关键词还有助于将文章分类 ...

  5. 2、flink入门程序Wordcount和sql实现

    一.DataStream Wordcount 代码地址:https://gitee.com/nltxwz_xxd/abc_bigdata 基于scala实现 maven依赖如下: <depend ...

  6. 解决Oracle在命令行下无法使用del等键问题

    前言: Oracle使用Linux命令行进行编辑? 有PL/SQL development,SQL development等工具,为何用Linux命令行? 但也免不了有用的的时候 以下是解决在Linu ...

  7. 自定义spring boot的自动配置

    文章目录 添加Maven依赖 创建自定义 Auto-Configuration 添加Class Conditions 添加 bean Conditions Property Conditions Re ...

  8. js 函数的多图片预加载(preload) 带插件版完整解析

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS实现图片预加载效果 本篇文章写的 ...

  9. 【Linux常见命令】cat命令

    cat - concatenate files and print on the standard output cat 命令用于连接文件并打印到标准输出设备上. 用法: 1. cat file 查看 ...

  10. 【Linux常见命令】tr命令

    tr - translate or delete characters tr 命令用于转换或删除文件中的字符. tr 指令从标准输入设备读取数据,经过字符串转译后,将结果输出到标准输出设备. 语法: ...