做BLDC控制的 相信很多人都看过文件
HBF281X_EV1_BLDC_PWM_Update(PWMGEN *p)这个模块里
//Convert "Period" (Q15) modulation function to Q0 问题1 周期与占空比的乘积,这里看不明白,求教 Tmp = (int32)p->PeriodMax*(int32)p->MfuncPeriod; // Q15 = Q0*Q15 Period = (int16)(Tmp>>15); // Q15 -> Q0 (Period) // Check PwmActive setting if (p->PwmActive==1) // PWM active high 问题2 这里好像是高电平开启MOS管吧,但是面这句话 不明白了 GPR0_BLDC_PWM = 0x7FFF - p->DutyFunc; else if (p->PwmActive==0) // PWM active low GPR0_BLDC_PWM = p->DutyFunc;
// Convert "DutyFunc" or "GPR0_BLDC_PWM" (Q15) duty modulation function to Q0 Tmp = (int32)Period*(int32)GPR0_BLDC_PWM; // Q15 = Q0*Q15 问题3 这里是怎么改变控制寄存器的值的 EvaRegs.CMPR1 = (int16)(Tmp>>15); // Q15 -> Q0 EvaRegs.CMPR2 = (int16)(Tmp>>15); // Q15 -> Q0 EvaRegs.CMPR3 = (int16)(Tmp>>15); // Q15 -> Q0
对了对于PWMGEN结构体的定义
ypedef struct { Uint16 CmtnPointer; // Input: Commutation (or switching) state pointer input (Q0)换相模块 int16 MfuncPeriod; // Input: Duty ratio of the PWM outputs (Q15) 占空比 Uint16 PeriodMax; // Parameter: Maximum period (Q0) int16 DutyFunc; // Input: PWM period modulation input (Q15) 周期调整 Uint16 PwmActive; // Parameter: 0 = PWM active low, 1 = PWM active high (0 or 1) 1髙电平开启 void (*init)(); // Pointer to the init function void (*update)(); // Pointer to the update function } PWMGEN;
求教!
|