找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10452|回复: 7
收起左侧

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

  [复制链接]
ID:165769 发表于 2017-4-11 14:17 | 显示全部楼层 |阅读模式
这是我刚做的一个20~200A大电流检测电路,通过ADC0809转换成数字信号,通过LED显示结果,包括原理图,仿真文件,源代码。
将R1的电压采样到ADC0809,转换为数字信号,输入单片机

AD画的原理图(附件中可以可以下载):
0.png 0.png

51单片机P0口和其他口内部结构不同
使用单片机P0端口时必须把P0的8个口都接上拉电阻,
使用单要不然P0口只能输出低电平,不能输出高电平

proteus仿真原理图:
0.png

单片机源程序:
  1. //------------------------------51单片机头文件
  2. #include<reg51.h>

  3. //各数字的数码管段码(共阴)
  4. 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}

  5. sbit CLK=P3^3;    //时钟信号
  6. sbit ST=P3^6;     //启动信号,由低电平到高电平时间段复位 ,高电平到低电平时间段开始转换
  7. sbit EOC=P3^5;    //转换结束信号,当转换结束时会自动变成高电平
  8. sbit OE=P3^4;     //输出使能 ,当OE为高电平时开启输出端,OE为低电平时禁止输出
  9. sbit W1=P2^4;     //定义W1表示P2.4位,第一位数码管控制端, 为0时亮,为1时灭
  10. sbit W2=P2^3;          //定义W2表示P2.3位,第二位数码管控制端, 为0时亮,为1时灭
  11. sbit W3=P2^2;          //定义W3表示P2.2位,第三位数码管控制端, 为0时亮,为1时灭
  12. sbit key=P3^7;          //定义按键控制key为P3.7
  13. //----------------------------1ms延时函数
  14. void Delayms(unsigned char ms)
  15. {
  16. unsigned char i;
  17. while(ms--)
  18. for(i=0;i<120;i++);
  19. }
  20. //---------------------------显示转换结果(动态扫描模式)
  21. void Display(unsigned int d)
  22. {
  23.         d=d*1.0/256*5*40;  //将数字量转换成模拟量的公式为5V*(d/256),采样电压值为电流值*100欧姆,所以要获得实际电流值,即为采样电压值*40倍 (n1:n2=4000:1)

  24.         W1=0;   //第一个数码管亮
  25.         P0=DSY_CODE[d%10];  //显示第一个数码管的值 为P1的值除以10取余
  26.         Delayms(6);                        //延时5ms
  27.         W1=1;   //第一个数码管灭

  28.         W2=0;
  29.         P0=DSY_CODE[d%100/10];        //显示第二个数码管的值 为P1的值除以100取余 再除以10取整
  30.         Delayms(6);
  31.         W2=1;
  32.        
  33.         W3=0;
  34.         P0=DSY_CODE[d/100];           //显示第三个数码管的值 为P1的值除以100取整
  35.         Delayms(6);
  36.         W3=1;
  37.             }
  38. //-------------------------------------------------主程序
  39. void main()
  40. {                                                                                  
  41.         TMOD=0x02; //16位定时器0工作模式设置为2
  42.         TH0=0x14;  //设置定时器高8位初值为0x14
  43.         TL0=0x00;  //设置定时器低8位初值为0x00
  44.         TR0=1;           //开启定时器0开关
  45.         ET0=1;           //开启定时器0中断开关
  46.         EA=1;           //开启中断总开关

  47. //---------------启动 A/D 转换

  48. //---------开始按键-----
  49. A:        while(key==1);     //等待按键按下
  50.         Delayms(1);               //延时1ms
  51.         if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
  52.         while(key==0);           //当按键松开时,循环转换和显示

  53.                 while(1)
  54.                 {
  55.                 ST=0;
  56.                 ST=1;
  57.                 ST=0;  
  58.                   
  59.                 while(EOC==0);   //等待转换完成
  60.                 OE=1;                          //开启输出端
  61.        
  62.                 Display(P1);     //将输出到单片机P1端口上的数字信号在LED显示出来
  63.                 OE=0;            //关闭输出端
  64.        
  65. //------停止按键---------
  66.            if(key==0)
  67.                    {
  68.                         Delayms(1);
  69.                     if(key==0)         //延时1ms后按键还是按下了,说明按键确实按下了(按键消抖功能)
  70.                         while(key==0);           //当按键松开时
  71.                          

  72. …………限于本文篇幅 余下代码请从51黑下载附件…………
  73.                                   
复制代码

0.png

全部资料打包下载:
大电流检测.zip (210.71 KB, 下载次数: 253)
回复

使用道具 举报

ID:147492 发表于 2018-12-25 10:54 | 显示全部楼层
感谢
回复

使用道具 举报

ID:251061 发表于 2018-12-25 20:09 | 显示全部楼层
好东西。感谢分享
回复

使用道具 举报

ID:275111 发表于 2019-1-15 15:36 | 显示全部楼层
做到这一部分了。支持楼主。
回复

使用道具 举报

ID:893112 发表于 2021-3-17 16:32 | 显示全部楼层
好帖,感谢
回复

使用道具 举报

ID:928738 发表于 2021-12-17 21:48 | 显示全部楼层
只是adc采集,直流检测,太简单了
回复

使用道具 举报

ID:1025433 发表于 2022-5-10 17:29 来自手机 | 显示全部楼层
yayayunyun 发表于 2021-12-17 21:48
只是adc采集,直流检测,太简单了

也是 。不过已经不错了
回复

使用道具 举报

ID:202023 发表于 2022-5-12 08:35 | 显示全部楼层
谢谢分享,正想了解了解啥是Adc
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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