• 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22
  • 东风41连续10次试射成功即将入役,美国高官警告中国禁止使用 2018-11-22
  • ——主观唯物主义哲学思想的幸福感和不幸福感就是:“幸福”就是在遵循和调正运用“客观规律和定律”的过程中满足了人的直接感觉和感受的好的结果。“不幸福”就是在遵循和 2018-11-21
  • 8旬老太遭儿子逼迫贩毒:三名儿子已被通缉 2018-11-21
  • 你看现在又跟贴的,都是在耍猴玩,大家都该看着就想笑 2018-11-20
  • 广东11选五正规官方网:社区导航

     

    广东十一选五开奖图

    搜索
    查看: 1623|回复: 11
    打印 上一主题 下一主题

    [求助] PIC单片机产生PWM波波形出问题了

    [复制链接]

    广东十一选五开奖图 www.guu6.com 7

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    跳转到指定楼层
    楼主
    发表于 2018-11-5 20:20 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
    本帖最后由 Sevenfee 于 2018-11-6 20:32 编辑

    用PIC16F887单片机产生方波,当我把方波频率设为4KHz时波形是正常的,当我改变TIMER2的分频值,从4改为16 ,此时频率应该变为1KHz,此时频率是对了,可是波形却变得很奇怪。  求有经验的大神指导下!

    这是产生的4KHZ正常波形,占空比为50%




    这是1KHZ有问题的波形,占空比为60%。  这个高电平会突然下降到一个比较低的电平再上升。



    1KHz占空比80%就正常了

    此帖出自单片机论坛


    7

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    沙发
     楼主| 发表于 2018-11-5 20:23 | 只看该作者
    主要的程序我也贴上来各位看一下

    /********端口初始化函数********/
    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??楣ぷ髟赑WM模式,占空因数的低两位为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();              //调用按键扫描处理脉宽因数
            }
    }


    506

    TA的帖子

    0

    TA的资源

    一粒金砂(高级)

    Rank: 3Rank: 3

    板凳
    发表于 2018-11-5 23:56 | 只看该作者
    有可能是切换占空比的时候出现的抖动
    刻苦学习,共同进步


    371

    TA的帖子

    0

    TA的资源

    纯净的硅(初级)

    Rank: 4

    4
    发表于 2018-11-6 08:04 | 只看该作者
    和關狗,有沒有關係?


    3507

    TA的帖子

    180

    TA的资源

    管理员

    Rank: 13Rank: 13Rank: 13Rank: 13

    5
    发表于 2018-11-6 08:52 | 只看该作者
    帮你呼叫版主@dingzy_2002


    538

    TA的帖子

    0

    TA的资源

    版主

    Rank: 6Rank: 6

    6
    发表于 2018-11-6 11:27 | 只看该作者
    PIC8位普通单片机的PWM输出设置确实较其它8位单片机要不同,而且我也曾经走过类似的弯路。
    主要还是要严格按数据手册的设置来:尤其是初始化时

    另外,如果改变PWM的周期频率,分辨率等,也要按上图的设置来

    如果是确定了PWM的周期频率,分辨率后,仅改变点空比,则只需要修改CCPR1L即可,不要顺便CCP1CON值,这会引起不必要的异常发生。

    点评

    我刚试过不修改CCP2ON,波形还是会出现图中异常  详情 回复 发表于 2018-11-6 20:15


    538

    TA的帖子

    0

    TA的资源

    版主

    Rank: 6Rank: 6

    7
    发表于 2018-11-6 11:32 | 只看该作者
    另外,如果关闭PWM后再开启,也同样要按上楼图中设置初始化。
    所以,想暂时使PWM无输出(PWM还要继续工作),只要设置CCPR1L=0就可以了
    就不需要再次对PWM初始化了。(这对低功耗不利,因为PWM??槭贾展ぷ?,在低功耗要求下,则只能关闭,再初始化开启)。


    538

    TA的帖子

    0

    TA的资源

    版主

    Rank: 6Rank: 6

    8
    发表于 2018-11-6 11:36 | 只看该作者
    本帖最后由 dingzy_2002 于 2018-11-6 11:37 编辑

    给个我的例程(基于PIC12F615):

    1.初始化部分:
    //PWM:
            CCP1CON        = 0x0C;        //普通PWM模式,CCP1输出高电平有效
            CCPR1L        = (PWM_MAX);

    ...
    //管脚方向设置:
            TRISIO        =        0b00001011;
    //        
            PIE1=WPUA=IOCA        =0;
            PR2        = (PWM_MAX-1);//2MHz/125=16kHz,后分频4时,中断频率4KHz

    ...
            PIR1        = 0x00;
            PIE1        = 0x00;
            TMR2IE        = 1;
            TMR2ON        = 1;
            INTCON        = 0xC0;                //打开外部,T2中断

    ...

    2.在程序中修改点空比(连续调节):
                    DA_TEMP=CCPR1L;
                    if(I_AVE>Iset_value)
                    {
                            if(--DA_TEMP>=(PWM_MAX))
                                    DA_TEMP = 0x00;
                    }
                    if(I_AVE<Iset_value)
                    {
                            if(++DA_TEMP>=(PWM_MAX))
                                    DA_TEMP = (PWM_MAX);
                    }
                    CCPR1L        =DA_TEMP;        





    7

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    9
     楼主| 发表于 2018-11-6 20:07 | 只看该作者
    dingzy_2002 发表于 2018-11-6 11:36
    给个我的例程(基于PIC12F615):

    1.初始化部分:
    //PWM:
            CCP1CON        = 0x0C;        //普 ...

    感谢版主的回答,  现在我的问题是,我在选取了一个频率后,可能80%占空比是正常的波形,当我把占空比调到60% 就会出现图中的电平下降再上升的一段,我认为 这样程序主体应该是没有问题的。  今天我换了一个4MHZ的晶振重新编了几个波形,结果还是这个样子。 同一频率下 占空比不同,波形可能就会乱。    问题还是没有解决哎


    7

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    10
     楼主| 发表于 2018-11-6 20:09 | 只看该作者
    迈尔风随 发表于 2018-11-5 23:56
    有可能是切换占空比的时候出现的抖动

    同一频率,80%占空比可得到正常波形,60%占空比出来就会跟上图的错误一样,应该不是抖动原因造成的,今天我还换了一个晶振,结果还是那样。  


    7

    TA的帖子

    0

    TA的资源

    一粒金砂(中级)

    Rank: 2

    11
     楼主| 发表于 2018-11-6 20:15 | 只看该作者
    dingzy_2002 发表于 2018-11-6 11:27
    PIC8位普通单片机的PWM输出设置确实较其它8位单片机要不同,而且我也曾经走过类似的弯路。
    主要还是要严格 ...

    我刚试过不修改CCP2ON,波形还是会出现图中异常


    538

    TA的帖子

    0

    TA的资源

    版主

    Rank: 6Rank: 6

    12
    发表于 2018-11-7 08:31 来自手机 | 只看该作者
    再看下是否有其他程序影响PWM输出,如中断,引脚操作等。


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

    本版积分规则

    • 论坛活动 E手掌握

      扫码关注
      EEWORLD 官方微信

    • EE福利  唾手可得

      扫码关注
      EE福利 唾手可得

    Archiver|手机版|小黑屋|广东十一选五开奖图 ( 京ICP证 060456 )

    GMT+8, 2019-3-22 15:11 , Processed in 0.342552 second(s), 18 queries , Gzip On, MemCache On.

    快速回复 广东十一选五开奖图 返回列表
  • 社长手记造车奇人尹同跃并非只为奇瑞而来 2019-03-17
  • 三代航天人做客人民网 共话中国航天创建60年 2019-03-01
  • 回复@寻找失落的真理:跟你的铁环玩去!咱真的没兴趣碾压你也。 2019-03-01
  • 有人踢球踢进了手术室 有人看球看到脖子扳牢了 2019-02-23
  • 朋友圈买过这些东西吗?原来都是不靠谱的! 2019-02-05
  • 为宣传奇绝秀美旅游风光 鹰潭市委书记自拍上央视(图) 2019-02-05
  • 统一监管缺位容易出现监管套利 2018-11-22
  • 东风41连续10次试射成功即将入役,美国高官警告中国禁止使用 2018-11-22
  • ——主观唯物主义哲学思想的幸福感和不幸福感就是:“幸福”就是在遵循和调正运用“客观规律和定律”的过程中满足了人的直接感觉和感受的好的结果。“不幸福”就是在遵循和 2018-11-21
  • 8旬老太遭儿子逼迫贩毒:三名儿子已被通缉 2018-11-21
  • 你看现在又跟贴的,都是在耍猴玩,大家都该看着就想笑 2018-11-20