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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
先上数据
$ c) v) s8 o( T$ k有C1: R2=10k,R18=100,R1=0mv,ADC输出0.00022mV; H2 W1 Q- D6 l) A) F: o% u7 x
有C1: R2=100k,R18=100,R1=4.8mV,ADC输出12mV
) C. s& A- n: u/ }有C1: R2=10k,R18=100,R1=4.8mV,ADC输出4.6mV
( [- }2 C* K& e5 G! O  a有C1: R2=1k,R18=100,R1=4.8mv,ADC输出1.6mV
  e$ J3 r9 J+ f3 \- ]' o% f
/ W1 G6 N# s. I3 E* |6 E6 r+ c无C1: R2=1k,R18=100,R1=0mv,ADC输出0mV
& L, k  x- W! c无C1: R2=10k,R18=100,R1=4.8mv,ADC输出1.6mV! M6 i( m  J/ H1 y2 z

' e5 I  r) w6 c5 T现在确定R2=10k,R18=100,c1=0.1uF,当R1有电流时,测量电压基本吻合,无电影时不能归零。当去掉C1后无电流时,输出也为0,但是有电流后测量的数据和实际又对不上.大家帮忙分析一下问题出在哪里。是不是前端电路的问题。万分感谢!# B7 F) o7 r0 V+ o
; }* Q% E3 f8 `8 F& ^: D+ m$ _
float ADC0_value(uchar mode,uchar p,uchar n)8 `% B4 W2 b/ ?2 c# l7 `
{
" l& L# J. J0 _$ }        volatile uchar i=7;
3 T8 i7 y+ b5 ~/ O6 j4 O3 K7 S        unsigned long tem;$ I- V1 m8 m. X3 ^6 o$ R7 C; H" A
        long tem1;
" @5 K( x  }% x  Z        float v;
: v: R: n2 Y2 W8 {1 k3 v% x        RedLed=~RedLed;
5 K  s  p% O8 [+ V! E        ADC0MD=0x80;        //空闲
: u0 b$ x* I1 Q1 I5 O0 ]        ADC0CN|=0x07;" F5 k0 y9 v6 G8 t) o
        if(mode==0)
4 Z' U) Z% `1 V: ?  y0 z        {
8 I. S7 n$ T9 C. i! Y                ADC0CN &= ~0x10;//单端输入
& u* h0 i0 {- k, T( L        }1 B/ \* V7 w# H  W8 V
        else: v8 B" e0 p% r# c$ ?
        {" W9 {! R, |" t6 O9 K& j
                ADC0CN |=0x10;//差分输入$ K; i' U& V7 D/ ^* ~# P( W% Q) y
        }
9 a# a3 b7 j% f) u: c        ADC0MUX=p|n;        //端口选择
! r# f$ b* o3 dlab:: l* {0 x5 h; h5 I1 Q/ q# E, ^
        AD0INT=0;
7 T. e, B/ l$ S! \0 ?! y        ADC0MD=0x82;        //单次转换
8 ^4 j) T7 r' P6 j  \* _        RedLed=~RedLed;        //很重要,完全关闭adc0后重新打开必须启动延时' ~2 f5 ]4 b. C8 C
//        delay_ms(1);        //很重要,完全关闭adc0后重新打开必须启动延时。
/ S4 h5 R( k$ `1 q1 k+ P1 ~        while (!AD0INT);
* ?5 {; e/ [9 G/ N' L/ Y' C: y        AD0INT=0;
) t9 z/ V1 n# Z! n, k1 n+ D        ADC0MD=0x80;        //空闲4 D) X% O% A9 G- X9 ?- K$ |
//        ADC0MD&=~0x80;        //,关闭ADC0
* W) W$ U1 k5 G/ H* C: z//        tem=65536*ADC0H+256*ADC0M+ADC0L;
8 `2 v0 S0 n" g4 Q. y* k, j        if(mode==0)* m$ m4 O& I. |' F" [9 e) V
        {. O+ {6 N: x9 \+ p& `' @
                tem=(unsigned long)ADC0H<<16;
( p8 r; @2 ^) P  ^( a, Q0 w                tem+=((unsigned long)ADC0M<<8)+(unsigned long)ADC0L;
" t5 J8 A3 k( @  l8 ?: B7 S' t                if((tem>=0xffffff)&&i>0)
3 k5 e( ^2 A2 U% s- [* `                {
. @) g/ X2 q; m                        ADC0MD=0x80;        //空闲" O8 F- ?0 G1 X, S0 c8 j
                        ADC0CN--;% _2 j2 M2 k$ L6 U! F( Q& j" B
                        i--;
7 [0 Z% `; U; L9 H; M                        goto lab;
6 E- F: s1 ^; ~+ c                }
; ~$ L5 [' U4 c2 v, Y                v=(float)tem/(16777216/VERF)/(1<
: Y8 V: i6 t9 S% D- e% l: |, l                if((p==TEMPERATURE_P)||(n==TEMPERATURE_N))
+ g/ c4 w1 c/ ]                {
2 L7 s, W$ d0 M; M- r4 i5 ?. H8 `                        v=(757.0-1000.0*v)/1.73;//温度转换
; x$ [# c/ W0 f4 V3 \                }
  p, I/ ?; b0 U% B
$ V+ \0 m/ k. R0 h; G$ ?- f) g        }  [7 m/ k3 j6 X+ _2 s* |
        else
1 s" ~' W! L3 s% r$ G+ O/ ?) B9 L        {
+ q6 M% ]% D, c' D, c, Z0 S  b9 Z                tem1=(long)ADC0H<<24;/ X, N2 T9 N! J& ?* i
                tem1+=((long)ADC0M<<16)+((long)ADC0L<<8);7 D, O; J+ _- g; z" O7 g6 Z
                if((tem1>=0x80000000)&&i>0)
" ~, h& s- w' r% J" I) k3 \$ g                {
9 ~) r* I, R; x8 z/ M                        ADC0MD=0x80;        //空闲
9 G# s7 Y+ V+ a, q                        ADC0CN--;+ K% T: l; R4 x1 p- G* ~2 Z8 a2 \
                        i--;5 [  ^* K" T$ K$ y1 ]
                        goto lab;
8 j1 b1 s/ n8 Q$ F; P                }
( v1 W0 x: U4 Z# t6 ~/ G                v=(float)tem1/(8388608/VERF)/(1<
* g( x* |/ F* ^8 J                v/=256;
3 I1 H' O% k/ B! k, b1 l& t* s        }+ V+ ~5 L. T* E9 D0 W/ b- S
//        RedLed=~RedLed;
7 b8 F6 n6 G; s        return v;  S7 K3 A5 {4 \% v/ |% w. X# Y# M
}, O6 s; v" H* E: W2 S
4 h$ P. ?6 i/ Q

5 y7 m1 k# c+ r, c# D

该用户从未签到

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基本的电压,可以先使用运放把信号放大,然后再使用单片机进行采样。
9 c- u+ `+ x- a* j/ `# o6 OR2和C1是一个低通滤波电路,对于高于一定频率的信号是过不去的。如果您这边采样的信号频率非常高,建议适当降低RC的值,具体以实测为准。从时域来看,就是信号变化过快,电容的电量还没有充满,又开始了下一个变化。那么单片机AD接口,永远也采样不准。% n# B! C* R  p# g8 r( b5 |5 z
电路布局的时候,滤波电容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-3 01:10 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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