当前位置: 首页 > article >正文

【动手学电机驱动】 TI InstaSPIN-FOC(7)Lab05b 速度环控制

TI InstaSPIN-FOC(1)电机驱动和控制测试平台
TI InstaSPIN-FOC(2)Lab01 闪灯实验
TI InstaSPIN-FOC(3)Lab03a 测量电压电流漂移量
TI InstaSPIN-FOC(4)Lab02b 电机参数辨识
TI InstaSPIN-FOC(5)Lab04 力矩控制
TI InstaSPIN-FOC(6)Lab05a 电流环控制
TI InstaSPIN-FOC(7)Lab05b 速度环控制

【动手学电机驱动】 TI InstaSPIN-FOC(7)Lab05b 速度环控制

    • 1. 项目介绍
      • 1.1 Lab05b 项目介绍
    • 2. 电流环 PI 控制器的原理
      • 2.1 并联结构的 PI 控制器
      • 2.2 速度电流双闭环 PI 控制器
      • 2.3 速度环 PI 控制器参数的计算
      • 2.4 经验方法设置电流环路带宽
    • 3. Lab05b 项目实验内容
      • 3.1 硬件连接与设置
      • 3.2 加载用户数据文件
      • 3.3 项目构建与加载
      • 3.4 项目运行与调试
    • 4. Lab05b 程序解读
      • 4.1 程序框图
      • 4.2 包含文件、变量和函数声明
      • 4.3 例程分析
        • 4.3.1 电流环 PI 控制器参数的初始化
        • 4.3.2 电流环 PI 控制器参数的实时更新
    • 5. Lab05b 项目总结


LAUNCHXL-F28027F + BOOSTXL-DRV8301 提供了一个完整的电机驱动和控制评估平台,与 TI 公司的 InstaSPIN FOC配合使用,提供无传感器控制解决方案。本节基于 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,介绍 Lab05b 实验项目“速度环控制与控制器参数设置”。


1. 项目介绍

1.1 Lab05b 项目介绍

InstaSPIN FOC 提供了标准的 PI 速度控制器。InstaSPIN 库将根据 user.h 中的最大电流设置为速度环控制器提供 Kp 和 Ki 的“经验法则”估计。估计的 PI 控制器增益是一个很好的起点,但为了获得更好的动态性能,需要根据电机运行的整个机械系统调整 Kp 和 Ki 的值。本实验将展示如何调整 PI 速度控制器中的 Kp 和 Ki。

在 InstaSPIN MOTION中,采用抗干扰速度控制器取代了标准 PI 控制器。具有以下易用性和性能优势:1)主动估计和补偿系统误差;2)提供在整个操作范围内工作的单参数调谐。

调整速度控制器比调整电流控制器要困难得多。速度控制器用于机械系统,系统的时间常数比电流环要慢得多,相位延迟可能更严重,对系统的稳定性影响更大。

精确调整速度控制系统所需的重要参数是系统惯性(转动惯量)。本项目介绍了两种不同的调整速度环路的方法:

  • 经验整定方法,如果不知道机械系统的参数,可以使用经验方法整定控制环参数。
  • 理论估算方法,如果已知机械系统的惯性和带宽,可以由此设计电流环和速度环的控制增益。

学习目标:

  • 使用经验整定法快速调整速度控制器。
  • 根据机械系统惯性和带宽的参数调整速度控制器。
  • 将整定的 Kp 和 Ki 增益设置到 InstaSPIN 中。

2. 电流环 PI 控制器的原理

2.1 并联结构的 PI 控制器

PI 控制器有两种拓扑结构,串联结构和并联结构。上节介绍了使用串联结构PI控制器,本节介绍并联结构的 PI 控制器。

并联结构的 PI 控制器的框图如下:
在这里插入图片描述

并行结构的 PI 控制器在时域和频域的模型分别为:
o u t p u t ( t ) = K p ∗ E r r o r ( t ) + K i ∫ E r r o r ( t ) G ( s ) = o u t p u t ( t ) E r r o r ( s ) = K p + K i / s output(t) = K_p *Error(t) + K_i \int{Error(t)}\\ G(s) = \frac{output(t)}{Error(s)} = K_p + K_i /s output(t)=KpError(t)+KiError(t)G(s)=Error(s)output(t)=Kp+Ki/s

该系统有一个零极点,零点为 − K i / K p -{K_i}/{K_p} Ki/Kp
Kp 的变化会影响高频增益,影响零点频率,但不会影响低频增益。 Ki 的变化会影响低频增益,影响零点频率,但不会影响高频增益。
Kp 越大,高频增益越大,零点频率越低。Ki 越大,低频频增益越大,零点频率越大。


2.2 速度电流双闭环 PI 控制器

速度控制系统的拓扑结构,是速度外环、电流内环的双闭环控制系统,如下图所示。
在这里插入图片描述

Assume that the stator time constant is much quicker than the mechanical system. To simplify the analysis, the current controller is represented as a constant gain 𝐾𝑐𝑢𝑟𝑟 below.

通常,电流环路的时间常数比机械系统的时间常数快得多。为了简化分析,将电流控制器简化为恒定增益 K c u r r K_{curr} Kcurr。则系统的开环传递函数为:

G l o o p ( s ) = P I ( s ) ∗ K c u r r ∗ M e c h ( s ) = K i ∗ ( 1 + K p K i s s ) ∗ K c u r r ∗ K / s = K ∗ K c u r r ∗ K i s 2 ( 1 + K p K i s ) G_{loop}(s) = PI(s) * K_{curr} * Mech(s) \\ = K_i * (\frac{1+\frac{K_p}{K_i}s}{s}) * K_{curr} * K/s\\ = \frac{K*K_{curr}*K_i}{s^2} (1+\frac{K_p}{K_i}s) Gloop(s)=PI(s)KcurrMech(s)=Ki(s1+KiKps)KcurrK/s=s2KKcurrKi(1+KiKps)

增益 K K K 包含电动机的电压常数和惯性。闭环传递函数为:

G c l o s e ( s ) = K ∗ K c u r r ∗ K i ( 1 + K p K i s ) s 2 + K ∗ K c u r r ∗ K p ∗ s + K ∗ K c u r r ∗ K i G_{close}(s) = \frac{K*K_{curr}*K_i(1+\frac{K_p}{K_i}s)}{s^2+K*K_{curr}*K_p*s+K*K_{curr}*K_i} Gclose(s)=s2+KKcurrKps+KKcurrKiKKcurrKi(1+KiKps)

质量、弹簧、阻尼器系统的自由体图如图25所示。机械系统的传递函数为:

T m e c h ( s ) = 1 / J s 2 + s ∗ b / J + k s p / J T_{mech}(s) = \frac{1/J}{s^2+s*b/J+k_{sp}/J} Tmech(s)=s2+sb/J+ksp/J1/J

PI 增益与机械系统之间存在以下关系:

K p ∝ b K i ∝ k s p K_p \propto b\\ K_i \propto k_{sp} KpbKiksp

增加𝐾𝑖对电机控制系统的影响与增加弹簧常数相似。系统的阻尼由⻓𝑝增益控制。增加阻尼将减少振荡。

在这里插入图片描述


2.3 速度环 PI 控制器参数的计算

在本系统中对速度反馈信号进行了滤波。除非电机轴上安装了转速表,否则是通过测量其他参数来生成速度信号。因此,在使用速度信号之前,通常需要对其进行滤波。我们假设使用以下形式的单极低通滤波器:

V e l f i l t e r ( s ) = 1 τ s + 1 Vel_{filter}(s) = \frac{1}{\tau s + 1} Velfilter(s)=τs+11

其中,𝜏是速度滤波器低通滤波器的时间常数(上图中的绿色块)。
则电流控制器的闭环传递函数为:

G c u r r ( s ) = 1 L K p s s + 1 G_{curr}(s) = \frac{1}{\frac{L}{K_p^{s}}s + 1} Gcurr(s)=KpsLs+11

其中, K p s K_p^{s} Kps 是电流环调节器PI结构中的比例增益,它被设置为在电流控制器的传递函数内以消除极点/零点。为了避免将速度控制器的系数与电流控制器的系数混淆,我们将速度环 PI 控制器的参数表示为 s p d K p s spdK_p^s spdKps s p d K i s spdK_i^s spdKis。在串联形式的 PI 控制器中, s p d K p s spdK_p^s spdKps 是比例增益项,以及 s p d K i s spdK_i^s spdKis 是积分增益项。

用于电流控制器的方程式也可用于描述速度控制:

P I s p e e d ( s ) = s p d K p s ∗ s p d K i s s + s p d K p s = s p d K p s ∗ s p d K i s ∗ ( 1 + s s p d K i s ) s PI_{speed}(s) = \frac{ spdK_p^s* spdK_i^s}{s} + spdK_p^s = \frac{ spdK_p^s* spdK_i^s * (1+\frac{s}{spdK_i^s})}{s} PIspeed(s)=sspdKpsspdKis+spdKps=sspdKpsspdKis(1+spdKiss)

从电机电流到电机扭矩的传递函数将根据所使用的电机类型而变化。对于磁场定向控制下的永磁同步电机,q轴电流和电机扭矩之间的传递函数为:

M t r ( s ) = 3 2 P 2 λ r = 3 4 P λ r Mtr(s) = \frac{3}{2} \frac{P}{2} \lambda _r = \frac{3}{4} P \lambda _r Mtr(s)=232Pλr=43Pλr

其中,P 是电机的极对数, λ r \lambda _r λr 是转子磁通量(等于反电动势常数(Ke))。

对于交流感应电机,q轴电流和电机扭矩之间的传递函数为:

M t r ( s ) = 3 4 P L m 2 L r I d Mtr(s) = \frac{3}{4} P \frac{L_m^2}{L_r} I_d Mtr(s)=43PLrLm2Id

其中,P 是电机的极对数, L m L_m Lm 是磁化电感, L r L_r Lr 是转子电感, I d I_d Id 是 d轴电流。

将各项相乘,得到开环传递函数:

G H ( s ) = ( s p d K p s ∗ s p d K i s ∗ ( 1 + s s p d K i s ) s ) ( 1 L K i s s + 1 ) ( 3 4 P λ r ) ( 1 J s ) ( 1 τ s + 1 ) GH(s) = (\frac{ spdK_p^s* spdK_i^s * (1+\frac{s}{spdK_i^s})}{s}) (\frac{1}{\frac{L}{K_i^{s}}s + 1}) ( \frac{3}{4} P \lambda _r) (\frac{1}{Js}) (\frac{1}{\tau s+1}) GH(s)=(sspdKpsspdKis(1+spdKiss))(KisLs+11)(43Pλr)(Js1)(τs+11)

如果我们消除电流控制器极点的影响,我们可以重写速度开环传递函数,如下所示:

G H ( s ) = K ∗ s p d K p s ∗ s p d K i s ∗ ( 1 + s s p d K i s ) s 2 ( 1 + τ s ) GH(s) = \frac{K* spdK_p^s* spdK_i^s * (1+\frac{s}{spdK_i^s})}{s^2 (1+\tau s)} GH(s)=s2(1+τs)KspdKpsspdKis(1+spdKiss)

为了在电流回路中实现极点/零点抵消,我们选择 K i s e r i e s K_i^{series} Kiseries 如下:

K i s e r i e s = R / L K p s e r i e s = L ∗ B W c K_i^{series} = R/L\\ K_p^{series} = L * BW_c Kiseries=R/LKpseries=LBWc

其中, B W c BW_c BWc 是电流环控制器的带宽。

然后,我们为阻尼因子(𝛿)选择一个值,这使我们能够精确量化速度环稳定性和带宽之间的权衡。于是,𝑠𝑝𝑑𝐾𝑖 以及𝑠𝑝𝑑𝐾𝑝 计算起来就很简单了。

s p d K i s = 1 δ 2 τ s p d K p s = δ ∗ s p d K i s K = 1 δ ∗ K ∗ τ \begin{matrix} spdK_i^s &= &\frac{1}{\delta ^2 \tau} &\\ spdK_p^s &= &\frac{\delta*spdK_i^s}{K} &=\frac{1}{\delta*K*\tau} \end{matrix} spdKisspdKps==δ2τ1KδspdKis=δKτ1

这种方法的好处是,你只需要定义两个有意义的系统参数:电流控制器的带宽和速度回路的阻尼系数,而不是试图经验性地调整四个与系统性能相关性很小的PI系数。一旦选择了这些,就会自动计算四个PI系数。
当前控制器带宽当然是一个有意义的系统参数,但在速度控制系统中,我们通常希望首先指定速度控制器的带宽,然后在此基础上设置当前控制器带宽。在下一节中,让我们仔细看看阻尼系数,我们将提出一种根据所需的速度环路带宽设置当前环路带宽的方法。


2.4 经验方法设置电流环路带宽

最好的策略是将电流控制器带宽设置得尽可能高。但是,电流回路带宽过高会导致电机承受过度的压力,因为高频电流瞬变和噪声会转化为高频扭矩瞬变和噪音。这甚至可以表现为可听见的噪音!

电流环路带宽还有另一个限制:采样频率。如下图所示,其中显示了基于数字磁场定向控制(FOC)的变频驱动器(VFD)。为了简化讨论,我们将假设整个控制回路由一个共同的采样信号计时(在实际应用中,速度回路进行采样频率通常比电流回路低得多)。

在这里插入图片描述

在模拟系统中,电机反馈信号的任何变化都会立即开始对输出控制电压产生影响。但是,使用如上图所示的数字控制系统,在PWM周期开始时通过ADC对电机信号进行采样,执行控制计算,并将得到的控制电压存入双缓冲PWM寄存器。这些值在PWM寄存器中处于未使用状态,直到它们在下一个PWM周期开始时被时钟记录到PWM输出。
从系统建模的角度来看,这看起来像是一个采样保持函数,采样频率等于PWM更新率频率。采样和保持的固定时间延迟表现为滞后相位角,在较高频率下逐渐变差。下图显示了采样保持函数的相位延迟的归一化频率图,其中假设采样频率为1。相位延迟的频率远低于采样频率。例如,在采样频率低十倍的情况下,采样保持仍会影响-18度的相移。
在这里插入图片描述

由于电流控制器处理的带宽比速度回路高,因此通常是电流回路受 PWM 模块的 SH 效应影响最大。由于PWM 模块 SH与电流回路的信号路径串联,其幅度和相位贡献直接增加了电流控制器的开环响应。如果我们重写电流控制器开环响应的方程(假设 K i s e r i e s = R / L K_i^{series} = R/L Kiseries=R/L ), 我们最终得到以下函数:

G H c ( s ) = P I ( s ) I ( s ) / V ( s ) = ( K p s L ) ( 1 s ) GH_c(s) = PI(s) I(s)/V(s) = (\frac{K_p^s}{L})(\frac{1}{s}) GHc(s)=PI(s)I(s)/V(s)=(LKps)(s1)

这只是一个增益为 K p s L \frac{K_p^s}{L} LKps 的积分环节。

在大多数设计中,你可能想保留 K p s 2 π L \frac{K_p^s}{2\pi L} 2πLKps至少比采样频率低一个数量级。因此,利用这一假设以及速度环调谐过程的约束,我们现在可以为以下范围编写一个通用的“经验法则”表达式:

10 L δ τ < K p s < 2 π L 10 T s \frac{10 L}{\delta \tau} < K_p^s < \frac{2 \pi L}{10 T_s} δτ10L<Kps<10Ts2πL

在大多数设计中,该经验式仍然为 Kp 的值留下了相当大的范围。


3. Lab05b 项目实验内容

在 Lab05b 项目中,电机速度控制以电流环作为控制内环、速度环作为控制外环,采用 PI 控制器。

在 InstaSPIN-FOC 中设置和使用该 Kp 和 Ki 增益。


3.1 硬件连接与设置

本项目使用 LAUNCHXL-F28027F + BOOSTXL-DRV8301 电机驱动和控制测试平台,相关的软件安装和配置,详见上节【动手学电机驱动】 TI InstaSPIN-FOC(1)电机驱动和控制测试平台。

硬件连接与设置的步骤如下:

  1. 对于 F28027F 控制板,拆除 JP1、JP2 跳线帽,由驱动板提供 3.3V 电源。
  2. 对于 F28027F 控制板,将开关 S1 设置为 ON-ON-ON(向上),UART 开关 S4 设置为 OFF(向下)。
  3. 如下图所示,将 DRV8301 驱动板 插入 F28027F 控制板。注意:接线端子插头应朝向USB连接器。
  4. 将三相 PMSM 电机连接到 DRV8301 驱动板的 3-pin 接线端子 J11。电机连接标记为 A、B、C,但可以以任何顺序连接。
  5. 将直流电源连接到 DRV8301 驱动板的 2-pin 接线端子 J2,注意电源正负极不要接反(正极接 PVDD,负极接 GND)。推荐使用 24V/10A 直流稳压电源。
  6. 打开连接到 DRV8301 驱动板的直流稳压电源。

3.2 加载用户数据文件

1、打开 IDE 软件 CCStudio,从 MotorWare 导入例程项目,在 CCS 侧边栏 “Project Explorer” 选择本项目 “proj_lab05b”。

C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\boards\boostxldrv8301_revB\f28x\f2802xF\projects

如果使用其它型号的 MCU 和驱动板,则参考以上路径规则,选择相应的项目路径。

2、鼠标选中本项目 “proj_lab05b”,右键选择 “Properties” 打开属性窗口,添加包含文件 user.h:

Build – C2000 Compiler – Include Options – Add dir to #include search path (–include_path, -I)

添加 user.h 文件的路径:

C:\ti\motorware\motorware_1_01_00_18\sw\modules\hal\boards\boostxldrv8301_revB\f28x\f2802xF\src

注意:如果没有正确导入 user.h,构建项目或编译时将会报错。

在这里插入图片描述

3、检查用户数据文件 user.h。

在 CCS “Project Explorer” 选择本项目 “proj_lab02b” 激活(Active)后,打开 user.c 文件,在文件开头找到声明的包含文件 user.h(以高亮显示)。鼠标移动到高亮的包含文件上,按 F3 就自动打开用户数据文件 user.h。

(1)找到定义电机类型的段落,检查 “USER_MOTOR” 定义为 “My_Motor”。

(2)找到定义电机参数的段落 “#elif (USER_MOTOR == My_Motor)”,检查电机极对数、电机参数的值已修改为电机规格书的参数,或通过参数辨识得到的数值。

(3)定义驱动板电压电流偏移量的的段落,检查已修改为测量的偏移值。

4、配置仿真器。

从 “Project Explorer-proj_lab05b” 下找到 “TMS320F28027_xds100v2.ccxml” 并打开目标配置编辑器窗口,可以创建和修改目标配置文件。

TMS320F28027_xds100v2.ccxml 默认的仿真器(调试探针)的类型为:“XDS 100v2 USB Debug Probe”,目标板或器件(Board or Device)的类型为:“Experimenter’s Kit - Piccolo F28027”,都不需要改变。如果使用其它型号的仿真器或目标板,则在该页面修改相应的设置。


3.3 项目构建与加载

5、项目构建(“Build”)。

在 CCS “Project Explorer” 选择本项目 “proj_lab03” 激活(Active)后,通过菜单栏 Project – Build Project 构建(“Build”)项目。也可以点击工具栏上的锤子图标 “Build” 进行构建。

在 CCS 的控制台(Console)窗口栏,将显示构建过程,并最终显示 ”**** Build Finished ****“,说明构建项目成功。

在这里插入图片描述

6、项目调试(“Debug”),将程序烧录到 MCU。

注意:在本步骤之前,要USB 连接控制板套件,并给控制板套件通电,否则找不到目标板而加载失败。 相关步骤可以参见上节 “2.1 硬件连接与设置”。

通过菜单栏 Run-- Debug 开始调试(“Debug”)项目。也可以点击工具栏上的昆虫图标 “Debug” 开始调试。

“Debug” 过程中,弹出窗口显示调试进程,并将并将.out文件加载到目标(将程序烧录到 MCU)。 弹出窗口最后显示 "Finished“,说明调试完成和加载成功。

进入调试状态后,CCS透视图将自动变为 “CCS调试”视图布局。

7、加载脚本文件。

通过调用脚本 “proj_lab05b.js”,添加适当的监视窗口变量。

loadJSFile “C:\ti\motorware\motorware_1_01_00_18\sw\solutions\instaspin_foc\src\proj_lab05b.js”

8、启用实时调试器。

点击工具栏上的实时模式图标(Enable silicon realtime mode),进入实时模式(Realtime mode)。该图标看起来像一个时钟。

9、执行目标程序。

点击工具栏上的 执行(Resume)图标,开始执行目标程序。该图标看起来像一个绿色按键。也可以通过菜单栏 Run-- Resume,或快捷键 F8,开始执行目标程序。

10、启用连续刷新。

点击工具栏上的 连续刷新(Resume)图标,在监视窗口上启用连续刷新。

在这里插入图片描述


3.4 项目运行与调试

11、启动电机。

在监视窗口中,检查 gMotorVars.UserErrorCode 的值:如果有错误则该变量值将显示具体的错误内容以供排查,如果没有错误则该变量值为 USER_ErrorCode_NoError,可以继续运行。

在监视窗口中,先将 “Flag_enableSys” 设为 1(True)驱动控制 使能,然后将 “Flag_Run_Identify” 设为 1(True)电机运行 使能。


12、手动改变速度环参考值。

(1)电机运行 使能后,速度环参考值 “SpeedRef_krpm” 为 0(默认值),电机没有旋转。
修改速度环参考值 “SpeedRef_krpm” = 1.8(或其它值),则电机启动开始旋转,旋转速度由设定的速度参考值决定,如下图所示。

在这里插入图片描述


13、手动改变 PI 控制器参数。

在本实验中,我们将展示调整增益 K p K_p Kp 的有效范围。

  • 随着Kp_spd增益的减小,请注意电机轴的行为更像弹簧。增加Kp_spd增益会使电机阻尼更大。
  • 如果Ki_spd设置太大,将更难转动电机轴。减小Ki_spd值,使电机表现得像弱弹簧。

请注意,增加Kp_spd增益会使电机更加阻尼。

(1)在监视窗口中,“gMotorVars.Kp_spd” 的默认值为 3.9。将“gMotorVars.Kp_spd” 的值修改为 1.0,然后手动调节速度参考值 “SpeedRef_krpm” ,电机转速变化曲线如下图所示。

Kp =1

在这里插入图片描述

(2)在监视窗口中,将“gMotorVars.Kp_spd” 的值修改为 3.9(默认值),然后手动调节速度参考值 “SpeedRef_krpm” ,电机转速变化曲线如下图所示。

Kp =4
在这里插入图片描述

(3)在监视窗口中,将“gMotorVars.Kp_spd” 的值修改为 10.0,然后手动调节速度参考值 “SpeedRef_krpm” ,电机转速变化曲线如下图所示。
此时,电机仍能较好地实现速度控制,但在高速、低速运行时不太平稳,运行时噪音增大。

Kp =10

在这里插入图片描述

(4)在监视窗口中,将“gMotorVars.Kp_spd” 的值修改为 15.0,然后手动调节速度参考值 “SpeedRef_krpm” ,电机转速变化曲线如下图所示。
此时,电机仍能实现速度控制,但高速运行时不平稳,运行时发出更高的音调噪声。

Kp =15
在这里插入图片描述

(5)在监视窗口中,重置 “gMotorVars.Kp_spd” 回到默认值3.9。


14、结束运行。

将变量 “Flag_Run_Identify” 设为 0(False),禁止电机运行。将 “Flag_enableSys” 设为 1(True)设为 0(False),禁用驱动控制。

点击工具栏上的 断开(Terminate)图标,断开与所有硬件的连接并终止调试状态。该图标看起来像一个红色方块。也可以通过菜单栏 Run-- Terminate,断开连接并终止调试状态。

15、关闭电源,拆除 USB 连接。

关闭为 DRV8301 驱动板供电的 DC 24V 电源。
拆下连接 计算机(运行 CCS 的计算机) 与 F28027F 控制板的 USB 线缆 。


4. Lab05b 程序解读

4.1 程序框图

本项目不涉及新的包含文件和全局变量。

主程序(Main Run-Time loop)

本项目增加了速度环 PI 控制器参数 Kp 和 Ki 的获取和设置功能。在电机识别完成后,速度环 PI 增益更新为电机识别期间使用的预先计算值。在程序运行中,也可以使用 “gMotorVars” 结构体实时修改速度环的增益参数。

实现速度控制器增益初始化的逻辑流程图如下图所示。

在这里插入图片描述

中断服务程序(Main ISR)

与 Lab05a 试验项目相同。


4.2 包含文件、变量和函数声明

本项目没有新的包含文件和定义新的全局变量。

Main run-time loop 新的 API 函数如下:
在这里插入图片描述

  • CTRL_getKp,从 CTRL 结构体获取 Kp 增益值;
  • CTRL_getKi,从 CTRL 结构体获取 Ki 增益值;
  • CTRL_setKp,向 CTRL 结构体设置 Kp 增益值;
  • CTRL_setKi,向 CTRL 结构体设置 Ki 增益值。

4.3 例程分析

4.3.1 电流环 PI 控制器参数的初始化

在程序 Proj_lab05b.c 的主函数 main() 中的轮循逻辑(forever loop)中,对电流环、速度环的 PI 控制器参数进行初始化:

  • 通过 CTRL_getKp()、CTRL_getKi() 函数获取电流环参数 K p K_p Kp K i K_i Ki 的值,并赋值给 gMotorVars.Kp_Idq、gMotorVars.Ki_Idq;
  • 通过 CTRL_getKp()、CTRL_getKi() 函数获取速度环参数 K p K_p Kp K i K_i Ki 的值,并赋值给 gMotorVars.Kp_spd、gMotorVars.Ki_spd。

在这里插入图片描述

void main(void)
{

...

  for(;;)
  {
    // loop while the enable system flag is true
    while(gMotorVars.Flag_enableSys)
      {
      ...
    
        if(EST_isMotorIdentified(obj->estHandle))
          {
          ...

            if(Flag_Latch_softwareUpdate)
            {
            ...

              // initialize the watch window kp and ki current values with pre-calculated values
              gMotorVars.Kp_Idq = CTRL_getKp(ctrlHandle,CTRL_Type_PID_Id);
              gMotorVars.Ki_Idq = CTRL_getKi(ctrlHandle,CTRL_Type_PID_Id);

              // initialize the watch window kp and ki values with pre-calculated values
              gMotorVars.Kp_spd = CTRL_getKp(ctrlHandle,CTRL_Type_PID_spd);
              gMotorVars.Ki_spd = CTRL_getKi(ctrlHandle,CTRL_Type_PID_spd);
            }

          }
      }

4.3.2 电流环 PI 控制器参数的实时更新

在程序 Proj_lab05b.c 的主函数 main() 中,可以对电流环 PI 控制器参数进行更新:通过控制器参数更新函数 updateKpKiGains(),读取监视窗口中 K p K_p Kp K i K_i Ki 的当前值,实时地更新电流环 PI 控制器的比例增益 K p K_p Kp 和积分增益 K i K_i Ki 的值。

void updateKpKiGains(CTRL_Handle handle)
{
  if((gMotorVars.CtrlState == CTRL_State_OnLine) && (gMotorVars.Flag_MotorIdentified == true) && (Flag_Latch_softwareUpdate == false))
    {
      // set the kp and ki speed values from the watch window
      CTRL_setKp(handle,CTRL_Type_PID_spd,gMotorVars.Kp_spd);
      CTRL_setKi(handle,CTRL_Type_PID_spd,gMotorVars.Ki_spd);

      // set the kp and ki current values for Id and Iq from the watch window
      CTRL_setKp(handle,CTRL_Type_PID_Id,gMotorVars.Kp_Idq);
      CTRL_setKi(handle,CTRL_Type_PID_Id,gMotorVars.Ki_Idq);
      CTRL_setKp(handle,CTRL_Type_PID_Iq,gMotorVars.Kp_Idq);
      CTRL_setKi(handle,CTRL_Type_PID_Iq,gMotorVars.Ki_Idq);
	}

  return;
} // end of updateKpKiGains() function

CTRL_setKp() 等函数在 ctrl.h 文件中,例程内容如下:

//! \brief      Sets the proportional gain (Kp) value for the specified controller
//! \param[in]  handle    The controller (CTRL) handle
//! \param[in]  ctrlType  The controller type
//! \param[in]  Kp        The Kp value
inline void CTRL_setKp(CTRL_Handle handle,const CTRL_Type_e ctrlType,const _iq Kp)
{
  CTRL_Obj *obj = (CTRL_Obj *)handle;

  if(ctrlType == CTRL_Type_PID_spd)
    {
      obj->Kp_spd = Kp;
    }
  else if(ctrlType == CTRL_Type_PID_Id)
    {
      obj->Kp_Id = Kp;
    }
  else if(ctrlType == CTRL_Type_PID_Iq)
    {
      obj->Kp_Iq = Kp;
    }

  return;
} // end of CTRL_setKp() function


5. Lab05b 项目总结

调整速度控制器比调整电流控制器时有更多的未知数。
在本实验中,调整速度控制器的第一种方法是使用工程经验方法。结果表明,并联速度 PI 闭环控制与质量、弹簧、阻尼器系统相关。
如果已知电机控制系统的机械系统的更多参数,则可以使用理论计算方法。根据用户选择的带宽和阻尼计算确定速度和电流控制器的增益。


推荐从 TI 官网下载 【InstaSPIN 实验项目用户手册】(InstaSPIN Projects and Labs User’s Guide),进行学习。


http://www.kler.cn/news/362510.html

相关文章:

  • Node.js是什么? 能做什么?
  • 【论文翻译】ICLR 2018 | DCRNN:扩散卷积递归神经网络:数据驱动的交通预测
  • 关于Docker
  • C++数据类型转换
  • 数据库集群
  • 【报错处理】MR/Spark 使用 BulkLoad 方式传输到 HBase 发生报错: NullPointerException
  • RabbitMQ进阶_可靠性
  • 大数据新视界 --大数据大厂之 Snowflake 在大数据云存储和处理中的应用探索
  • 网络安全的挑战与对策:从技术防御到综合治理的全方位分析
  • 阵痛中转型,商汤瘦身背后的AI真相
  • js如何获取一个object的第一条数据
  • Java设计模式——适配器模式
  • 开发面试题-更新中...
  • ansible.builtin 和 ansible.posix的区别
  • leetcode hot100 之【LeetCode 141. 环形链表】 java实现
  • sql注入 --二次注入堆叠注入文件读取getshell
  • Shiro 授权(Authorization)总结
  • swagger讲解
  • 集群Spring定时只执行一次
  • 查收查引常用数据库——万方
  • 矩阵基础知识
  • Docker容器间链路管理
  • C++学习笔记----9、发现继承的技巧(二)---- 重用目的的继承
  • 数据库产品中审计与日志(Auditing and Logging)的功能简介
  • kebuadm部署k8s集群
  • 智联云采 SRM2.0 testService SQL注入漏洞复现