光电传感器脉冲计数电路设计
摘 要
本文基于AT89C51单片机设计了一个结构简单、性能稳定反射式光电计数器,可实现脉冲实时计数功能。系统采用型号为E18-D50NK 的红外传感器为信号采集装置,将光信号转换成电信号,经单片机处理后显示在数码管上。当系统出现锁死情况时可以通过复位键调整,直至系统正常工作。
关键词:AT89C51, 光电计数器, E18-D50NK
目 录
1 绪论 ........................................................................................................................................ 1 1.1 课题描述 .......................................................................................................................... 1 1.2 基本工作原理及框图 ...................................................................................................... 1 2 相关芯片及硬件电路设计 .................................................................................................... 2 2.1 AT89C51芯片 .................................................................................................................. 2 2.1.1 AT89C51的功能特性 . ............................................................................................... 3 2.1.2 AT89C51的主要性能参数 . ....................................................................................... 3 2.2 E18-D50NK 反射式红外传感器 ..................................................................................... 4 2.3 单片机最小系统电路 ...................................................................................................... 5 2.4 光电传感器电路 .............................................................................................................. 5 2.5 显示电路 . ......................................................................................................................... 6 3 系统软件设计 ........................................................................................................................ 6 3.1 系统的软件运行流程图 .................................................................................................. 7 3.2 程序设计 .......................................................................................................................... 7 4 仿真 . ...................................................................................................................................... 10 总 结 .................................................................................................................................. 12 致 谢 .................................................................................................................................. 13 参考文献 .................................................................................................................................. 14
1 绪论
1.1 课题描述
在当今社会飞速发展的今天,越来越多的流水线上的产品和各种公共场所需要进行实时的、有效的、精确的自动计数。传统的机械式或电子式计数器(主要是用数字电路集成组件组成) 电路比较复杂,元器件数量较多,故障率较高,维修比较困难,而设置预定数值不太方便,功能不易更改且功能过于单一,适用范围较窄。而基于单片机构成的产品自动计数器有直观和计数精确的优点,目前已在各种行业中得到广泛应用。数字计数器有多种形式,总体来说有接触式和非接触式两种,在科技发展的今天,非接触式光电计数器得到了广泛的应用,光电式传感器是其中之一。 1.2 基本工作原理及框图
本系统是以单片机AT89C51为核心的脉冲计数器。采用光电式传感器,每当物体通过一次,红外光就被物体反射,光电接收管接收一次,光电接收管的输出电压就发生一次变化,这个变化的电压信号通过放大和处理后,通过接收头输出相应的电信号[1]。当有物体穿越光路时,接收头输出为低电平,反之则为高电平,接收头接单片机P3.4端口,当电信号变化时,启动计数器开始计数,并将计数后所得的数据送给数码管显示。系统的基本原理如图1所示。
图1 基本工作原理框图
系统的电路图如图2所示。
P0. 7P0. 6
图2 光电脉冲计数器原理图
2 相关芯片及硬件电路设计
2.1 AT89C51芯片
图3 3种常见单片机及引脚图
AT89C51是一种带4K 字节FLASH 存储器(FPEROM —Flash Programmable and
Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容[2]。由于将多功能8位CPU 和闪速存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C051是它的一种精简版本。AT89C51单片机为很多嵌入式系统提供了一种灵活性高且价廉的方案。 2.1.1 AT89C51的功能特性
AT89C51提供以下标准功能:4K 字节Flash 闪速存储器,128字节内部RAM ,32个I/O口线,两个十六位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz 的静态逻辑操作,并支持两种软件可选的节电工作模式[3]。空闲方式停止CPU 的工作,但允许RAM ,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。 2.1.2 AT89C51的主要性能参数
AT89C51主要性能参数如下: (1)与MCS-51 兼容
(2)4K 字节可编程FLASH 存储器 (3)寿命:1000写/擦循环 (4)数据保留时间:10年 (5)全静态工作:0Hz-24MHz (6)三级程序存储器锁定 (7)28×8位内部RAM (8)32可编程I/O线 (9)两个16位定时器/计数器 (10)5个中断源 (11)可编程串行通道 (12)低功耗的闲置和掉电模式 (13)片内振荡器和时钟电路
2.2 E18-D50NK 反射式红外传感器
光电开关电路主要由光电开关管,即光电传感器是采用光电元件作为检测元件的传
感器。它首先把被测量的变化转换成光信号的变化,然后借助光电元件进一步将光信号转换成电信号。光电传感器一般由光源、光学通路和光电元件三部分组成[4]。电检测方
法具有精度高、反应快、非接触等优点,而且可测参数多,传感器的结构简单,形式灵活样因此,光电式传感器在检测和控制中应用非常广泛。如下图示为本次课程设计所采用的光电开关,其型号为E18-D50NK 的反射红外传感器。
图4 反射红外传感器
红外传感器输出端的原理图如下:
图5 红外传感器信号输入端
红外传感器感受到外界信息时,产生高低电平,通过软件程序设置单片机内部寄存器,当传感器的高低脉冲被单片机接收到时,单片机产生中断,中断产生后进入中断服务程序,通过设置中断服务程序,进行计数。并通过P2.4,P23,P2.5,P2.6,P2. 口计数信息传送至数码管,数码管显示计数的个数。当需要时按下复位开关,则计数器清零,
数码管显示清零,重新开始计数。 2.3 单片机最小系统电路
图6 单片机最小系统
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。 单片机的晶振电路是一种典型起振电路,分为内部时钟方式和外部时钟方式两种。本次设计所采用的为内部时钟方式。典型的晶振取11.0592MHz (因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS 级时歇,方便定时操作)[5]。
单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰 出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。 2.4 光电传感器电路
本设计使用的光电接受部分是红外光电式传感器,它是采用光电元件作为检测元 件信号转换成电信号,光电传感器一般由光源、光学通路和光电元件三部分组成,其中光电传感器是型号1E8-B03M 封装的红外反射传感器,E18-DS30NK 光电传感器,其工作电压为5V ,其传感器有三条引脚,一条接+5V,一条接GND ,另一条则是数据输出接口,正常情况下输出为高电平,当有物体遮挡时输出为低电平,本课题就是利用该传
感器的这种工作原理实现的。将数据输出端与单片机进行通信,进而实现计数功能。 2.5 显示电路
P0. 7P0. 6
图7 显示电路
本课题采用四位八段数码管,该数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a ,b ,c ,d ,e ,f ,g ,dp ”的同名端连在一起,另外为每个数码管的公共极COM 增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM 端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM 端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms ,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的[6],能够节省大量的I/O端口,而且功耗更低。其四位八段数码管显示电路图7。
3 系统软件设计
3.1系统的软件运程图
本次软件的流程图如下:
图7 系统的软件流程图
3.2 程序设计
#include #include #define uchar unsigned char void timer1_init(); void smg_dis();
void Delay1ms(uchar ms);
sbit P34=P3^4;
unsigned int num=0;
uchar smg_duanma[10] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
segbuf[4]={0,0,0,0}; uchar dspcom,i; /*主函数*/ void main(void) {
timer1_init(); P3=0xff; while (1) {
if (P34==0) ; Delay1ms (20);
if (P34==0)
++num; if (num==9999)
num=0;
while (~P34); } }
void timer1_init() {
TMOD=0x10; // TMOD=0000 0110B,使用计数器T1的模式2
TH1=(65536-5000)/256;
TL1=(65536-5000)%256; EA=1; //开总中断
ET1=1; //允许定时器T1的中断
TR1=1; } //启动T1
void Key_counter() interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256; smg_dis();
}
void smg_dis()
{
segbuf[0]=num/1000;
segbuf[1]=num/100% 10; segbuf[2]=num/10%10; segbuf[3]=num%10;
P0=0xff;
P0=smg_duanma[segbuf[dspcom]];
P2=0x10
if (++dspcom == 4)
}
void Delay1ms(uchar ms)
{
{ dspcom = 0; } unsigned int k; for (k=0;k
} } _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i);
4 仿真
图8 仿真结果
在Keil uvision3下新建工程,在工程下新建文件,完成程序的编写,并生成hex 文件,在Proteus 中画出电路图,进行仿真。由于光传感器在仿真过程中无法接受光信
号,不能产生相应的电信号,所以在仿真中是将光电传感器电路改为一个开关按键。开关按键一端接地,一端接P3.4端口。将P3.4端置为高电平,按下开关按键时,P3.4变为低电平。从而达到光传感器接收光的效果。仿真结果如图8所示。
总 结
本文介绍了一种基于AT89C51单片机的光电脉冲计数器系统的设计,主要包括单片机的最小系统电路、显示电路和光电传感器电路。本文利用软件编程、这样做占用硬件资源少,成本较低。光电传感器电路通过光的采集输出相应的高低电平即;单片机将收到的脉冲信号通过寄存器储存,同时将信号经处理,通过数码管把脉冲的数量显示出来。在设计的开始到结束我一直认真对待,在制作的过程中遇到了很多困难,通过查阅相关资料逐一解决问题的同时自己也增长了知识,到最后对光电计数系统的工作原理的掌握,最终设计出了自己理解的光电计数系统使我从中学习到了许多的新知识。
致 谢
从拿到设计题目到设计整稿,从理论到实践,学习到了很多新的知识,也成长了好多,在此要特别感谢导师司小平的指导与帮忙,在导师的指导下才能够产生了不错的设计思路,在设计过程中,遇到不少问题,都能够得到付致伟老师的指点,让设计工作得以顺利进行,在此要感谢教我们单片机的吕运鹏老师和指导设计的付致,伟同时要感谢设计制作中帮助过我的同学,特别是汪杨铭在设计过程中帮我解决了许多问题,及时帮我解惑,以及排除障碍等。在此要感谢老师和同学们,让我在这次设计过程中增长知识,学会成长,同时我们在实践中学习,把我们的知识掌握的更加牢固,也为以后找工作奠定了扎实的基础。
光电传感器脉冲计数电路设计
摘 要
本文基于AT89C51单片机设计了一个结构简单、性能稳定反射式光电计数器,可实现脉冲实时计数功能。系统采用型号为E18-D50NK 的红外传感器为信号采集装置,将光信号转换成电信号,经单片机处理后显示在数码管上。当系统出现锁死情况时可以通过复位键调整,直至系统正常工作。
关键词:AT89C51, 光电计数器, E18-D50NK
目 录
1 绪论 ........................................................................................................................................ 1 1.1 课题描述 .......................................................................................................................... 1 1.2 基本工作原理及框图 ...................................................................................................... 1 2 相关芯片及硬件电路设计 .................................................................................................... 2 2.1 AT89C51芯片 .................................................................................................................. 2 2.1.1 AT89C51的功能特性 . ............................................................................................... 3 2.1.2 AT89C51的主要性能参数 . ....................................................................................... 3 2.2 E18-D50NK 反射式红外传感器 ..................................................................................... 4 2.3 单片机最小系统电路 ...................................................................................................... 5 2.4 光电传感器电路 .............................................................................................................. 5 2.5 显示电路 . ......................................................................................................................... 6 3 系统软件设计 ........................................................................................................................ 6 3.1 系统的软件运行流程图 .................................................................................................. 7 3.2 程序设计 .......................................................................................................................... 7 4 仿真 . ...................................................................................................................................... 10 总 结 .................................................................................................................................. 12 致 谢 .................................................................................................................................. 13 参考文献 .................................................................................................................................. 14
1 绪论
1.1 课题描述
在当今社会飞速发展的今天,越来越多的流水线上的产品和各种公共场所需要进行实时的、有效的、精确的自动计数。传统的机械式或电子式计数器(主要是用数字电路集成组件组成) 电路比较复杂,元器件数量较多,故障率较高,维修比较困难,而设置预定数值不太方便,功能不易更改且功能过于单一,适用范围较窄。而基于单片机构成的产品自动计数器有直观和计数精确的优点,目前已在各种行业中得到广泛应用。数字计数器有多种形式,总体来说有接触式和非接触式两种,在科技发展的今天,非接触式光电计数器得到了广泛的应用,光电式传感器是其中之一。 1.2 基本工作原理及框图
本系统是以单片机AT89C51为核心的脉冲计数器。采用光电式传感器,每当物体通过一次,红外光就被物体反射,光电接收管接收一次,光电接收管的输出电压就发生一次变化,这个变化的电压信号通过放大和处理后,通过接收头输出相应的电信号[1]。当有物体穿越光路时,接收头输出为低电平,反之则为高电平,接收头接单片机P3.4端口,当电信号变化时,启动计数器开始计数,并将计数后所得的数据送给数码管显示。系统的基本原理如图1所示。
图1 基本工作原理框图
系统的电路图如图2所示。
P0. 7P0. 6
图2 光电脉冲计数器原理图
2 相关芯片及硬件电路设计
2.1 AT89C51芯片
图3 3种常见单片机及引脚图
AT89C51是一种带4K 字节FLASH 存储器(FPEROM —Flash Programmable and
Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,俗称单片机。该器件采用ATMEL 高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容[2]。由于将多功能8位CPU 和闪速存储器组合在单个芯片中,ATMEL 的AT89C51是一种高效微控制器,AT89C051是它的一种精简版本。AT89C51单片机为很多嵌入式系统提供了一种灵活性高且价廉的方案。 2.1.1 AT89C51的功能特性
AT89C51提供以下标准功能:4K 字节Flash 闪速存储器,128字节内部RAM ,32个I/O口线,两个十六位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51可降至0Hz 的静态逻辑操作,并支持两种软件可选的节电工作模式[3]。空闲方式停止CPU 的工作,但允许RAM ,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM 中的内容,但振荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。 2.1.2 AT89C51的主要性能参数
AT89C51主要性能参数如下: (1)与MCS-51 兼容
(2)4K 字节可编程FLASH 存储器 (3)寿命:1000写/擦循环 (4)数据保留时间:10年 (5)全静态工作:0Hz-24MHz (6)三级程序存储器锁定 (7)28×8位内部RAM (8)32可编程I/O线 (9)两个16位定时器/计数器 (10)5个中断源 (11)可编程串行通道 (12)低功耗的闲置和掉电模式 (13)片内振荡器和时钟电路
2.2 E18-D50NK 反射式红外传感器
光电开关电路主要由光电开关管,即光电传感器是采用光电元件作为检测元件的传
感器。它首先把被测量的变化转换成光信号的变化,然后借助光电元件进一步将光信号转换成电信号。光电传感器一般由光源、光学通路和光电元件三部分组成[4]。电检测方
法具有精度高、反应快、非接触等优点,而且可测参数多,传感器的结构简单,形式灵活样因此,光电式传感器在检测和控制中应用非常广泛。如下图示为本次课程设计所采用的光电开关,其型号为E18-D50NK 的反射红外传感器。
图4 反射红外传感器
红外传感器输出端的原理图如下:
图5 红外传感器信号输入端
红外传感器感受到外界信息时,产生高低电平,通过软件程序设置单片机内部寄存器,当传感器的高低脉冲被单片机接收到时,单片机产生中断,中断产生后进入中断服务程序,通过设置中断服务程序,进行计数。并通过P2.4,P23,P2.5,P2.6,P2. 口计数信息传送至数码管,数码管显示计数的个数。当需要时按下复位开关,则计数器清零,
数码管显示清零,重新开始计数。 2.3 单片机最小系统电路
图6 单片机最小系统
单片机最小系统,或者称为最小应用系统,是指用最少的元件组成的单片机可以工作的系统. 对51系列单片机来说,最小系统一般应该包括:单片机、晶振电路、复位电路。 单片机的晶振电路是一种典型起振电路,分为内部时钟方式和外部时钟方式两种。本次设计所采用的为内部时钟方式。典型的晶振取11.0592MHz (因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的uS 级时歇,方便定时操作)[5]。
单片机复位电路就好比电脑的重启部分,当电脑在使用中出现死机,按下重启按钮电脑内部的程序从头开始执行。单片机也一样,当单片机系统在运行中,受到环境干扰 出现程序跑飞的时候,按下复位按钮内部的程序自动从头开始执行。 2.4 光电传感器电路
本设计使用的光电接受部分是红外光电式传感器,它是采用光电元件作为检测元 件信号转换成电信号,光电传感器一般由光源、光学通路和光电元件三部分组成,其中光电传感器是型号1E8-B03M 封装的红外反射传感器,E18-DS30NK 光电传感器,其工作电压为5V ,其传感器有三条引脚,一条接+5V,一条接GND ,另一条则是数据输出接口,正常情况下输出为高电平,当有物体遮挡时输出为低电平,本课题就是利用该传
感器的这种工作原理实现的。将数据输出端与单片机进行通信,进而实现计数功能。 2.5 显示电路
P0. 7P0. 6
图7 显示电路
本课题采用四位八段数码管,该数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划“a ,b ,c ,d ,e ,f ,g ,dp ”的同名端连在一起,另外为每个数码管的公共极COM 增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM 端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM 端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms ,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的[6],能够节省大量的I/O端口,而且功耗更低。其四位八段数码管显示电路图7。
3 系统软件设计
3.1系统的软件运程图
本次软件的流程图如下:
图7 系统的软件流程图
3.2 程序设计
#include #include #define uchar unsigned char void timer1_init(); void smg_dis();
void Delay1ms(uchar ms);
sbit P34=P3^4;
unsigned int num=0;
uchar smg_duanma[10] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
segbuf[4]={0,0,0,0}; uchar dspcom,i; /*主函数*/ void main(void) {
timer1_init(); P3=0xff; while (1) {
if (P34==0) ; Delay1ms (20);
if (P34==0)
++num; if (num==9999)
num=0;
while (~P34); } }
void timer1_init() {
TMOD=0x10; // TMOD=0000 0110B,使用计数器T1的模式2
TH1=(65536-5000)/256;
TL1=(65536-5000)%256; EA=1; //开总中断
ET1=1; //允许定时器T1的中断
TR1=1; } //启动T1
void Key_counter() interrupt 3
{
TH1=(65536-5000)/256;
TL1=(65536-5000)%256; smg_dis();
}
void smg_dis()
{
segbuf[0]=num/1000;
segbuf[1]=num/100% 10; segbuf[2]=num/10%10; segbuf[3]=num%10;
P0=0xff;
P0=smg_duanma[segbuf[dspcom]];
P2=0x10
if (++dspcom == 4)
}
void Delay1ms(uchar ms)
{
{ dspcom = 0; } unsigned int k; for (k=0;k
} } _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i);
4 仿真
图8 仿真结果
在Keil uvision3下新建工程,在工程下新建文件,完成程序的编写,并生成hex 文件,在Proteus 中画出电路图,进行仿真。由于光传感器在仿真过程中无法接受光信
号,不能产生相应的电信号,所以在仿真中是将光电传感器电路改为一个开关按键。开关按键一端接地,一端接P3.4端口。将P3.4端置为高电平,按下开关按键时,P3.4变为低电平。从而达到光传感器接收光的效果。仿真结果如图8所示。
总 结
本文介绍了一种基于AT89C51单片机的光电脉冲计数器系统的设计,主要包括单片机的最小系统电路、显示电路和光电传感器电路。本文利用软件编程、这样做占用硬件资源少,成本较低。光电传感器电路通过光的采集输出相应的高低电平即;单片机将收到的脉冲信号通过寄存器储存,同时将信号经处理,通过数码管把脉冲的数量显示出来。在设计的开始到结束我一直认真对待,在制作的过程中遇到了很多困难,通过查阅相关资料逐一解决问题的同时自己也增长了知识,到最后对光电计数系统的工作原理的掌握,最终设计出了自己理解的光电计数系统使我从中学习到了许多的新知识。
致 谢
从拿到设计题目到设计整稿,从理论到实践,学习到了很多新的知识,也成长了好多,在此要特别感谢导师司小平的指导与帮忙,在导师的指导下才能够产生了不错的设计思路,在设计过程中,遇到不少问题,都能够得到付致伟老师的指点,让设计工作得以顺利进行,在此要感谢教我们单片机的吕运鹏老师和指导设计的付致,伟同时要感谢设计制作中帮助过我的同学,特别是汪杨铭在设计过程中帮我解决了许多问题,及时帮我解惑,以及排除障碍等。在此要感谢老师和同学们,让我在这次设计过程中增长知识,学会成长,同时我们在实践中学习,把我们的知识掌握的更加牢固,也为以后找工作奠定了扎实的基础。