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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
先上数据# _1 v4 c! {6 E! |: D. z
有C1: R2=10k,R18=100,R1=0mv,ADC输出0.00022mV$ r+ e# E# W3 M+ z
有C1: R2=100k,R18=100,R1=4.8mV,ADC输出12mV
; q9 G: z7 D' S0 h( Z+ m有C1: R2=10k,R18=100,R1=4.8mV,ADC输出4.6mV
" e2 a' u; A( `" K- N, b' T: ^0 M有C1: R2=1k,R18=100,R1=4.8mv,ADC输出1.6mV
1 B" W& b6 Q2 @
4 e1 A! H$ K/ O. j( h7 t/ y) f无C1: R2=1k,R18=100,R1=0mv,ADC输出0mV: X) J* E5 E+ x& Z  v2 n
无C1: R2=10k,R18=100,R1=4.8mv,ADC输出1.6mV
2 M/ [% g, o' T- |4 j0 v, c/ c/ N- z. ]7 C1 z- A8 g8 Y
现在确定R2=10k,R18=100,c1=0.1uF,当R1有电流时,测量电压基本吻合,无电影时不能归零。当去掉C1后无电流时,输出也为0,但是有电流后测量的数据和实际又对不上.大家帮忙分析一下问题出在哪里。是不是前端电路的问题。万分感谢!2 }+ J7 I; Y) m! W$ b! h

& {5 ]( E/ E* Ifloat ADC0_value(uchar mode,uchar p,uchar n)/ H% n9 t) U, z) P' q! A+ L$ e
{% \6 Q) C7 \# y$ H% O  f" {
        volatile uchar i=7;
" q' O; Q4 E, D( M9 c        unsigned long tem;, w+ |. ^/ d0 g
        long tem1;
( i4 O4 A+ x: K4 B8 e( x5 k* a. `        float v;
4 a2 _+ S- p, u1 Z! E# t; [/ l. w        RedLed=~RedLed;
- H7 n* b& I8 F# N; ^        ADC0MD=0x80;        //空闲
3 P+ [2 N9 \# s) U& ?( a        ADC0CN|=0x07;2 H3 e/ ]+ t# n: d8 p  B9 c" w
        if(mode==0)
" E2 n& i6 X4 C4 [$ `2 B        {
8 ]3 \8 [: j( Q                ADC0CN &= ~0x10;//单端输入
+ h* K  V4 o6 C. ?3 w        }) U1 F* e- M8 Q, Q5 U8 C
        else
5 G0 C: J6 I" R# s. S! s        {" `& \5 M( i# x
                ADC0CN |=0x10;//差分输入2 O. v: J+ o6 P# U0 _2 m" ]+ @
        }( \/ d6 a: a. v5 s% d9 Z4 _
        ADC0MUX=p|n;        //端口选择
' B0 ]7 ?% x. u3 hlab:% e1 b, `5 P) D6 W
        AD0INT=0;
7 p  }6 G# O( s: p2 z0 V        ADC0MD=0x82;        //单次转换
* r8 W1 ?  A- T# u+ R        RedLed=~RedLed;        //很重要,完全关闭adc0后重新打开必须启动延时
. Q9 y1 m% T( @; \9 u# w! a//        delay_ms(1);        //很重要,完全关闭adc0后重新打开必须启动延时。: N2 e& y% e1 \! Q) A+ G3 g
        while (!AD0INT);/ z9 I+ {( @. F" F% s
        AD0INT=0;
" q% }8 f  c$ Q$ l- A+ f! r        ADC0MD=0x80;        //空闲% R9 g3 z+ O" v$ n0 t
//        ADC0MD&=~0x80;        //,关闭ADC0
) }4 o5 F4 L. b//        tem=65536*ADC0H+256*ADC0M+ADC0L;" R& A' g* k0 W7 H6 {
        if(mode==0)' Z, \; y( b/ Z, v" N9 e2 C% w" S
        {1 n" `1 [5 B' C+ F/ S
                tem=(unsigned long)ADC0H<<16;
- h& C- u2 ?, {                tem+=((unsigned long)ADC0M<<8)+(unsigned long)ADC0L;5 s" x  l5 _. E; M2 ?4 I' b
                if((tem>=0xffffff)&&i>0)- _& J% G2 q5 F+ i6 ]1 a9 H
                {
- k3 H* O# i/ u, b! c$ h2 T; A7 j                        ADC0MD=0x80;        //空闲
+ ]! C+ o1 F. w0 i# |6 L+ Q                        ADC0CN--;
( b0 g+ ?8 m2 z& ?+ H$ I                        i--;7 h# L! O+ I9 z7 I" M: b
                        goto lab;8 _6 z# f  X0 p1 X( e
                }: \( h1 R6 z- a
                v=(float)tem/(16777216/VERF)/(1<8 y* i, e  b- Y. [3 X+ V1 V! Z* d1 v
                if((p==TEMPERATURE_P)||(n==TEMPERATURE_N))
! L+ k$ }! e0 x5 j$ V& D* U) b; O( j                {
: H0 F) o( q' ?* y/ Z. v                        v=(757.0-1000.0*v)/1.73;//温度转换
' Y& B/ f8 n# g) Y9 n                }, N% z' i) P* g  q. z+ ~) U/ ?
- S. Q6 k2 U' z$ ~+ m
        }* t( O; F. a7 C' Z% C: D" v
        else$ D8 x; ?9 m5 F$ R+ X7 h
        {. e3 k- P! V8 i/ Q# _7 n
                tem1=(long)ADC0H<<24;
) }/ c4 O: d4 g% U  o                tem1+=((long)ADC0M<<16)+((long)ADC0L<<8);7 ^  Q; F& T; E2 }5 n
                if((tem1>=0x80000000)&&i>0)
. h+ E) e3 [) h; p+ f3 v                {: Y. C1 s  N+ I$ g! K
                        ADC0MD=0x80;        //空闲
% {" K3 \1 _* H  n% {                        ADC0CN--;
1 Q4 X" \( i* D- b                        i--;
, k4 e& [' E& ^5 \# w0 R$ }! E3 P4 v  G                        goto lab;0 \# Z0 z  {- @. G
                }* u+ ~- G: B* N3 g! f2 p
                v=(float)tem1/(8388608/VERF)/(1<
; Z' q, b3 z  p, s$ X                v/=256;, {# q: B% N$ T. Z% P; h
        }
6 C& A/ E, r0 \+ j% l. p//        RedLed=~RedLed;
8 f4 {# w/ F: ^- B' j3 w        return v;
/ z2 y: ]0 h0 U8 {2 r+ Q}
) n; D1 x4 L$ Y" ^
/ \' y% f% D* n2 a0 D8 w: A
) m6 @$ P) g, q; V% ~4 s+ j: s

该用户从未签到

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基本的电压,可以先使用运放把信号放大,然后再使用单片机进行采样。2 X+ G% m; a$ K+ n
R2和C1是一个低通滤波电路,对于高于一定频率的信号是过不去的。如果您这边采样的信号频率非常高,建议适当降低RC的值,具体以实测为准。从时域来看,就是信号变化过快,电容的电量还没有充满,又开始了下一个变化。那么单片机AD接口,永远也采样不准。: s" D  U8 A8 @% l  E( |+ U1 X0 Q
电路布局的时候,滤波电容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-28 14:05 , Processed in 0.093750 second(s), 26 queries , Gzip On.

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

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

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