智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1174|回复: 2
打印 上一主题 下一主题

[基础知识] 求助一段PWM程序

[复制链接]

2

主题

7

帖子

0

精华

注册会员

Rank: 2

积分
110
威望
72
贡献
22
兑换币
29
注册时间
2014-2-27
在线时间
8 小时
毕业学校
as
跳转到指定楼层
1#
发表于 2014-3-14 23:48:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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等等不大了解,只是发现通道口不一样而已,其他赋值好像差不多额= =
而且这段函数是干嘛的?
(小白求大大指导)

回复

使用道具 举报

24

主题

251

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3743

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章

QQ
威望
1825
贡献
1052
兑换币
1036
注册时间
2011-10-2
在线时间
433 小时
2#
发表于 2014-3-15 15:25:57 | 只看该作者
相当于把PWM——set这个函数封装起来了,可以用来初始化不用的通道
回复 支持 反对

使用道具 举报

2

主题

456

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3039

优秀会员奖章活跃会员奖章

威望
1604
贡献
885
兑换币
854
注册时间
2014-3-6
在线时间
275 小时
3#
发表于 2014-3-16 16:29:52 | 只看该作者
是不是得把整个程序都贴出来啊, 看不懂这些。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-17 00:15 , Processed in 0.048687 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表