基于ACS712的数字霍尔电流计设计系统Word文档下载推荐.docx
《基于ACS712的数字霍尔电流计设计系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于ACS712的数字霍尔电流计设计系统Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
![基于ACS712的数字霍尔电流计设计系统Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/30/0168e31d-bfd7-4b97-a27e-cf6f8f136018/0168e31d-bfd7-4b97-a27e-cf6f8f1360181.gif)
ACS712使用方便、性价比高、绝缘电压高等特点,主要应用于电动机控制、载荷检测和管理、开关式电源和过电流故障保护等,特别是那些要求电气绝缘却未使用光电绝缘器或其它昂贵绝缘技术的应用中。
它能准确,实时地检测电流,使设备隐患得到及时的处理,确保人身安全和设备安全。
关键词:
ACS712;
特性曲线;
STC12C2052AD;
电流检测;
RS-232;
74HC595
目录
1概述3
2霍尔电流计系统设计方案3
3霍尔电流计系统硬件电路设计4
3.1传感器采集放大电路4
3.1.1ACS712内部结构及工作原理4
3.1.2特性曲线5
3.2ACS712与AD接口6
3.3STC12C2052AD单片机AD采集电路6
3.4数码管显示电路10
3.5电源稳压电路11
3.6下载通信电路12
3.7系统程序13
4总结13
参考文献15
系统总图16
程序17
1概述
在工业、汽车、商业和通信系统中,为了确保设备安全和人身安令,经常需要对设备的某些关键点进行电流检测,传统的检测方法存在测量精度不高,反应时间长,对于大电流一般采用电流互感器输出端不能开路,突发性绝缘击穿等缺新型线性电流传感器ACS712能有效克服这些缺点,为工业、汽车、商业和通信系统中的交流或直流电流感测提供经实惠的精密解决方案。
2霍尔电流计系统设计方案
本系统采用以STC系列的STC12C2052AD单片机系统为核心开发霍尔电流计系统。
系统硬件原理框图如图1-1:
图:
1-1
系统硬件原理图1-1由ACS712传感器,STC12C2052AD单片机自带AD模数转换,74HC595数码管显示和RS232串口通信等构成。
整个系统由微处理器控制,根据霍尔原理设计的。
霍尔元件之作用原理也就是霍尔效应,所谓霍耳效应指将电流I通至一物质,并对与电流成正角之方向施加磁场B时,在电流与磁场两者之直角方向所产生的电位差V之现象。
ACS712在一定的电流范围内输出电压和电流成线性关系,内部自带放大,滤波电路,通过单片机自带8位AD采集数据,再由软件滤波补偿,用数码管实时显示当前电流值它的各部分电路的说明如下。
(1)ACS712采集电流,放大输出电压信号,经滤波电路后电流和电压建立线性关系
(2)STC12C2052AD单片机通过内部8位AD实时检测电压,通过线性关系和补偿建立电流和电压的关系
(3)通过显示电路将测距结果实时地显示出来。
(4)通过串口RS232和上位机通信,实时传送数据。
3霍尔电流计系统硬件电路设计
系统由三大部分组成:
(1)传感器采集放大电路;
(2)STC12C2052AD单片机AD采集电路;
(3)数码管显示电路(4)电源稳压电路(5)下载通信电路;
3.1传感器采集放大电路
ACS712是一种线性电流传感器,该器件内置有精确的低偏置的线性霍尔传感器电路,能输出与检测的交流或直流电流成比例的电压。
具有低噪声,响应时间快(对应步进输入电流,输出上升时间为5S),50千赫带宽,总输出误差最大为4%,高输出灵敏度(66mV/A~185mV/A),ACS712采用小型的SOIC8封装,采用单电源5V供电。
引脚1和2、3和4均内置有保险,为待测电流的两个输入端,当检测直流电流时,l和2、3和4分别为待测电流的输入端和输出端。
图:
3-1
3.1.1ACS712内部结构及工作原理
ACS712器件主要由靠近芯片表面的铜制的电流通路和精确的低偏置线性霍尔传感器电路等组成。
被测电流流经的通路(引脚l和2,3和4之间的电路)的内电阻通常是1.2毫欧,具有较低的功耗。
被测电流通路与传感器引脚(引脚5~8)压>
2.1kVRMS,几乎是绝缘的。
流经铜制电流通路的电流所产生的磁场,能够被片内的霍尔IC感应并将其转化为成比例的电压。
通过将磁性信号尽量靠近霍尔传感器来实现器件精确度的最优化。
精确的成比例的输出电压由稳定斩波型低偏置BiCMOS霍尔集成电路提供,该集成电路在出厂时已进行了精确的编程。
稳定斩波技术是一种新技术,它给片内的霍尔元器件和放大器提供最小的偏置电压,该技术几乎可以消除芯片由于温度所产生的输出。
3-1-1
ACS712内含一个电阻RF(INT)[I个缓冲放大器,用户可以通过FITER引脚(第6脚)外接一个容CF与RF(INT)组成一个简单的外接RC低通滤波器。
3.1.2特性曲线
ACS712的3OA输出电压与检测电流关系的特性曲线,在检测范围±
30A内,传感器的输出电压和检测电流成正比,几乎不受温度的影响。
图图:
3-1-2为ACS712-30A检测灵敏度与电流关系的特性曲线,输出灵敏度约为66mV/A,受温度的影响很小输出电压和检测电流的关系
3-1-2
3-1-3
3.2ACS712与AD接口
系统采用ACST12EICTR-30A-T进行电流检测,ACS712ELCTR-30A-T的输出端V0UT接到STC12C2052AD的P1.0进行模数转换,ACS712的VCC=5V,根据图3-1-3,ACS712的电压输出Vout和被检测的电流IP间的关系为:
VOUT=(2/30)Ip+2.5。
由图3-1-2知:
V的输出范围为0.5V~4.5V,量程为4V,若采用8位的ADC时,量化单位为A=4/256V=15.6mv小于ACS712的输出灵敏度,即用8位的ADC在转换精度上可以满足需要.设计中根据STC12C2052AD的AD特性,AD输入的模拟量VIN和输出的数字量D之间的关系为:
D=
,另外Vout=Vin所以STC12C2052AD的AD输出的数字量D和被检测电流IP间有如下的关系:
D=(128×
Ip)/30+128。
即被检测电流与A/D转换后的数字量间建立了一一对应的关系,当被检测的电流为-30A时,D=0;
当被检测的电流为0A时,D=128;
当被检测的电流为30A时,D=256,被检测电流的大小通过ACS712和STC12C2052AD的AD转化为数字量后输入到单片机进行处理。
3.3STC12C2052AD单片机AD采集电路
STC12C2052AD系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8—12倍,STC12C2052AD系列有2路PWM,8路高速8位A/D转换通用I/O(27/23/15个),复位后为:
准双向口/弱上拉(普通8051传统I/0口)。
可设置成四种模式:
准双向口/弱上拉,推挽/强上拉,仅为输入/高阻,开漏。
每个I/O口驱动能力均可达到20mA,但整个芯片最大不得超过55MA.STC12C2052AD系列有两路PWM,也可用来当4路D/A使用,也可用来再实现4个定时器。
STC12C2052AD系列是8位精度的A/D,速度均可达到100KHZ(10万次/秒)。
8路电压输入型A/D,可做温度检测、电池电压检测、按键扫描、频谱检测等。
上电复位后P1口为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使用的口可继续作为I/O口作用。
需作为A/D使用的口需先将其设置为开漏模式或高阻输入,在P1M0、P1M1寄存器中对相应的位进行设置。
表2-1P1M1P1M0寄存器模式设置
P1M0[7:
0]
地址:
91h
P1M1[7:
92h
I/O口模式(P1.X如做A/D使用,需先将其设置成开漏或高阻输入)
准双向口(传统8051I/O口模式)
灌电流可达20MA,拉电流为230UA
1
推挽输出(强上拉输出,可达20MA,尽量少用)
仅为输入(高阻),如果该I/O口需作为A/D使用,可选此模式
开漏(OPENDRAIN),如果该I/O口需作为A/D使用,可选此模式
表2-2AD转换寄存器
Mnemo
nic
Add
Name
7
6
5
4
3
2
Reset
Value
ADC_
CONTR
C5h
A/D
转换
控制寄存器
ADC
_PO
WER
SPE
ED1
ED0
_FL
AG
_ST
ART
CHS2
CHS1
CHS0
0XX0
0000
_DATA
C6h
A/D转换结果寄存器,高8位
___
____
XXXX
_LOW2
Beh
A/D转换结果寄存器,低2位
表2-3ADC_CONTR特殊功能寄存器:
A/D转换控制特殊功能寄存器
A/D转换控制寄存器
POWER
SPEED1
SPEED0
_FLAG
_START
表2-4CHS2/CHS1/CHS0:
模拟输入通道选择,CHS2/CHS1/CHS0
AnalogChannelSelect
模拟输入通道选择
选择P1.0作为A/D输入来用
选择P1.1作为A/D输入来用
选择P1.2作为A/D输入来用
选择P1.3作为A/D输入来用
选择P1.4作为A/D输入来用
选择P1.5作为A/D输入来用
选择P1.6作为A/D输入来用
选择P1.7作为A/D输入来用
ADC_START:
模数转换器(ADC)转换启动控制位,设置“1”时,开始转换,转换结束后为0。
ADC_FLAG:
模数转换器转换结束标志位,当A/D转换完成后,ADC_FLAG=1,要由软件清0。
表2-5SPEED1,SPEED:
模数转换器转换速度控制位
A/D转换所需时间
210个时钟周期转换一次,CPU工作频率20MHZ
A/D转换速度约100KHZ
420个时钟周期转换一次
630个时钟周期转换一次
840个时钟周期转换一次
ADC_POWER:
ADC电源控制0:
关闭ADC电源;
1:
打开A/D转换器电源,建议进入空闲模式前,将ADC电源关闭,ADC_POWER=0。
启动A/D转换前一定要确认AD电源已打开,AD转换结束后关闭AD电源可降低功耗,也可不关闭建议启动A/D转换后,在A/D转换结束之前,比改变任何I/O口的状态,有利于高精度A/D转换
表2-6ADC_DATA/ADC_LOW2特殊功能寄存器:
A/D转换结果特殊功能寄存器
DATA
A/D转换结果寄存器,全部8位有效,为10位A/D转换结果的高8位
—
LOW2
BEh
A/D转换结果寄存器,只有低2位有效,为10位A/D转换结果的低2位
X
——
模拟/数字转换结果计算公式如下:
结果(ADC_DATA[7:
0],ADC_LOW2[1:
0])=
Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。
取ADC_DATA的8位为ADC转换的高8位,取ADC_LOW2的低2位为ADC转换的低2位,则为10位精度。
如果舍弃ADC_LOW2的低2位,只用ADC_DATA寄存器的8位则A/D转换结果为8位精度。
结果ADC_DATA[7:
0]=
STC12C5410AD系列单片机的参考电压源是输入工作电压VCC,所以一般不用外接参考电压源。
如7805的输出电压是5V,但实际电压可能是4.88V到4.96V,用户需要精度比较高的话,可在出厂时将实际测出的工作电压值记录在单片机内部的EEPROM里面,以供计算。
在本设计中,考虑现实条件,我们使用了LM2940作为电压源,给单片机提供5V电压。
图3-3
3.4数码管显示电路
74HC595是具有8位移位寄存器和一个存储器,三态输出功能。
移位寄存器和存储器是分别的时钟。
数据在SHCP的上升沿输入,在STCP的上升沿进入到存储寄存器中去。
如果两个时钟连在一起,则移位寄存器总是比存储寄存器早一个脉冲。
移位寄存器有一个串行移位输入(DS),和一个串行输出(Q7’),和一个异步的低电平复位(MR),存储寄存器有一个并行8位的,具备三态的总线输出,当使能OE时(为低电平),存储寄存器的数据输出到总线。
74595的控制端说明:
/SCLR(10脚):
低点平时将移位寄存器的数据清零。
通常我将它接Vcc。
SCK(11脚):
上升沿时数据寄存器的数据移位QA-->
QB-->
QC-->
...-->
QH;
下降沿移位寄存器数据不变。
(脉冲宽度:
5V时,大于几十纳秒就行了。
RCK(12脚):
上升沿时移位寄存器的数据进入数据存储寄存器,下降沿时存储寄存器数据不变。
通常我将RCK置为低点平,当移位结束后,在RCK端产生一个正脉冲(5V时,大于几十纳秒就行了。
我通常都选微秒级),更新显示数据。
/G(13脚):
高电平时禁止输出(高阻态)。
如果单片机的引脚不紧张,用一个引脚控制它,可以方便地产生闪烁和熄灭效果。
比通过数据端移位控制要省时省力。
分析原理图,需要仔细考虑元器件的布局与走线,合理的布局会减少走线的难度。
本设计为了方便走线,数码管和74HC595采用自由连接方式,而没有采用顺序连接方式。
这大大降低了走线难度。
图:
3-4-1
3.5电源稳压电路
LM2940具有纹波小、电路结构简单的优点,但是效率较低,功耗大,由于LM2940的稳压的线性度非常好,所以选用LM2940-5单独对其进行供电;
3.6下载通信电路
MAX232芯片是美信(MAXIM)公司专为RS-232标准串口设计的单电源电平转换芯片,使用+5v单电源供电。
图:
3-6-1
第一部分是电荷泵电路。
由1、2、3、4、5、6脚和4只电容构成。
功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。
第二部分是数据转换通道。
由7、8、9、10、11、12、13、14脚构成两个数据通道。
其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道。
8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。
TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;
DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。
第三部分是供电。
15脚GND、16脚VCC(+5v)。
3-6-2
3.7系统程序
图3-7主程序实现流程
4总结
我设计的课题是霍尔电流计,经过一个星期的思考和准备,通过对课题的设计,大大提高了自己各方面的能力,例如对书本基础知识的掌握程度,对资料的查找方法,对自己知识面的扩展都不得有相对的提高,在学习的同时,我还知道了团队合作的重要性,一个人的力量是有限的,集体的力量是无穷的。
但在这其中,也有自己茫然和不知所措的一面,当我决定课题时,不知该从何下手,头脑中也一片空白,后来经过老师对课题的剖解,头脑中才逐渐有了轮廓。
资料搜集花费了大量时间,采集的资料不能从头至尾的抄写,而要取其所需,认为有价值的材料才能引用,在网上,请教经验丰富的老师,终于获得了第一手资料,然后在其中加入自己的思想,组织整理,渐渐有了头绪。
经过不断的修改及创新,一个星期下来,终于看到了自己的劳动成果,一种胜利感油然而生。
经过这一次设计,体会颇多,感觉到平时的粗心大意,以及不完善的理论知识让我错过了一次就OK的那种感觉,但我在制作电路的过程中感觉到了一种力量,那种力量可以让我废寝忘食的不断改善调试电路,可以让我兴奋的久久的为了电路而深思,可以让我深夜写着课程设计说明书,回顾自己的设计制作过程,心中一阵感慨,有失落,有兴奋,有喜悦,有苦恼,但我觉得它值得我这样去做,因为它不仅让有了一次实践的机会,让我学会怎样去面对制作过程中遇到的困难,怎么去解决,让我学会了思考,让我隐隐约约记忆起以前学过的知识,原来不知道学了有什么用的枯燥电路原理,现在让我在实际应用中觉得少学了好多东西,心中无限后悔。
但这次设计给我的感受是很真、很纯的感受,亲身体会其制作的艰难路程,这不仅加深了我以前因为种种迷惑不知道的电路知识的认识,而且为我将来的人生也奠定了基础,相信通过以后的学习锻炼,理论结合实践,我将会得到进一步的提高。
参考文献
[1][1]康华光.数字电子技术基础(第五版),北京.高等教育出版社,2006:
400-406
[2]康华光.电子技术基础·
模拟部分(第四版)[M].北京.高等教育出版社.1998:
328-336
[3]河道清,张禾,谌海云.传感器与传感器技术微机原理及应用[M].北京.科学出版社.2008:
153-177
[4]汤山俊夫:
数字电路设计,北京,科学出版社,2006:
78-92
[5]王保华:
生物医学测量与仪器(第2版),上海,复旦大学出版社,2009:
184-198
[6]康华光:
单片机典型外围器件及应用实例[M].北京.人民邮电出版社.2003:
267-278
[7]马忠梅:
单片机的C语音应用程序设计[M].北京.北京航空航天大学出版社.2003:
345-356
[8]张建民:
传感器与检测技术[M].北京.机械工业出版社.1996:
68-73
[9]赵茂泰:
智能仪器原理及应用[M].北京.电子工业出版社.2004:
301-319
[10]强锡富:
传感器[M].北京.机械工业出版社.2001:
98-110
[11]传感器原理及工程应用(第3版)[M].西安.西安电子科技大学出版社.2008:
278-292
系统总图:
程序:
#include<
STC12C2052AD.H>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitsrclk=P1^2;
//11数据时钟输入
sbitser=P1^3;
//14数据输入
sbitrclk=P1^1;
//12数据锁存
sbitkey1=P3^2;
sbitkey2=P3^3;
ucharcodetabnum0[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,0x60,0xdf};
//字符共阳0x60A0xdf小数点
ucharcodetabnum1[]={0x08,0xcb,0x12,0x82,0xc1,0x84,0x04,0xca,0x00,0xc0,0x40};
ucharcodeweitab[]={0x7f,0xbf,0xdf,0xef};
voiddelaynms(uintxms);
voidshuju(uchardate);
voidIO_init();
voidAD_init();
ucharAD();
voidPWM_init();
voidPWM_init()//初始化PWM频率为23.4K
{
CMOD=0x02;
//00000010频率是晶振/2禁止PCA定时器溢出中断
CCAPM1=0x42;
//01000110输出比较使能高速输出PWM模式
CL=0x00;
CH=0x00;
PCA_PWM1=0x00;
//EPC0H:
EPC0L=00
CCAP1L=0xff;
//控制输出占空比
CCAP1H=0xff;
//占空比为0
CR=1;
}
voidAD_init()
ADC_CONTR=0xe0;
delaynms(100);
ucharAD()
ucharadresult,flag=0;
ADC_CONTR=0xe8;
while(flag==0)
{
flag=ADC_CONTR&
0x10;
}
adresult=ADC_DATA;
ADC_CONTR&
=0x60;
returnadresult;
voidIO_init()
P1M0=0x01;
P1M1=0x01;
voiddelaynms(uintxms)
uinti,j;
for(i=xms;
i>
0;
i--)
for(j=250;
j>
j--);
voidshuju(uc