【动手学电机驱动】 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)=Kp∗Error(t)+Ki∫Error(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)∗Kcurr∗Mech(s)=Ki∗(s1+KiKps)∗Kcurr∗K/s=s2K∗Kcurr∗Ki(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+K∗Kcurr∗Kp∗s+K∗Kcurr∗KiK∗Kcurr∗Ki(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+s∗b/J+ksp/J1/J
PI 增益与机械系统之间存在以下关系:
K p ∝ b K i ∝ k s p K_p \propto b\\ K_i \propto k_{sp} Kp∝bKi∝ksp
增加𝐾𝑖对电机控制系统的影响与增加弹簧常数相似。系统的阻尼由⻓𝑝增益控制。增加阻尼将减少振荡。
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)=sspdKps∗spdKis+spdKps=sspdKps∗spdKis∗(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)=(sspdKps∗spdKis∗(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)K∗spdKps∗spdKis∗(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=L∗BWc
其中, 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)电机驱动和控制测试平台。
硬件连接与设置的步骤如下:
- 对于 F28027F 控制板,拆除 JP1、JP2 跳线帽,由驱动板提供 3.3V 电源。
- 对于 F28027F 控制板,将开关 S1 设置为 ON-ON-ON(向上),UART 开关 S4 设置为 OFF(向下)。
- 如下图所示,将 DRV8301 驱动板 插入 F28027F 控制板。注意:接线端子插头应朝向USB连接器。
- 将三相 PMSM 电机连接到 DRV8301 驱动板的 3-pin 接线端子 J11。电机连接标记为 A、B、C,但可以以任何顺序连接。
- 将直流电源连接到 DRV8301 驱动板的 2-pin 接线端子 J2,注意电源正负极不要接反(正极接 PVDD,负极接 GND)。推荐使用 24V/10A 直流稳压电源。
- 打开连接到 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),进行学习。