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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
0 Y  @  S% ^* {, r* S, N( N4 G4 s$ a" C5 p  p, W+ S" y+ @; ^4 n

, r3 i# n' ^) o% _这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。
) D: r' ~' C. z7 l6 q将R1的电压采样到ADC0809,转换为数字信号,输入单片机
' ]5 X2 `. }7 ~
; v% T+ E  l: O" gAD画的原理图(附件中可以可以下载):. r9 b5 T+ S) c

5 {8 b& h2 o( d4 z9 C8 F  C  G) p7 Q. s* D
3 A' S* O$ I6 s! |) V# ]& H9 Q
3 J- g" H3 J# G1 {0 ~6 W3 u
单片机源程序:
( v3 Y. D' O7 E  h) p1 F
//------------------------------51单片机头文件
7 A2 Z! W" y) T0 w( U9 c, I$ F& J; u3 b#include<reg51.h>5 o# U& \5 q. V

: `( B: @5 ?3 k# t& O9 c$ ^//各数字的数码管段码(共阴)
' j: e4 l* o  A) ]& }% ounsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}( V& E& v3 q" J7 {4 j

, N  ^5 S7 h  o- gsbit CLK=P3^3;    //时钟信号
8 L, r9 l8 b7 O% C2 Csbit ST=P3^6;     //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换0 V1 f, _; ?4 Z0 u
sbit EOC=P3^5;    //转换结束信号,当转换结束时会自动变成高电平* h0 T" |* d0 |: Z$ P
sbit OE=P3^4;     //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
- b' g+ y; \$ r" C8 ~2 P# dsbit W1=P2^4;     //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭$ w* j+ P: i# U, b) {
sbit W2=P2^3;          //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭
2 p% T, Q$ C4 j+ x+ s& _: O6 g9 \sbit W3=P2^2;          //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭
: r8 @  J# W9 Q6 ysbit key=P3^7;          //定义按键控制key为P3.7
3 j, e- l' e: ]0 _//----------------------------1ms延时函数
, R1 J% a" `" _, r  gvoid Delayms(unsigned char ms): x' u8 i# D# P" k' O
{
- y8 E0 J4 x/ a  L4 Runsigned char i;
/ ]$ d4 ^* f* B6 M) Q3 d: m2 rwhile(ms--)# h$ K# T8 e6 X$ C/ X8 |# @: M# G
for(i=0;i<120;i++);
6 P3 c( X% I/ R) [9 q+ n% h( J}
; P: T. x+ W, K( }* W//---------------------------显示转换结果(动态扫描模式)4 d" k# U" z5 C- I8 V# L, D& d
void Display(unsigned int d): l/ ?. w7 F7 c
{' C! ?6 b: B+ j1 A* @5 Y
        d=d*1.0/256*5*40;  //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)/ Z4 B2 _3 ]  t3 z$ |  F. X6 _; T
  o! F0 t$ c5 ~
        W1=0;   //第一个数码管亮
$ z% ?- a$ J8 F; P# Z  @# n        P0=DSY_CODE[d%10];  //显示第一个数码管的值 为P1的值除以10取余! f+ W7 ]! Z, S" o6 D" ~
        Delayms(6);                        //延时5ms
# _, f# v  w; l- `) b        W1=1;   //第一个数码管灭
- Q$ g: }6 |! J7 v( e2 e' D( P8 V: f$ J; j& d; Y+ T0 S6 u6 z
        W2=0;, Z1 d. x! k$ I
        P0=DSY_CODE[d%100/10];        //显示第二个数码管的值 为P1的值除以100取余 再除以10取整5 b$ _3 C0 e* `& Q( W& d" V3 v" E
        Delayms(6);
" t8 W: F; q0 r: Y4 U- D2 L; {' }        W2=1;
/ w% }' K+ Y1 L6 X, b  C7 E/ l. f! v. L- j  j9 @
        W3=0;
7 `* ?; q! K: V- A/ \& E7 C7 a0 F        P0=DSY_CODE[d/100];           //显示第三个数码管的值 为P1的值除以100取整4 U( k* h# g8 D4 Z! \: C4 ^: h
        Delayms(6);
* `8 x; R# Y. N5 V1 \3 o7 R        W3=1;
# E; E8 G" ?2 D) P            }
5 f9 Z$ i# R) S( f: h# |! H//-------------------------------------------------主程序3 z& `1 o  |# X, a8 x: w) J
void main()
% |1 Y; k" r& p' j0 d6 Z{                                                                                  6 c7 B' ~0 q" e/ z) k2 Z( L
        TMOD=0x02; //16位定时器0工作模式设置为29 K7 O% K2 v! _3 L* J+ n/ ^- G  C  Q
        TH0=0x14;  //设置定时器高8位初值为0x14% Q7 r" [  K4 t) p4 [6 l
        TL0=0x00;  //设置定时器低8位初值为0x009 d0 c0 J% z2 w, A# C
        TR0=1;           //开启定时器0开关' ]0 `% P* |1 N, D
        ET0=1;           //开启定时器0中断开关6 K7 c  u4 G( y/ I) j
        EA=1;           //开启中断总开关& F0 ~7 q/ y1 x7 Q' z# M2 \

( b! `8 O! L9 G$ e2 i//---------------启动 A/D 转换
6 m& Q( V$ R7 {5 w  j$ c$ p: }: _, o2 r6 Y
//---------开始按键-----$ ]8 \# V4 _5 x- K$ X  a
A:        while(key==1);     //等待按键按下, b8 y% l# Y5 s8 L
        Delayms(1);               //延时1ms+ f7 U& }3 R( x- Z; B
        if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
) x0 a! a! i: |$ P/ C+ H4 Q        while(key==0);           //当按键松开时,循环转换和显示
9 d2 F% i; Z% i7 h( T0 E* n" c! c; Z. e- _
                while(1)
) p  D- r) w" p3 y1 E9 a$ s                {
5 l- h4 R+ J, g6 d, @5 N  t                ST=0;$ i3 s1 n/ x* t9 R; g6 h" |/ r: k  j
                ST=1;- B! L7 W7 y6 u! U9 U$ F& p& m
                ST=0;  
0 P3 X" z2 |$ m' [
/ ~  b$ ~; T. ?! E6 Y+ O4 M                while(EOC==0);   //等待转换完成- ~( a8 E) ~5 g2 j) |8 C4 j# j, I
                OE=1;                          //开启输出端
% x" b) _% w& D' F. n  J
. g8 b. X" A( T& W& H9 x1 H                Display(P1);     //将输出到单片机P1端口上的数字信号在LED显示出来, A$ p$ M1 r" \. _
                OE=0;            //关闭输出端
* X. `( E1 q: t: Q2 F  C" f! ?* ~8 N
//------停止按键---------" q# C: O. m1 \7 {
           if(key==0)4 }! X$ v8 Y& D6 ^+ {# Q+ B4 [1 \% L
                   {
2 J; c0 O* y: g                        Delayms(1);" n# C4 T  w( m( l+ m8 R
                    if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能) , W. G1 \9 A( R; ?9 [
                        while(key==0);           //当按键松开时" z6 p# w0 s/ ^  A  S, {: G4 p

# G- v( I5 I% |2 [; T9 y
, E  [! Y7 t9 ]' B…………限于本文篇幅 余下代码请下载附件…………" O: T( G1 V* h
* P) d' [5 T$ @+ H. K

  f6 p" Y: H" q9 Z" z全部资料打包下载:2 H+ [6 U4 x$ r' X
游客,如果您要查看本帖隐藏内容请回复
9 S7 W2 }1 r( c+ d4 q' ~/ a

; }$ b4 `7 m$ ]1 h8 q1 H
3 J# v3 ~3 ~  i# L8 q

该用户从未签到

推荐
发表于 2019-10-12 21:24 | 只看该作者
多谢分享                    # y0 i6 h5 t* v9 ^( d

该用户从未签到

推荐
发表于 2020-11-23 16:06 | 只看该作者
1111111111111111111111111
: [" Q. b7 U5 d( b5 |

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

“来自电巢APP”

该用户从未签到

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

该用户从未签到

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

该用户从未签到

12#
发表于 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-10-7 07:40 , Processed in 0.171875 second(s), 28 queries , Gzip On.

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

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

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