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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
先上数据
2 K2 @0 ]& X7 V) b& I有C1: R2=10k,R18=100,R1=0mv,ADC输出0.00022mV
! k( X# P- n* ?3 C. Y有C1: R2=100k,R18=100,R1=4.8mV,ADC输出12mV7 }" M. K2 I9 y2 [7 r- \: }# m
有C1: R2=10k,R18=100,R1=4.8mV,ADC输出4.6mV" g( T4 h% O- X3 I8 S; B
有C1: R2=1k,R18=100,R1=4.8mv,ADC输出1.6mV
7 B, O1 W6 N$ R* y' l, x. F+ K  m" g' n2 U+ p
无C1: R2=1k,R18=100,R1=0mv,ADC输出0mV4 v7 Y* d$ [4 r' N6 z6 O& q
无C1: R2=10k,R18=100,R1=4.8mv,ADC输出1.6mV4 G& b$ s% W. i& B  k7 S

. Y. m+ {- s; a. }' K1 r现在确定R2=10k,R18=100,c1=0.1uF,当R1有电流时,测量电压基本吻合,无电影时不能归零。当去掉C1后无电流时,输出也为0,但是有电流后测量的数据和实际又对不上.大家帮忙分析一下问题出在哪里。是不是前端电路的问题。万分感谢!
, h& q" o9 v* ~5 Q
  B9 `; u: e' M# H5 zfloat ADC0_value(uchar mode,uchar p,uchar n)
7 z. X- D: u% D  o2 H9 @! ~{6 ]& a2 ]- d. F* N# d- c
        volatile uchar i=7;  d& y+ V, S. k# e
        unsigned long tem;
2 V7 j0 D0 G3 Y( a/ O        long tem1;' S# v5 H( A& G* g
        float v;" U3 v  \+ j) L6 H. G% m
        RedLed=~RedLed;" y+ c& m- y7 d0 t! }* I
        ADC0MD=0x80;        //空闲. ]! \9 g9 n) }) X& a
        ADC0CN|=0x07;0 h" n! C! r5 A! w3 X1 ?
        if(mode==0)& K- O) e# C5 ]& {' y! h
        {( P7 e- W8 Q7 n1 I( y
                ADC0CN &= ~0x10;//单端输入
0 m/ P) q" [( X$ \8 I        }
& A# z' W8 c( }0 r1 ^% H        else
* y' j5 [3 t2 X: Q2 z- W        {: U; ~# L! J/ O
                ADC0CN |=0x10;//差分输入8 X5 T! H4 `/ S- J2 m7 o8 g
        }/ ?7 `: _' B+ ~
        ADC0MUX=p|n;        //端口选择
! h7 g7 L7 }- l8 t* k( |lab:6 X/ v& x  Y( A9 K6 U
        AD0INT=0;. R2 u& j  o) }% ]8 E% P
        ADC0MD=0x82;        //单次转换" }6 @. d9 z8 N, \
        RedLed=~RedLed;        //很重要,完全关闭adc0后重新打开必须启动延时
3 T! K1 S& H2 ^% O$ B# q! r6 a//        delay_ms(1);        //很重要,完全关闭adc0后重新打开必须启动延时。
: `+ b9 q% {" G" {        while (!AD0INT);
& H" j( G& [8 K        AD0INT=0;! U& ^9 {* v& U. w
        ADC0MD=0x80;        //空闲9 e$ r. t6 e) L: ?, w' j7 ?4 I
//        ADC0MD&=~0x80;        //,关闭ADC01 g- w8 ?4 b0 j& w" O7 T3 {
//        tem=65536*ADC0H+256*ADC0M+ADC0L;0 ?+ ?+ `( H* ^( f3 {) ?, _
        if(mode==0)
' d4 q9 u' h* o) R  S! Q        {
1 K$ c. t1 q* t& Z7 B1 F                tem=(unsigned long)ADC0H<<16;
1 i% k- W' m# F$ R0 D) C% T                tem+=((unsigned long)ADC0M<<8)+(unsigned long)ADC0L;
, b' W! y7 j0 `& u, K9 W                if((tem>=0xffffff)&&i>0). e) x* e2 o7 ~
                {) ]& a6 q3 {' e% O0 P" z
                        ADC0MD=0x80;        //空闲
  F  `; N, k6 z$ |( z                        ADC0CN--;
  m3 f9 V0 a# x' I- I                        i--;
0 M$ z( W. B2 P+ J- E                        goto lab;
! E' ~  J9 T: n7 B+ c: I0 `, T9 T+ ]                }
2 g( i" `4 w  @                v=(float)tem/(16777216/VERF)/(1<) ]' ^( [3 e7 d+ t8 V9 s
                if((p==TEMPERATURE_P)||(n==TEMPERATURE_N))( O# w2 s/ X9 F7 E2 F+ `& ?
                {
8 C& q# u7 c6 p# e9 l                        v=(757.0-1000.0*v)/1.73;//温度转换# {' m, }; U, [
                }) B  p; t3 {3 I' H
; i% c1 A3 d9 q0 S' k2 s8 e  H
        }
! Y+ h6 ?& h6 p0 r( b/ P! d        else* R+ A% J0 F/ C1 R7 F
        {) \$ B' ^# g. L' V* l# G% \
                tem1=(long)ADC0H<<24;" Z- R* O( z6 h
                tem1+=((long)ADC0M<<16)+((long)ADC0L<<8);
, ?- t3 H) T9 R* E  U. O* i                if((tem1>=0x80000000)&&i>0)7 B4 H9 Q( p" U
                {
. N2 q; ?" [, R1 M2 j+ s: J                        ADC0MD=0x80;        //空闲8 ]2 X/ B" T' b, |7 a: b
                        ADC0CN--;) p7 V% J, X, y
                        i--;) A$ U& X/ u$ l* p9 y2 a
                        goto lab;  s2 w! @* a. W4 i
                }
1 `  M$ a4 ^  Z                v=(float)tem1/(8388608/VERF)/(1<
6 e9 F" x  E/ `. X7 m                v/=256;
1 Z- w8 Q! W( _( O* E0 U- {        }7 W7 K2 D0 F4 ^2 H+ ?
//        RedLed=~RedLed;
& Y5 z. u3 t4 V2 g2 m        return v;
2 T/ I9 i2 [' K8 D}
1 S; B' t* b! M2 o* b3 ^: X0 i
0 e# J+ |! w6 @% H& V' L
$ }$ c- `# Q* L; ?) Q

该用户从未签到

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基本的电压,可以先使用运放把信号放大,然后再使用单片机进行采样。
* T7 _& S6 O9 C$ kR2和C1是一个低通滤波电路,对于高于一定频率的信号是过不去的。如果您这边采样的信号频率非常高,建议适当降低RC的值,具体以实测为准。从时域来看,就是信号变化过快,电容的电量还没有充满,又开始了下一个变化。那么单片机AD接口,永远也采样不准。
5 \; U$ `" k3 o" R8 G电路布局的时候,滤波电容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-8-2 03:09 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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