搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

发表于 2020-12-30 15:59:21 | 显示全部楼层 |阅读模式
先上数据
有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;
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2020-12-30 16:11:06 | 显示全部楼层
这个R18有什么用?

出0入0汤圆

 楼主| 发表于 2020-12-30 16:28:01 | 显示全部楼层
liufabing 发表于 2020-12-30 16:11
这个R18有什么用?

如果没有R18,直接输出200+mV,把我整神了!!!!!!!!!!

出0入0汤圆

发表于 2020-12-30 16:41:51 | 显示全部楼层
这个单片机我用过,采样率变,AD值也会变,

出0入0汤圆

 楼主| 发表于 2020-12-30 16:46:48 | 显示全部楼层
xinjin 发表于 2020-12-30 16:41
这个单片机我用过,采样率变,AD值也会变,

现在不知道怎么觉得阻容值

出0入0汤圆

发表于 2020-12-30 17:25:08 来自手机 | 显示全部楼层
用过F061 不知道一不一样 内部是SAR型ADC 对前面的驱动电路要求很高 要缓冲器加RC 高阻抗是无法驱动ADC的

出0入0汤圆

 楼主| 发表于 2020-12-31 10:09:04 | 显示全部楼层
heize 发表于 2020-12-30 17:25
用过F061 不知道一不一样 内部是SAR型ADC 对前面的驱动电路要求很高 要缓冲器加RC 高阻抗是无法驱动ADC的 ...

能不能稍微具体点

出0入8汤圆

发表于 2020-12-31 18:18:14 | 显示全部楼层

adc输入阻抗小,加一级运放跟随

出0入0汤圆

发表于 2021-1-25 21:48:29 | 显示全部楼层
C1太大了吧,放电时只能通过10K,
另外C8051F350的ADC是delta-sigma吧,好像需要校正的.

出100入101汤圆

发表于 2021-1-26 03:01:31 来自手机 | 显示全部楼层
adc,阻抗匹配

出0入0汤圆

 楼主| 发表于 2021-4-8 18:38:35 | 显示全部楼层

最近忙其它事情。搁下了,问怎么匹配,一直对阻抗匹配模模糊糊

出0入0汤圆

 楼主| 发表于 2021-4-8 18:41:06 | 显示全部楼层
locky_z 发表于 2021-1-25 21:48
C1太大了吧,放电时只能通过10K,
另外C8051F350的ADC是delta-sigma吧,好像需要校正的. ...

调整过C1,问题依旧,我怀疑是温度影响了ad和采样电阻
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-24 18:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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