ZHCUBZ5A September 2021 – April 2024
PWMDAC 模块使用 ePWM 6A、6B、7A 和 7B 将软件变量转换为 PWM 信号,如图 3-25 所示。PWMDAC 模块只受高压套件 (TMDSHVMTRINSPIN) 支持,因为该模块具有额外的 PWM 输出,电路板上提供 RC 滤波器。如果将 PWMDAC 模块与不支持 PWMDAC 模块的电机驱动器板一起使用,那么 PWM 信号被路由到 C2000 LaunchPad 上的备用 PWM,并且用户需要在这些引脚上添加 RC 滤波器才能利用 PWMDAC 解决方案。
PWMDAC 模块可被用于通过外部低通滤波器来查看相关引脚输出上的信号,此信号由变量表示。因此,需要使用外部低通滤波器来查看图 3-26 中所示的实际信号波形。(1 阶)RC 低通滤波器用于滤除嵌入在实际低频信号中的高频分量。要选择 R 和 C 值,时间常数可以用截止频率 (fc) 表示,如以下公式方程式 49 和 方程式 50 所示。
若要启用 ePWM DAC 功能,必须在工程属性中添加预定义符号 EPWMDAC_MODE,如图 3-19 所示。
下面的代码演示了 PWMDAC 对象的声明。此代码位于 sys_main.c 文件中。
HAL_PWMDACData_t pwmDACData;
下面的代码展示了 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.anglePLL_rad; // PWMDAC1
... ...
pwmDACData.ptrData[1] = &motorVars_M1.angleENC_rad; // PWMDAC2
... ...
pwmDACData.ptrData[2] = &motorVars_M1.angleENC_rad; // PWMDAC3
... ...
pwmDACData.ptrData[3] = &motorVars_M1.adcData.I_A.value[0]; // PWMDAC4
pwmDACData.offset[0] = 0.5f;
pwmDACData.offset[1] = 0.5f;
pwmDACData.offset[2] = 0.5f;
pwmDACData.offset[3] = 0.5f;
pwmDACData.gain[0] = 1.0f / MATH_TWO_PI;
pwmDACData.gain[1] = 1.0f / MATH_TWO_PI;
pwmDACData.gain[2] = 1.0f / MATH_TWO_PI;
pwmDACData.gain[3] = 4096.0f / USER_MOTOR1_OVER_CURRENT_A;
以下代码演示了在 motor1ctrlISR() 中断执行期间使用新数据更新 PWM 输出。此代码位于 motor1_drive.c 文件中。
// connect inputs of the PWMDAC module. HAL_writePWMDACData(halHandle, &pwmDACData);