找回密码
 注册
关于网站域名变更的通知
查看: 2035|回复: 20
打印 上一主题 下一主题

单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-10 13:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
4 x) [/ L% j( m
' y! R3 u) B; b6 A- o/ C$ f) R  N
2 `/ }+ \& U4 L# P, R
这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。4 G1 z4 Z! o- o. @/ T
将R1的电压采样到ADC0809,转换为数字信号,输入单片机
( W% A. r9 D4 Z! c1 ^+ b& b3 P- s$ ?! h/ p6 ~6 |6 Y" ?7 N
AD画的原理图(附件中可以可以下载):$ M% G. e1 Y6 g' Z. |: }( t
. J6 n0 B5 A$ s9 u5 S, F, m

3 Y$ Y8 H, g* e& Q$ ^
% }" C% w8 \$ {; `' A+ b! n4 ]$ P
: Y' @) K# S$ i单片机源程序:
$ |& x; s# e2 g$ m9 v
//------------------------------51单片机头文件* o2 X7 s( s9 {% ]
#include<reg51.h>
8 d4 \  Q+ {+ [& X5 U: i6 o: X% O0 N& R7 I  X% Z
//各数字的数码管段码(共阴)
# j- p# g/ \7 d: gunsigned 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 J" C& p9 }, V$ i( z& d
: V0 b3 ]4 z7 }( {' hsbit CLK=P3^3;    //时钟信号
1 z. N4 ~! U9 }' asbit ST=P3^6;     //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换' y- k5 }6 |% X! B
sbit EOC=P3^5;    //转换结束信号,当转换结束时会自动变成高电平' M% K( f( o! i+ G' G5 S0 y0 t! K; P
sbit OE=P3^4;     //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
, y2 ?; S+ Q( u5 n3 m% T# ^* o8 g* Gsbit W1=P2^4;     //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
8 A0 a* I: R9 O9 msbit W2=P2^3;          //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭! m1 i' b& A  v0 d$ k
sbit W3=P2^2;          //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭
% j# }8 I0 D- k, vsbit key=P3^7;          //定义按键控制key为P3.7
* j4 g6 C* _' F0 v) w  F//----------------------------1ms延时函数
; z: X) C/ ?0 a4 {/ Tvoid Delayms(unsigned char ms)
/ s3 W* H6 b. |2 t/ Y) i) Y6 l{
, p6 ^% C. V. S, f5 T  lunsigned char i;
7 F' _2 R/ F0 V* C# [- Bwhile(ms--)$ h  S  c9 f4 }! A
for(i=0;i<120;i++);
& k4 j- y0 y. a- e; V}
0 B9 Z* S7 j( }& r4 A9 S//---------------------------显示转换结果(动态扫描模式)" t9 r6 Q8 X$ d( t: B
void Display(unsigned int d)
; {1 b. ^/ b9 L) v5 \8 v{
, g* ~7 l* E' A( ^% x1 p$ v5 `- b/ I9 r! m        d=d*1.0/256*5*40;  //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)* H: W1 p- |, S1 a5 X

( M  L3 L- N1 ^' }; e5 O        W1=0;   //第一个数码管亮
1 Z/ j. V& M7 I! P% ]        P0=DSY_CODE[d%10];  //显示第一个数码管的值 为P1的值除以10取余
( f2 X4 @5 v( A( C2 E        Delayms(6);                        //延时5ms
1 X9 a. \1 o6 X+ u        W1=1;   //第一个数码管灭# U. n3 u6 y2 @& C, I  i2 R! i! ^) ?
1 c+ q3 v* K5 i% ~3 O7 d
        W2=0;
& s# f6 u  C+ ~4 \2 O        P0=DSY_CODE[d%100/10];        //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
" z7 O8 i5 }) K# a4 F5 y        Delayms(6);( A) S8 g1 p% U0 X
        W2=1;
  X3 O6 L& F% B: {0 c% u9 \1 @8 A/ a. Q
        W3=0; 7 h+ ]  O& I( {4 ?* s3 \  m3 C
        P0=DSY_CODE[d/100];           //显示第三个数码管的值 为P1的值除以100取整. D. n0 `+ F0 E7 h# h
        Delayms(6);
: g0 r) g2 j7 `; i        W3=1;
9 {  V) M  Q- r( p6 U% s* M- b            }8 Q$ {' p9 o' y2 m: t6 K/ q
//-------------------------------------------------主程序
7 f. ]. {7 ?! W. }, J" Hvoid main()
& I* e* e3 a: j( t: }{                                                                                 
, ?" X4 B0 D1 ~5 i" s        TMOD=0x02; //16位定时器0工作模式设置为2
6 ]" D" x7 `, j* k( w: h        TH0=0x14;  //设置定时器高8位初值为0x14
! J9 h( _  I- q  I+ c/ w        TL0=0x00;  //设置定时器低8位初值为0x00
# X5 m" [; v% @) c  f7 x1 F8 X        TR0=1;           //开启定时器0开关, m  L% F5 g7 e* d/ ]8 P
        ET0=1;           //开启定时器0中断开关+ O/ G; Z# l$ q3 d
        EA=1;           //开启中断总开关2 d! T/ o2 y/ O5 t
8 J9 E5 F! e: q- k- F. w' P% U/ r/ ]
//---------------启动 A/D 转换
1 U5 Q8 G5 K0 G4 g
; A' O0 z. v# D//---------开始按键-----9 f& g& N  [' D0 Q  S" \, ~+ v: O
A:        while(key==1);     //等待按键按下0 I0 u3 K" e, _7 \# o- D
        Delayms(1);               //延时1ms- w$ J8 C2 @1 n5 l6 \: U
        if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
" Z1 }9 }6 O7 K  `        while(key==0);           //当按键松开时,循环转换和显示3 O9 z" v& e9 C  r, P

2 s  T; W  \+ z3 J8 G' o0 X8 t) o0 B                while(1)
8 L/ J9 k2 }1 g: n                {
+ ]. J# ~! E" X" z/ A7 Y* \5 C                ST=0;
  K8 H: V6 b6 A: T$ ]                ST=1;# v- s; R' z% h; t  v+ a* w
                ST=0;  ( c' L2 t; M4 A2 W7 v! H
/ ?, K- t: @/ b5 {: B
                while(EOC==0);   //等待转换完成
" ~; O( E3 v* ]- G                OE=1;                          //开启输出端8 l2 H$ [5 G, ]0 I' g" @  C

5 t4 C) m& o3 t8 j! b# f" y5 x6 m# z                Display(P1);     //将输出到单片机P1端口上的数字信号在LED显示出来) W6 _; \! f4 U! _7 b
                OE=0;            //关闭输出端: x! B* v2 h' K$ o

3 a9 U" K% G' w1 i! Y6 \( i# A//------停止按键---------
' U2 R* H+ U. {+ J1 X$ Q) m           if(key==0)& e3 z9 r. T) x  l  r! x/ I
                   {
0 d! \' K; r& R& O5 b                        Delayms(1);, k- V" }% N, ]8 |0 g
                    if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
3 H# X  g; I4 J$ p: e* l( ?* r                        while(key==0);           //当按键松开时
. P. q$ _/ K6 Y& |0 E2 {2 q- z$ [) z6 t# V) e
& U5 {5 C4 G( f6 m9 O" h, a. H
…………限于本文篇幅 余下代码请下载附件…………
4 ?4 z" O+ E" z; s* D
6 Q* f( o, w0 A  A9 H: \
7 T  s3 a0 d( G) c全部资料打包下载:+ i, U, d: X: G% E: h
游客,如果您要查看本帖隐藏内容请回复

& S+ r5 b. I5 K3 m$ |3 \
+ B! u8 j" o6 m8 i! ?# y4 W

9 p  x  f6 S; a: n- I$ B

该用户从未签到

推荐
发表于 2019-10-12 21:24 | 只看该作者
多谢分享                    / A% G! c: `3 @2 {

该用户从未签到

推荐
发表于 2020-11-23 16:06 | 只看该作者
1111111111111111111111111
7 E! u5 P: x7 B' R# y, Y

该用户从未签到

推荐
发表于 2021-5-23 14:44 | 只看该作者
学习学习666666666666666

该用户从未签到

5#
发表于 2019-1-10 16:53 | 只看该作者
好东东,谢谢楼主分享

该用户从未签到

11#
发表于 2020-2-13 09:35 | 只看该作者
谢谢分享

“来自电巢APP”

该用户从未签到

12#
发表于 2020-2-13 09:37 | 只看该作者

该用户从未签到

13#
发表于 2020-5-17 21:53 | 只看该作者
这个不错 值得一看

该用户从未签到

14#
发表于 2020-9-10 10:46 | 只看该作者
  • TA的每日心情
    擦汗
    2021-3-3 15:52
  • 签到天数: 78 天

    [LV.6]常住居民II

    15#
    发表于 2021-5-27 11:20 | 只看该作者
    下载下来看一看

    “来自电巢APP”

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-4 01:08 , Processed in 0.125000 second(s), 28 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表