LOVEBABY 发表于 2015-10-24 09:12:07

MSP432关于带有死区PWM的问题




DeadPermill =((DeadTime*1000)/TA0CCR0);//怎么理解?DeadTime哪里来的的
if((1000-2*Percent)<=DeadPermill)//死区必须小等死区时间
   Percent = (1000-DeadPermill)/2;//减去死区时间,剩下有效的么
TA0CCR1=Percent*TA0CCR0/1000;//不懂怎么个解释,
TA0CCR2=TA0CCR0-TA0CCR1;//不懂,图解倒是在Y轴上,勉强理解



char TA0_PWM_SetPerilld(char Channel, uint32_t Duty)//通道和高电平有效千分比
{
uint8_t Mode =0;          //模式
uint32_t DeadPermill=0;   //绝对死区占空比
uint64_t Percent =0;      //有效比值
Percent =Duty;            //有效占空比、转化为千分
DeadPermill =((DeadTime*1000)/TA0CCR0);//绝对死区时间换成千分比。周期=时间/N

switch(Channel)
         {
         case 1: Mode =(TA0CCTL1&0x00e0>>5) ;break;
         case 2: Mode =(TA0CCTL2&0x00e0>>5)break;//读OUTMOD输出模式,      
         default:return(0);
         }
switch(Mode)
         {
         case 2: case 6:
                        {
                        if((1000-2*Percent)<=DeadPermill)//死区必须小等死区时间
                        Percent = (1000-DeadPermill)/2;//计算有效占空比
                        TA0CCR1=Percent*TA0CCR0/1000;//
                        TA0CCR2=TA0CCR0-TA0CCR1;
                        break;
                        }
         case 7:
                {
                if(Percent>1000) Percent=1000;
                if(Channel==1) TA0CCR1=Percent* TA0CCR0/1000;
                if(Channel==2) TA0CCR2=Percent* TA0CCR0/1000;
                break;
               }
         case 3: //占空比一律为正脉宽,所以需要 TA0CCR0减去占空比
                {                     
               if(Percent>1000) Percent=1000;
               if(Channel==1) TA0CCR1= TA0CCR0-Percent*TA0CCR0/1000;
               if(Channel==2) TA0CCR2= TA0CCR0-Percent*TA0CCR0/1000;
               break;
                }
                default: return(0);
         }
return (1);            
         
}
页: [1]
查看完整版本: MSP432关于带有死区PWM的问题