| 
 
| 大家好,本人做一个电源,本想用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还是有丢失的情况。
 
 | 
 
×本帖子中包含更多资源您需要 登录 才可以下载或查看,没有账号?注册 
  |