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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
单片机20~200A大电流检测电路设计 用AD实现 带原理图,源代码! w& z% _8 U7 [7 D7 p) S" B* g
) g/ C; Q: Q0 z  l( X* t
* D7 C3 D3 L* G  z* r! o. l0 @4 z
这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。
' \& b# f) r' W  n, j将R1的电压采样到ADC0809,转换为数字信号,输入单片机9 O" R  D  t# e) n( M/ @; T0 }
7 W2 O6 k/ ], `0 d; i& n, ]
AD画的原理图(附件中可以可以下载):8 f( t& B9 f8 x0 W
$ Y% w0 e2 a8 _/ m+ r" Y
' |, g$ c' l$ m4 Y
# J9 o- F% F  o! N, `
' o3 r% V3 m! b4 ^7 ~
单片机源程序:
8 V+ E  P6 L* _! k" b
//------------------------------51单片机头文件
, y& U- l) s9 u$ _; K$ h! l* t# {9 K#include<reg51.h>
7 s  r# V1 F/ p0 |9 d2 k! Y& z& w8 }/ Y9 L+ J  a
//各数字的数码管段码(共阴)
9 _! e% J6 t# ?5 n/ cunsigned char code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示数组{0,1,2,3,4,5,6,7,8,9}
$ M; |6 L5 }  s$ y" ~: `8 @0 A2 t2 m- \6 c& j
sbit CLK=P3^3;    //时钟信号+ b% v' l, u- z
sbit ST=P3^6;     //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换
- O5 B9 G: G# h, G$ gsbit EOC=P3^5;    //转换结束信号,当转换结束时会自动变成高电平8 V& O, ^0 B! F2 {/ v, m# R
sbit OE=P3^4;     //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
2 j5 b. j4 u3 c! F* o" dsbit W1=P2^4;     //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
# {3 ?  ^6 b+ ^1 g+ `sbit W2=P2^3;          //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭" s+ t. K  ^% z# n9 E' [% H  M) K
sbit W3=P2^2;          //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭
8 J# i3 q! l! N0 p" ysbit key=P3^7;          //定义按键控制key为P3.7
! d; @# Y: n. ]0 s3 @//----------------------------1ms延时函数$ X2 r( J& r( A) i
void Delayms(unsigned char ms): ^$ P' i0 n- B
{
: T/ b4 T8 M( B2 j% Ounsigned char i;* t0 i' Z  H7 \  Y
while(ms--)! v" O) H! |, R9 Q3 V
for(i=0;i<120;i++);
0 N6 k! f+ a* K/ @}
( v# L* m' X0 Z* I7 ?2 R! h//---------------------------显示转换结果(动态扫描模式); S* y& O6 P, S8 i, B0 Z
void Display(unsigned int d)2 E) P0 M: u5 k+ M* Y: f' L
{
& J" a  r* L" F+ d& G$ v        d=d*1.0/256*5*40;  //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)
( K$ [9 U  T: x( `; N1 B) x1 U% z6 }3 W7 m- w. H* e
        W1=0;   //第一个数码管亮
8 k2 D6 \. n0 P6 w% q8 ~; b        P0=DSY_CODE[d%10];  //显示第一个数码管的值 为P1的值除以10取余/ r6 I5 n, D' `) o) @5 a3 e
        Delayms(6);                        //延时5ms
+ }' ?4 r0 U; P5 B0 g4 C% e        W1=1;   //第一个数码管灭
6 F; i$ b( k* {* K6 E3 I! }- e! `1 ?2 t! Y
        W2=0;
/ P4 k% Z3 O8 Q        P0=DSY_CODE[d%100/10];        //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
  d1 n$ N+ @- U6 r        Delayms(6);& w9 V5 X2 k7 a! F+ B( q
        W2=1;
. m+ L1 m( Y' E, B3 L! |9 `% R  r$ a. J+ _0 J8 G
        W3=0;
6 Y* H( }, g9 W  g        P0=DSY_CODE[d/100];           //显示第三个数码管的值 为P1的值除以100取整6 s8 g  Q' k9 k0 X0 U
        Delayms(6);; ~+ y1 B7 H+ x$ M
        W3=1;
' {0 c/ a5 R* K( V. E            }, H  V% t  I) R' B
//-------------------------------------------------主程序! r: \$ [. Y; R  u
void main()4 t* X) @+ ~4 \. d+ y
{                                                                                  ( y3 h( m: d" ?/ g! t* e
        TMOD=0x02; //16位定时器0工作模式设置为2  [) Y5 \$ C3 X5 }
        TH0=0x14;  //设置定时器高8位初值为0x149 l3 F7 k. U, Q6 A
        TL0=0x00;  //设置定时器低8位初值为0x00
# n! n5 d$ h- U& N+ C9 Z# G        TR0=1;           //开启定时器0开关  |* ?, a% w2 o- e% b8 @
        ET0=1;           //开启定时器0中断开关
1 M! o. a! C' N# l        EA=1;           //开启中断总开关
2 m/ [; _" P7 \( X2 ^& A: r* A+ w/ e4 D- L* z5 g  [
//---------------启动 A/D 转换
' i+ @  s% ^7 Z- I
5 E# V* h* ?% [% \: f! C8 J( h" V//---------开始按键-----
& x" y! n8 Y/ q0 WA:        while(key==1);     //等待按键按下
: q8 G+ C5 e3 s" C7 t0 ~/ @8 K5 e        Delayms(1);               //延时1ms% ^% O7 X$ s+ _2 |+ \
        if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能) 3 X6 W' I; {& n, l
        while(key==0);           //当按键松开时,循环转换和显示. r1 O- p1 [+ b; l9 p
  A5 e! z( ?& A% `& d! v5 x
                while(1)
/ `+ G" Z( i0 W0 P# A: H% _% J                {
! x+ N2 o9 }; C% r+ `- o                ST=0;
* q0 L: Z) r" h8 D+ P                ST=1;' Z2 M: f+ Q6 Q) |8 }
                ST=0;  ! P0 G+ U) s5 C

2 t8 y# D# h* d* y$ [                while(EOC==0);   //等待转换完成7 _" z0 r3 M; Q8 Y2 {
                OE=1;                          //开启输出端
& t0 Y6 i5 j* l; s/ H+ q/ T3 @( F7 z# L. [& _3 J7 p% q
                Display(P1);     //将输出到单片机P1端口上的数字信号在LED显示出来
" @  |8 P+ B+ h                OE=0;            //关闭输出端
& p' }% @8 z$ D* J% U1 e/ a
, h( `# q, i+ k+ D+ C6 g, y//------停止按键---------( Y" }4 H8 H, A, T6 ?1 a
           if(key==0)
5 L# t: m. O8 B                   {: K, s- e/ H- z8 U
                        Delayms(1);. ~' o5 m, r4 P1 m9 o5 u" h9 T
                    if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能) 3 U. d( |) c1 z3 v: p
                        while(key==0);           //当按键松开时/ V! G: b! m- {6 P% E+ M

8 X0 v: a( T% C  c$ N7 I; w% z4 g4 N. R
…………限于本文篇幅 余下代码请下载附件…………
) r( l8 S# |6 ^( a- T* y& A3 K0 Q5 a0 f9 X
3 C6 x( L+ Y" S9 v& ?/ o0 L
全部资料打包下载:2 B$ c. ^' ]$ z/ `( {$ s* C
游客,如果您要查看本帖隐藏内容请回复

. T  B- p1 E% O. Y/ Y% O; v& k% M0 u$ q! j# j* ~" k

1 h& |6 T/ l: P; ^& Q

该用户从未签到

推荐
发表于 2019-10-12 21:24 | 只看该作者
多谢分享                    0 R, q+ a( M1 F$ C; `! @

该用户从未签到

推荐
发表于 2020-11-23 16:06 | 只看该作者
1111111111111111111111111
+ B# v' I; K6 n( n* E2 ~" \

该用户从未签到

推荐
发表于 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-19 15:35 , Processed in 0.140625 second(s), 28 queries , Gzip On.

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

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

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