找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9034|回复: 3
打印 上一主题 下一主题
收起左侧

单片机+ACS712实现数字电流表的程序+电路图

[复制链接]
跳转到指定楼层
楼主
ACS712直流/交流电流测量传感器具有量程大、简单易用等特点,可用于直流电流和交流电流的测量。ACS712是带 2.1 kVRMS 电压绝缘及低电阻电流导体的全集成、基于霍尔效应的线性电流传感器 IC

Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)


单片机源程序如下:
  1. #include<at89x52.h>
  2. #include<INTRINS.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define ulong unsigned long
  6. #define CLOCK P1_0
  7. #define D_IN  P1_1
  8. #define D_OUT P1_2
  9. #define _CS   P1_3
  10. sbit g1=P2^7;
  11. sbit g2=P2^1;
  12. sbit g3=P2^3;
  13. sbit g4=P2^5;
  14. ulong AD_ad1,AD_ad2;
  15. float JiZhun_AD=2.5;
  16. float AD_Data=0.0;
  17. ulong AD_ad=0;
  18. char chi;
  19. unsigned char code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};        
  20.         void delay02s(void)
  21.         {  
  22.         unsigned char i,j,k;
  23.         for(i=1;i>0;i--)
  24.         for(j=10;j>0;j--)
  25.         for(k=200;k>0;k--);
  26.         }
  27. uint read1543(uchar port)
  28.         {        
  29.         uint ad;
  30.         uint i;
  31.         uchar al=0,ah=0;
  32.         CLOCK=0;
  33.         _CS=0;
  34.         port<<=4;
  35.         for (i=0;i<4;i++) //将四位通道地址送1543
  36.                 {
  37.                 D_IN=(bit)(port&0x80);CLOCK=1;CLOCK=0;
  38.                 port<<=1;
  39.                 }
  40.         for (i=0;i<6;i++) //填6个CLOCK信号
  41.                 {
  42.                 CLOCK=1;CLOCK=0;
  43.                 }
  44.         _CS=1;
  45.         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  46.         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  47.         _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
  48.         _nop_();_nop_();_nop_();
  49.         _CS=0; //等待AD转换结束
  50.         _nop_();_nop_();_nop_();
  51. for (i=0;i<2;i++) //D9,D8
  52.                 {        
  53.                 D_OUT=1;CLOCK=1;ah<<=1;               
  54.                 if (D_OUT) ah +=0x01;
  55.                 CLOCK=0;
  56.                 }
  57.         for (i=0;i<8;i++) //取出D7--D0
  58.                 {        
  59.                 D_OUT=1;CLOCK=1;al <<= 1;               
  60.                 if (D_OUT)
  61.                 al +=0x01;
  62.                 CLOCK=0;
  63.                 }
  64. _CS=1;        
  65. ad = (uint)ah;
  66. ad <<= 8;
  67. ad +=(uint)al; //
  68. return(ad);
  69. }
  70. void main()
  71. {
  72. TMOD=0x01;
  73. TH0=(65535-20000)/255;
  74. TL0=(65535-20000)%255;
  75. EA=1;ET0=1;TR0=1;
  76. while(1)
  77.         {
  78.         P0=table[(AD_ad%10)];
  79.         g1=1;
  80.     delay02s();
  81.     g1=0;              
  82.         P0=table[(AD_ad/10)%10];
  83.         g2=1;
  84.     delay02s();
  85.     g2=0;            
  86.     P0=table[(AD_ad/100)%10];
  87.         g3=1;
  88.     delay02s();
  89.     g3=0;
  90.         P0=table[(AD_ad/1000)]|0X80;
  91.         g4=1;
  92.     delay02s();
  93.         g4=0;
  94.         }
  95. }
  96. zhongduan()interrupt 1
  97. {
  98.         TH0=(65535-20000)/255;
  99.         TL0=(65535-20000)%255;
  100.         chi++;
  101.         if(chi==50)
  102.         {
  103.         chi=0;
  104.         AD_ad1 = read1543(0);   //          (通道0电压正端)
  105.         AD_Data = ((float)AD_ad1)*JiZhun_AD*2/1024+0.15005;//0.15经过实测需要加0.15减少误差        
  106.         AD_ad =((AD_Data-2.68)/0.185)*1000;         
  107.         }
  108.         
  109. }
复制代码

所有资料51hei提供下载:
ACS712数字电流表.rar (2.86 MB, 下载次数: 174)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:272529 发表于 2021-3-10 08:34 | 只看该作者
多大量程
回复

使用道具 举报

板凳
ID:396513 发表于 2021-10-19 21:41 | 只看该作者
大家别参考  这图引脚号都标错了  
回复

使用道具 举报

地板
ID:703081 发表于 2021-12-25 12:55 | 只看该作者
可以用6902代替
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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