EDA365电子论坛网
标题:
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
[打印本页]
作者:
wu68aq
时间:
2019-1-10 13:35
标题:
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
! ~/ Q& Q% k. z K6 J9 w, Q
/ b$ b5 e" E! y- C0 N
$ x: [* ]' ^3 ]6 j3 _, ?6 Z( M
这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。
7 Y( h3 H% U |/ r4 G2 S
将R1的电压采样到ADC0809,转换为数字信号,输入单片机
& s& p" \+ U) F( Q. I
6 u( a7 z/ F6 j% Q& [) r* X0 @
AD画的原理图(附件中可以可以下载):
0 x o5 r5 A- N2 _, ^6 |+ X
$ v/ ^& J, u- ^: V/ W
- I* C* ]7 ?5 }
) H7 h5 @9 ~4 c7 I$ {
* c* c) v% r9 Q
单片机源程序:
0 {, E, M7 m3 Z# ]9 k3 d) F
//------------------------------51单片机头文件
7 p2 c% Z6 S+ L% |' z. D
#include<reg51.h>
6 }# Q8 J+ O$ m" |" L8 [/ s# L
9 ^/ X. ^' p/ D4 x4 g/ G
//各数字的数码管段码(共阴)
* W8 }) {' `" h- I
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}
9 d! b" j3 ]. W) a
! K" {$ K4 w, }0 ?
sbit CLK=P3^3; //时钟信号
' I" G6 A+ _/ p! Y
sbit ST=P3^6; //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换
) Z* l! T& k; [+ `5 w
sbit EOC=P3^5; //转换结束信号,当转换结束时会自动变成高电平
. ]! n* ?" _; t" R8 C
sbit OE=P3^4; //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
9 g5 R, I& r1 U" \: W- U
sbit W1=P2^4; //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
2 ~6 `& J: x# i# w
sbit W2=P2^3; //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭
& W/ g8 u4 s# W4 v! l
sbit W3=P2^2; //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭
* z, p Z# }8 t w
sbit key=P3^7; //定义按键控制key为P3.7
/ J. ~- |4 A! C5 ?' g
//----------------------------1ms延时函数
3 {$ `+ {' ~( O/ @) k
void Delayms(unsigned char ms)
( b$ d- B" d% _8 E3 K/ X; M8 T- q
{
8 E; a0 }5 H6 F3 [/ K. f
unsigned char i;
) k2 X' I7 d) G. Y3 f% h
while(ms--)
7 @* X' L! `/ X! a6 y
for(i=0;i<120;i++);
6 [/ q( f- C! w
}
: j+ n4 m* J+ q. ]0 b# H% o A$ h. F
//---------------------------显示转换结果(动态扫描模式)
$ S: \& i- }, T/ |
void Display(unsigned int d)
2 |" m% X- G2 A' U( X+ P! e
{
2 C& [4 O1 O1 D7 _3 t. _+ w& c
d=d*1.0/256*5*40; //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)
( y1 \0 F: [# C2 `& A
9 w" g; c H l
W1=0; //第一个数码管亮
) x0 p& w( k; @7 w
P0=DSY_CODE[d%10]; //显示第一个数码管的值 为P1的值除以10取余
( R" k+ @% V* Q& l. t1 M+ j$ {+ B
Delayms(6); //延时5ms
1 ~/ P5 p. X) u
W1=1; //第一个数码管灭
7 a0 w( T, e* Z5 u% g) T) K9 I
- D* g8 U3 K' F
W2=0;
0 H" K; J& ^: } r6 z
P0=DSY_CODE[d%100/10]; //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
$ H; n" e8 W# Q8 c* `4 n
Delayms(6);
2 f" K, m1 j( }- K' E& n1 }% d6 ~
W2=1;
. H7 j0 B# i: _3 V& U! d* {* a% }4 o
( t& F" [8 e( Z: ?
W3=0;
) r2 p; d: [/ Y
P0=DSY_CODE[d/100]; //显示第三个数码管的值 为P1的值除以100取整
, b: ^' `: T3 ~3 l5 }* l$ F+ l
Delayms(6);
& L# s8 r# H" q# o3 Q. J
W3=1;
8 q, q: f$ T+ u* d% K8 j2 k
}
& l6 w i* A- v
//-------------------------------------------------主程序
/ i8 j' \5 }, o: j! Y
void main()
- Y* @! F1 F0 y" B7 f
{
, P) J* i3 K Z. n* d2 s* w, m
TMOD=0x02; //16位定时器0工作模式设置为2
1 J1 A; T+ ?+ e. s
TH0=0x14; //设置定时器高8位初值为0x14
7 k( Y/ x c4 a5 g8 ^
TL0=0x00; //设置定时器低8位初值为0x00
! F0 I; e' x* {% t: z6 e* R& W
TR0=1; //开启定时器0开关
b0 f, S& u2 J5 ?+ g
ET0=1; //开启定时器0中断开关
, |9 N" i W- Q7 g$ s4 q$ W8 j
EA=1; //开启中断总开关
, Z! c0 g$ z" o U6 c3 r* C* v
5 U( _; w2 M! H. t
//---------------启动 A/D 转换
/ A2 h, P5 c6 c3 Q: c9 a
( \/ k, |7 p( N/ O
//---------开始按键-----
7 \: E' a9 Z6 H; j9 L
A: while(key==1); //等待按键按下
% ?2 {( B; E8 I. ~0 F8 N
Delayms(1); //延时1ms
2 ]$ ~; w0 [3 d$ V- W+ _! S( t
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
6 l: t* M7 e2 N f) J. W
while(key==0); //当按键松开时,循环转换和显示
% `) {1 Q+ a% z/ F |
" h3 i1 i u$ y* h0 s5 Z- D
while(1)
9 x( M3 r* t- Y1 ?
{
3 s" B" P& D9 `% ]/ V
ST=0;
) Z" \" c) r; k4 \
ST=1;
- r U- }: o( `; `
ST=0;
& R" S; T+ O, u
: z6 ~! B$ i, f8 S* J
while(EOC==0); //等待转换完成
& a# w5 R8 j/ ^5 C2 U: M8 e
OE=1; //开启输出端
% m; p& Q# D6 L5 j/ k
6 t# N7 e* y0 ?: @1 Y' o, p0 d
Display(P1); //将输出到单片机P1端口上的数字信号在LED显示出来
6 n- h( x6 |' R4 ?
OE=0; //关闭输出端
: g% R4 q3 F2 ]8 \7 R
2 I, x$ ]( h' c5 }! v
//------停止按键---------
. e5 e9 v- h& E7 i0 g
if(key==0)
/ {4 p" R+ m, R
{
2 Y" c2 S) ~3 F$ I" O* p
Delayms(1);
1 Z- O$ t6 w+ ?- M Q. h% @# H/ J
if(key==0) //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
# b4 k5 w; i4 P5 a
while(key==0); //当按键松开时
4 a$ q! U% J0 a( M2 A0 Y0 `
/ L; L S% G# e$ u
( `6 p2 c Q0 e( B
…………限于本文篇幅 余下代码请下载附件…………
$ y1 J5 M1 A r) K" A& z/ s
. i5 A$ n0 ~/ F/ k
" k7 y, ]5 I% f t4 P) u$ ^
全部资料打包下载:
`# k+ W) s# D! T4 A0 p
7 k% f: l: C4 a' v9 p3 t* P
: R5 ]4 C& _9 Z% Y
, z, p% P1 e Y( k& h# v
作者:
Mhza
时间:
2019-1-10 16:53
好东东,谢谢楼主分享
作者:
xiaoqi0323
时间:
2019-8-27 18:52
hao
' x6 g- Y$ H: O
作者:
jinniuxing
时间:
2019-8-28 09:42
谢谢分享!
; D/ f! @9 s0 ]8 g/ n
作者:
fox_gale
时间:
2019-8-28 11:04
学习下
作者:
lwssg182
时间:
2019-9-1 15:04
学习一下
2 L' \6 z- [- \0 F h& O
作者:
colcol
时间:
2019-10-12 21:24
多谢分享
t3 @& D' s$ h7 e- {+ m
作者:
chencol
时间:
2019-12-6 19:24
谢谢分享
作者:
hxl520521
时间:
2020-2-13 09:35
谢谢分享
作者:
hxl520521
时间:
2020-2-13 09:37
好人
作者:
wangoo1
时间:
2020-5-17 21:53
这个不错 值得一看
作者:
六十六号公路
时间:
2020-9-10 10:46
谢谢
作者:
桂花载酒少年游
时间:
2020-11-23 16:06
1111111111111111111111111
5 ^+ y2 r2 W& x2 w7 h
作者:
不想不念
时间:
2021-5-23 14:44
学习学习666666666666666
作者:
sljzyjj
时间:
2021-5-27 11:20
下载下来看一看
作者:
SZ高级Dg
时间:
2021-5-27 15:05
555
作者:
1057222898
时间:
2021-5-27 18:59
谢谢分享
作者:
surfingsss
时间:
2021-6-29 12:06
谢谢谢谢
作者:
gcshyb
时间:
2022-6-1 14:50
8888888888
作者:
ksjohn
时间:
2023-1-21 15:54
多谢分享!!!
1 |# Q4 ^6 m5 e N# i
作者:
宋羽凡
时间:
2025-5-19 09:56
谢谢大佬!
# @6 W ]5 W( q. _; J
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2