打印
[PIC®/AVR®/dsPIC®产品]

PIC单片机 PWM丢失问题,两个型号都有丢失问题。

[复制链接]
1951|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lovmjl|  楼主 | 2014-4-14 19:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
大家好,本人做一个电源,本想用PIC16F716输出两路不同频率,不同占空比的PWM,一路用硬件,一路用定时器实现,但ISIS仿真时硬件实现的PWM有很严重的丢失情况,后觉的是不是硬件PWM和中断有冲突,改用PIC16F1824,用两路硬件实现不同频率,不同占空比的PWM,但ISIS仿真后仍然有PWM丢失情况,但不是很严重,本人是刚刚接触PIC,不是很懂,希望高手指点一下,是哪里出了问题,我先给出PIC16F1824的程序和图片,


void main()
        {
        uint n;
        n=0;
        init();
        get_ad_in(v_in);//AD采样
        if (0X00EF<=v_in && v_in<=0X04A9)
                {
                pwm_init();
                pwm2();
                get_ad_vout(v_out);
                while(v_out<0X026E && v_out>0X0175)
                        {
                                get_ad_vout(v_out);
                                n++;
                                if(n==2000)
                                        {
                                                stop();
                                                n=0;
                                        }               
                                                               
                        }
                while(1)
                        {
                                       
                        }
        
                }
        else
                {
                        stop();
                }
               
        }
void pwm_init()
        {
                TRISC3=0;                //设置CCP3引脚为输出
                PR2=0X59;
                CCP2CON=0X0C;        //单输出,高电平有效
                CCPTMRSbits.C2TSEL0=0;
                CCPTMRSbits.C2TSEL1=0;        //CCP3基于TIMER2产生
                CCPR2L=0X2c;        //占空比为50%
                TMR2IF=0;                //清零标置位
                T2CONbits.T2CKPS0=0;
                T2CONbits.T2CKPS1=0;        //预分频为1:1
                TMR2ON=1;                //使能TMR2定时器

        }
void pwm2()
        {
                TRISC2=0;
                TRISC3=0;
                TRISC4=0;
                TRISC5=0;
                CCPTMRSbits.C1TSEL=0X01;//设置CCP1时基为TMR4
                T4CONbits.T4CKPS0=1;
                T4CONbits.T4CKPS1=1;        //TMR4预分频1:64
                //TMR4=0XFA;
                PR4=0XFF;                                //CCP1的周期
                PWM1CON=0XA0;                        //20us死区时间
                CCP1CON=0X8C;                        //半桥出输,高电瓶有效
                CCPR1L=0X7F;                        //占空比
                TMR4IF=0;                                //置位中断位
                TMR4ON=1;

               
        }

虽然AD有中断,但AD运行完后就没有中断了,pwm_intin()输出的PWM还是有丢失的情况。
沙发
huangxz| | 2014-4-14 19:17 | 只看该作者
pwm这种东西直接上硬件吧,别仿真了,

使用特权

评论回复
板凳
lovmjl|  楼主 | 2014-4-14 21:17 | 只看该作者
楼上是说,把程序写好,烧写完成后直接在目标板上用示波器测试吗?

使用特权

评论回复
地板
谈的元| | 2014-4-15 21:19 | 只看该作者
对的直接测试

使用特权

评论回复
5
弓长月月鸟| | 2014-4-15 22:05 | 只看该作者
软件仿真的的波形有时候跟实际是有差别的。参考一下还是可以的。

使用特权

评论回复
6
yewuyi| | 2014-4-16 13:10 | 只看该作者
关闭所有中断再试试。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝