找回密码
 注册
查看: 293|回复: 4
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
先上数据
* n/ P+ i+ [- @+ {有C1: R2=10k,R18=100,R1=0mv,ADC输出0.00022mV
+ Z7 S, h: h$ V( `4 O有C1: R2=100k,R18=100,R1=4.8mV,ADC输出12mV8 ?1 Z  X0 k! b+ Q
有C1: R2=10k,R18=100,R1=4.8mV,ADC输出4.6mV# ~- G) \1 L  |! y, i
有C1: R2=1k,R18=100,R1=4.8mv,ADC输出1.6mV
( Q/ w+ f/ r* H6 n% J# a8 i- @( z. p. W  }& s
无C1: R2=1k,R18=100,R1=0mv,ADC输出0mV
: [/ l7 `: t1 f0 ?8 }! W$ {/ x& ], V无C1: R2=10k,R18=100,R1=4.8mv,ADC输出1.6mV
" _! j* T8 t; T" F! W; K" t# I1 L  ^8 F* M5 [, D  t
现在确定R2=10k,R18=100,c1=0.1uF,当R1有电流时,测量电压基本吻合,无电影时不能归零。当去掉C1后无电流时,输出也为0,但是有电流后测量的数据和实际又对不上.大家帮忙分析一下问题出在哪里。是不是前端电路的问题。万分感谢!
( d$ v$ m1 U  A& n& h. E3 i. I0 Q
float ADC0_value(uchar mode,uchar p,uchar n)
# z3 R  }2 B) ^' P3 Z4 X9 ^' d{& m( m) R( A9 w# M1 d
        volatile uchar i=7;
( f" Y5 E' j6 {0 G1 E        unsigned long tem;: l! v6 ?  W* ^- B2 @1 ?
        long tem1;; w4 W# A) f( \8 \/ j0 E
        float v;/ ^4 U: Z1 r9 y5 z5 b$ e  s
        RedLed=~RedLed;
# r+ Y$ l8 E& g4 r3 K" |, a        ADC0MD=0x80;        //空闲# R& L, W5 a' S8 q+ }6 X9 @
        ADC0CN|=0x07;
# t( X4 l( r. n. o% x        if(mode==0)
1 @! ?" J7 l4 o' d0 a5 s2 F        {
- B; E, {$ k$ |+ a& ]                ADC0CN &= ~0x10;//单端输入2 a- d% G- q& Z# V
        }$ u/ d) K' Q* p- G" u0 h/ H' J
        else5 Y; H9 u% g$ e
        {
0 b) V' l8 _& s- k                ADC0CN |=0x10;//差分输入
. e' a! A( [. D- ?) h        }: U/ O' @+ U: z
        ADC0MUX=p|n;        //端口选择& d* |1 S) l0 H4 U% s
lab:
: v" x0 H+ `( T: f        AD0INT=0;1 l( u# t$ ^9 D) U1 b
        ADC0MD=0x82;        //单次转换) y( n# j) |' h& {, d; J) c  E3 Q
        RedLed=~RedLed;        //很重要,完全关闭adc0后重新打开必须启动延时/ i5 A' n1 n5 n
//        delay_ms(1);        //很重要,完全关闭adc0后重新打开必须启动延时。+ e4 o% Z/ R& h: W5 M
        while (!AD0INT);! W) f, l! O$ A& j0 J8 Z/ ?* I$ M8 a
        AD0INT=0;( A( A& i+ p1 ^" I6 Q
        ADC0MD=0x80;        //空闲7 ^0 t( [% ~% U4 u3 _' n7 ^) m
//        ADC0MD&=~0x80;        //,关闭ADC0- m* g# @/ X8 d2 \
//        tem=65536*ADC0H+256*ADC0M+ADC0L;
& {/ \3 r, q6 R: f8 K& s' J- R        if(mode==0)& p( p- _( }% B8 X
        {
7 K/ z: [& ~4 z5 P& ]                tem=(unsigned long)ADC0H<<16;
. r' N5 T7 w- Q$ k0 ~" g1 U5 s; R                tem+=((unsigned long)ADC0M<<8)+(unsigned long)ADC0L;3 a! \, K/ x: m1 S8 u0 x& `
                if((tem>=0xffffff)&&i>0)
  s( S% Q" L1 g% A( M6 j* V/ H                {
3 l: a6 f9 j+ I                        ADC0MD=0x80;        //空闲% x8 p3 P/ s$ T; m$ H9 l& Z. b
                        ADC0CN--;8 v5 R+ N6 P, M) O/ k5 Q
                        i--;
1 P( o: I* ~# X* K                        goto lab;2 @1 e* n* J3 Y9 F. l9 [5 @
                }
0 a3 w% Q& w$ x' z5 b7 W                v=(float)tem/(16777216/VERF)/(1<
: b) d! [: w2 n2 W                if((p==TEMPERATURE_P)||(n==TEMPERATURE_N))4 G! R7 _. K, W& `* x; J9 a: P- f
                {
! w: g$ h1 }6 W* O                        v=(757.0-1000.0*v)/1.73;//温度转换: |5 L( x( x1 l7 f8 G! e
                }
% x. C1 H4 x4 S# _* H( H0 a) ]+ k, @* r" u1 T
        }
' |9 B. {2 m2 U9 W' I" p        else
, s" o" J$ r- S$ G6 o8 i9 K7 W        {
5 c0 e/ C' u8 H: J5 `) v                tem1=(long)ADC0H<<24;" Y9 U. F1 S" `) m$ ^7 c, O. ?2 z
                tem1+=((long)ADC0M<<16)+((long)ADC0L<<8);4 A$ Z7 ~( Y% g1 Q; ^  e
                if((tem1>=0x80000000)&&i>0)+ x2 V0 s" K' n% v% S9 O( F- U
                {/ D* G. K. R7 l" o
                        ADC0MD=0x80;        //空闲
) K: t* t. v# L* [! N) [                        ADC0CN--;6 q3 m4 B8 w0 b: g- g6 o( D+ K) P
                        i--;
% ?1 v1 [1 h2 ?. L1 Q2 E                        goto lab;
4 x, }' L! w$ ?, v" `4 W1 d3 H! G% G                }
6 n5 E9 R# m, u! G5 P                v=(float)tem1/(8388608/VERF)/(1<+ L2 o9 C/ F8 A' c0 F) [
                v/=256;
5 ]& w, q0 M: {# \! _2 D1 |4 U        }3 [% ?' I* J4 `2 U
//        RedLed=~RedLed;1 ~( s- }( W3 n" M6 H* ?5 g! }4 H; p
        return v;
. \, Y0 A  [8 e. U$ X3 X; v# ?4 d}
9 @6 `6 i; n5 H9 K8 E 6 [) a9 T1 X  d9 X! x& T& J4 s
" U7 ]% S2 U' w

该用户从未签到

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 b/ O! [# T' e. r
R2和C1是一个低通滤波电路,对于高于一定频率的信号是过不去的。如果您这边采样的信号频率非常高,建议适当降低RC的值,具体以实测为准。从时域来看,就是信号变化过快,电容的电量还没有充满,又开始了下一个变化。那么单片机AD接口,永远也采样不准。
* ?0 Q  L- ~0 p7 p6 n" ]6 d电路布局的时候,滤波电容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-5-29 17:04 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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