找回密码
 注册
关于网站域名变更的通知
查看: 296|回复: 4
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-2-13 10:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
先上数据% c/ b6 b( q( e& q7 }9 X, [% n$ e0 s4 E
有C1: R2=10k,R18=100,R1=0mv,ADC输出0.00022mV, M. c  B! C$ L1 }( ~! @. f9 m7 F
有C1: R2=100k,R18=100,R1=4.8mV,ADC输出12mV
0 S  f; i; Y) ~2 N有C1: R2=10k,R18=100,R1=4.8mV,ADC输出4.6mV
" Y/ E7 `/ }- V有C1: R2=1k,R18=100,R1=4.8mv,ADC输出1.6mV& D) K4 `% Y0 R5 i9 K  O3 j
: W$ p/ E1 X0 s3 \" H8 T
无C1: R2=1k,R18=100,R1=0mv,ADC输出0mV
/ O' C4 W1 P& M! I) M5 S+ u无C1: R2=10k,R18=100,R1=4.8mv,ADC输出1.6mV& F$ _8 o. d, R# ]$ e
+ b# S- ?% u( @" \( [
现在确定R2=10k,R18=100,c1=0.1uF,当R1有电流时,测量电压基本吻合,无电影时不能归零。当去掉C1后无电流时,输出也为0,但是有电流后测量的数据和实际又对不上.大家帮忙分析一下问题出在哪里。是不是前端电路的问题。万分感谢!
) c6 M/ t. z+ k1 v; G( \- _" f: t* S+ ^7 l
float ADC0_value(uchar mode,uchar p,uchar n)
. s/ Y, V0 ^! K- x* h, v4 s{) m! }1 b  }/ M! @& F
        volatile uchar i=7;3 v' e5 e- D* r) F7 T) J. s
        unsigned long tem;; y/ }2 m& {5 e4 t- [% K9 d# q5 f4 i
        long tem1;, Z; _1 S- |8 F# c8 f4 o% E/ R
        float v;* Z9 q" Y: q6 ]; o, a7 H
        RedLed=~RedLed;
$ o* ]3 p( v7 c% J9 Q# z7 q% q        ADC0MD=0x80;        //空闲
5 b8 ]% T  q$ g8 [; s        ADC0CN|=0x07;( e/ v, A$ L. k
        if(mode==0)& o* N  R, O& E5 [/ N7 H
        {1 s* b3 g8 b: Y0 j3 d
                ADC0CN &= ~0x10;//单端输入
2 {& W1 m+ c4 ^! ]' B1 p+ Z        }$ E) V" Z' s4 ^7 a
        else) q, R. q/ y6 i4 C
        {8 O3 K4 n, W- t9 q
                ADC0CN |=0x10;//差分输入
4 g; O; n0 B( D) ^% s        }, ?! }# S. r/ {; i/ U% h
        ADC0MUX=p|n;        //端口选择+ z1 `' }3 \7 x5 U& G
lab:  `4 |1 ~8 o- s
        AD0INT=0;
8 F9 r6 J" d* E  ^        ADC0MD=0x82;        //单次转换
9 {4 @1 |0 h/ T1 M0 q4 M' _' i        RedLed=~RedLed;        //很重要,完全关闭adc0后重新打开必须启动延时* F. y  h- c" v2 v' {( s
//        delay_ms(1);        //很重要,完全关闭adc0后重新打开必须启动延时。
+ i- E3 r* }! _5 g2 Y0 s: {        while (!AD0INT);# K! t: q1 E2 _
        AD0INT=0;3 F3 I- U4 a, X$ L5 D6 T
        ADC0MD=0x80;        //空闲
* |# ]5 Q  |9 V% ?5 M7 }9 g//        ADC0MD&=~0x80;        //,关闭ADC0
5 @  i; e' K* u. z# O//        tem=65536*ADC0H+256*ADC0M+ADC0L;
- a  Z# U' `- A2 N        if(mode==0)
( l2 e  ?% {# M) [4 l3 b% i6 W+ }        {
' p1 B: L0 s% T; k- A; c                tem=(unsigned long)ADC0H<<16;3 j+ ~9 ]% K3 m+ \1 }  k* k9 @! `
                tem+=((unsigned long)ADC0M<<8)+(unsigned long)ADC0L;
: D+ ?$ B  f. Z# @4 S( {# N* L                if((tem>=0xffffff)&&i>0)' W7 O0 p# _& t1 U' \5 l6 w/ T- U
                {
, {' n" b- W& G- T: J' ]7 i" L                        ADC0MD=0x80;        //空闲3 n, X. p" n6 I, E
                        ADC0CN--;- v' P  ~- ?# ?
                        i--;9 H* f* k+ y( J' q
                        goto lab;
3 Z6 X; N, J& N+ n- s                }
* Q  |# L. J5 d/ K$ X                v=(float)tem/(16777216/VERF)/(1<
3 K) s0 Z" H- S' N9 E0 @/ G- D: }1 S6 j* {                if((p==TEMPERATURE_P)||(n==TEMPERATURE_N)): f; v$ e, R* c+ c  j
                {8 |1 P2 d4 M8 ^
                        v=(757.0-1000.0*v)/1.73;//温度转换: D* @/ p! F- M) P
                }1 P$ ^. ~% ~  n3 G7 _! Q9 U

+ I; x7 B0 m7 t; L( v& N# l        }
& a. |# u6 p+ U        else$ K7 p- ]+ y; A" X0 L
        {
( V/ R) X4 I# V9 N$ A: r2 {5 I                tem1=(long)ADC0H<<24;
9 f+ D7 N; i' U2 f                tem1+=((long)ADC0M<<16)+((long)ADC0L<<8);
) L* ]5 _8 f; U                if((tem1>=0x80000000)&&i>0)
, O9 o3 h4 _' p' s+ z  n0 m* Q                {
6 S9 R* O/ P" S" g                        ADC0MD=0x80;        //空闲
/ a  ^1 n/ W" W2 M$ x% y, f                        ADC0CN--;* N3 A( b5 S( x- Q1 Q/ C" j0 i
                        i--;
6 ^; ?: D7 D$ L8 y% h' p                        goto lab;  M6 m1 M0 j# o/ t4 Z
                }
# Z. d: s" O2 y* O3 z* f                v=(float)tem1/(8388608/VERF)/(1<
, ^6 i( d! I' O" @6 y7 H                v/=256;8 v+ a9 @- K, O) B, d+ V4 E
        }
6 L8 Z! m0 y' u/ q//        RedLed=~RedLed;
. X! f- @5 s: o" q1 ?7 M7 ?8 \        return v;
& a0 q( T! ~( f! a5 s}
' u8 k# k. y$ v1 s( E# f0 f
9 U% T* R( ~' C! d& ^' \9 K8 a8 q8 Y# o7 }

该用户从未签到

2#
发表于 2023-2-13 11:19 | 只看该作者
总的调试就是,软件上加大采集保持时间,硬件上减少R2.因为ADC转换原理就是给内部电容充电,如果外部信号弱,就会出现拉低的情况,所以如果没有电容或者信号内阻大,就会出现采集偏低的情况

该用户从未签到

3#
发表于 2023-2-13 13:25 | 只看该作者
这个是电流采样判断控制,通过ADC转换判断R1上的电流大小,应该先根据电路设计和实际应用判断出R1上电流的范围,确定了电流范围,才好判断ADC的转换结果是否正确

该用户从未签到

4#
发表于 2023-2-13 14:01 | 只看该作者
首先,我觉得利用单片机的AD采样接口采样mv级别的电压,是不合理的。R1和RL分压后,最好在1/2 Vcc处,这样AD模块的分辨率是最高的。如果您这边实在需要采样mV基本的电压,可以先使用运放把信号放大,然后再使用单片机进行采样。1 A  h% S; b) `( j7 g, a
R2和C1是一个低通滤波电路,对于高于一定频率的信号是过不去的。如果您这边采样的信号频率非常高,建议适当降低RC的值,具体以实测为准。从时域来看,就是信号变化过快,电容的电量还没有充满,又开始了下一个变化。那么单片机AD接口,永远也采样不准。0 B0 r  {4 D/ r' s
电路布局的时候,滤波电容C1尽量靠近芯片管脚。如果距离太远,分布电感和电容就有可能形成震荡,影响采样准确性。

该用户从未签到

5#
发表于 2023-2-13 14:33 | 只看该作者
根据负载的工作电流大小和交流电的电压频率选取适当的电容,计算公式如下: 容抗Xc=1/(2πfC) 电流Ic=U/Xc=2πfCU
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-6 07:20 , Processed in 0.125000 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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