STC8G2K64S4,总计使用10路AD,问题如下
1.下面两种代码,每种代码都有一路的AD值为零,实际上AD通道的模拟值不为零代码一 的ADC_N_L1值每次都是零但如果单独只有这一路采样得到AD值512换算后与外部模拟值相吻合
void ADC_ISR() interrupt 5
{
ADC_CONTR &=~ADC_FLAG; //清除中断
if(AD_conver_ii == 0)
{
ADC_ref_avg= (ADC_RES<<8)|ADC_RESL; //内部1.91的AD值
Ref_flg =1;
ADC_CONTR = 0xc0;
}
else if(AD_conver_ii == 1)
{
ADC_TEST= (ADC_RES<<8)|ADC_RESL;
DC5v_flg =1;
ADC_CONTR = 0xc1;
}
else if(AD_conver_ii == 2)
{
ADC_N_L1= (ADC_RES<<8)|ADC_RESL;
L1N_flg =1;
ADC_CONTR = 0xc2;
}
else if(AD_conver_ii == 3)
{
ADC_L1_L2 = (ADC_RES<<8)|ADC_RESL;
L1L2_flg =1;
ADC_CONTR = 0xc3;
}
else if(AD_conver_ii == 4)
{
ADC_L1_L3= (ADC_RES<<8)|ADC_RESL;
L1L3_flg =1;
ADC_CONTR = 0xc4;
}
else if(AD_conver_ii == 5)
{
ADC_BAT_V = (ADC_RES<<8)|ADC_RESL;
Bat_v_flg =1;// 电池电压
ADC_CONTR = 0xc5;
}
else if(AD_conver_ii == 6)
{
ADC_BAT_I =(ADC_RES<<8)|ADC_RESL;
Bat_i_flg =0;// 充电电流
ADC_CONTR = 0xc6;
}
else if(AD_conver_ii == 7)
{
ADC_BUS=(ADC_RES<<8)|ADC_RESL;
Vbus_flg =1;// 母线电压
ADC_CONTR = 0xc7;
}
else if(AD_conver_ii == 8)
{
ADC_AC_OUT=(ADC_RES<<8)|ADC_RESL;
Inv_v_out =1;// 逆变电压
ADC_CONTR = 0xcd;
}
else
{
ADC_AC_I_OUT=(ADC_RES<<8)|ADC_RESL;
Inv_i_out =1;//逆变电流
AD_finish =1;
ADC_CONTR = 0xcf;
}
AD_conver_ii =(AD_conver_ii +1)%10;
}
代码二 发现内部参考信号源1.91V的AD值变量ADC_ref_avg为零
void ADC_ISR() interrupt 5
{
ADC_CONTR &=~ADC_FLAG; //清除中断
if(AD_conver_ii == 0)
{
ADC_BUS=(ADC_RES<<8)|ADC_RESL; //P16
Vbus_flg =1;// 母线电压
ADC_CONTR = 0xc7;
}
else if(AD_conver_ii == 1)
{
ADC_AC_OUT=(ADC_RES<<8)|ADC_RESL;
Inv_v_out =1;// 逆变电压
ADC_CONTR = 0xc1;
}
else if(AD_conver_ii == 2)
{
ADC_N_L1= (ADC_RES<<8)|ADC_RESL;
L1N_flg =1;
ADC_CONTR = 0xc2;
}
else if(AD_conver_ii == 3)
{
ADC_L1_L2 = (ADC_RES<<8)|ADC_RESL;
L1L2_flg =1;
ADC_CONTR = 0xc3;
}
else if(AD_conver_ii == 4)
{
ADC_L1_L3= (ADC_RES<<8)|ADC_RESL;
L1L3_flg =1;
ADC_CONTR = 0xc4;
}
else if(AD_conver_ii == 5)
{
ADC_BAT_V = (ADC_RES<<8)|ADC_RESL;
Bat_v_flg =1;// 电池电压
ADC_CONTR = 0xc5;
}
else if(AD_conver_ii == 6)
{
ADC_BAT_I =(ADC_RES<<8)|ADC_RESL;
Bat_i_flg =0;// 充电电流
ADC_CONTR = 0xc0;
}
else if(AD_conver_ii == 7)
{
ADC_TEST= (ADC_RES<<8)|ADC_RESL;
DC5v_flg =1;
ADC_CONTR = 0xcf;
}
else if(AD_conver_ii == 8)
{
ADC_ref_avg= (ADC_RES<<8)|ADC_RESL; //内部参考信号源1.91的AD值
Ref_flg =1;
ADC_CONTR = 0xcd;
}
else
{
ADC_AC_I_OUT=(ADC_RES<<8)|ADC_RESL;
Inv_i_out =1;//逆变电流
AD_finish =1;
ADC_CONTR = 0xc6;
}
AD_conver_ii =(AD_conver_ii +1)%10;
}
系统时钟选用30MHZ且ADC转换时间为480K左右 谢谢!
请问这是什么问题造成的?
页:
[1]