|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
; _6 [9 i7 I1 E& C# ]. P# l4 V8 N
( d9 z* O# w7 T9 p) p& M) U# r这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。9 _0 }& H: ^: J0 J! i( Z0 n
将R1的电压采样到ADC0809,转换为数字信号,输入单片机0 s" x. e1 Q9 t- w' Q4 p; K
0 p3 l2 s9 W& U4 J& \ FAD画的原理图(附件中可以可以下载):
1 I1 @( |' Q! }" S' R0 J# x ! V$ q/ Z+ @7 _( L% `2 m) Z# m( J) C8 b
, ^* k: Q0 y3 @2 i) ?3 w2 F0 R$ M9 a- t6 x2 d1 l1 H, `' K
* K2 z; V+ L6 F0 `0 F# W, @单片机源程序:4 ^2 d! J. l7 O% L/ ^4 D# }' J
//------------------------------51单片机头文件
( ?% ~: H$ w T8 F! J( v#include<reg51.h>
+ U" C) |) O, v8 h0 C8 b; ~' `; W# R
//各数字的数码管段码(共阴)
2 f% Y0 G+ l! b9 j, d, y7 [unsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}% _6 c0 f0 D$ v& Y- z5 Q
) h t2 Q/ W7 x! l* Esbit CLK=P3^3; //时钟信号
7 f6 C" n- G! T5 u- M) xsbit ST=P3^6; //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换) C% \# G5 {. O; M1 H2 F
sbit EOC=P3^5; //转换结束信号,当转换结束时会自动变成高电平
- k& U: B" c# c5 ^8 Usbit OE=P3^4; //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
6 E, v) r1 e4 a+ S: U+ @& `$ D% Gsbit W1=P2^4; //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
4 k, k/ [1 w& A1 \, W* \+ Psbit W2=P2^3; //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭
" I' G& N# |: H+ r, ~sbit W3=P2^2; //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭% R; D+ n* _. `/ \ M4 F
sbit key=P3^7; //定义按键控制key为P3.7
7 {7 Q$ T, t1 K- e. F+ e//----------------------------1ms延时函数- U/ ~8 v' W! R- ~5 j
void Delayms(unsigned char ms)7 Z0 R( j9 d3 @# a
{
9 R8 F- \6 g: k5 y* C( Y6 |0 L3 \4 P# zunsigned char i;" z7 P9 G5 O5 r1 H
while(ms--)
& x* J$ \5 M9 @. k/ @for(i=0;i<120;i++);) D- S$ `3 D/ }1 a( v3 _: l
}) m: G2 H+ d! J5 B% |" o
//---------------------------显示转换结果(动态扫描模式)
% ]" c4 Q r" w( m# }1 y1 ]1 Ivoid Display(unsigned int d)0 p8 c8 |5 x4 W/ o+ Y r5 z, X- {
{
; i" @7 ]0 t' H" s d=d*1.0/256*5*40; //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1), i, n# C6 k8 k# R5 G) s. v
: ]7 H- G( O6 {0 p* R# q9 e' i
W1=0; //第一个数码管亮+ h; a5 R, Z' ~2 S, f/ {" P
P0=DSY_CODE[d%10]; //显示第一个数码管的值 为P1的值除以10取余
+ L; K. E/ d7 f& i( }% E4 a Delayms(6); //延时5ms
: z# `/ W! U# w0 d' O3 D+ w W1=1; //第一个数码管灭
% R. M- Y) c. G: O2 c3 Z
* ]5 a4 x1 h. F$ R W2=0;+ Q* s2 \1 o* P9 m9 N
P0=DSY_CODE[d%100/10]; //显示第二个数码管的值 为P1的值除以100取余 再除以10取整- ~7 h; K* u8 |( D1 b( r! W
Delayms(6);
2 L C' p; b8 ?2 F5 B$ b W2=1;
: m+ s, F. t2 F6 N
, o6 q5 R, v0 K8 Z; H W3=0; , P/ r8 r* H( }( f) x Z& Q* `5 W
P0=DSY_CODE[d/100]; //显示第三个数码管的值 为P1的值除以100取整
% G/ o& V4 }. p/ {' j4 h6 N Delayms(6);! t% x3 N; E! n# e" B
W3=1;
7 u- g/ A% D8 C }0 J. E. u6 d4 k9 H* A4 t$ ]
//-------------------------------------------------主程序' X+ c. a2 L; X: |4 [0 }
void main()
4 C% K f- a3 N; P5 x5 ?{
$ R4 Z* }7 q9 \: N d: p y TMOD=0x02; //16位定时器0工作模式设置为2 J" z' J1 h4 Q1 S
TH0=0x14; //设置定时器高8位初值为0x14
- R; n7 U) _" P/ Z1 M/ E TL0=0x00; //设置定时器低8位初值为0x00
1 l% _1 A `. K7 D0 B TR0=1; //开启定时器0开关
+ r& |7 {8 C: q ET0=1; //开启定时器0中断开关
! f) d' n6 k& V& N3 @( F EA=1; //开启中断总开关
8 D6 ?4 C( v" @2 y1 Y$ f' V
6 p- j3 I' h! j3 D$ _//---------------启动 A/D 转换, i5 P2 p, z7 T7 G
: [, N+ n$ ?! z) ]5 h: u( j3 w9 S" S//---------开始按键-----
7 l. d O! B2 b/ }A: while(key==1); //等待按键按下
& n1 ^ s; d2 H$ K8 \0 }1 P. m Delayms(1); //延时1ms8 a) C- D& c) @- B Y7 N
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能) $ c) ~, V, f! F. C0 P
while(key==0); //当按键松开时,循环转换和显示* L \- S. `6 G2 C8 j
4 D; G' ]. e" o7 `4 D( } while(1)
8 D% j6 M: D/ ?2 C# G$ c" g {, U* d4 B/ W. m
ST=0;8 |9 k/ o" n' K. T$ n
ST=1;% Y. N$ H# y3 \8 M
ST=0;
" Q8 [8 q0 R1 R5 i) F+ w/ E
! n& u$ `1 Y) w; E% E8 N while(EOC==0); //等待转换完成
- E! ~* V2 f9 n' c OE=1; //开启输出端
: H+ Y @( p' B4 d) h6 W' S/ W: ^+ T) r! J. e4 x0 J, s S
Display(P1); //将输出到单片机P1端口上的数字信号在LED显示出来: i* x( Z2 c3 v8 o0 Z& i
OE=0; //关闭输出端6 B0 u0 U; R. F* x; l
8 L3 m1 {, I# i+ s+ t0 @
//------停止按键---------4 j* k; _5 x3 F, N+ O( G& T: q
if(key==0)
; N- t" u# ]7 a! Q0 M! Q {
' P' `4 p+ B; g4 e% M Delayms(1);
4 h% d3 t" k$ {7 m9 B9 H5 [ if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
9 \' Z# D7 {! `5 A while(key==0); //当按键松开时
m3 i! A; Z7 N' a# k9 `% E/ a/ f5 L$ ~. b8 s" ^
4 P- o2 G6 o, E, j+ k* Y…………限于本文篇幅 余下代码请下载附件…………
% k" h! T8 B# U9 i" M* o0 _9 ?: R5 J7 R6 l! h9 g6 q3 f) y! l
1 c/ s- X7 D1 q. D6 M. |
全部资料打包下载:
( f) M, W" T0 G6 L, B* X! n/ X# O2 K( i% `! g
4 d. r# e) n( z5 b9 h
0 p0 M5 k! X* a! I8 w
|
|