大家好,本人做一个电源,本想用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还是有丢失的情况。
|