|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码! w& z% _8 U7 [7 D7 p) S" B* g
) g/ C; Q: Q0 z l( X* t
* D7 C3 D3 L* G z* r! o. l0 @4 z
这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。
' \& b# f) r' W n, j将R1的电压采样到ADC0809,转换为数字信号,输入单片机9 O" R D t# e) n( M/ @; T0 }
7 W2 O6 k/ ], `0 d; i& n, ]
AD画的原理图(附件中可以可以下载):8 f( t& B9 f8 x0 W
$ Y% w0 e2 a8 _/ m+ r" Y
' |, g$ c' l$ m4 Y
# J9 o- F% F o! N, `
' o3 r% V3 m! b4 ^7 ~
单片机源程序:8 V+ E P6 L* _! k" b
//------------------------------51单片机头文件
, y& U- l) s9 u$ _; K$ h! l* t# {9 K#include<reg51.h>
7 s r# V1 F/ p0 |9 d2 k! Y& z& w8 }/ Y9 L+ J a
//各数字的数码管段码(共阴)
9 _! e% J6 t# ?5 n/ cunsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}
$ M; |6 L5 } s$ y" ~: `8 @0 A2 t2 m- \6 c& j
sbit CLK=P3^3; //时钟信号+ b% v' l, u- z
sbit ST=P3^6; //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换
- O5 B9 G: G# h, G$ gsbit EOC=P3^5; //转换结束信号,当转换结束时会自动变成高电平8 V& O, ^0 B! F2 {/ v, m# R
sbit OE=P3^4; //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
2 j5 b. j4 u3 c! F* o" dsbit W1=P2^4; //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
# {3 ? ^6 b+ ^1 g+ `sbit W2=P2^3; //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭" s+ t. K ^% z# n9 E' [% H M) K
sbit W3=P2^2; //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭
8 J# i3 q! l! N0 p" ysbit key=P3^7; //定义按键控制key为P3.7
! d; @# Y: n. ]0 s3 @//----------------------------1ms延时函数$ X2 r( J& r( A) i
void Delayms(unsigned char ms): ^$ P' i0 n- B
{
: T/ b4 T8 M( B2 j% Ounsigned char i;* t0 i' Z H7 \ Y
while(ms--)! v" O) H! |, R9 Q3 V
for(i=0;i<120;i++);
0 N6 k! f+ a* K/ @}
( v# L* m' X0 Z* I7 ?2 R! h//---------------------------显示转换结果(动态扫描模式); S* y& O6 P, S8 i, B0 Z
void Display(unsigned int d)2 E) P0 M: u5 k+ M* Y: f' L
{
& J" a r* L" F+ d& G$ v d=d*1.0/256*5*40; //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)
( K$ [9 U T: x( `; N1 B) x1 U% z6 }3 W7 m- w. H* e
W1=0; //第一个数码管亮
8 k2 D6 \. n0 P6 w% q8 ~; b P0=DSY_CODE[d%10]; //显示第一个数码管的值 为P1的值除以10取余/ r6 I5 n, D' `) o) @5 a3 e
Delayms(6); //延时5ms
+ }' ?4 r0 U; P5 B0 g4 C% e W1=1; //第一个数码管灭
6 F; i$ b( k* {* K6 E3 I! }- e! `1 ?2 t! Y
W2=0;
/ P4 k% Z3 O8 Q P0=DSY_CODE[d%100/10]; //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
d1 n$ N+ @- U6 r Delayms(6);& w9 V5 X2 k7 a! F+ B( q
W2=1;
. m+ L1 m( Y' E, B3 L! |9 `% R r$ a. J+ _0 J8 G
W3=0;
6 Y* H( }, g9 W g P0=DSY_CODE[d/100]; //显示第三个数码管的值 为P1的值除以100取整6 s8 g Q' k9 k0 X0 U
Delayms(6);; ~+ y1 B7 H+ x$ M
W3=1;
' {0 c/ a5 R* K( V. E }, H V% t I) R' B
//-------------------------------------------------主程序! r: \$ [. Y; R u
void main()4 t* X) @+ ~4 \. d+ y
{ ( y3 h( m: d" ?/ g! t* e
TMOD=0x02; //16位定时器0工作模式设置为2 [) Y5 \$ C3 X5 }
TH0=0x14; //设置定时器高8位初值为0x149 l3 F7 k. U, Q6 A
TL0=0x00; //设置定时器低8位初值为0x00
# n! n5 d$ h- U& N+ C9 Z# G TR0=1; //开启定时器0开关 |* ?, a% w2 o- e% b8 @
ET0=1; //开启定时器0中断开关
1 M! o. a! C' N# l EA=1; //开启中断总开关
2 m/ [; _" P7 \( X2 ^& A: r* A+ w/ e4 D- L* z5 g [
//---------------启动 A/D 转换
' i+ @ s% ^7 Z- I
5 E# V* h* ?% [% \: f! C8 J( h" V//---------开始按键-----
& x" y! n8 Y/ q0 WA: while(key==1); //等待按键按下
: q8 G+ C5 e3 s" C7 t0 ~/ @8 K5 e Delayms(1); //延时1ms% ^% O7 X$ s+ _2 |+ \
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能) 3 X6 W' I; {& n, l
while(key==0); //当按键松开时,循环转换和显示. r1 O- p1 [+ b; l9 p
A5 e! z( ?& A% `& d! v5 x
while(1)
/ `+ G" Z( i0 W0 P# A: H% _% J {
! x+ N2 o9 }; C% r+ `- o ST=0;
* q0 L: Z) r" h8 D+ P ST=1;' Z2 M: f+ Q6 Q) |8 }
ST=0; ! P0 G+ U) s5 C
2 t8 y# D# h* d* y$ [ while(EOC==0); //等待转换完成7 _" z0 r3 M; Q8 Y2 {
OE=1; //开启输出端
& t0 Y6 i5 j* l; s/ H+ q/ T3 @( F7 z# L. [& _3 J7 p% q
Display(P1); //将输出到单片机P1端口上的数字信号在LED显示出来
" @ |8 P+ B+ h OE=0; //关闭输出端
& p' }% @8 z$ D* J% U1 e/ a
, h( `# q, i+ k+ D+ C6 g, y//------停止按键---------( Y" }4 H8 H, A, T6 ?1 a
if(key==0)
5 L# t: m. O8 B {: K, s- e/ H- z8 U
Delayms(1);. ~' o5 m, r4 P1 m9 o5 u" h9 T
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能) 3 U. d( |) c1 z3 v: p
while(key==0); //当按键松开时/ V! G: b! m- {6 P% E+ M
8 X0 v: a( T% C c$ N7 I; w% z4 g4 N. R
…………限于本文篇幅 余下代码请下载附件…………
) r( l8 S# |6 ^( a- T* y& A3 K0 Q5 a0 f9 X
3 C6 x( L+ Y" S9 v& ?/ o0 L
全部资料打包下载:2 B$ c. ^' ]$ z/ `( {$ s* C
. T B- p1 E% O. Y/ Y% O; v& k% M0 u$ q! j# j* ~" k
1 h& |6 T/ l: P; ^& Q |
|