|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
" o% f2 E. X8 M$ `$ t+ ]$ O5 s3 x, a- v
3 N7 f/ V" S5 k" ^( Q# k$ @7 J) C
这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。
7 o7 v$ q8 I6 n将R1的电压采样到ADC0809,转换为数字信号,输入单片机6 V' Q2 y% Y" E
+ h7 s7 y' Q* q8 ?4 B: y
AD画的原理图(附件中可以可以下载):
0 A, \2 P+ c. Z$ D
! X" B- c( V3 L$ G$ K4 z9 U1 t h8 W
. M z# l8 G o4 X) m4 m2 O* O! E3 t8 l& Y8 D' c. E; {
2 J# ^: ?% g, G9 i- {) C7 Y单片机源程序:- o- H: {8 ~) ?. i1 Y" O
//------------------------------51单片机头文件! ]& R! V0 C6 x2 D) ~+ ]
#include<reg51.h>2 U, W4 t9 k4 q1 D8 c
5 F1 J4 k) O1 X$ E8 I% l3 C//各数字的数码管段码(共阴)
: t" r# M5 q/ O2 Funsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}
+ u7 l7 c2 A# g; K5 m2 h# V% ]- G
7 g! Q2 Y1 B* T, }: z/ e+ f: Ysbit CLK=P3^3; //时钟信号% \! B3 `( w6 x5 t I: W
sbit ST=P3^6; //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换. ?# H" f$ G8 K
sbit EOC=P3^5; //转换结束信号,当转换结束时会自动变成高电平
7 z7 q$ h, o9 ?sbit OE=P3^4; //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出/ q& H. c' p+ J* p' q
sbit W1=P2^4; //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭* d# {& o; O& ]
sbit W2=P2^3; //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭* a; q4 F2 F4 b% b/ Z% }
sbit W3=P2^2; //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭6 q* B( h/ [% A& C$ s$ k* U4 d
sbit key=P3^7; //定义按键控制key为P3.7. T7 S; n5 x$ t! y' H. x7 }1 m
//----------------------------1ms延时函数9 y; d/ B# Z' i9 A& J0 n! k! o
void Delayms(unsigned char ms)
3 X0 J) h- h, [) D( ]7 {7 a{
3 Y2 N' g4 B- W- ~unsigned char i;
) C7 H$ \4 X1 a. i6 ~0 vwhile(ms--)
$ K+ i$ J) {/ ~# D6 p$ |for(i=0;i<120;i++);
. j @# P% ^- Y y}
0 Z9 i( r; U. B, v5 D//---------------------------显示转换结果(动态扫描模式)
% |+ M& O5 T: W8 [9 _, K0 Jvoid Display(unsigned int d)
) L, c+ ?4 v. C# S5 E& N{& \, C* A' _- ]/ f
d=d*1.0/256*5*40; //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1), h; ~. o7 S1 ?2 P. J0 E
1 U/ i/ ?4 D! ?7 k$ e( N; N W1=0; //第一个数码管亮
+ b: m( a" }4 R7 ~# z5 t' k! C9 [) u P0=DSY_CODE[d%10]; //显示第一个数码管的值 为P1的值除以10取余( G1 {$ p" c' B: ?; v/ l
Delayms(6); //延时5ms; }& ~" T1 Z% O8 U% v1 j2 v. d
W1=1; //第一个数码管灭7 F$ ~7 M' @( O! |& r
: i# R: a; t, m& b! o0 X: J* G7 O W2=0;' _: C5 @" \7 \; Y$ V
P0=DSY_CODE[d%100/10]; //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
2 w- v- X4 H! V( ^2 k: ?# ?; ? Delayms(6);$ C' H8 ]: {9 C' i( n! A
W2=1;
' I; R) e! M& Z2 P, X$ J
# ?% U- b' I4 l- Q$ R" { W3=0;
0 D9 z1 z" g+ G* r9 t* e# M$ d! u P0=DSY_CODE[d/100]; //显示第三个数码管的值 为P1的值除以100取整1 Q8 O- Y$ j$ X9 G5 O& @
Delayms(6);) y! V5 J5 M, {* f+ f Y
W3=1;) x$ y1 y) S5 F# O: G8 L% [
}8 f2 u% T' _1 ?' h% g
//-------------------------------------------------主程序& h! y9 o' g' t& r
void main()
3 ?# M! M2 ?& L8 N{ ' r* ]. u9 B9 R& K4 }( h% m! N% d) H
TMOD=0x02; //16位定时器0工作模式设置为2( ?+ Q4 t. u! ~, G) Q# D2 ]" L
TH0=0x14; //设置定时器高8位初值为0x147 r; T4 F% t" O7 h
TL0=0x00; //设置定时器低8位初值为0x00
- @- e1 w; S* Y$ y2 h( j3 F TR0=1; //开启定时器0开关/ Y: o8 h6 ?2 P _" b, x- p
ET0=1; //开启定时器0中断开关
( d, O$ S s: C7 h0 m$ b1 y8 b EA=1; //开启中断总开关8 E9 f/ K' }* L I2 I1 Y% R' C+ l
: g, Y8 c0 u3 p2 `; C
//---------------启动 A/D 转换1 E a. f% a) }
! h: M8 F5 l* i9 {2 g+ {5 f) w6 r
//---------开始按键-----
* `( @+ `+ A' u/ c& g8 MA: while(key==1); //等待按键按下
+ [( U z6 E8 F3 N9 ^ Delayms(1); //延时1ms& H, u. c7 D% Y
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
F" ~: F6 {. N/ { while(key==0); //当按键松开时,循环转换和显示
: k* B* h D0 A7 y) K( L8 G& a
! z* x3 ~# q$ n$ Q while(1)
; P- r6 t2 `: F {
W% R0 E9 @" r ST=0;& N$ i+ Z* R. q" C: G3 _" o! t
ST=1;
0 n- P$ ~& E7 _) \ ST=0; 2 V, b) U9 r* ^; y3 z O
5 r& W: T, E& w, A4 [) N" H4 O while(EOC==0); //等待转换完成
7 p# V/ d6 u+ b2 A2 X OE=1; //开启输出端/ n1 H/ ~2 z2 C" D* n
7 b3 L3 r, {3 Q2 K' a
Display(P1); //将输出到单片机P1端口上的数字信号在LED显示出来
& ~! Z) z" }( b) ^8 {2 x OE=0; //关闭输出端
# H h( c* u9 D6 U# n/ q! a% p! `! P" T0 I/ H
//------停止按键---------
" Y4 T% ?+ P | if(key==0)) i/ d, j/ ?- y @
{
" i) Z- F+ V! l1 A Delayms(1);5 {, D) s5 g& j3 q
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
, e# i. A) s+ o4 Z3 O' s. }4 ^ while(key==0); //当按键松开时
2 |4 }9 @& T ^) `- |$ }. S' U3 B9 ?; j* t/ j) ~! X
- v7 {9 h; U, U+ s
…………限于本文篇幅 余下代码请下载附件…………6 ? l! N U* O" g4 X
+ X Q* C8 K5 [% b; z5 _
9 Y' f: I& D9 ` K4 G, ?4 C8 B全部资料打包下载:
; S3 c: t# |! m+ G0 w. g
& J1 n* Z5 q: _! Q; }
. w' U7 n4 U6 g* \1 Q4 |$ ~- x9 Q* ~- f" ~; J
|
|