ACS712+单片机实现电流检测与报警的电路原理图与源码

2019-12-02来源: 51hei关键字:ACS712  单片机  电流检测  报警

ACS712电流检测与报警模块系统的外观:
0.jpg 

ACS712电路原理图:
0.jpg


ACS712单片机源程序如下:

实现功能:检测电流,数码管显示电流值

使用芯片:STC12C2054AD  

产品模块编号:kzs1211-75150k (双路输入,继电器单路输出,三个按键,四位数码管模块)

晶振:片内晶振


#include                 //库文件

#include

#define uchar unsigned char//宏定义无符号字符型

#define uint unsigned int  //宏定义无符号整型

#define FOSC 11059200L

#define BAUD  9600


#define ADC_POWER   0x80            //ADC 电源控制位

#define ADC_FLAG    0x10            //ADC 转换结束标志位

#define ADC_START   0x08            //ADC 开始转换控制位

#define ADC_SPEEDLL 0x00            //1080个时钟周期转换一次

#define ADC_SPEEDL  0x20            //810 个时钟周期转换一次

#define ADC_SPEEDH  0x40            //540个时钟周期转换一次

#define ADC_SPEEDHH 0x60            //270个时钟周期转换一次


sfr ADC_DATA=0xc6;           //70个时钟周期转换一次

void display(void);                  //显示函数

void t_to_dis(uint num);


#define DUAN P2                   //P0口控制段

#define WEI  P1                   //P2口控制位

/********************************************************************

                            初始定义

*********************************************************************/

//数码管显示段码 

code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};

//数码管位控制端

sbit wei1=P1^0;

sbit wei2=P1^1;

sbit wei3=P1^2;

sbit wei4=P1^3;  

//继电器输出控制端                            

sbit OUT=P3^7;

//按键输入控制端

sbit key1=P3^2;

sbit key2=P3^3;

sbit key3=P3^4;

//两路输入控制端可做ad采样

sbit IN1=P1^6;

sbit IN2=P1^5;

sbit IC=P1^7;

uchar numb[4];              //定义字符串用于数值转换

uint tcnt;

uchar cnt,times,date;

uint ad,ad2;

float ad1;

/********************************************************************

                            命令定义

*********************************************************************/

#define CMD_IDLE     0         //EEPROM无操作

#define CMD_READ     1         //读取字节

#define CMD_PROGRAM  2         //写入字节

#define CMD_ERASE    3         //擦除字节

/********************************************************************

                       编程周期由晶振决定

*********************************************************************/

#define ENABLE_IAP 0X83         //编程周期由晶振决定(如果<12MHZ选用此项)

#define IAP_ADDRESS 0X0000                      //内部EEPROM地址


/********************************************************************

                            操作函数

*********************************************************************/

void IapIdle()

{

        IAP_CONTR=0;

        IAP_CMD=0;

        IAP_TRIG=0;

        IAP_ADDRH=0X80;

        IAP_ADDRL=0;

}

/********************************************************************

                            读取一个字节函数

*********************************************************************/

uchar IapReadByte(uint addr)

{

        uchar dat;  

        IAP_CONTR=ENABLE_IAP;

        IAP_CMD=CMD_READ;

        IAP_ADDRL=addr;

        IAP_ADDRH=addr>>8;

        IAP_TRIG=0X46;

        IAP_TRIG=0XB9;

        _nop_();

        _nop_();

        _nop_();

        dat=IAP_DATA;

        IapIdle();

        return dat;

}

/********************************************************************

                            写入一个字节函数

*********************************************************************/

void IapProgramByte(uint addr,uchar dat)

{

        IAP_CONTR=ENABLE_IAP;

        IAP_CMD=CMD_PROGRAM;

        IAP_ADDRL=addr;

        IAP_ADDRH=addr>>8;

        IAP_DATA=dat;

        IAP_TRIG=0X46;

        IAP_TRIG=0XB9;

        _nop_();

        _nop_();

        _nop_();

        IapIdle();

}

/********************************************************************

                            擦除一个字节函数

*********************************************************************/

void IapEraseSector(uint addr)

{

        IAP_CONTR=ENABLE_IAP;

        IAP_CMD=CMD_ERASE;

        IAP_ADDRL=addr;

        IAP_ADDRH=addr>>8;

        IAP_TRIG=0X46;

        IAP_TRIG=0XB9;

        _nop_();

        _nop_();

        _nop_();

        IapIdle();

}

/********************************************************************

                            延时函数

*********************************************************************/

void delay(uint x)//延时程序 0.1秒

{

        uint m,n,s;

        for(m=x;m>0;m--)

        for(n=20;n>0;n--)

        for(s=248;s>0;s--);

}

/********************************************************************

                         AD转换初始化程序

*********************************************************************/

void InitADC()

{

    P1=P1M0|=0xf0;

        P1M1=0x00;

        ADC_DATA=0;        //AD数据寄存器清空

    ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START;//打开AD电源,转换周期XX

    delay(10);                //延时

}

/********************************************************************

                         AD转换控制程序

*********************************************************************/

uint GetADCResult(uchar px)          //转换输出的数据 (PX为通道口)

{

    uint t;

        ADC_CONTR=ADC_POWER | ADC_SPEEDHH | px | ADC_START;//开始转换

    _nop_();                        //延时一个机器周期

    _nop_();                                                //延时一个机器周期

    _nop_();                                                //延时一个机器周期

    _nop_();                                                //延时一个机器周期

        while (!(ADC_CONTR & ADC_FLAG));//等待转换结束

        ADC_CONTR &= ~ADC_FLAG;       //关闭AD转换

        t=(ADC_DATA<<2)|ADC_LOW2;

        return t;

}                   

/********************************************************************

                           IO口初始化函数

*********************************************************************/    

void init_all(void)

{                

    P2M1=0;

        P2M0=0xff;

        P1M1=0x80;

        P1M0=0x0f;

        P3M1&=0x7f;

        P3M0|=0x80;

/********************************************************************

                           定时器T1初始化

*********************************************************************/

void timer0init(void)

TMOD=0X01;

[1] [2]
关键字:ACS712  单片机  电流检测  报警 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481659.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于AT89c51密码锁设计
下一篇:单片机电子密码锁门禁系统设计 AT24C02保存密码

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

罗杰斯公司通过汽车行业最高国际质量标准IATF 16949:2016认证
罗杰斯公司(纽约交易所代码:ROG)作为工程材料的全球领导者,于近日宣布其先进互联解决方案(ACS)事业部已通过了汽车行业最高国际质量标准---IATF 16949:2016认证。本次认证覆盖罗杰斯位于亚利桑那州钱德勒、康涅狄格州、中国苏州和比利时的制造及研发部门。“该认证是先进互联解决方案事业部取得的一个重大成就,证明了我们为汽车行业的客户生产高质量、创新、一流产品的承诺。”罗杰斯高级副总裁兼先进互联解决方案事业部总经理Jeff Grudzien说道。罗杰斯先进互联解决方案为各种汽车应用如24 GHz和77 GHz雷达传感器提供特殊高频覆铜板材料,而这些雷达传感器广泛应用于迅速发展的高级驾驶辅助系统(ADAS)。“随着高级
发表于 2018-10-09
罗杰斯战略性资产购买为先进互联解决方案事业部扩充产能
· 战略性资产购买以扩充先进互联解决方案事业部(ACS)产能 · 位于亚利桑那州钱德勒市ACS现有生产基地附近 · 预期在2019年开始商业生产  全球工程材料解决方案领先企业罗杰斯公司(NYSE:ROG),宣布从Isola美国公司购买其位于亚利桑那州钱德勒市的电介质材料及层压板生产资产。购买的资产包括地产、建筑物及指定的设备,罗杰斯计划使用这些资产为先进互联解决方案事业部扩充产能。该次购买不包含产品、技术或其他涉及卖方现有业务运营的资产。 “本次资产购买是我们ACS战略性扩张的一部分,以满足来自先进互联和先进出行市场的预期需求增长”,罗杰斯公司总裁
发表于 2018-08-30
Allegro MicroSystems,LLC发布新型全集成精确电流传感器
美国马萨诸塞州伍斯特市 – Allegro MicroSystems,LLC宣布推出全新的电流传感器系列IC ACS772/73,能够为AC或DC电流检测提供经济而准确的解决方案。新产品具有200 kHz带宽,是电机控制、负载检测和管理、电源和DC-DC转换器控制以及逆变器控制等应用的理想选择。ACS772/73具备2.5μs的响应时间,可在安全关键型应用中实现过流故障检测。该系列传感器可应用于汽车和工业等领域,在其整个生命周期内的精度为±2.1%。两个电流传感器IC分别采用5V(ACS772)和3.3V(ACS773)单电源供电。 ACS772/73器件包括一个精密的、低偏置线性霍尔电路,并有一个铜质导电路径位于芯片
发表于 2018-03-29
Allegro MicroSystems,LLC发布新型全集成精确电流传感器
高科技戒指可以检测爆炸物等安全威胁
不断增长的需求,将时尚和可穿戴领域的优势融合在一起,为穿戴式传感器技术的广泛接受创造了可穿戴配件。”这份研究报告最近在科学期刊《ACS Sensors》上发表。
发表于 2017-10-12
电铲ACS800变频器常见故障分析
使用DTC(直接转矩控制)技术进行变频调速的ACS800系列变频器近年来在世界范围内被越来越多的用户选择与肯定,这种有别于矢量控制的全新控制技术在快速响应以及控制精度上处于领先地位。 WK系列电铲采用ACS800变频器进行调速控制,是DTC控制技术全球首次进入重装备行业,弥补了相应的市场空白。鉴于这种控制技术在重装备行业的使用中尚无先例,其变频器产生的故障往往会对电铲用户及维护人员产生困扰,针对此下面就WK系列电铲使用ACS800系列变频器的常见故障进行描述分析。 1 常见故障分析 1.1 2330-接地故障或模块电流不平衡 接地电网中的接地故障,内部电流互感器的电流和过大。 此故障虽然报警时显现于ISU整流单元的面板
发表于 2016-02-26
avr单片机功能特性介绍
RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周期,提高运行速度。由于 AVR 采用了 RISC 的这种结构,使AVR系列单片机都具备了1MIPS/MHz(百万条指令每秒/兆赫兹)的高速处理能力。早期单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。AVR单片机的推出,彻底打破这种旧设计格局,废除
发表于 2019-12-14
avr单片机功能特性介绍
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved