|
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 |
|