ZHCAB59B June 2019 – November 2020 TMS320F28384D , TMS320F28384S , TMS320F28386D , TMS320F28386S , TMS320F28388D , TMS320F28388S , TMS320F28P650DH , TMS320F28P650DK , TMS320F28P650SH , TMS320F28P650SK , TMS320F28P659DH-Q1 , TMS320F28P659DK-Q1 , TMS320F28P659SH-Q1
数字电机控制系统存在的主要问题是,内部控制环路的传输滞后降低了系统的响应,从而影响系统在更高频率和运行速度下的性能。解决此问题将有助于改善电流环路带宽。但是,若要在不损失直流母线电压利用率的情况下实现此目标,以下各项是必需的:
TMS320F2838x 提供必要的硬件支持来实现更高的性能,而在此实时控制器上运行的 TI FCL 库则提供了必要的算法支持。MC SDK v2.01.00.00 及后续版本可提供源代码。
为了提高电流环路的速度并优化电流环路的工作范围,反馈采样和 PWM 更新之间的延迟必须尽可能小,如图 4-1 所示。实质上,在所示 PWM 载波周期内,在载波峰值处会发生系统采样,并在 TPWM_update 时间点更新由控制器输出的 PWM 占空比。这样可以大幅减少传输滞后并改善带宽。但是,缺点是会失去用于计算逆变器 PWM 占空比新值的有效 PWM 时间窗口。此时间窗口被称为消隐窗口。此消隐窗口越小,直流母线电压利用率就越大,电机运行速度范围也越大。
通常,在许多载波频率为 10kHz 的应用中,不超过 2µs 的延迟是可以接受的。过去,此任务是将高端 FPGA、外部 ADC 和 MCU 结合使用来实现的。但是,C2000 具有相应的硬件支持功能(例如三角数学单元 (TMU)、CLA、高速 ADC 或 SDFM、单周期 ADC 读取和 PWM 写入),因此无需 FPGA 或外部 ADC 即可在此 MCU 上实现这种控制。
FCL 库利用 F2838x MCU 中的以下特性:
图 4-2 展示了 FCL 库及其输入和输出的方框图。FCL 库在 CPU、CLA 和 TMU 之间对算法进行了分区,旨在将延迟降低到 1.0µs 以内,小于可接受的 2.0µs。如果算法是以汇编语言编写的,则可以进行进一步优化。
FCL 库支持两种类型的电流调节器,即标准 PI 控制器和复杂控制器。复杂控制器能够以更快的速度提供比标准 PI 控制器更高的带宽。两种电流调节器均用于用户评估。在示例工程中,可以通过适当设置 FCL_CNTLR 宏并研究电流调节器的比较结果来选择电流调节器。
表 4-1 列出了 FCL API 函数及其说明。
API 函数 | 说明 |
---|---|
uint32_t FCL_getSwVersion(void) | 此函数返回 32 位常量,对于此版本,返回的值为 0x00000007。 |
void FCL_runComplexCtrl(void) | 此函数在具有 QEP 编码器和霍尔传感器(使用 ADC)的 FCL 中执行复杂控制 |
FCL_runSDFMComplexCtrl(void) | 此函数在具有 QEP 编码器和分流电阻器(使用 SDFM)的 FCL 中执行复杂控制 |
void FCL_runAbsEncComplexCtrl(void) | 此函数在具有典型绝对编码器和霍尔传感器(使用 ADC)的 FCL 中执行复杂控制 |
void FCL_runSDFMAbsEncComplexCtrl(void) | 此函数在具有典型绝对编码器和分流电阻器(使用 SDFM)的 FCL 中执行复杂控制 |
void FCL_runPICtrl(void) | 此函数在具有 QEP 编码器和霍尔传感器(使用 ADC)的 FCL 中执行 PI 控制 |
void FCL_runSDFMPICtrl(void) | 此函数在具有 QEP 编码器和分流电阻器(使用 SDFM)的 FCL 中执行 PI 控制 |
void FCL_runAbsEncPICtrl(void) | 此函数在具有典型绝对编码器和霍尔传感器(使用 ADC)的 FCL 中执行 PI 控制 |
void FCL_runSDFMAbsEncPICtrl(void) | 此函数在具有典型绝对编码器和分流电阻器(使用 SDFM)的 FCL 中执行 PI 控制 |
void FCL_runPICtrlWrap(void) | 当使用 QEP 作为位置传感器时,在 PI 控制模式下,在退出 ISR 之前,用户应用程序在 FCL 结束时将调用此函数 |
void FCL_runAbsEncPICtrlWrap(void) | 当使用绝对编码器作为位置传感器时,在 PI 控制模式下,在退出 ISR 之前,用户应用程序在 FCL 结束时将调用此函数 |
void FCL_runQEPWrap(void) | 此函数由用户应用程序调用以结束 QEP 反馈过程。此函数仅在 FCL_LEVE2 中使用 |
void FCL_runComplexCtrlWrap(void) | 当使用 QEP 作为位置传感器时,在复杂控制器模式下,在退出 ISR 之前,用户应用程序在 FCL 结束时将调用此函数 |
void FCL_runAbsEncComplexCtrlWrap(void) | 当使用绝对编码器作为位置传感器时,在复杂控制模式下,在退出 ISR 之前,用户应用程序在 FCL 结束时将调用此函数 |
void FCL_initPWM(uint32_t basePhaseU, uint32_t basePhaseV, uint32_t basePhaseW) | 此函数用于初始化 PWM 以支持 FCL 运行,在初始化或设置过程中,用户应用程序将调用此函数 |
void FCL_resetController(void) | 调用此函数可以重置 FCL 变量,此函数在您需要停止电机并重新启动电机时很有用 |
void FCL_initQEP(uint32_t baseA) | 此函数对 eQEP 外设进行初始化以便连接到 QEP |
void FCL_initADC(uint32_t resultBaseA, ADC_PPBNumber baseA_PPB, uint32_t resultBaseB, ADC_PPBNumber baseB_PPB, uint32_t adcBasePhaseW) |
此函数对用于感测电机相电流的 ADC 进行初始化 |
如需了解该库的更多信息,请参阅快速电流环路 MotorControl SDK 库用户指南,此文档位于:
\ti\c2000\C2000Ware_MotorControl_SDK_2_01_00_00\libraries\fcl\docs。
FCL 的源代码位于:
\ti\c2000\C2000Ware_MotorControl_SDK_2_01_00_00\libraries\fcl\source