[DemoCode下载] N76E003 PWM中断及设定新的占空比

[复制链接]
790|5
 楼主| xuanhuanzi 发表于 2019-6-23 20:43 | 显示全部楼层 |阅读模式
首先还是来看看PWM中断寄存器,及其含义。
777995d0f73e89d380.png
PWM模块带有标志位 PWMF (PWMCON0.5) 用来标志当前 PWM周期完成状态。PWMF通过软件清零。
别忘记了使能PWM中断,以及开启总中断。
258035d0f74089dda0.png
 楼主| xuanhuanzi 发表于 2019-6-23 20:44 | 显示全部楼层
再来看看PWM中断的中断号。
345265d0f7420bd093.png
 楼主| xuanhuanzi 发表于 2019-6-23 20:44 | 显示全部楼层
就是这么简单,就是这么直接,接下来我们就开始配置代码吧。
在本次的例程中,我们将在中断中,修改初始设定的占空比,最后再逻辑分析仪中进行查看。
 楼主| xuanhuanzi 发表于 2019-6-23 20:45 | 显示全部楼层
  1. void main(void)
  2. {
  3.     Set_All_GPIO_Quasi_Mode;//所有IO设置为双向模式
  4.    
  5.                                 EA=1;//开启总中断
  6.                                 set_EPWM;//使能pwm中断
  7.                      PWM_INT_PWM4;//设定中断源为PWM4
  8.               PWM_FALLING_INT;//下降沿触发
  9.        
  10.        
  11.                                 PWM5_P03_OUTPUT_ENABLE;//使能PWM5,通过P03引脚输出
  12.                                 PWM4_P01_OUTPUT_ENABLE;
  13.        
  14.         clr_PWMTYP;//边沿对齐模式
  15.         clr_PWMMOD0;//设置为独立输出模式
  16.         clr_PWMMOD1;
  17.        
  18.         PWM_CLOCK_DIV_8;//8分频模式
  19.         PWMPH = 0x07;//1999(Dec)
  20.         PWMPL = 0xCF;

  21. /**********************************************************************
  22.         PWM frequency = Fpwm/((PWMPH,PWMPL) + 1) <Fpwm = Fsys/PWM_CLOCK_DIV>
  23.                                                                 = (16MHz/8)/(0x7CF + 1)
  24.                                                                 = 1KHz (1ms)
  25.                                                                
  26.         PWMDT=(PDTCNT+1)/Fpwm        =10/2Mhz=0.005ms
  27. ***********************************************************************/       
  28.        
  29.     set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1
  30.     PWM4H = 0x01;//500(Dec)               
  31.     PWM4L = 0xf4;
  32.                
  33.                 PWM5H = 0x01;//500(Dec)               
  34.     PWM5L = 0xf4;
  35.                
  36.     clr_SFRPAGE;                                            
  37.           set_LOAD;//载入周期和占空比
  38.     set_PWMRUN;//开始输出PWM
  39.     while(1)
  40.     {
  41.        //构建你的代码
  42.     }
  43. }


  44. void PWMISR() interrupt 13
  45. {
  46.         if(PWMF)//检测到中断标志位
  47.         {
  48.                   clr_LOAD;//关闭载入之前的值
  49.                   clr_PWMF;//清楚PWM中断标志位                      Timer0_Delay1ms(1)
  50.                         set_SFRPAGE;//PWM4 and PWM5 duty seting is in SFP page 1
  51.                         PWM5L-=30;
  52.                         clr_SFRPAGE;   
  53.                         set_LOAD;//设定完成,开始载入
  54.         }
  55. }
 楼主| xuanhuanzi 发表于 2019-6-23 20:45 | 显示全部楼层
最终效果如下图所示,上面第一行没有发生变化的为PWM4,依然按照初值运行。
723735d0f746321446.png
643757107 发表于 2019-6-23 23:30 | 显示全部楼层
PWM死区支持吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则

183

主题

2331

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部