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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码
" o% f2 E. X8 M$ `$ t+ ]$ O5 s3 x, a- v
3 N7 f/ V" S5 k" ^( Q# k$ @7 J) C
这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。
7 o7 v$ q8 I6 n将R1的电压采样到ADC0809,转换为数字信号,输入单片机6 V' Q2 y% Y" E
+ h7 s7 y' Q* q8 ?4 B: y
AD画的原理图(附件中可以可以下载):
0 A, \2 P+ c. Z$ D
! X" B- c( V3 L$ G$ K4 z9 U1 t  h8 W
. M  z# l8 G  o4 X) m4 m2 O* O! E3 t8 l& Y8 D' c. E; {

2 J# ^: ?% g, G9 i- {) C7 Y单片机源程序:
- o- H: {8 ~) ?. i1 Y" O
//------------------------------51单片机头文件! ]& R! V0 C6 x2 D) ~+ ]
#include<reg51.h>2 U, W4 t9 k4 q1 D8 c

5 F1 J4 k) O1 X$ E8 I% l3 C//各数字的数码管段码(共阴)
: t" r# M5 q/ O2 Funsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}
+ u7 l7 c2 A# g; K5 m2 h# V% ]- G
7 g! Q2 Y1 B* T, }: z/ e+ f: Ysbit CLK=P3^3;    //时钟信号% \! B3 `( w6 x5 t  I: W
sbit ST=P3^6;     //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换. ?# H" f$ G8 K
sbit EOC=P3^5;    //转换结束信号,当转换结束时会自动变成高电平
7 z7 q$ h, o9 ?sbit OE=P3^4;     //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出/ q& H. c' p+ J* p' q
sbit W1=P2^4;     //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭* d# {& o; O& ]
sbit W2=P2^3;          //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭* a; q4 F2 F4 b% b/ Z% }
sbit W3=P2^2;          //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭6 q* B( h/ [% A& C$ s$ k* U4 d
sbit key=P3^7;          //定义按键控制key为P3.7. T7 S; n5 x$ t! y' H. x7 }1 m
//----------------------------1ms延时函数9 y; d/ B# Z' i9 A& J0 n! k! o
void Delayms(unsigned char ms)
3 X0 J) h- h, [) D( ]7 {7 a{
3 Y2 N' g4 B- W- ~unsigned char i;
) C7 H$ \4 X1 a. i6 ~0 vwhile(ms--)
$ K+ i$ J) {/ ~# D6 p$ |for(i=0;i<120;i++);
. j  @# P% ^- Y  y}
0 Z9 i( r; U. B, v5 D//---------------------------显示转换结果(动态扫描模式)
% |+ M& O5 T: W8 [9 _, K0 Jvoid Display(unsigned int d)
) L, c+ ?4 v. C# S5 E& N{& \, C* A' _- ]/ f
        d=d*1.0/256*5*40;  //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1), h; ~. o7 S1 ?2 P. J0 E

1 U/ i/ ?4 D! ?7 k$ e( N; N        W1=0;   //第一个数码管亮
+ b: m( a" }4 R7 ~# z5 t' k! C9 [) u        P0=DSY_CODE[d%10];  //显示第一个数码管的值 为P1的值除以10取余( G1 {$ p" c' B: ?; v/ l
        Delayms(6);                        //延时5ms; }& ~" T1 Z% O8 U% v1 j2 v. d
        W1=1;   //第一个数码管灭7 F$ ~7 M' @( O! |& r

: i# R: a; t, m& b! o0 X: J* G7 O        W2=0;' _: C5 @" \7 \; Y$ V
        P0=DSY_CODE[d%100/10];        //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
2 w- v- X4 H! V( ^2 k: ?# ?; ?        Delayms(6);$ C' H8 ]: {9 C' i( n! A
        W2=1;
' I; R) e! M& Z2 P, X$ J
# ?% U- b' I4 l- Q$ R" {        W3=0;
0 D9 z1 z" g+ G* r9 t* e# M$ d! u        P0=DSY_CODE[d/100];           //显示第三个数码管的值 为P1的值除以100取整1 Q8 O- Y$ j$ X9 G5 O& @
        Delayms(6);) y! V5 J5 M, {* f+ f  Y
        W3=1;) x$ y1 y) S5 F# O: G8 L% [
            }8 f2 u% T' _1 ?' h% g
//-------------------------------------------------主程序& h! y9 o' g' t& r
void main()
3 ?# M! M2 ?& L8 N{                                                                                  ' r* ]. u9 B9 R& K4 }( h% m! N% d) H
        TMOD=0x02; //16位定时器0工作模式设置为2( ?+ Q4 t. u! ~, G) Q# D2 ]" L
        TH0=0x14;  //设置定时器高8位初值为0x147 r; T4 F% t" O7 h
        TL0=0x00;  //设置定时器低8位初值为0x00
- @- e1 w; S* Y$ y2 h( j3 F        TR0=1;           //开启定时器0开关/ Y: o8 h6 ?2 P  _" b, x- p
        ET0=1;           //开启定时器0中断开关
( d, O$ S  s: C7 h0 m$ b1 y8 b        EA=1;           //开启中断总开关8 E9 f/ K' }* L  I2 I1 Y% R' C+ l
: g, Y8 c0 u3 p2 `; C
//---------------启动 A/D 转换1 E  a. f% a) }
! h: M8 F5 l* i9 {2 g+ {5 f) w6 r
//---------开始按键-----
* `( @+ `+ A' u/ c& g8 MA:        while(key==1);     //等待按键按下
+ [( U  z6 E8 F3 N9 ^        Delayms(1);               //延时1ms& H, u. c7 D% Y
        if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
  F" ~: F6 {. N/ {        while(key==0);           //当按键松开时,循环转换和显示
: k* B* h  D0 A7 y) K( L8 G& a
! z* x3 ~# q$ n$ Q                while(1)
; P- r6 t2 `: F                {
  W% R0 E9 @" r                ST=0;& N$ i+ Z* R. q" C: G3 _" o! t
                ST=1;
0 n- P$ ~& E7 _) \                ST=0;  2 V, b) U9 r* ^; y3 z  O

5 r& W: T, E& w, A4 [) N" H4 O                while(EOC==0);   //等待转换完成
7 p# V/ d6 u+ b2 A2 X                OE=1;                          //开启输出端/ n1 H/ ~2 z2 C" D* n
7 b3 L3 r, {3 Q2 K' a
                Display(P1);     //将输出到单片机P1端口上的数字信号在LED显示出来
& ~! Z) z" }( b) ^8 {2 x                OE=0;            //关闭输出端
# H  h( c* u9 D6 U# n/ q! a% p! `! P" T0 I/ H
//------停止按键---------
" Y4 T% ?+ P  |           if(key==0)) i/ d, j/ ?- y  @
                   {
" i) Z- F+ V! l1 A                        Delayms(1);5 {, D) s5 g& j3 q
                    if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
, e# i. A) s+ o4 Z3 O' s. }4 ^                        while(key==0);           //当按键松开时
2 |4 }9 @& T  ^) `- |$ }. S' U3 B9 ?; j* t/ j) ~! X
- v7 {9 h; U, U+ s
…………限于本文篇幅 余下代码请下载附件…………6 ?  l! N  U* O" g4 X
+ X  Q* C8 K5 [% b; z5 _

9 Y' f: I& D9 `  K4 G, ?4 C8 B全部资料打包下载:
; S3 c: t# |! m+ G0 w. g
游客,如果您要查看本帖隐藏内容请回复

& J1 n* Z5 q: _! Q; }
. w' U7 n4 U6 g* \1 Q
4 |$ ~- x9 Q* ~- f" ~; J

该用户从未签到

推荐
发表于 2019-10-12 21:24 | 只看该作者
多谢分享                    : g8 x* n# p+ ~

该用户从未签到

推荐
发表于 2020-11-23 16:06 | 只看该作者
11111111111111111111111113 ]3 w0 z" D5 ~

该用户从未签到

推荐
发表于 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-11-29 17:33 , Processed in 0.203125 second(s), 28 queries , Gzip On.

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

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

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