关于BLDC 的部分程序
做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;
页:
[1]