找回密码
 立即注册
查看: 813|回复: 0

STC8G2K64S4,总计使用10路AD,问题如下

[复制链接]

13

主题

40

回帖

194

积分

注册会员

积分
194
发表于 2023-7-24 19:10:20 | 显示全部楼层 |阅读模式
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左右 谢谢!

请问这是什么问题造成的?


回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-18 00:05 , Processed in 0.134793 second(s), 46 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表