虫虫好 发表于 2012-2-26 13:53

关于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]
查看完整版本: 关于BLDC 的部分程序