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