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

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

[复制链接]

该用户从未签到

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

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

该用户从未签到

推荐
发表于 2019-10-12 21:24 | 只看该作者
多谢分享                    % c5 ~5 o% T& w/ o

该用户从未签到

推荐
发表于 2020-11-23 16:06 | 只看该作者
1111111111111111111111111: p) u5 W7 m# h8 F( X8 S* j

该用户从未签到

推荐
发表于 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-6-4 10:50 , Processed in 0.093750 second(s), 29 queries , Gzip On.

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

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

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