功能描述
电流环工作模式
通过寄存器配置,HCL 可以配置三种工作模式,即 Mode0、Mode1 和 Mode2。各模式详细说明如下。
-
绿色底色为 HCL 在 Mode0 模式下工作的模块。
-
电角度选择 Theta0 寄存器的数值,即无位置测量,需要软件给定位置数据。
-
反 Park 变换计算的输入选择 Udm0、Uqm0 的寄存器数值输入,即无电流测量。
HCL Mode1 工作模式为 Mode1 的工作模式的示意图:
-
绿色底色为 HCL 在 Mode 1 模式下工作的模块。相对于 Mode0,Mode1 加入了以下模块:
- ADC 采集
- 电流预处理
- Clarke 变换
- Park 变换
- PID
- 死区补偿模块
-
电角度选择 Theta0 寄存器的数值,即无位置测量,需要软件给定位置数据。
-
反 Park 变换计算的输入选择 D 轴 PID 和 Q 轴 PID 的输出,即增加电流测量的通路。
-
D 轴 PID 和 Q 轴 PID 的输入参考值 Id_ref、Iq_ref 通过寄存器设置。
-
死区补偿模块,在 Mode1 模式下有效,可以通过寄存器配置使能。

HCL Mode2 工作模式为 Mode2 的工作模式的示意图:
-
绿色底色为 HCL 在 Mode2 模式下工作的模块。相对于 Mode1,Mode2 加入了以下模块:
- 电角度测量
- 速度测量
-
电角度选择电角度测量的数值,即增加位置测量的通路,HCL 自动获取位置数据。
-
反 Park 变换计算的输入选择 D 轴 PID 和 Q 轴 PID 的输出,即增加电流测量的通路。
-
D 轴 PID 和 Q 轴 PID 的输入参考值 Id_ref、Iq_ref 通过寄存器设置。
-
死区补偿模块,在 Mode2 模式下有效,可以通过寄存器配置使能。
电流环采样预处理
电流环采样预处理模块,是对 ADC 采集到的 U 相电流和 V 相电流数据进行预处理,以下为电流环采样预处理模块的输入输出参数列表。参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
DIU |
ADC 采集的 U 相电流 |
12 位无符号整型 |
[0, 4095] |
输入参数 2 |
DIV |
ADC 采集的 V 相电流 |
12 位无符号整型 |
[0, 4095] |
输入参数 3 |
IUoff |
U 相 Offset 电流 |
12 位无符号整型 |
[0, 4095] |
输入参数 4 |
IVoff |
V 相 Offset 电流 |
12 位无符号整型 |
[0, 4095] |
输入参数 5 |
CurrCalGain |
电流增益 |
16 位无符号 Q10 |
[0, 31.999755859] |
输出参数 1 |
PDIU |
预处理后的 U 相电流 |
16 位有符号 Q15 |
[-1, 0.999969482] |
输出参数 2 |
PDIV |
预处理后的 V 相电流 |
16 位有符号 Q15 |
[-1, 0.999969482] |
DIU = DIU - IUoff; DIV = DIV - Ivoff; PDIU = (s16)((DIU * CurrCalGain) >> 10); PDIV = (s16)((DIV * CurrCalGain) >> 10); PDIU = - PDIU; PDIV = - PDIV;
Clarke 变换
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
PDIU |
采样预处理输出的 DIU |
16 位有符号 Q15 |
[-1, 0.999969482] |
输入参数 2 |
PDIV |
采样预处理输出的 DIV |
16 位有符号 Q15 |
[-1, 0.999969482] |
输出参数 1 |
IA |
Alpha 轴电流 |
16 位有符号 Q15 |
[-1, 0.999969482] |
输出参数 2 |
IB |
Beta 轴电流 |
16 位有符号 Q15 |
[-1, 0.999969482] |
IA = PDIU; IB = ( (PDIU + (PDIV * 2)) * IQ15(0.57735) ) >> 15;
Park 变换
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
IA |
Clarke 变换输出的 IA |
16 位有符号 Q15 |
[-1, 0.999969482] |
输入参数 2 |
IB |
Clarke 变换输出的 IB |
16 位有符号 Q15 |
[-1, 0.999969482] |
输入参数 3 |
sin ETHETA |
电角度 ETHETA 的正弦值 |
16 位有符号 Q15 |
[-1, 0.999969482] |
输入参数 4 |
cos ETHETA |
电角度 ETHETA 的余弦值 |
16 位有符号 Q15 |
[-1, 0.999969482] |
输出参数 1 |
ID |
D 轴电流 |
16 位有符号 Q15 |
[-1, 0.999969482] |
输出参数 2 |
IQ |
Q 轴电流 |
16 位有符号 Q15 |
[-1, 0.999969482] |
QEP 电角度计算
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
QPOSCNT |
当前计数器值,来自 QEP |
24 位无符号整型 |
[0x0 , 0xFFFFFF] |
输入参数 2 |
QEP_INIT_POS |
QEP 初始位置值 |
24 位无符号整型 |
[0x0 , 0xFFFFFF] |
输入参数 3 |
QEP_POS_CAL |
QEP 位置校正值 |
25 位有符号整型 |
[-224 , 224 - 1] |
输入参数 4 |
QEP_MAX_POS |
QEP 最大位置值 |
24 位无符号整型 |
[0x0 , 0xFFFFFF] |
输入参数 5 |
QEP_ELECT_MAX |
QEP 最大电角度 |
24 位无符号整型 |
[0x0 , 0xFFFFFF] |
输入参数 6 |
QEP_ELECT_FAC |
电角度转换因子 |
24 位无符号 Q24 |
[0 , 0.999999940] |
输出参数 1 |
ELECT_THETA0 |
QEP 电角度 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 2 |
ELECT_OUT |
电角度(脉冲数) |
无符号整型 24 位 |
[0x0 , 0xFFFFFF] |
ABS 电角度计算
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
ABS_POS |
当前位置值,来自 TA/ BIS/ EDAT_IF |
24 位无符号整型 |
[0x0 , 0xFFFFFF] |
输入参数 2 |
ABS_POS_COMP |
绝对值编码器的位置补偿值 |
24 位有符号整型 |
[-223 , 223 - 1] |
输入参数 3 |
ABS_MAX_POS |
绝对值编码器的最大位置 |
24 位无符号整型 |
[0x0 , 0xFFFFFF] |
输入参数 4 |
ABS_ELECT_MAX |
绝对值编码器的最大电角度 |
24 位无符号整型 |
[0x0 , 0xFFFFFF] |
输入参数 5 |
ABS_ELECT_FAC |
电角度转换因子 |
24 位无符号 Q24 |
[0 , 0.999999940] |
输入参数 6 |
ABS_DEANG_COMP |
绝对值编码器的延迟补偿值 |
16 位有符号整型 |
[-215 , 215 - 1] |
输出参数 1 |
ELECT_THETA1 |
ABS 电角度 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 2 |
ELECT_OUT |
电角度(脉冲数) |
无符号整型 24 位 |
[0x0 , 0xFFFFFF] |
THETA_SEL
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
ELECT_THETA0 |
QEP 电角度 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 2 |
ELECT_THETA1 |
ABS 电角度 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 3 |
THETA0 |
THETA0 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 1 |
sin ETHETA |
电角度 ETHETA 正弦值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 2 |
cos ETHETA |
电角度 ETHETA 余弦值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
THETA_SEL 功能用于 Mode0 /1 /2 不同工作模式下电角度的选择,具体选择通路如下图所示:

UDQ_SEL
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
UDM0 |
UDM0 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 2 |
UQM0 |
UQM0 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 3 |
UD |
UD,DPID 输出 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 4 |
UQ |
UQ,QPID 输出 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 1 |
UDS |
选择输出数据 UDS |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 2 |
UQS |
选择输出数据 UQS |
16 位有符号 Q15 |
[-1 , 0.999969482] |
UDQ_SEL 功能用于 Mode0 / 1 / 2 不同工作模式下 UD 和 UQ 输入信号源的选择,具体选择通路如下图所示:

DPID
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
ID_REF |
D 轴参考电流值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 2 |
ID |
D 轴电流计算值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 3 |
DPID_KP |
D 轴 PID 比例系数 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 4 |
DPID_KI |
D 轴 PID 积分系数 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 5 |
DPID_UMAX |
D 轴 PID 输出最大限值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 6 |
DPID_UMIN |
D 轴 PID 输出最小限值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 7 |
DPID_COMP |
D 轴 PID 补偿值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 1 |
UD |
D 轴 PID 输出值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
QPID
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
IQ_REF |
Q 轴参考电流值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 2 |
IQ |
Q 轴电流计算值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 3 |
QPID_KP |
Q 轴 PID 比例系数 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 4 |
QPID_KI |
Q 轴 PID 积分系数 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 5 |
QPID_UMAX |
Q 轴 PID 输出最大限值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 6 |
QPID_UMIN |
Q 轴 PID 输出最小限值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 7 |
QPID_COMP |
Q 轴 PID 补偿值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 8 |
INTG_SEP_ERR |
积分分离值 |
15 位无符号 Q15 |
[0 , 0.999969482] |
输出参数 1 |
UQ |
Q 轴 PID 输出值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
反 Park 变换
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
UD_S |
DPID 或 UDM0 输出的 UD |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 2 |
UQ_S |
QPID 或 UQM0 输出的 UQ |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 3 |
sin ETHETA |
电角度 ETHETA 的正弦值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 4 |
cos ETHETA |
电角度 ETHETA 的余弦值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 1 |
UA |
Alpha 轴电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 2 |
UB |
Beta 轴电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
死区补偿
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
ID |
D 轴电流计算值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 2 |
IQ |
Q 轴电流计算值 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 3 |
DT_COMP_DAT |
死区补偿数据 |
15 位无符号 Q15 |
[0 , 0.999969482] |
输入参数 4 |
DT_LP_FLT |
死区补偿低通滤波系数 |
15 位无符号 Q15 |
[0 , 0.999969482] |
输入参数 5 |
ETHETA |
电角度 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 1 |
UA_COMP |
Alpha 轴死区补偿电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 2 |
UB_COMP |
Beta 轴死区补偿电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
SVPWM
SVPWM 的处理流程图如下

参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
UA |
Alpha 轴电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 2 |
UB |
Beta 轴电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 3 |
UA_COMP |
Alpha 轴死区补偿电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 4 |
UB_COMP |
Beta 轴死区补偿电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 1 |
U_PHU |
U 相电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 2 |
U_PHV |
V 相电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 3 |
U_PHW |
W 相电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
U_PHU |
U 相电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 2 |
U_PHV |
V 相电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输入参数 3 |
U_PHW |
W 相电压 |
16 位有符号 Q15 |
[-1 , 0.999969482] |
输出参数 1 |
SEC_NUM |
扇区号 |
16 位无符号整型数 |
1/2/3/4/5/6 |
输出参数 2 |
U_PHU_ABS |
U 相电压绝对值 |
16 位有符号 Q15 |
[0 , 0.999969482] |
输出参数 3 |
U_PHV_ABS |
V 相电压绝对值 |
16 位有符号 Q15 |
[0 , 0.999969482] |
输出参数 4 |
U_PHW_ABS |
W 相电压绝对值 |
16 位有符号 Q15 |
[0 , 0.999969482] |
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
U_PHU_ABS |
U 相电压绝对值 |
16 位有符号 Q15 |
[0 , 0.999969482] |
输入参数 2 |
U_PHV_ABS |
V 相电压绝对值 |
16 位有符号 Q15 |
[0 , 0.999969482] |
输入参数 3 |
U_PHW_ABS |
W 相电压绝对值 |
16 位有符号 Q15 |
[0 , 0.999969482] |
输入参数 4 |
SEC_NUM |
扇区号 |
16 位无符号整型数 |
1/2/3/4/5/6 |
输入参数 5 |
PWM_TIMCOST |
PWM 时间常数 |
20 位无符号 Q15 |
[0 , 31.999969482] |
输入参数 6 |
PWM_PRD |
PWM 周期 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输出参数 1 |
VECT1 |
时间矢量 1 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输出参数 2 |
VECT2 |
时间矢量 2 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输出参数 3 |
VECT0 |
时间矢量 0 |
16 位无符号整型数 |
[0 , 0xFFFF] |
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
VECT1 |
时间矢量 1 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输入参数 2 |
VECT2 |
时间矢量 2 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输入参数 3 |
VECT0 |
时间矢量 0 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输入参数 4 |
SEC_NUM |
扇区号 |
16 位无符号整型数 |
1/2/3/4/5/6 |
输入参数 5 |
MAXDUTY |
最大占空比 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输入参数 6 |
MINDUTY |
最小占空比 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输出参数 1 |
TD1 |
时间占空比 1 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输出参数 2 |
TD2 |
时间占空比 2 |
16 位无符号整型数 |
[0 , 0xFFFF] |
输出参数 3 |
TD3 |
时间占空比 3 |
16 位无符号整型数 |
[0 , 0xFFFF] |
QEP 测速
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
QPOSCNT |
QEP 位置数据 |
24 位无符号整型数 |
[0 , 0xFFFFFF] |
输入参数 2 |
SPD_DIR_TH |
测速方向阈值 |
24 位无符号整型数 |
[0 , 0xFFFFFF] |
输入参数 3 |
QEP_MAX_POS |
QEP 最大位置 |
24 位无符号整型数 |
[0 , 0xFFFFFF] |
输入参数 4 |
QEP_SPDMCOFF |
QEP 测速系数 |
24 位无符号 Q15 |
[0 , 511.999969482] |
输入参数 5 |
QEP_MAX_DPOS |
QEP 最大位置差 |
24 位无符号整型数 |
[0 , 0xFFFFFF] |
输出参数 1 |
SPD_OUT |
速度输出 |
16 位有符号整型数 |
[0 , 0xFFFF] |
ABS 测速
参数 |
Symbol |
描述 |
数据类型 |
数值表示范围 |
---|---|---|---|---|
输入参数 1 |
ABS_POS |
ABS 位置数据 |
24 位无符号整型数 |
[0 , 0xFFFFFF] |
输入参数 2 |
SPD_DIR_TH |
测速方向阈值 |
24 位无符号整型数 |
[0 , 0xFFFFFF] |
输入参数 3 |
ABS_MAX_POS |
ABS 最大位置 |
24 位无符号整型数 |
[0 , 0xFFFFFF] |
输入参数 4 |
ABS_SPDMCOFF |
ABS 测速系数 |
24 位无符号 Q15 |
[0 , 511.999969482] |
输入参数 5 |
ABS_MAX_DPOS |
ABS 最大位置差 |
24 位无符号整型数 |
[0 , 0xFFFFFF] |
输出参数 1 |
SPD_OUT |
速度输出 |
16 位有符号整型数 |
[0 , 0xFFFF] |
电流环断续点
- 通过寄存器字段 HCL_BPM_EN
使能电流环断点功能。
使能后,寄存器字段 HCL_BP_NODE 以及 HCL_RP_NODE 生效,分别指示断点的节点位置和续点的节点位置。
- 使能硬件电流环断和续点功能后,硬件电流环计算到断点处停止计算,并且产生中断状态通知 CPU。
- 软件根据断点处的数据,对用户所需的算法进行计算,计算出续点所需的数据。
- 软件通过寄存器 RSP_PARA0/1/2 写入续点数据,且对寄存器字段 HCL_RP_START 写 0x1,触发硬件电流环从续点继续完成本次电流环计算。
- 按照以下两种情况,设置不同流程:
- Case 1:利用断续点的设置,采用软件 PID 替换硬件 PID。
设置 Node D 为断点 BreakPoint,Node E 为续点,电流环执行的顺序为:
A → B → C → D → 电流环停止,产生 IRQ → 中断函数进行用户的 PID 算法,获得 Ud 和 Uq 数据作为续点数据,续点数据写入 RSP_PARA0/1 寄存器,HCL_RP_START = 0x1 触发电流环重新启动→ F → G→更新 EPWM 的占空比→完成本次计算
- Case 2:利用断续点的设置,采用 SDFM 接口的电流数据替换内置 ADC0/1 的电流数据。
设置 Node B 为断点 BreakPoint,Node B 为续点,电流环执行的顺序为:
A → B → 电流环停止,产生 IRQ → 中断函数进行 SDFM 的数据获取并且进行相应的数据处理,获得 PDIU 和 PDIV 数据作为续点数据,续点数据写入 RSP_PARA0/1 寄存器,HCL_RP_START = 0x1 触发电流环重新启动→ C → D → F → G → 更新 EPWM 的占空比 → 完成本次计算
- Case 1:利用断续点的设置,采用软件 PID 替换硬件 PID。