智能车制作

标题: 求助一段PWM程序 [打印本页]

作者: __oO    时间: 2014-3-14 23:48
标题: 求助一段PWM程序
void pwm_set( uchar_t channel,            /*通道选择*/
              uchar_t aligned,            /*对齐方式,0,左对齐,1中间对齐*/
              uchar_t ppol,               /*极性选择----0,开始低电平;1,开始高电平*/
              uint16_t T,                  /*0,1---500k/T;2,3-----500k/T;*/
              uint16_t duty){              /*4,5---2M/T;6,7-----2M/T*/
   switch(channel)
   {
      case 0 :  PWME_PWME0=0;               /* Enable  PWM 使能      */
                PWMPOL_PPOL0=ppol;          /* Duty=High Time          极性设置        */
                PWMCAE_CAE0=aligned;        /* Left-aligned            对齐方式设置   */
                PWMPER0=(uchar_t)T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                PWMDTY0=(uchar_t)duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                PWME_PWME0=1;               /* Enable  PWM             使能      */
                break;
      case 1 :  PWME_PWME1=0;               /* Enable  PWM             使能      */
                PWMPOL_PPOL1=ppol;          /* Duty=High Time          极性设置        */
                PWMCAE_CAE1=aligned;        /* Left-aligned            对齐方式设置   */
                PWMPER1=(uchar_t)T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                PWMDTY1=(uchar_t)duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                PWME_PWME1=1;               /* Enable  PWM             使能      */
                break;
      case 2 :  PWME_PWME2=0;               /* Enable  PWM             使能      */
                PWMPOL_PPOL2=ppol;          /* Duty=High Time          极性设置        */
                PWMCAE_CAE2=aligned;        /* Left-aligned            对齐方式设置   */
                PWMPER2=(uchar_t)T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                PWMDTY2=(uchar_t)duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                PWME_PWME2=1;               /* Enable  PWM             使能      */
                break;
      case 3 :  PWME_PWME3=0;               /* Enable  PWM             使能      */
                PWMPOL_PPOL3=ppol;          /* Duty=High Time          极性设置        */
                PWMCAE_CAE3=aligned;        /* Left-aligned            对齐方式设置   */
                PWMPER3=(uchar_t)T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                PWMDTY3=(uchar_t)duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                PWME_PWME3=1;               /* Enable  PWM             使能      */
                break;
      case 4 :  PWME_PWME4=0;               /* Enable  PWM             使能      */
                PWMPOL_PPOL4=ppol;          /* Duty=High Time          极性设置        */
                PWMCAE_CAE4=aligned;        /* Left-aligned            对齐方式设置   */
                PWMPER4=(uchar_t)T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                PWMDTY4=(uchar_t)duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                PWME_PWME4=1;               /* Enable  PWM             使能      */
                break;
      case 5 :  PWME_PWME5=0;               /* Enable  PWM             使能      */
                PWMPOL_PPOL5=ppol;          /* Duty=High Time          极性设置        */
                PWMCAE_CAE5=aligned;        /* Left-aligned            对齐方式设置   */
                if(PWMCTL_CON45 == 1)    //是否将通道45串为同一个输出通道
                {
                  PWMPER45=T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                  PWMDTY45=duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                }
                else
                {
                  PWMPER5=(uchar_t)T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                  PWMDTY5=(uchar_t)duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                }
                PWME_PWME5=1;               /* Enable  PWM             使能      */
                break;
      case 6 :  PWME_PWME6=0;               /* Enable  PWM             使能      */
                PWMPOL_PPOL6=ppol;          /* Duty=High Time          极性设置        */
                PWMCAE_CAE6=aligned;        /* Left-aligned            对齐方式设置   */
                PWMPER6=(uchar_t)T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                PWMDTY6=(uchar_t)duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                PWME_PWME6=1;               /* Enable  PWM             使能      */
                break;
      case 7 :  PWME_PWME7=0;               /* Enable  PWM             使能      */
                PWMPOL_PPOL7=ppol;          /* Duty=High Time          极性设置        */
                PWMCAE_CAE7=aligned;        /* Left-aligned            对齐方式设置   */
                PWMPER7=(uchar_t)T;                  /* Frequency=SB/100=1K     周期寄存器设置  */
                PWMDTY7=(uchar_t)duty;               /* Duty cycle = 50%        占空比寄存器设置  */
                PWME_PWME7=1;               /* Enable  PWM             使能      */
                break;
      default:  break;
   }

}

对于swith里面case1,2,3,4等等不大了解,只是发现通道口不一样而已,其他赋值好像差不多额= =
而且这段函数是干嘛的?
(小白求大大指导)


作者: tobeabh    时间: 2014-3-15 15:25
相当于把PWM——set这个函数封装起来了,可以用来初始化不用的通道
作者: 天边不够远    时间: 2014-3-16 16:29
是不是得把整个程序都贴出来啊, 看不懂这些。。。




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2