FOC矢量控制


前言

  FOC(field-oriented control)为磁场定向控制,又称为矢量控制(vectorcontrol),是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最佳选择。FOC 可以精确地控制磁场大小与方向,使得电机转矩平稳、噪声小、效率高,并且具有高速的动态响应。目前已在很多应用上逐步替代传统的控制方式,在运动控制行业中备受瞩目。
  我们都知道,电流可以产生磁场,并且磁场大小与电流大小成正比,因此为了使定子构造最合适的旋转磁场,需要精确控制线电流。想要磁场旋转就需要线电流做着正弦变化,而3 组线圈绕组的角度差,就使得三相电流需要时刻做相位差为 120 度的正弦变化,这时可使定子构造最合适的旋转磁场,显然简单的 6 步换向无法控制三相电流做正弦变化,转矩在一定程度上会有跳变,这样无法输出稳定转矩,因此需要 FOC 来保持转子的扭矩时刻连续稳定可调。下面总结六步换向和 FOC 控制方式的对比表,如表:
在这里插入图片描述

  本文主要介绍无刷直流电机BLDC的FOC矢量控制的实现


一、开发环境搭建

  X-CUBE-MCSDK 是 ST(意法半导体)推出的 STM32 电机控制软件开发套件(MCSDK),使用该软件对电机进行配置后,可以直接生成 FOC 控制电机源码工程,简化了开发过程。

1.1 X-CUBE-MCSDK软件的安装

  可以直接去ST官网下载,软件共有两种版本:X-CUBE-MCSDK 和 X-CUBE-MCSDK-FUL,其中 X-CUBE-MCSDK 在一些核心的算法使用 lib 的形式提供给用户,X-CUBE-MCSDK-FUL 则是完整的源码,如下图所示,不过其中 X-CUBE-MCSDK-FUL 在注册并获得批准后方可下载,X-CUBE-MCSDK 则不需要批准可以直接下载。也可以在附件资源中下载。

官网:https://www.st.com/content/st_com/zh.html
在这里插入图片描述
  下载后可以得到名为:X-CUBE-MCSDK-FUL_5.4.4.exe 的安装包,双击安装即可,安装过程很简单这里就不在截图说明,注意,安装路径中不能有中文。安装完成后会在桌面生成 MotorControlWorkbench 5.4.4 和 Motor Profiler 5.4.4 两个软件,Motor Profiler 5.4.4 是用于自动测量电机参数的软件,不过使用该软件需要使用 ST 相关的主板和电机驱动板才可以,这里就不介绍该软件的时候方法。MotorControl Workbench 5.4.4 才是我们需要的软件,可以使用该软件配置电机驱动板等参数后就可以生成源代码。
  打开MotorControlWorkbench 5.4.4可能会提示以下,直接点下载即可
在这里插入图片描述

1.2 STM32CubeMX软件安装

  完成了 X-CUBE-MCSDK-FUL 的安装,接着我们还需要安装 STM32CubeMX,因为使用 X-CUBE-MCSDK-FUL 配置完之后,在生成代码时需要使用到 STM32CubeMX。

安装详见https://blog.csdn.net/weixin_44567668/article/details/133170724

二、FOC原理介绍

2.1 FOC框图介绍

在这里插入图片描述
  上图是以电流闭环控制为例,也就是让电机始终保持一个恒定力矩(力矩与电流成正比)。从上图可以看到最左边的 Iq_Ref 和 Id_Ref 两个变量经过 PID 控制器进行反馈调节,其中涉及到几个变换模块,包括:Clarke 变换、Park 变换以及反 Park 变换,最后是 SVPWM 模块作用到三相逆变器进而控制电机旋转。相信大家对上面这些过程不是很理解,没关系,我们先来大致的概括下 FOC 的整个控制框图,后面会对整体框架进行拆分讲解。

① 对电机三相电流进行采样得到:ia、ib、ic;
② 将 ia、ib、ic 经过 clarke 变换得到 iα、iβ;
③ 将 iα、iβ经过 park 变换得到 iq、id;
④ 计算 iq、id 和其设定值 iq_Ref、id_Ref 的误差;
⑤ 将上述误差输入到两个PID(只用到 PI)控制器,得到输出的控制电压 Vq、Vd;
⑥ 将 Vq、Vd 进行反 park 变换得到 Vα、Vβ;
⑦ 将Vα、Vβ 输入 SVPWM 模块进行调制,合成电压空间矢量,输出该时刻三个半桥的开关状态进而控制电机旋转;
⑧ 循环上述步骤。

2.2 FOC坐标变换

  假设我们将一个 PMSM 电机手动让其匀速旋转,此时使用示波器观察它的三相输出电压(反电动势),我们会发现示波器上会得到三组正弦波,并且三组正弦波之间两两相位差为120°。
在这里插入图片描述
  所以反过来我们在三相无刷电机的三相线圈上输入上述三相正弦电压,那么就可以驱动无刷电机平稳高效地旋转了。而这正是 FOC 驱动无刷电机的基本手段,但是从控制的角度来看,我们根本就不想跟三个正弦波打交道,因为对于非线性的信号进行准确控制就要使用复杂的高阶控制器,这对于建模成本、处理器算力、控制实时性等都是非常不利的,那么有没有什么方法可以将被控制量线性化呢?答案是当然有的,只需要应用一些数学技巧。

2.2.1 Clarke变换

  当 PMSM 电机匀速运转时,将采集到相位相差 120°的三相电流 Ia、Ib、Ic 使用三相坐标系表示,如下图绿色线所示:
在这里插入图片描述
  我们可以利用一些数学小技巧,将三相坐标系变换成直角坐标系,我们把新的直角坐标系命名为 α-β 坐标系(如图 27.1.2.1.1 红色线所示),变换原则是电流产生的磁场相等。Clarck 变换用于将三相静止坐标系变换到两相静止坐标系,变换前后在坐标系中产生的磁场等效。
在这里插入图片描述
假设变换前三相定子绕组匝数为𝑁3,变换后的两相定子绕组匝数为𝑁2,根据磁动量守恒可得:
在这里插入图片描述
提取𝑖𝛼和𝑖𝛽可以得到:
在这里插入图片描述
遵循恒幅值不变原理可得:
在这里插入图片描述
所以:
在这里插入图片描述
根据基尔霍夫定律(KCL),所以归纳:
在这里插入图片描述
最后化简得:
在这里插入图片描述
经过 Clarke 变换后就变成了直角坐标系啦!变换前后的波形如图:
在这里插入图片描述
  可以看到变换后还是正弦波,虽然少了一个需要控制的变量,但是新的变量还是非线性的(正弦),控制它依旧难度很大,那有没有办法把它们线性化呢,当然有的,接着就看下Park 变换

2.2.2 Park变换

  Park 变换可以将电机从两相静止坐标系变换到两相旋转坐标系(dq 坐标系),从而解耦出电机转矩分量和电机的励磁分量,这两个分量相互垂直、互不影响。反 Park 变换即为Park 的逆变换。首先我们来看下 Park 变换的原理,这里将 Clarke 变换后的 α—β 坐标系旋转θ度,其中θ为转子旋转的角度,如下图:
在这里插入图片描述
  图中d 轴方向与转子内磁场方向重合,称为直轴;q 轴方向与转子内磁场方向垂直,称为交轴。如图 27.1.2.2.2 所示:
在这里插入图片描述
此时我们将 α—β 坐标系变换到 d-q 坐标系,即 Park 变换;依据坐标变换,Park 变换矩阵为:
在这里插入图片描述
变换公式如下:

在这里插入图片描述
在将 Park 变换后的结果在经过 PID 控制器,PI 运算后的输出结果在进行反 Park 变换,反 Park 变换矩阵为:
在这里插入图片描述
变换公式如下:
在这里插入图片描述
  首先 α—β 坐标系经过 Park 变换后,即为 d-q 坐标系,该坐标系是始终跟着转子旋转的,旋转角度θ需通过编码器/霍尔传感器读取。经过这一步的变换,我们会发现,一个匀速旋转向量在这个坐标系下变成了一个定值!(因为参考系相对于该向量静止了),这个坐标系下两个控制变量都被线性化了!Park 变换前后波形如图所示:
在这里插入图片描述
  Park 变换后的控制量为 Iq、Id,很显然线性化后的控制量我们就可以使用 PID 来进行控制了;但是为什么我们还要进行反 Park 变换,将其又变换为 α—β 坐标系呢?因为 SVPWM算法的实现需要用到静止的 α—β 坐标系,所以当我们完成了控制信号的 PID 运算后,还需进行反 Park 变换。关于 PID 控制部分这里就不赘述了,大家可以查看以下链接:
https://blog.csdn.net/weixin_44567668/article/details/130075152

2.2.3 FOC的目的

  经过前面的一通操作我们将转子磁链进行了解耦,分解为转子旋转的径向和切向这两个方向的变量:Iq 以及 Id,那这两个控制量到底代表什么含义呢?FOC 的目的如图所示:
在这里插入图片描述
经过上述分析,我们得知:
①Iq 是我们需要的。代表了期望的力矩输出;
②Id 是我们不需要的。我们希望尽可能把它控制为 0;

2.3 SVPWM算法

2.3.1 SVPWM介绍

  从前面的学习,我们知道如果要平稳地驱动三相电机转动,我们就需要生成三个相位相差 120 度的正弦波为了使输出电流近乎于正弦波,可以使用 PWM 的方式,通过调整占空比使等效电流近似为正弦波,这种 PWM 也就是 SPWM。SPWM 是从电源的角度出发,构造出旋转所需的正弦电压,这种方式比较适合用作逆变器,但是对于无刷或者永磁同步电机,调节过的电源实际在定子线圈中产生的电流并不一定是所需的结果。这也就是所谓的开环,是没有反馈的。所以这种控制方式还是不能较为准确的控制定子电流。因此这种永磁无刷电机直接通三相交流电并不一定能很平稳的旋转起来。不然的话纯硬件就可以产生规则的电流,哪还需要微控制器做复杂运算。
  隆重介绍,SVPWM,是的,它还是 PWM,既然用 MOS 管调制就离不开 PWM,它和SPWM 的区别是 SVPWM 依靠的是 MOS 管的开关顺序和开关时间来调制有效电流。而SPWM 不依赖开关顺序,3 相独立调制。SVPWM 是依赖开关顺序的,需要把控整体的 3 相开关,让它们组合出不同顺序和时间的开关序列,以此模拟出正弦电流。SVPWM 癿优点主要有:优化谐波程度比较高,消除谐波效果要比 SPWM 好,实现容易,可以提高电压利用率。比较适合数字化控制系统。
  SVPWM 的主要思想是以三相对称正弦波电压供电时三相对称电机定子理想磁链圆为参考标准,以三相逆变器不同开关模式作适当的切换,从而形成 PWM 波,以所形成的实际磁链矢量来追踪其准确磁链圆。传统的 SPWM 仅电源的角度出发生成一个可调频调压的正弦波电源,而 SVPWM 将逆变系统和异步电机看作一个整体来考虑,模型比较简单,也便于微处理器的实时控制。
  普通的三相全桥是由六个开关器件构成的三个半桥。这六个开关器件组合起来(同一个桥臂的上下半桥的信号相反)共有 8 种安全的开关状态. 其中 000、111(这里是表示三个半桥的开关状态)这两种开关状态在电机驱动中都不会产生有效的电流。因此称其为零矢量。另外 6 种开关状态分别是六个非零矢量。它们将 360 度的电压空间分为 60 度一个扇区,共六个扇区,利用这六个基本非零矢量和两个零量,可以合成 360 度内的任何矢量。
  当要合成某一矢量时先将这一矢量分解到离它最近的两个基本矢量,而后用这两个基本矢量去表示,而每个基本矢量的作用大小就利用作用时间长短去代表。用电压矢量按照不同的时间比例去合成所需要的电压矢量。从而保证生成电压波形近似于正弦波。
  在变频电机驱动时,矢量方向是连续变化的,因此我们需要不断的计算矢量作用时间。为了计算机处理的方便,在合成时一般是定时器计算(如每 0.1ms 计算一次)。这样我们只要算出在 0.1ms 内两个基本矢量作用的时间就可以了。由于计算出的两个时间的总和可能并不是 0.1ms(比这小),而那剩下的时间就按情况插入合适零矢量。 由于在这样处理时,合成的驱动波形和 PWM 很类似。因此我们还叫它 PWM,又因这种 PWM 是基于电压空间矢量去合成的,所以就叫它 SVPWM 了。

2.3.2 SVPWM算法讲解

  设直流母线侧电压为𝑈𝑑𝑐,MOS 管 3 相调制输出电压分别为𝑈𝐴𝑂、𝑈𝐵𝑂、𝑈𝐶𝑂,其分别加在空间上互差 120°的三相静止坐标系上,如图所示:
在这里插入图片描述
定义三个电压空间矢量𝑢𝐴𝑂、𝑢𝐵𝑂、𝑢𝐶𝑂,方向分别在其轴线上,大小随时间按正弦规律
变化,相位差 120°,设𝑈𝑚为相电压基波峰值,f 为电源频率则:
在这里插入图片描述
在三相静止坐标系下:
在这里插入图片描述

则三相电压空间矢量的合成矢量𝑢𝑆(𝑡)为下,可见𝑢𝑆(𝑡)是一个旋转的空间矢量,它的幅值不变,为相电压峰值的1.5倍,且以角频率ω= 2πf 按逆时针方向匀速旋转的空间矢量。
在这里插入图片描述

  由于驱动器三相桥臂依靠 6 只 MOS 管,而 MOS 管只有导通和非导通状态(PWM 信号输入),因此三相开关全部组合有 8 种情况,这里定义一个开关函数𝑠𝑥
〈𝑥 = 𝑎、𝑏、𝑐〉,abc 分别代表三相绕组,当𝑠𝑎 = 1时,代表 A 相上桥臂导通,当𝑠𝑎 = 0时,代表 A 相下桥臂导通,其他相同理。
  那么(𝑠𝑎、𝑠𝑏、𝑠𝑐)的全部可能组合共有八个,包括 6 个非零矢量 Ul(001)、U2(010)、U3(011)、U4(100)、U5(101)、U6(110)、和两个零矢量 U0(000)、U7(111)。下面我们以非零矢量 U4(100)为例来进行分析,即 (𝑠𝑎、𝑠𝑏、𝑠𝑐) = (100),代表 a 相上桥臂导通,b 相下桥臂导通,c 相下桥臂导通,如图所示:
在这里插入图片描述
此时等效电路如图所示:
在这里插入图片描述
根据串联分压定理,得:
在这里插入图片描述

剩下的三相开关组合情况同理

三、FOC例程创建

  在使用 ST Motor Control Workbench (以下简称:Workbench) 前我们需要知道电机的一些参数,在我们知道电机参数后我们就可以使用 Workbench 来配置生成代码来控制电机了,以下我们使用 BLDC 速度控制使用霍尔传感器(HALL)为例来说一下 Workbench 的使用方法,以下只是简单介绍 Workbench 的使用,这里的目的是使用 Workbench 配置后生成的代码让电机跑起来,不过生成的代码并不能直接使用,还需要做简单的修改。电机参数参考如下:

电机参数BLDCPMSM
极对数2 对极4 对极
额定转速3000RPM3000RPM
额定电流5.90A4.00A
额定电压24V24V
相电阻0.42±10%Ω1.02±10%Ω
相电感1.12±20%0mH0.590±20%mH
反电动势系数4.3Vrms/krpm4.3Vrms/krpm
编码器-1000 线

3.1 新建项目

双击 MotorControl Workbench 5.4.4 打开界面,整个界面可以分为 3 个部分:
①新建项目、加载项目、启动 Motor Profiler 5.4.4
②最近打开过的项目列表
③示例项目
在这里插入图片描述

这里我们点击 New Project 来创建我们的第一个项目,选择应用类型、控制板、驱动板和电机个数,这里我们都选择默认模式,选择完成后点击 OK 即可。
在这里插入图片描述

工程建立好了后,弹出参数配置界面整个界面可以大概分为 4 个部分:
①用户图标按钮,可以通过点击图标来新建、加载、保存项目、生成代码和上位机控制电机等;
②用于设置所选硬件的功能,如电机参数或传感器的使用;
③显示一些主要的参数;
④用于提示一些用户的操作反馈,或者错误等。
在这里插入图片描述

3.2 参数配置

3.2.1 芯片相关参数选择

  1. 选择MCU型号
    点击下图中的芯片型号可以选择对应我们控制板的 MCU 型号,注意时钟源的选择
    在这里插入图片描述
    注意
    ①如果没有对应芯片型号,所以选择型号较接近的即可
    ②外部晶振这里只能选择 24M,但是板载的外部高速晶振为8M,后续需要在CubeMX中修改

  2. 数字输出输入 I/O 配置
    点击 Digital I/O 配置数字输出输入相关引脚,在这里需要配置驱动定时器和相关的引脚,以及霍尔传感器的配置,还可以配置串口和启动停止按键的 IO 配置,这里我们只需要根据原理图来配置就可以了,我们选择电机驱动接口 1 来接电机驱动板。
    在这里插入图片描述

  3. 电流采集模拟接口
    点击 Analog Input and Protection 可以配置模拟量输出相关的引脚和保护功能。如下图所示,这里可以配置采样电流相关的 ADC 和引脚,已经采样率等参数,只需要根据原理图中对应的引脚配置就可以了,这里的过流保护选择没有保护。
    在这里插入图片描述
    电源电压采集模拟接口设置如下:
    在这里插入图片描述
    温度采集模拟接口设置如下:
    在这里插入图片描述

  4. DAC功能
    点击 DAC Functionality 可以配置DAC功能,这里主要是调试使用,DAC 设置用于调试时候观测 FOC 数据,例如将电机的电角度、交轴电流通过 DAC 方式输出,这样就可以使用示波器实时观测数据的变化,一般无需使用时直接选择不用即可。不过这里的输出引脚是固定的,只能是 PA4 和 PA5 并不能更改,而这里的 PA4 我们已经使用了,所以这里只能选择不使用。
    在这里插入图片描述

  5. 引脚分配与检查
    点击 Pin assignment 可以查看引脚的分配,Check 可以检查引脚是否有冲突,在检查 OK 后配置工作就完成了。
    在这里插入图片描述

3.2.2 电压参数设置

  1. 设置母线电压
    选择Rated Bus Voltage根据无刷驱动板输入电源范围设置母线电压
    在这里插入图片描述
  2. 母线电压检测设置
    点击 Bus Volatage Sensing 可以设置电压传感器相关参数,如下图所示。由于我们使用了电压隔离芯片,还使用加法电路,所以这里不能配置出适合我们驱动板的参数,需要我们重新实现电压的转换函数,所以这里对于我们的驱动板来只配置了前面的分压电路。
    在这里插入图片描述
    交流输入配置
    在下图中,红框部分是关于交流输入的相关配置,不过我们驱动板使用的是直流输入,所以这部分我们可以不用管。
    在这里插入图片描述

3.2.3 电机配置

  1. 电机基本参数
    如下图所示,电机 Motor Parameters 可以配置电机相关的参数和传感器,以下内容需要根据实际使用的电机准确填写,否则可能导致电机无法启动或者抖动。在下图填写电机相关参数,如极对数、最大速度、额定电流电压等参数。
    在这里插入图片描述

  2. 传感器设置
    在下图中可以选择传感器,可以选择 HALL(霍尔) 和 Encoder(编码器),如果都不选则使用无传感器模式。此处要注意下“placement electrical angle”一栏,要根据情况设置霍尔传感器的放置电角度,使用 BLDC的话这里填的是 120,如果使用 PMSM是 240 deg,填写不正确可能导致电机鸣叫或不转等问题。
    在这里插入图片描述
    点击 Speed Sensing 可以打开速度反馈配置界面,如下图所示,这里可以选择使用什么传感器来反馈速度,可以配置主传感器和辅助传感器,这里配置主传感器为 HALL,不使用辅助传感器。
    在这里插入图片描述

  3. 编码器模式
    下面介绍使用编码器模式获取速度,关于电机和驱动板的参数配置与使用霍尔传感器模式基本一样,如下图所示,点击 Speed Sensing 后主传感器选择 Quadrature encoder 。
    在这里插入图片描述
    在 Motor-Parameters 感器勾选 Quadrature encoder ,编码器为 1000 线,
    在这里插入图片描述
    编码器模式同样需要配置启动参数,点击 Fimware Drive Management 后,选择 Start-up parameters,配置界面如下图所示。可以配置对齐时间、对齐角度和电流。
    在这里插入图片描述
    点击 Digital I/O 配置数字输出输入相关引脚,在这里需要选择编码器使用的定时器和引脚。
    在这里插入图片描述

  4. 无感模式
    上面我们介绍了霍尔感器获取速度的配置方法,现在我们介绍不使用传感器的配置方法,关于电机和驱动板的参数配置与使用霍尔传感器模式一样,如下图所示,点击 Speed Sensing 后主传感器选择 Sensor-less (Observer+PLL)
    在这里插入图片描述
    无感模式还需要配置启动参数,点击 Fimware Drive Management 后,选择 Start-up parameters,配置界面如下图所示。无感模式需要开环跑来后在切换到 FOC 模式控制,在下面参数中可以配置开环跑的相关参数,例如,开环对齐时持续时间,对齐电角度,速度上升时间,最终速度值等。
    在这里插入图片描述

3.2.4 驱动板参数设置

  1. MOS管驱动设置
    点击 Phase U 可以配置 MOS 管的驱动极性,高电平有效,三相驱动配置完全一致
    在这里插入图片描述

  2. MOS管最大开关频率和死区时间设置
    点击下图中的 Power Switches 就可以设置 MOS 管的相关参数。如下图所示在这里可以设置死区时间和 MOS 管的最大开关频率,从数据手册中可以知道我们使用的 MOS 管死区时间设置为 100ns 就可以。
    在这里插入图片描述

  3. 温度传感器
    点击 Temperature Sensing 可以设置温度传感器相关参数,如下图所示。不过该配置只支持 ST 的温度传感器,所以直接默认设置即可。
    在这里插入图片描述

  4. 电流采样电路
    点击 Current Sensing 可以配置电流采集相关的参数,如下图所示,这里根据我们的驱动板选择 3电阻采样,采样电阻的阻值为 0.02Ω,电压放大倍数配置为6倍。
    在这里插入图片描述
    然后勾选 Amplification on board ,点击 Calculate 来计算放大倍数。Calculate 选框可以不设置,默认参数如下:
    在这里插入图片描述
    接着设置过流保护功能,如下图设置:
    在这里插入图片描述

3.2.5 固件驱动管理

  1. 驱动设置
    点击 Fimware Drive Management 后,选择 Drive Settings,配置界面如下图所示。这里可以配置 PWM输出频率,通常配置为 10KHz~20KHz,这里我们配置为 16KHz。把高端和低端 MOS 管的空闲状态都设置为关,执行时间为 1ms。控制模式选择速度控制模式,默认目标速度设置为 1500RPM。左下侧PI 可以根据电机的运行效果来调整,转矩和磁通控制的 PI 这里使用默认参数,当然如果觉得控制效果不好也可以自己调整。
    在这里插入图片描述
  2. 附加功能和 PFC 配置
    点击 Fimware Drive Management 后,选择 Additional Features,在这里可以选择一些控制算法,不过我们这里都不选择。
    在这里插入图片描述
  3. 传感器使能和固件保护配置
    点击 Fimware Drive Management 后,选择 Sensing and FW protections,如下图所示,这里可以使能电压传感器和使能过压、欠压保护功能,并且配置有效的电压工作范围,超过电压范围后禁用PWM 输出。
    在这里插入图片描述
  4. FreeRTOS
    点击 Fimware Drive Management 后,选择 FreeRTOS,如下图所示,这里可以选择是否启用 FreeRTOS操作系统,这里我们不需要就不启用了。
    在这里插入图片描述
  5. 用户界面
    点击 User Interface 可以配置用户界面,在 SDK 5.x 中 LCD 相关的固件已经没有了,这里参数都被禁用,Start/Stop Button 选择使能,Serial Communication 中使能串口,使用 Bidirectional。
    在这里插入图片描述

3.3 生成工程代码

  在配置完所有参数后我们可以保存我们的项目了,点击 Save Project 就可以保存项目了(注意,保存路径中不能有中文)。
在这里插入图片描述
  我们可以点击 Generation 来生成代码,如下图所示,左侧可以选STM32CubeMX,可以选择开发环境,这里我们选择 Keil MDK-ARM V5 ,固件版本可以选择最新或者已经下载好的版本,驱动类型选择 HAL 库。配置好后就可以点击 Generation 生成代码了。如果之后还需要修改配置,那么我们可以点击 UPDATE 来更新代码。
在这里插入图片描述
  生成结束后可以打开 CubeMX 添加自己的设置,点击 RUNSTM32Cube…打开 CubeMX
在这里插入图片描述

3.4 修改工程代码

3.4.1 修改系统时钟配置

根据具体时钟配置
在这里插入图片描述

3.4.2 初始化 SD 控制脚

  通过 STM32CubeMX 来初始化 SD 引脚,如下图所示,将 PG12 配置为 GPIO_Output,并且将默认的电平输出设置为高电平,User Labe 项填写 SD 。修改完成后保存关闭窗口,这里不使用STM32CubeMX 来生成代码,需要回到 Workbench,使用 Workbench 来更新代码(注意,不是生成)。
在这里插入图片描述
在这里插入图片描述

3.4.3 修改电压传感器

3.4.4 修改温度传感器

3.5 编译下载测试

  修改完之后,编译下载后可以按 KEY2 来启动和停止电机。还可以使用 Workbench 里面的监视器来控制电机。如下图所示,点击 Monitor 图标就可以打开监视器了。
在这里插入图片描述
  连接到开发板后,可以通过 Start Motor 和 Stop Motor 来启动和停止电机,可以通过速度旋钮来调节目标速度,或者通过旋钮下方的编辑框来调节目标速度,编辑好后回车就可以发送目标速度。可以通过速度表盘来观察速度值,也可以通过 plotting 来观察实际速度与目标速度的关系,如下图所示。
在这里插入图片描述
状态指示灯有 3 种颜色:

  • 绿色:正常状态
  • 红色:故障产生,并且没有被排除
  • 黄色:故障产生,但是已经被排除

  当故障故障产生时,对应的故障灯也会亮起,此时电机不能启动,需我们排除故障后才能启动电机。如下图所示,电机驱动板电压过低发生欠压故障,此时欠压故障灯和状态指示灯都为红色。当故障故障产生时,对应的故障灯也会亮起,此时电机不能启动,需我们排除故障后才能启动电
机。如下图所示,电机驱动板电压过低发生欠压故障,此时欠压故障灯和状态指示灯都为红色。
  如果需要进一步调节 PID,可以点击 Advanced 按钮切换到参数调整,如下:
在这里插入图片描述
  修改好 PID 之后可以点击 按钮把参数上传到开发板,观测运行效果。如果使能了DAC 输出,还可以选择 DAC 设置,默认是输出 a 和 b 电流。

四、ST MCSDK库源码介绍

以 5.4 版本的 MCSDK 库为例,Any 文件夹中包含 Src和Inc 文件夹,分别存放核心算法的源文件和头文件,源码目录如下:
在这里插入图片描述
学习 SDK 最好的方式便是阅读帮助文档,通过 ST MC Workbench 打开帮助文档的方法如下:
在这里插入图片描述
在这里插入图片描述

4.1 总体软件架构

  MC SDK5.x 包含有芯片外设库、电机库和电机应用层三个主要部分,其中芯片外设库使用 STHAL/LL 库,可被各个层级调用;电机库则是主要的电机 FOC 控制层;最上层为电机应用层,供用户直接使用电机库,而不去关心底层如何实现的,加快用户程序开发;另外 MC SDK5.x 还提供 UI 库,用于界面调试通讯使用,比如和 Workbench 之间的交互就是通过 UI 库实现;这边强调的一点是电机库是综合体,包含 FOC 算法,单片机外设配置,中断机制等各个环节,简单控制可能只需要关心电机应用层即可,如果复杂控制将涉及到整体操作
在这里插入图片描述
  在 SDK 使用过程中,电机本体,电机控制硬件板,控制管脚,控制策略在 MC workbench 中配置完成,顺序为 MC Workbench→CubeMx 工程 → 电机库代码(芯片外设库 + 电机控制库 + 电机驾驶舱 + 用户界面库 + 系统初始化),该生成代码加入简单 API 后(比如 MC_StartMotor1)可以直接运行对应电机,当需要细化控制或者复杂控制时才有可能涉及到修改电机控制库中的代码。

电机控制流程图如下图所示,其中电机的控制都在中断中执行:
在这里插入图片描述

4.2 电机控制库文件

  在简单的电机控制应用中通常不需要修改这部分代码,如果在 Application MC API 层不能满足应用需求时才会需要修改这部分代码,在修改前需要对电机运行框架非常熟悉的情况下再来修改。

源文件说明
bus_voltage_sensor.c总线电压
circle_limitation.c电压极限限制
enc_align_ctrl.c编码器初始定位控制
encoder_speed_pos_fdbk.c编码器传感器相关
fast_div.c快速软件除法
hall_speed_pos_fdbk.c Hall传感器相关
inrush_current_limiter.c浪涌电流限制
mc_math.c数学计算
mc_interface.c马达控制底层接口
motor_power_measurement.c平均功率计算
ntc_temperature_sensor.cNTC温度传感
open_loop.c开环控制
pid_regulator.cPID 环路控制
pqd_motor_power_measurement.c功率计算
pwm_common.cTIMER 同步使能
pwm_curr_fdbk.cSVPWM,ADC 设定相关接口
r_divider_bus_voltage_sensor.c实际总线电压采集
virtual_bus_voltage_sensor.c虚拟总线电压
ramp_ext_mngr.c无传感开环转闭环控制
speed_pos_fdbk.c速度传感接口
speed_torq_ctrl.c速度力矩控制
state_machine.c电机状态相关
virtual_speed_sensor.c无传感开环运行相关
以下部分在工程中只会存在其中一个文件-
ics_f4xx_pwm_curr_fdbk.cSTM32F4 的 ICS 采样
r1_f4xx_pwm_curr_fdbk.cSTM32F4 的单电阻采样
r3_1_f4xx_pwm_curr_fdbk.cSTM32F4 的三电阻采样(1 个 ADC)
r3_2_f4xx_pwm_curr_fdbk.cSTM32F4 的三电阻采样(2 个 ADC)

4.3 电机控制API

  在 mc_api.c 中有各种可以供用户使用的 API 接口,对于普通的电机控制用户可以不用关心底层的实现,只需要使用这些 API 就可完成电机控制,电机库可以支持两个电机,在函数中使用后缀Motor1 和 Motor2 来区分是电机 1 还是电机 2。这里以控制电机 1 为例来说明个 API 接口的含义,电机 2 的控制类似。

函数名称函数形参函数返回值函数功能
MC_StartMotor1voidbool启动电机
MC_StopMotor1voidbool停止电机
MC_ProgramSpeedRampMotor1hFinalSpeed、hDurationmsvoid设定目标速度以及持续时间
MC_ProgramTorqueRampMotor1hFinalTorque、hDurationmsvoid设定目标力矩以及持续时间
MC_SetCurrentReferenceMotor1Iqdrefvoid设定 Iq,Id 参考
MC_GetCommandStateMotor1voidMCI_Command State_t返回指令执行状态
MC_StopSpeedRampMotor1voidbool停止速度指令执行,速度指令保存为执行停止前速度指令
MC_StopRampMotor1voidvoid停止执行电机正在运行的斜坡
MC_HasRampCompletedMotor1voidbool指令是否执行完成
MC_GetMecSpeedReferenceMotor1voidint16_t返回机械参考速度
MC_GetMecSpeedAverageMotor1voidint16_t返回平均机械速度
MC_GetLastRampFinalSpeedMotor1voidint16_t返回上次指令速度
MC_GetControlModeMotor1voidSTC_Modality_t返回控制模式
MC_GetImposedDirectionMotor1voidint16_t返回电机转动方向
MC_GetSpeedSensorReliabilityMotor1voidbool返回当前速度传感器可信度
MC_GetPhaseCurrentAmplitudeMotor1voidint16_t返回电流值
MC_GetPhaseVoltageAmplitudeMotor1voidint16_t返回电压值
MC_GetIabMotor1voidab_t返回 a,b 相电流
MC_GetIalphabetaMotor1voidalphabeta_t返回 clark 变换后的Iα,Iβ
MC_GetIqdMotor1voidqd_t返回 park 变换后的 Id,Iq
MC_GetIqdrefMotor1voidqd_t返回 Id,Iq 参考
MC_GetVqdMotor1voidqd_t返回变换电压量 Vd,Vq
MC_GetValphabetaMotor1voidalphabeta_t返回变换电压量 Vα,Vβ
MC_GetElAngledppMotor1voidint16_t返回电角度 DPP 数据
MC_GetTerefMotor1voidint16_t返回电流参考
MC_SetIdrefMotor1hNewIdrefvoid设定电流 Id 参考
MC_Clear_IqdrefMotor1voidvoidIq,Id 数据回到默认值
MC_AcknowledgeFaultMotor1voidbool清除异常状态
MC_GetOccurredFaultsMotor1voiduint16_t得到发生了的故障状态
MC_GetCurrentFaultsMotor1voiduint16_t得到当前的故障状态
MC_GetSTMStateMotor1voidState_t得到电机状态

上面表格中只是简单的函数功能说明,更加详细的说明请参考函数源码或函数源码前的注释。


补充

使用MotorControl Workbench 5.4.4生成工程代码可能会出现以下报错
在这里插入图片描述
此时直接删除红色目录下对应文件,即可成功生成代码

  • 11
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
### 回答1: FOC矢量控制是现代交流电机控制的一种高级算法,它主要用于控制永磁同步电机(PMSM)、感应电机(IM)等电机的运动。FOC矢量控制可以实现高效、高精度、高响应的电机控制,并且可以提高电机的效率和可靠性。 在Simulink仿真中,我们可以使用FOC矢量控制算法对电机进行控制和仿真。这里以赵云为例,他是一名机电工程师,熟悉FOC矢量控制算法,并且熟练掌握Simulink仿真技术。 赵云首先需要将FOC矢量控制算法应用于Simulink仿真中,包括电机控制模块、电机运动学模型、电机动力学模型等。然后,他可以进行不同的仿真实验,如电机空载、电机负载、电机启动、电机制动等。 通过Simulink仿真,赵云可以获得实时的数据和曲线图,比如电动势(EMF)波形、电流波形、转速曲线、扭矩曲线等,从而分析和评估电机的性能表现。他还可以根据仿真结果,对FOC矢量控制算法进行优化和改进,以提高电机的控制精度和效率。 总之,FOC矢量控制Simulink仿真是一种非常有用的技术,可以帮助赵云更好地理解电机控制算法的原理和性能特点,并且可以为电机控制系统的设计和开发提供有力的支持。 ### 回答2: FOC矢量控制是一种基于空间矢量分解的电机控制技术,可以实现电机高精度定位转矩控制。在Simulink仿真中使用FOC矢量控制可以帮助工程师验证电机控制方案,进行性能评估和调试。 众所周知,电机控制技术的传统方法是采用速度环和电流环来实现电机转矩控制。但FOC矢量控制则能够更好地利用矢量控制的优势,实现高效率、高精度的电机控制。FOC矢量控制通过将三相交流电压或电流向量视为两个独立的矢量,即转子磁场矢量和旋转矢量,来实现空间矢量分解,从而实现电机的高精度定位转矩控制。 在Simulink仿真中,我们可以根据电机的特性参数,设置FOC矢量控制的基本参数。通过Simulink中的Block图形界面,我们可以进行可视化的电路设计,包括乘法器、积分器、S函数、PID控制器、限幅器等模块。此外,我们还可以通过模拟不同的负载和转速,来模拟FOC矢量控制在不同工况下的性能。 总之,FOC矢量控制在现代电机控制技术领域具有广泛应用价值。通过在Simulink中进行FOC矢量控制仿真,我们可以更好地理解和实现FOC控制算法,从而提高电机控制系统的性能和稳定性。 ### 回答3: FOC矢量控制是电气工程中的一种常用控制策略。它是一种基于磁通定向控制和矢量控制的混合控制策略,能够实现对电机的精准控制,使得电机的性能达到最优。在FOC矢量控制中,通过将电机电流转换为直角坐标系下的矢量,可以避免电机转子位置的影响,从而达到高精度控制的目的。 在Simulink仿真中,可以通过搭建FOC矢量控制模型来对电机进行仿真测试。模型的主要组成部分包括电机模型、空间矢量PWM模块、磁场定向控制器和速度环控制器等。其中,磁场定向控制器能够将电流转换为磁场矢量来控制电机的磁场方向,从而使得电机的磁通始终指向所需的方向。速度环控制器则可以通过对电机的速度进行反馈,调节电机的输出电流来控制电机的转速。空间矢量PWM模块则可以通过改变PWM波的占空比和极性,来实现对电机电流的精确控制。 总之,FOC矢量控制模型是一种高精度的电机控制技术,可以在Simulink仿真中通过搭建控制模型进行测试验证。它在电气工程和机械工程等领域都具有广泛的应用,是目前电机控制技术的重要发展方向之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别问,问就是全会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值