电流检测电流设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
第1章设计目的 (1)
第2章设计要求 (1)
第3章硬件电路设计 (1)
3.1STC89C52单片机介绍 (1)
3.2ASC712型号电流传感器介绍 (3)
3.3系统电路原理图 (4)
第4章软件程序设计 (4)
4.1keil uvision4编译环境 (4)
4.2烧写程序软件 (5)
4.3主程序设计 (5)
4.4显示屏程序 (5)
4.5A/D 转换程序 (6)
4.6源程序 (7)
第5章结论 (13)
参考文献 (13)
第1章设计目的
本次课程设计我所做的项目是基于单片机的电流检测系统,主要用到A/D 转换和数码管显示。
近几年来,单片机已逐步深入应用到工农业生产各部门以及人们生活的各个方面。
各种类型的单片机也根据社会的需求而相继开发出来。
单片机是一个器件级的计算机系统,实际上它是一个微控制器或微处理器。
由于它功能齐全,体积小,成本低,因此它可以应用到所有的电子系统中。
熟悉单片机应用系统的开发与调试过程,为今后踏上工作岗位后做好铺垫。
第2章设计要求
1.利用电流传感器检测小电流
将输入的电流值通过差分放大器转化成为电压值以便使用,使用AD/DC模数转换模块把模拟量转换成数字量。
2.读入A/D转换数据,实时显示当前电流值
第3章硬件电路设计
3.1 STC89C52单片机介绍
89C52共有四个八位的并行双向口,即有32根输入输出口线。
各口的每一位均由锁存器、输出驱动器和输入缓冲器组成。
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据地址的低八位。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL 门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
RST:复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次PSEN有效。
但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
图3-1 STC89C52引脚图
3.2 ASC712型号电流传感器介绍
可通过新的滤波引脚设置器件带宽,特点如下:
(1)低噪音模拟信号路径
(2)可通过新的滤波引脚设置器件带宽
(3)5 µs 输出上升时间,对应步进输入电流
(4)总输出误差为1.5%(当TA = 25°C时)
(5)小型低厚度SOIC8 封装
(6)1.2 mΩ 内部传导电阻
(7)引脚1-4 至5-8 之间2.1 VRMS 最小绝缘电压
(8) 5.0 伏特,单电源操作
(9) 66 至185 mV/A 输出灵敏度
(10)输出电压与交流或直流电流成比例
(11)出厂时精确度校准
(12)极稳定的输出偏置电压
(13)近零的磁滞
(14)电源电压的成比例输出
图3-2 ASC712引脚图
3.3 系统电路原理图
图3-3 系统电路原理图
第4章软件程序设计
4.1 keil uvision4编译环境
本次程序的编译环境是keil uvision4编译软件。
利用所学的C语言知识利用C语言编写多种波形发生器的程序。
然后利用keil uvision4编译软件将编写的程序编译好,生成hex文件,这时候生成的hex文件就是要利用仿真软件仿真出波形的文件非常重要。
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uvision)将这些部分组合在一起。
Keil uvision是众多单片机应用开发软件中最优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,甚至ARM,它集编辑,编译,仿真等于一体,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
在软件中建立一个工程然后在工程中编写一个文件并编译生成hex文件,hex文件就可以直接下装到单片机中。
4.2 烧写程序软件
本设计采用的程序烧写软件为Proteus。
Proteus是由英国Lab Center Electronics公司研发,可以向STC89C51、STC89C52等系列单片机内烧写程序,可以设置波特率,串口参数等。
同时,Proteus还可以作为串口调试工具,用于串口收发数据的调试软件。
4.3 主程序设计
主程序:检测到的电流通过一个差分放大电路转化为电压值,再通过0809 A/D转换器输出到单片机内分析处理,单片机P0口负责控制数码管的数字显示,P2.4,P2.5,P2.5,P2.5分别控制显示屏的4个数字显示位。
图4-1 主程序框图
4.4 显示屏程序
显示屏程序:通过对输入temp值各数值进行分别输出以在显示屏上正确输出完整的电流显示值。
图4-2 显示屏程序框图
4.5 A/D 转换程序
A/D 转换程序:
霍尔电流传感器通过感应电流变化和硬件属性的电压电流比值把测到的电流转化成一个可供分析的电压值。
图4-3 A/D 转换程序框图
4.6 源代码
DAC变换,转化函数
bit DACconversion(unsigned char sla,unsigned char c, unsigned char Val) {
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址
if(ack==0)return(0);
SendByte(c); //发送控制字节
if(ack==0)return(0);
SendByte(Val); //发送DAC的数值
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
ADC发送字节数据函数
bit ISendByte(unsigned char sla,unsigned char c)
{
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址if(ack==0)return(0);
SendByte(c); //发送数据
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
ADC读字节数据函数
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;
Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址
if(ack==0)return(0);
c=RcvByte(); //读取数据0
ADC发送字节数据函数
bit ISendByte(unsigned char sla,unsigned char c) {
Start_I2c(); //启动总线
SendByte(sla); //发送器件地址if(ack==0)return(0);
SendByte(c); //发送数据
if(ack==0)return(0);
Stop_I2c(); //结束总线
return(1);
}
ADC读字节数据函数
unsigned char IRcvByte(unsigned char sla)
{ unsigned char c;
Start_I2c(); //启动总线
SendByte(sla+1); //发送器件地址
if(ack==0)return(0);
c=RcvByte(); //读取数据0
Ack_I2c(1); //发送非就答位Stop_I2c(); //结束总线
return(c);
}
I2C总线的驱动程序
启动总线函数
void Start_I2c()
{
SDA=1;
_Nop();
SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=0;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop(); SCL=0;
_Nop();
_Nop();
}
结束总线函数void Stop_I2c() {
SDA=0;
_Nop(); SCL=1;
_Nop();
_Nop();
_Nop();
_Nop();
_Nop();
SDA=1;
_Nop();
_Nop();
_Nop();
_Nop();
}
LCD1602显示数据位置程序
void LCD_set_xy( unsigned char x, unsigned char y) {
unsigned char address;
switch(x)
{
case 0: address = 0x80+y; break;
case 1: address = 0x80+0x40+y; break;
default:address = 0x80+y; break;
}
write_com(address);
}
Ack_I2c(1); //发送非就答位
Stop_I2c(); //结束总线
return(c);
}
第5章结论
本次任务是设计一个电流检测系统电路,通过传感器接收电流,因电压值更方便统计,所以经过一个电路将接收的电流值转化为可供分析的电压值作为参考,之后根据任务要求设计C语言程序成功使得单片机接收到了A/D转换器输出的电压信号,再通过89C52单片机的P0,P2口控制数码管显示实时的电压值。
另一方面这次小学期我实践与知识软件相结合的方式,完成编辑软件的设计环节,巩固和加深对课堂所学的理论知识的理解让自己的理论知识更加扎实,专业技能更加过硬,更加善于理论联系实际,为进一步学习专业课奠定基础。
参考文献
[1] 高峰.单片微型计算机原理与接口技术[M].科学出版社,2007.
[2] 李飞.单片机原理及其应用[M].西安电子科技大学出版社,2007.
[3] 张志良.单片机原理与控制技术[M].机械工业出版社,2007.
[4] 周坚.单片机C语言轻松入门[M].北京:北京航天航空大学出版社,2006.。