【从零开始实现stm32无刷电机FOC】【理论】【3/6 位置、速度、电流控制】

目录

  • PID控制
  • 滤波
  • 单独位置控制
  • 单独速度控制
  • 单独电流控制
  • 位置-速度-电流串级控制

上一节,通过对SVPWM的推导,我们获得了控制电机转子任意受力的能力。本节,我们选用上节得到的转子dq轴解耦的SVPWM形式,对转子受力进行合理控制,实现FOC电机控制的最终目标:位置、速度、电流控制。

PID控制

看到本节的人,大概率是了解PID(Proportional比例,Integral积分,Derivative微分)控制的,也是本人能力所限,在此不进行完整讲解,也不涉及高级控制方法。
不管是电机的位置还是速度还是电流,都可以视为被控参数。
从直观想法上,当一个被控参数实时值小于目标值时,需要施加外力使被控参数提高。如果施加的外力过大,被控参数会被超调,导致被控参数在目标值附近的振荡幅度越来大;如果施加的外力过小,参数到达目标值的速度又太慢。因此需要得到一个合适的外力,使得被控参数既不会振荡越来越剧烈,调节速度也不会太慢。从这个直观的控制想法就是PID中的P。单纯使用P控制时,设置外力大小=被控参数与目标值的差距*P系数,所谓差距越大施加的外力越大,是很直观的。如果P系数设置的比较小,虽然被控参数不会一直振荡了,可以慢慢稳定到目标值了,但是调节速度太慢了,此时可以加入PID的D控制,使得原先振荡的被控参数快速收缩到目标值。
再从直观想法上去思考D控制,纯P控制下被控参数靠近以及掠过目标值时,一个与速度反方向的纠偏力有助于被控参数在目标值附近产生制动,让被控参数更快地收缩到目标值。这个与速度反方向的纠偏力就是D控制。加入D控制后,控制外力大小=被控参数与目标值的差距*P系数+被控参数速度*D系数。当纯D控制时,由于初始状态下被控参数的速度为0 ,被控参数不会得到外力,由此也可以看出,P控制是提供外力的,D控制是约束外力的。如果D系数选择过大,则轻微的速度就能够引起巨大的外力;如果D系数选择过小,则不足以约束P控制生产的外力,被控参数稳定就慢。
还是从直观想法上去思考I控制,当被控参数存在负载时,单纯的P控制提供的外力可能不足以支撑这个负载,因此可以加上这样一个机制,把被控参数与目标值差距随着时间累计起来,这样就能得到存在负载时被控参数到达目标值所需的动力了。这个机制就是I控制。加入I控制后,控制外力大小=被控参数与目标值的差距*P系数+被控参数速度*D系数+被控参数与目标值差距随时间累计*I系数。
在控制电机时,没有特殊情况下,由于d轴对电机旋转不生成贡献,pid控制可以只控制q轴的力,d轴可以进行控制也可以直接设置输出为0。

滤波

在速度控制和电流控制时,受限于采样精度和频率等,速度和电流是不稳定的且变化比较快,例如下图是电机速度的直接计算值,存在很多锯齿,在真实值附近波动,如果直接使用这样的值,会导致PID输出波动较大,
在这里插入图片描述
下图为经过滤波后,比较接近真实值:在这里插入图片描述滤波方法有很多种,比如低通滤波、卡尔曼滤波,本质就是在夹杂了噪音的数据中估计出一个接近真实的值。由于滤波是一个非常大的课题,原理不在本节进行说明,可直接查看后续实践部分的代码,只是在此提醒,输入PID控制器前,需要进行滤波计算。

单独位置控制

位置指的是角度,要注意,有两种物理角度,一个是电机角度,一个是转子角度,两者是不一样的。电机编码器是安装在转子外壳上的,因此编码器获得的是转子外壳的角度,而转子位于内部,由于转子外壳和转子是互相固定的,两种角度有一个固定偏移,安装的时候编码器零度不可能正好对着转子永磁体。编码器角度由编码器提供,转子角度也就能知道了。在后续实践部分会说明怎么获得这个固定偏移,在本节只需完成理论计算部分。合成的磁矢量是作用于转子永磁体的,因此理论计算是在转子角度基础上计算的。
在这里插入图片描述
有两种方法可以实现转子的位置控制:

pid法:
直观的思想就是用转子q轴不停地左右拉扯转子,转子一旦偏离目标位置了,就在q轴施加一个反向的力拉扯一下,偏离越大,拉扯力越大,让转子回到目标位置。
优点:q轴能够提供较大的力,位置控制比较迅速有力。
缺点:由于q轴与转子永磁体磁矢量相差90度,因此需要知道转子实时位置(角度)。
由于在有编码器的情况下,转子实时位置很容易获得,因此大部分情况下使用pid控制位置。
在这里插入图片描述
单独位置的FOC控制框图如下图。图中的意思是输入一个目标位置,与编码器计算得到的角度进行差值计算,然后输入pid控制器,只控制转子q轴强度,d轴强度直接设置为0,最后将dq轴强度(0~1之间)输入到前文推导得到的SVPWM函数中,输出得到uvw桥臂的pwm占空比。这里要注意的是输入的目标位置 θ i n \theta_{in} θin可以是转子角度或者编码器角度或者多圈角度,只要与反馈的 θ \theta θ保持同一种角度即可。
在这里插入图片描述

d轴强拖:
核心思想是人为控制线圈生成一个目标线圈磁矢量,永磁铁的d轴会被吸引到目标位置。注意该方法是吸引d轴到目标位置。
优点:由于生成的就是目标位置,因此无需知道转子角度,转子自然会被吸引过去。
缺点:切向分力小,轻微切向外力就能让转子明显脱离位置。
在这里插入图片描述

单独速度控制

速度控制使用d轴拖动的方法就不合适了,因为d轴拖动就是为了不使用编码器,没了编码器数据就很难计算速度了。速度控制可以使用pid控制方法,但是由于电机旋转过程中速度值变化比较不稳定,而D控制是与被控参数的变化程度成正比,所以一般只使用PI控制。
速度的计算方式非常简单,就是 当前角度 − 上次记录的角度 Δ t \frac{当前角度-上次记录的角度}{\Delta{t}} Δt当前角度上次记录的角度
将目标速度与实时速度的差值输入到PI控制中就能实现速度控制。
单独速度的FOC控制框图如下图。
在这里插入图片描述

单独电流控制

电机的电流代表了力矩大小。转子的受力在dq轴解耦后,可以发现只有q轴才对电机旋转生成贡献,只有q轴才产生力矩,因此只需要控制q轴电流即可控制电机力矩。如果对d轴电流也进行控制可以提升电机电流利用率,降低发热,提升电机最高力矩输出。
在这里插入图片描述
获得电机电流:
转子dq轴是一个抽象出来的概念,是为了方便解耦转子受力的,无法直接检测dq轴电流,能够直接检测的电流是电机相线电路上的电流,dq轴电流可以根据相线电流计算得到。
相线电流的检测有很多种,最常见的两种方式是:1.电流检测放置在上下桥臂功率管之间,称为在线检测。2.电流检测放置在下桥臂与GND之间,称为低端检测。
在这里插入图片描述
由于一个节点流出电流+流入电流=0,因此三个相线只需要两个电流检测单元即可。但是低侧检测最好使用三个电流检测单元,因为当某个桥臂的pwm占空比为1或者接近1时,该下桥臂将没有电流经过或者电流不稳定,三个相线就只剩下一个电流检测能够正常采集电流,有三个电流检测单元后,可以三个都读取电流,根据占空比情况选择其中两个电流值,另一个通过电流总和为0进行计算。在线检测则没有该困扰,因为不管下桥臂是否处于关闭状态,相线始终有电流经过。由于在线检测位置的电压比较大,因此在线检测的电流检测单元需要能够承受较大电压,价格比较高。

获得三个相线电流后,接下来想办法转换为dq轴电流。可以将相线电流投影到dq轴上,这样就能直接得到dq轴电流了,不过目前主流做法是先将dq轴投影到 α \alpha α轴和 β \beta β轴(这步称为clark变换),再将 α \alpha α轴和 β \beta β轴电流投影到dq轴(这步称为park变换),因为在更高级的无位置传感器FOC中会用到 α \alpha α轴和 β \beta β轴电流。

clark变换:
将三相电流 I u , I v , I w I_u,I_v,I_w Iu,Iv,Iw投影到 I α , I β I_\alpha,I_\beta Iα,Iβ上,从下图的几何关系可以看出,投影表达式为:
{ I α = I u − I v ∗ cos ⁡ 6 0 ° − I w ∗ cos ⁡ 6 0 ° I β = I v ∗ cos ⁡ 3 0 ° − I w ∗ cos ⁡ 3 0 ° \begin{cases} I_\alpha=I_u-I_v*\cos{60^{\degree}}-I_w*\cos{60^{\degree}} \\ I_\beta=I_v*\cos{30^{\degree}}-I_w*\cos{30^{\degree}} \end{cases} {Iα=IuIvcos60°Iwcos60°Iβ=Ivcos30°Iwcos30°
在这里插入图片描述

park变换:
I α , I β I_\alpha,I_\beta Iα,Iβ轴投影到dq轴(实际上就是乘以一个旋转矩阵),从下图的几何关系可以看出,投影表达式为:
{ I d = I α ∗ cos ⁡ θ + I β ∗ sin ⁡ θ I q = − I α ∗ sin ⁡ θ + I β ∗ cos ⁡ θ \begin{cases} I_d=I_\alpha*\cos{\theta}+I_\beta*\sin{\theta} \\ I_q=-I_\alpha*\sin{\theta}+I_\beta*\cos{\theta} \end{cases} {Id=Iαcosθ+IβsinθIq=Iαsinθ+Iβcosθ
在这里插入图片描述

单独电流的FOC控制图如下图,由于电流变化比较不稳定,所以与被控参数变化速度有关的D控制在这里通常不使用,只使用PI控制。
在这里插入图片描述

位置-速度-电流串级控制

如果有这样一个需求:控制位置时,规定电机归位过程中的最大速度以及最大电流;或者控制速度时,规定电机到达目标速度过程中的最大电流,那么就需要使用到位置-速度-电流串级控制。这里的串级控制并不是控制电机达到某一个电流值或者速度值,而是要求电机在控制过程中能够达到的最大电流值或者最大速度值,因为无法做到电机保持在一个位置的时候,依然有速度或者有电流。
串级控制的意思就是当前控制环的输入为上一个控制环的输出,以串级位置控制为例,控制框图为:
在这里插入图片描述


理论部分目前到此结束,我们得到了SVPWM的计算方法以及位置、速度、电流的控制流程,可以进行FOC代码编写了,但是实践的时候会遇到种种问题,比如相线的顺序、pwm占空比怎么落实、电流采样时刻、外设的配置等,接下来的实践部分使用超常见的单片机性价比之王:smt32f103c8t6以及stm32cube工具,不使用电机库,从零开始实现完整的FOC控制。

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

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

相关文章

STM32实战篇:按键控制LED

按键控制LED 功能要求 有两个按键,分别控制两个LED灯。当按键按下后,灯的亮暗状态改变。实物如下图所示: 由图可知,按键一端直接接地,故另一端所对应IO引脚的输入模式应该为上拉输入模式。 实现代码 #include "…

nvm下载

nvm下载 1.下载nvm安装包2.安装nvm3.修改settings.txt4.安装成功5.继续配置 下载nvm之前,你最好将你电脑上的node卸载掉,直接在winx中卸载就行 1.下载nvm安装包 https://github.com/coreybutler/nvm-windows/releases 2.安装nvm 3.修改settings.txt root: E:\nvm\install\nv…

DMA方式的知识点笔记

苏泽 “弃工从研”的路上很孤独,于是我记下了些许笔记相伴,希望能够帮助到大家 目录 1. DMA基本概念 2. DMA传送过程 易错点 DMA控制器操作流程 3. DMA传送方式 这是单总线的结果 (CPU说了算 所以不会产生于CPU的冲突) 这…

新闻资讯整合平台:一站式满足企业信息需求

摘要: 面对信息爆炸的时代,企业如何在海量数据中快速获取有价值资讯,成为提升竞争力的关键。本文将探讨如何通过一站式新闻资讯整合平台,实现企业信息需求的全面满足,提升决策效率,同时介绍实用工具推荐&a…

Transformer中的编码器和解码器结构有什么不同?

Transformer背后的核心概念:注意力机制;编码器-解码器结构;多头注意力等; 例如:The cat sat on the mat; 1、嵌入: 首先,模型将输入序列中的每个单词嵌入到一个高维向量中表示&…

Vuforia AR篇(八)— AR塔防上篇

目录 前言一、设置Vuforia AR环境1. 添加AR Camera2. 设置目标图像 二、创建塔防游戏基础1. 导入素材2. 搭建场景3. 创建敌人4. 创建脚本 前言 在增强现实(AR)技术快速发展的今天,Vuforia作为一个强大的AR开发平台,为开发者提供了…

工业机床CNC设备如何上云?

工业机床CNC设备如何上云? 工业机床的计算机数控(CNC)设备实现远程监控数据上云,是现代制造业智能化转型的关键一环。这一过程不仅能够实时监测设备状态、优化生产流程,还能通过大数据分析提升生产效率与产品质量&…

数据结构--二叉树相关习题5(判断二叉树是否是完全二叉树 )

1.判断二叉树是否是完全二叉树 辨别: 不能使用递归或者算节点个数和高度来判断。 满二叉树可以用高度和节点来判断,因为是完整的。 但是完全二叉树前面是满的,但是最后一层是从左到右连续这种 如果仍然用这种方法的话,如下图…

Chromium编译指南2024 Linux篇-同步Chromium第三方库(四)

1.引言 在成功拉取Chromium源码并创建新分支后,我们需要进一步配置开发环境。这包括拉取必要的第三方库以及设置hooks,以确保我们能够顺利进行编译和开发工作。以下步骤将详细介绍如何进行这些配置。 2.拉取第三方库以及hooks Chromium 使用了大量的第…

WSL2编译使用6.6版本内核

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、有什么变化二、下载6.6内核三、开始编译1.安装环境2.开始编译 四、使用1.杀死虚拟机2.防止内核文件3.修改配置文件 总结 前言 最近出了一件不大不小的事&a…

【前端速通系列|第二篇】Vue3前置知识

文章目录 1.前言2.包管理工具npm2.1下载node.js2.2配置 npm 镜像源2.3 npm 常用命令 3.Vite构建工具4.Vue3组件化5.Vue3运行原理 1.前言 本系列文章旨在帮助大家快速上手前端开发。 2.包管理工具npm npm 是 node.js中进行 包管理 的工具. 类似于Java中的Maven。 2.1下载nod…

C++之goto陈述

关键字 goto用于控制程式执行的顺序&#xff0c;使程式直接跳到指定标签(lable) 的地方继续执行。 形式如下 标签可以是任意的识别字&#xff0c;后面接一个冒号。 举例如下 #include <iostream>int main() {goto label_one;label_one: {std::cout << "Lab…

第241题| 确定极限中参数问题 | 武忠祥老师每日一题

解题思路&#xff1a;确定极限中的参数的方法是求这个极限&#xff1b;求极限根据类型选方法。 形可以用到三种方法&#xff1a;洛必达&#xff0c;等价&#xff0c;泰勒。 先观察题目&#xff0c;将看成一个整体&#xff0c;同时,并令,整理之后如下&#xff1a; 这里也要想办…

如何使用uer做多分类任务

如何使用uer做多分类任务 语料集下载 找到这里点击即可 里面是这有json文件的 因此我们对此要做一些处理&#xff0c;将其转为tsv格式 # -*- coding: utf-8 -*- import json import csv import chardet# 检测文件编码 def detect_encoding(file_path):with open(file_path,…

16:9横屏短视频素材库有哪些?横屏短视频素材网站分享

在这个视觉内容至关重要的时代&#xff0c;16:9横屏视频因其宽广的画面和优越的观赏体验&#xff0c;已经成为无数创作者和营销专家的首选格式。但要创造出吸引人的横屏视频&#xff0c;高质量的视频素材库是不可或缺的。不管你是资深视频制作人还是刚入行的新手&#xff0c;下…

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar

13 - matlab m_map地学绘图工具基础函数 - 介绍创建管理颜色映射的函数m_colmap和轮廓图绘制颜色条的函数m_contfbar 0. 引言1. 关于m_colmap2. 关于m_contfbar3. 结语 0. 引言 本篇介绍下m_map中用于创建和管理颜色映射函数&#xff08;m_colmap&#xff09;和 为轮廓图绘制颜…

JFlash读取和烧录加密stm32程序

JFlash读取和烧录加密stm32程序 安装后JFlash所在的目录&#xff1a;C:\Program Files\SEGGER\JLink 一、烧写加密程序 1、打开C:\Program Files\SEGGER\JLink目录&#xff0c;找到JFlash.exe,双击它&#xff0c;就可以打开该执行程序。见下图&#xff1a; 2、选择“Create …

微信小程序毕业设计-书店系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

骏网一卡通之类的游戏卡有什么用?

感觉现在打端游的人越来越少了 而且游戏充值卡显得就很鸡肋&#xff0c;在家里整理东西&#xff0c;翻出来好多骏网一卡通&#xff0c;但是我又不打游戏 想着把这卡送给有需要的朋友&#xff0c;不然也是浪费&#xff0c;问了一圈送不出去 还好最后在收卡云上卖掉了&#xf…

【QT中实现摄像头播放、以及视频录制】

学习分享 1、效果图2、camerathread.h3、camerathread.cpp4、mainwindow.h5、mainwindow.cpp6、main.cpp 1、效果图 2、camerathread.h #ifndef CAMERATHREAD_H #define CAMERATHREAD_H#include <QObject> #include <QThread> #include <QDebug> #include &…