Sevenfee

    1. 本帖最后由 Sevenfee 于 2018-11-8 10:49 编辑 楼主,我用PIC单片机产生PWM波,调节脉宽的时候出现这种波形,楼主有没有遇到过这种状况呢?  图二波形有问题
    2. PIC单片机产生PWM波波形出问题了 14/12462 单片机 2018-11-06
      dingzy_2002 发表于 2018-11-6 11:27 PIC8位普通单片机的PWM输出设置确实较其它8位单片机要不同,而且我也曾经走过类似的弯路。 主要还是要严格 ...
      我刚试过不修改CCP2ON,波形还是会出现图中异常{:1_104:}
    3. PIC单片机产生PWM波波形出问题了 14/12462 单片机 2018-11-06
      迈尔风随 发表于 2018-11-5 23:56 有可能是切换占空比的时候出现的抖动
      同一频率,80%占空比可得到正常波形,60%占空比出来就会跟上图的错误一样,应该不是抖动原因造成的,今天我还换了一个晶振,结果还是那样。  
    4. PIC单片机产生PWM波波形出问题了 14/12462 单片机 2018-11-06
      dingzy_2002 发表于 2018-11-6 11:36 给个我的例程(基于PIC12F615): 1.初始化部分: //PWM:         CCP1CON        = 0x0C;        //普 ...
      感谢版主的回答,  现在我的问题是,我在选取了一个频率后,可能80%占空比是正常的波形,当我把占空比调到60% 就会出现图中的电平下降再上升的一段,我认为 这样程序主体应该是没有问题的。  今天我换了一个4MHZ的晶振重新编了几个波形,结果还是这个样子。 同一频率下 占空比不同,波形可能就会乱。    问题还是没有解决哎:Cry:
    5. PIC单片机产生PWM波波形出问题了 14/12462 单片机 2018-11-05
      主要的程序我也贴上来各位看一下 /********端口初始化函数********/ void init() {         ANSELH=0x00;                     //设置B口为数字I/O口         OPTION_REG=0x00;         WPUB=0xFF;         //设置B口弱上拉         INTCON=0x00;       //关总中断         PIE1=0;            //PIE1的中断禁止         PIE2=0;            //PIE2的中断禁止         TRISB0=1;         TRISB1=1;          //将RB1设置为输入口,按按键         TRISB2=1;          //将RB2设置为输入口,按按键         TRISB3=1;         TRISB4=1;         RC1=0;         TRISC1=0;          //脉宽调制输出引脚,设置为输出 } /********PWM初始化函数********/ void PWM_Init() {         PR2=249;           //脉宽调制波形的周期为1000us                 CCP2CON=0x0C;      //CCP2模块工作在PWM模式,占空因数的低两位为00         T2CON=0x02;        //禁止TMR2,且前后分频值为16,同时开始输出PWM         CCPR2L=0xB8;       //脉宽调制波形的占空比初始值 } /********键盘扫描函数*******    */ void keyscan() {         if(RB1==0)                  //如果是RB1键按下         {                 delay_ms(5);              //延时去抖                 if(RB1==0)              //确认是否有键按下                 {                         while(!RB1);        //等待按键释放                         CCP2CON=0x0C;                         CCPR2L=0xB8;                   //80%占空比                         TMR2ON=1;                 }         }         if(RB2==0)                  //如果是RB2键按下         {                 delay_ms(5);              //延时去抖                 if(RB2==0)              //确认是否有键按下                 {                         while(!RB2);        //等待按键释放                         CCP2CON=0x0C;                         CCPR2L=0x96;                   //60%占空比                         TMR2ON=1;                 }         }         if(RB0==0)                  //如果是RB0键按下         {                 delay_ms(5);              //延时去抖                 if(RB0==0)              //确认是否有键按下                 {                         while(!RB0);        //等待按键释放                         CCP2CON=0x00;                   //关PWM                         TMR2ON=0;                        //禁止TMR2                         //delay_ms(5);                         RC1=0;                 }         } } /********主函数********/ void main() {         init();                     //系统初始化         PWM_Init();                 //脉冲宽度初始化         while(1)         {                 keyscan();              //调用按键扫描处理脉宽因数         } }

最近访客

< 1/1 >

统计信息

已有5人来访过

  • 芯积分:--
  • 好友:--
  • 主题:1
  • 回复:5

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言