主题中讨论的其他器件:DRV8300
您好!
我尝试在通用电机控制实验室中从 MotorControl SDK 中了解如何限制 PWM 占空比。
我将 DRV8300与自举电路搭配使用、我想将 PWM 占空比限制为98%、这样就可以了
自举电路将始终可靠工作。 我找到了以下函数、其中应用了 PWM、但我还无法实现
如何在不改变行为的情况下限制它。
static inline void
HAL_writePWMData(HAL_MTR_Handle handle, HAL_PWMData_t *pPWMData)
{
HAL_MTR_Obj *obj = (HAL_MTR_Obj *)handle;
float32_t period = (float32_t)(EPWM_getTimeBasePeriod(obj->pwmHandle[0]));
uint16_t pwmCnt;
for(pwmCnt=0; pwmCnt<3; pwmCnt++)
{
// compute the value
float32_t V_pu = -pPWMData->Vabc_pu.value[pwmCnt]; // Negative
float32_t V_sat_pu = __fsat(V_pu, 0.5f, -0.5f); // -0.5~0.5
float32_t V_sat_dc_pu = V_sat_pu + 0.5; // 0~1.0
pPWMData->cmpValue[pwmCnt] = (int16_t)(V_sat_dc_pu * period); //
if(pPWMData->cmpValue[pwmCnt] < pPWMData->minCMPValue)
{
pPWMData->cmpValue[pwmCnt] = pPWMData->minCMPValue;
}
// write the PWM data value
EPWM_setCounterCompareValue(obj->pwmHandle[pwmCnt],
EPWM_COUNTER_COMPARE_A,
pPWMData->cmpValue[pwmCnt]);
EPWM_setCounterCompareValue(obj->pwmHandle[pwmCnt],
EPWM_COUNTER_COMPARE_B,
pPWMData->cmpValue[pwmCnt]);
}
return;
} // end of HAL_writePWMData() function
那么、最小占空比似乎已经受到限制、但不是最大占空比、对吧? 在满负载之前、如何在不改变行为的情况下做到这一点?
我已经尝试使用: float32_t V_sat_pu =__fsat (V_pu、0.49f、-0.49f);但这似乎仍然会改变我的整个周期、这可能是由于校准。
编辑:
当我观察 PWM 占空比时、看起来实际占空比为2500 (20kHz 时)、并会下降以获得更大的功率。 pPWMData->minCMPValue (在通用电机控制示例中为 hal.h 第3256行)是否已经限制了最大占空比、以便自举始终起作用?