|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
7 ?8 o; }) ~1 S# W4 u# e! P4 o: b
3 K& A6 W4 o7 {2 H6 t4 D _9 K
' ^4 f$ C) ]/ O0 q1 x这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。, s2 O. a, p. x# y/ s
将R1的电压采样到ADC0809,转换为数字信号,输入单片机
3 e1 g3 u1 U& |$ q
. ?% f8 p: @+ A" |, ~* gAD画的原理图(附件中可以可以下载):" j8 `, a) a+ r/ g& ]. b
# r" Q7 s6 v& E! f! G( |) |0 e1 @% z0 T
+ L2 ~& @3 ^ a- b$ m. Q( m2 O
3 J7 S+ ^/ }- i+ y
单片机源程序:2 F, G0 M7 K# F9 p4 W
//------------------------------51单片机头文件+ x4 j# k- j5 r5 \: H7 C0 _) K; {
#include<reg51.h>
( J4 H. w( V* z# F( l
: w" ?- l3 g2 L2 k+ x. Z- u0 x+ E5 `//各数字的数码管段码(共阴)( @$ n7 @7 m# N8 \4 x- a) I( k
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}% X; K/ B( o1 M
0 |. h6 w# H+ |( f1 tsbit CLK=P3^3; //时钟信号, k, H% l" _; `
sbit ST=P3^6; //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换
9 i0 Y }! e6 U. Vsbit EOC=P3^5; //转换结束信号,当转换结束时会自动变成高电平
# l0 l$ C# W5 W Bsbit OE=P3^4; //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
3 p9 c( j+ J# Msbit W1=P2^4; //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
7 d+ |$ W1 L& w2 B1 o9 } Jsbit W2=P2^3; //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭
/ E2 [9 q+ e, v5 k+ Usbit W3=P2^2; //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭3 B. @/ t& w8 L* a1 H2 Y! l
sbit key=P3^7; //定义按键控制key为P3.7. ^' L W- W. L: E
//----------------------------1ms延时函数
/ ~+ _3 \, z& G' u+ g2 I4 cvoid Delayms(unsigned char ms)
- x- _+ s) }' [{$ O0 H p- p( I
unsigned char i;
) B0 S3 N* Y& rwhile(ms--)
$ a4 {5 u* [% X/ B& E9 }for(i=0;i<120;i++);
- Y% `3 f d9 J4 y% ]1 c' p* T}: |: }& q; ?9 b0 d7 S
//---------------------------显示转换结果(动态扫描模式)
0 G' j. n% ~6 k: c W' ~4 rvoid Display(unsigned int d)2 A' z8 Q* g# A0 v/ v; y/ ~, V
{5 u% ] X' U S1 T
d=d*1.0/256*5*40; //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)
8 m' X* j+ ]$ _" J4 u* A4 f
5 b2 R% b8 O F2 s W1=0; //第一个数码管亮
7 D2 l" d' ] H/ B6 I0 D P0=DSY_CODE[d%10]; //显示第一个数码管的值 为P1的值除以10取余
$ I- [2 i- u) J Delayms(6); //延时5ms
# j0 F/ d! N$ G7 o* T! M W1=1; //第一个数码管灭% C# S. r. n \: L5 U" p7 T; e
! X: o1 R: K {5 F/ e) Y
W2=0;
7 a2 U9 C! R0 _6 W0 o P0=DSY_CODE[d%100/10]; //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
6 B9 W- |$ D9 R1 W8 E7 A. T+ a Delayms(6);
& b% L' p# _# l- z& C8 x W2=1;4 D U# P/ Z. Y) q* a! e: \. z& E$ Q
$ N' M5 O! r1 e W3=0; $ ]5 o5 P9 ?) J' Q
P0=DSY_CODE[d/100]; //显示第三个数码管的值 为P1的值除以100取整5 E; [" D" a& r$ o( v
Delayms(6);8 Z$ }: d/ }5 [0 I& {3 o
W3=1;& E I& ]: f# [3 ` k
}8 E+ s* B- o; D% M/ \3 t
//-------------------------------------------------主程序
/ W4 ]5 Y! f9 ^0 Dvoid main()* e6 Y4 u: P1 p
{ " @( T! g/ n- @9 _! X2 e
TMOD=0x02; //16位定时器0工作模式设置为2% f3 |- J$ f( E [; X
TH0=0x14; //设置定时器高8位初值为0x14
2 q# V( ^, ?$ X' N( \ TL0=0x00; //设置定时器低8位初值为0x00
' o( _1 i( j( A TR0=1; //开启定时器0开关6 F _ o: X9 r( l
ET0=1; //开启定时器0中断开关9 C' N& m3 \8 i4 G! D" }
EA=1; //开启中断总开关
1 r& N: @ @# l. B. i: S5 D) r
3 V$ Z6 c9 f$ j5 R/ y//---------------启动 A/D 转换
1 F# `: [3 o. _4 z- `
7 p! |: S1 v# L//---------开始按键-----
& j% Y4 W* L) d0 V. kA: while(key==1); //等待按键按下9 x+ w% ?2 j( ]
Delayms(1); //延时1ms( P1 `1 o4 X* Z: n T$ t
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
" f. b: D4 b) i9 T1 P6 S7 P while(key==0); //当按键松开时,循环转换和显示
' C, y5 O# q2 Q% |2 o. P* |4 Q6 o1 `* [2 `, H# ~
while(1)- v+ z" o4 W, H" Z6 j+ i/ ~- \5 W* C
{
* P2 L4 b& X5 p% w ST=0;
$ |$ J9 K9 c: E h ST=1;9 S. F8 y4 y0 c+ }7 ]
ST=0; % e$ ~9 T! m5 S6 }) @) b
8 m/ R4 G1 v1 F0 G a N+ ~
while(EOC==0); //等待转换完成% W) r9 m0 L7 H6 @
OE=1; //开启输出端( L% S9 r. E- ^4 i7 ~' W
: g" ]$ |4 `0 R9 O- T1 [: r0 c& O
Display(P1); //将输出到单片机P1端口上的数字信号在LED显示出来
" h2 O: i- ^7 n OE=0; //关闭输出端/ R7 G9 I( D/ Y# x. S( W
: @4 s) ?+ q5 S( e/ A5 O
//------停止按键---------5 d! d. b) u) i3 e; W; s! G
if(key==0)
8 D. P4 `' S- C% Q5 t+ j2 b7 q+ @ {
e; u" {( K. y1 G2 F" ^: B5 G Delayms(1);
4 }9 V, U0 R2 v x& A/ r, l if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
( Y# U/ d5 q5 D- x while(key==0); //当按键松开时
5 R0 x5 r# u/ w2 ]$ u! r+ y
) ?5 K# a" K* U- I
$ s- w3 {: q" x…………限于本文篇幅 余下代码请下载附件…………. f# u; o, z7 x. F! J8 t
% e1 y0 z6 l, t6 }0 N
! Y* }# ^: p2 h% r- f全部资料打包下载:
5 J# @* l$ r7 P8 C
' T% Z2 g( X9 Z, P1 r9 c% @8 p! \+ \" Y6 F: p) ^' V" ?7 x5 D
; `1 e& y4 u2 W( i. w |
|