ZHCUBZ4 April 2024
PWMDAC 模块使用 ePWM 5A、5B、6A 和 6B 将软件变量转换为 PWM 信号,如图 4-32 所示。仅高压套件 (TMDSHVMTRINSPIN) 支持 PWMDAC 模块,因为该模块具有额外的 PWM 输出,电路板上提供 RC 滤波器。如果将 PWMDAC 模块与不支持 PWMDAC 模块的电机驱动器板一起使用,那么 PWM 信号被路由到 TI LaunchPad 上的备用 PWM,并且用户需要在这些引脚上添加 RC 滤波器来利用 PWMDAC 设计。
PWMDAC 模块可被用于通过外部低通滤波器来查看相关引脚输出上的信号,此信号由变量表示。因此,需要使用外部低通滤波器来查看图 4-33 中所示的实际信号波形。(1 阶)RC 低通滤波器用于滤除嵌入在实际低频信号中的高频分量。要选择 R 和 C 值,时间常数可以用截止频率 (fc) 表示,如以下公式所示。
要启用 ePWM DAC 功能,必须在工程属性中添加预定义符号 EPWMDAC_MODE,如图 4-2 所示。
以下代码显示了 PWMDAC 对象的声明。此代码位于 sys_main.c 文件中。
#if defined(EPWMDAC_MODE)
#if defined(HVMTRPFC_REV1P1)
__attribute__ ((section("sys_data"))) HAL_PWMDACData_t pwmDACData;
// HVMTRPFC_REV1P1
#else
#error EPWMDAC is not supported on this kit!
#endif // !HVMTRPFC_REV1P1
#endif // EPWMDAC_MODE
以下代码展示了 PWMDAC 对象、句柄和参数的初始化和设置。四个模块输入 ptrData[0]、ptrData[1]、ptrData[2] 和 ptrData[3] 被配置为指向四个变量的地址。PWMDAC 模块输入指向不同的系统变量,这取决于构建级别。此代码位于 sys_main.c 文件中。
// set DAC parameters
pwmDACData.periodMax =
PWMDAC_getPeriod(halHandle->pwmDACHandle[PWMDAC_NUMBER_1]);
pwmDACData.ptrData[0] = &motorVars_M1.angleFOC_rad; // PWMDAC1
pwmDACData.ptrData[1] = &motorVars_M1.speedAbs_Hz; // PWMDAC2
pwmDACData.ptrData[2] = &motorVars_M1.speedAbs_Hz; // PWMDAC3
pwmDACData.ptrData[3] = &motorVars_M1.adcData.I_A.value[1]; // PWMDAC4
pwmDACData.offset[0] = 0.5f; // PWMDAC1
pwmDACData.offset[1] = 0.0f; // PWMDAC2
pwmDACData.offset[1] = 0.0f; // PWMDAC3
pwmDACData.offset[3] = 0.5f; // PWMDAC4
pwmDACData.gain[0] = 1.0f / MATH_TWO_PI; // PWMDAC1
pwmDACData.gain[1] = 1.0f / USER_MOTOR1_FREQ_MAX_Hz; // PWMDAC2
pwmDACData.gain[2] = 1.0f / USER_MOTOR1_FREQ_MAX_Hz; // PWMDAC3
pwmDACData.gain[3] = 2.0f / USER_M1_ADC_FULL_SCALE_CURRENT_A; // PWMDAC4
以下代码演示了在 motor1ctrlISR() 中断执行期间使用新数据更新 PWM 输出。此代码位于 motor1_drive.c 文件中。
// connect inputs of the PWMDAC module.
HAL_writePWMDACData(halHandle, &pwmDACData);