|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
先上数据
* n/ P+ i+ [- @+ {有C1: R2=10k,R18=100,R1=0mv,ADC输出0.00022mV
+ Z7 S, h: h$ V( `4 O有C1: R2=100k,R18=100,R1=4.8mV,ADC输出12mV8 ?1 Z X0 k! b+ Q
有C1: R2=10k,R18=100,R1=4.8mV,ADC输出4.6mV# ~- G) \1 L |! y, i
有C1: R2=1k,R18=100,R1=4.8mv,ADC输出1.6mV
( Q/ w+ f/ r* H6 n% J# a8 i- @( z. p. W }& s
无C1: R2=1k,R18=100,R1=0mv,ADC输出0mV
: [/ l7 `: t1 f0 ?8 }! W$ {/ x& ], V无C1: R2=10k,R18=100,R1=4.8mv,ADC输出1.6mV
" _! j* T8 t; T" F! W; K" t# I1 L ^8 F* M5 [, D t
现在确定R2=10k,R18=100,c1=0.1uF,当R1有电流时,测量电压基本吻合,无电影时不能归零。当去掉C1后无电流时,输出也为0,但是有电流后测量的数据和实际又对不上.大家帮忙分析一下问题出在哪里。是不是前端电路的问题。万分感谢!
( d$ v$ m1 U A& n& h. E3 i. I0 Q
float ADC0_value(uchar mode,uchar p,uchar n)
# z3 R }2 B) ^' P3 Z4 X9 ^' d{& m( m) R( A9 w# M1 d
volatile uchar i=7;
( f" Y5 E' j6 {0 G1 E unsigned long tem;: l! v6 ? W* ^- B2 @1 ?
long tem1;; w4 W# A) f( \8 \/ j0 E
float v;/ ^4 U: Z1 r9 y5 z5 b$ e s
RedLed=~RedLed;
# r+ Y$ l8 E& g4 r3 K" |, a ADC0MD=0x80; //空闲# R& L, W5 a' S8 q+ }6 X9 @
ADC0CN|=0x07;
# t( X4 l( r. n. o% x if(mode==0)
1 @! ?" J7 l4 o' d0 a5 s2 F {
- B; E, {$ k$ |+ a& ] ADC0CN &= ~0x10;//单端输入2 a- d% G- q& Z# V
}$ u/ d) K' Q* p- G" u0 h/ H' J
else5 Y; H9 u% g$ e
{
0 b) V' l8 _& s- k ADC0CN |=0x10;//差分输入
. e' a! A( [. D- ?) h }: U/ O' @+ U: z
ADC0MUX=p|n; //端口选择& d* |1 S) l0 H4 U% s
lab:
: v" x0 H+ `( T: f AD0INT=0;1 l( u# t$ ^9 D) U1 b
ADC0MD=0x82; //单次转换) y( n# j) |' h& {, d; J) c E3 Q
RedLed=~RedLed; //很重要,完全关闭adc0后重新打开必须启动延时/ i5 A' n1 n5 n
// delay_ms(1); //很重要,完全关闭adc0后重新打开必须启动延时。+ e4 o% Z/ R& h: W5 M
while (!AD0INT);! W) f, l! O$ A& j0 J8 Z/ ?* I$ M8 a
AD0INT=0;( A( A& i+ p1 ^" I6 Q
ADC0MD=0x80; //空闲7 ^0 t( [% ~% U4 u3 _' n7 ^) m
// ADC0MD&=~0x80; //,关闭ADC0- m* g# @/ X8 d2 \
// tem=65536*ADC0H+256*ADC0M+ADC0L;
& {/ \3 r, q6 R: f8 K& s' J- R if(mode==0)& p( p- _( }% B8 X
{
7 K/ z: [& ~4 z5 P& ] tem=(unsigned long)ADC0H<<16;
. r' N5 T7 w- Q$ k0 ~" g1 U5 s; R tem+=((unsigned long)ADC0M<<8)+(unsigned long)ADC0L;3 a! \, K/ x: m1 S8 u0 x& `
if((tem>=0xffffff)&&i>0)
s( S% Q" L1 g% A( M6 j* V/ H {
3 l: a6 f9 j+ I ADC0MD=0x80; //空闲% x8 p3 P/ s$ T; m$ H9 l& Z. b
ADC0CN--;8 v5 R+ N6 P, M) O/ k5 Q
i--;
1 P( o: I* ~# X* K goto lab;2 @1 e* n* J3 Y9 F. l9 [5 @
}
0 a3 w% Q& w$ x' z5 b7 W v=(float)tem/(16777216/VERF)/(1<
: b) d! [: w2 n2 W if((p==TEMPERATURE_P)||(n==TEMPERATURE_N))4 G! R7 _. K, W& `* x; J9 a: P- f
{
! w: g$ h1 }6 W* O v=(757.0-1000.0*v)/1.73;//温度转换: |5 L( x( x1 l7 f8 G! e
}
% x. C1 H4 x4 S# _* H( H0 a) ]+ k, @* r" u1 T
}
' |9 B. {2 m2 U9 W' I" p else
, s" o" J$ r- S$ G6 o8 i9 K7 W {
5 c0 e/ C' u8 H: J5 `) v tem1=(long)ADC0H<<24;" Y9 U. F1 S" `) m$ ^7 c, O. ?2 z
tem1+=((long)ADC0M<<16)+((long)ADC0L<<8);4 A$ Z7 ~( Y% g1 Q; ^ e
if((tem1>=0x80000000)&&i>0)+ x2 V0 s" K' n% v% S9 O( F- U
{/ D* G. K. R7 l" o
ADC0MD=0x80; //空闲
) K: t* t. v# L* [! N) [ ADC0CN--;6 q3 m4 B8 w0 b: g- g6 o( D+ K) P
i--;
% ?1 v1 [1 h2 ?. L1 Q2 E goto lab;
4 x, }' L! w$ ?, v" `4 W1 d3 H! G% G }
6 n5 E9 R# m, u! G5 P v=(float)tem1/(8388608/VERF)/(1<+ L2 o9 C/ F8 A' c0 F) [
v/=256;
5 ]& w, q0 M: {# \! _2 D1 |4 U }3 [% ?' I* J4 `2 U
// RedLed=~RedLed;1 ~( s- }( W3 n" M6 H* ?5 g! }4 H; p
return v;
. \, Y0 A [8 e. U$ X3 X; v# ?4 d}
9 @6 `6 i; n5 H9 K8 E
6 [) a9 T1 X d9 X! x& T& J4 s
" U7 ]% S2 U' w
|
|