打印

C8051F350 ADC前端阻容电路怎么确定参数

[复制链接]
767|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
先上数据
有C1: R2=10k,R18=100,R1=0mv,ADC输出0.00022mV
有C1: R2=100k,R18=100,R1=4.8mV,ADC输出12mV
有C1: R2=10k,R18=100,R1=4.8mV,ADC输出4.6mV
有C1: R2=1k,R18=100,R1=4.8mv,ADC输出1.6mV

无C1: R2=1k,R18=100,R1=0mv,ADC输出0mV
无C1: R2=10k,R18=100,R1=4.8mv,ADC输出1.6mV

现在确定R2=10k,R18=100,c1=0.1uF,当R1有电流时,测量电压基本吻合,无电影时不能归零。当去掉C1后无电流时,输出也为0,但是有电流后测量的数据和实际又对不上.大家帮忙分析一下问题出在哪里。是不是前端电路的问题。万分感谢!

float ADC0_value(uchar mode,uchar p,uchar n)
{
        volatile uchar i=7;
        unsigned long tem;
        long tem1;
        float v;
        RedLed=~RedLed;
        ADC0MD=0x80;        //空闲
        ADC0CN|=0x07;
        if(mode==0)
        {
                ADC0CN &= ~0x10;//单端输入
        }
        else
        {
                ADC0CN |=0x10;//差分输入
        }
        ADC0MUX=p|n;        //端口选择
lab:
        AD0INT=0;
        ADC0MD=0x82;        //单次转换
        RedLed=~RedLed;        //很重要,完全关闭adc0后重新打开必须启动延时
//        delay_ms(1);        //很重要,完全关闭adc0后重新打开必须启动延时。
        while (!AD0INT);
        AD0INT=0;
        ADC0MD=0x80;        //空闲
//        ADC0MD&=~0x80;        //,关闭ADC0
//        tem=65536*ADC0H+256*ADC0M+ADC0L;
        if(mode==0)
        {
                tem=(unsigned long)ADC0H<<16;
                tem+=((unsigned long)ADC0M<<8)+(unsigned long)ADC0L;
                if((tem>=0xffffff)&&i>0)
                {
                        ADC0MD=0x80;        //空闲
                        ADC0CN--;
                        i--;
                        goto lab;
                }
                v=(float)tem/(16777216/VERF)/(1<<i); //以下转换成电压
                if((p==TEMPERATURE_P)||(n==TEMPERATURE_N))
                {
                        v=(757.0-1000.0*v)/1.73;//温度转换
                }

        }
        else
        {
                tem1=(long)ADC0H<<24;
                tem1+=((long)ADC0M<<16)+((long)ADC0L<<8);
                if((tem1>=0x80000000)&&i>0)
                {
                        ADC0MD=0x80;        //空闲
                        ADC0CN--;
                        i--;
                        goto lab;
                }
                v=(float)tem1/(8388608/VERF)/(1<<i); //以下转换成电压
                v/=256;
        }
//        RedLed=~RedLed;
        return v;
}E:\Desktop\20201230152821.jpg

20201230152821.jpg (122.73 KB )

20201230152821.jpg

使用特权

评论回复

相关帖子

沙发
xyz549040622| | 2021-1-2 22:15 | 只看该作者
你用的是什么单片机,考虑ad引脚的输入阻抗必须一致。

使用特权

评论回复
板凳
zuolin1234|  楼主 | 2021-1-9 16:56 | 只看该作者
xyz549040622 发表于 2021-1-2 22:15
你用的是什么单片机,考虑ad引脚的输入阻抗必须一致。

c8051f350

使用特权

评论回复
地板
xyz549040622| | 2021-1-9 19:57 | 只看该作者

它的输入阻抗是多少,你测试的怎么样。

使用特权

评论回复
5
ayb_ice| | 2021-1-11 09:07 | 只看该作者
参照开发板就可以了

使用特权

评论回复
评论
ayb_ice 2021-1-12 13:40 回复TA
@zuolin1234 :这个需要校准的,还有最好是用差分方式 
zuolin1234 2021-1-12 13:38 回复TA
小信号不准呀! 
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

143

帖子

1

粉丝