您好!
我最近从使用双采样配置更改为使用 双电机 FCL 项目进行单采样。 使用双采样时、M1和 M2 ISR 偏移1/2 A 周期。 即、如果以10kHz (100us)的频率运行、则每个 ISR 之间的间隔为50us。 在我从 double -> Single 切换后、我看到 M2波形被一个周期的1/4而 不是1/2移位。 这种行为会导致系统其他部分出现一些时序问题。
我认为 HAL_setupMotorPWM 的以下代码负责同步两个电机之间的时基:
else if(handle == &halMtr[MTR_2])
{
halfPeriod = M2_INV_PWM_TICKS/2; // 100MHz EPWMCLK
EPWM_setPhaseShift(obj->pwmHandle[0], ((halfPeriod>>1) + 0));
EPWM_setPhaseShift(obj->pwmHandle[1], ((halfPeriod>>1) + 2));
EPWM_setPhaseShift(obj->pwmHandle[2], ((halfPeriod>>1) + 4));
EPWM_setTimeBasePeriod(obj->pwmHandle[0], halfPeriod);
EPWM_setTimeBasePeriod(obj->pwmHandle[1], halfPeriod);
EPWM_setTimeBasePeriod(obj->pwmHandle[2], halfPeriod);
}
问题
- 在单采样模式下运行时、周期再次被二分频是否有任何原因? 当我移除">>1" setPhaseShift 时,电机会消耗大量电流而不旋转(就像 ID 真的很高一样)。 但是、当我在示波器上查看 ISR 时序时、它们在整个 PWM 周期中均分。
- 当我尝试找出导致此行为的根本原因时、我注意到双采样和单采样设置的 carrierMid 值的比例不同。 (dual_axis_serving_drive_user.c 中的 initMotorParameters 函数)是否有意这样做?
#if(SAMPLING_METHOD == SINGLE_SAMPLING) pMotor->maxModIndex = (M1_TPWM_CARRIER - (2 * M1_FCL_COMPUTATION_TIME)) / M1_TPWM_CARRIER; pMotor->FCL_params.carrierMid = pMotor->maxModIndex * M1_INV_PWM_HALF_TBPRD * 0x10000L; #elif(SAMPLING_METHOD == DOUBLE_SAMPLING) pMotor->maxModIndex = (M1_TPWM_CARRIER - (4 * M1_FCL_COMPUTATION_TIME)) / M1_TPWM_CARRIER; pMotor->FCL_params.carrierMid = M1_INV_PWM_HALF_TBPRD * 0x10000L; #endif
谢谢、
-科林