基于51单片机的光电编码器测速Word下载.docx
《基于51单片机的光电编码器测速Word下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的光电编码器测速Word下载.docx(18页珍藏版)》请在冰豆网上搜索。
3).掌握仿真软件的运用和原理图的绘制
4).加深焊接的技巧,提高焊接的能力
5).熟悉调试方法和技巧,提高解决实际问题的能力
6).熟悉设计报告的编写过程
1.2设计要求
1).两个按键控制显示每分钟和每秒钟的功能
2).74LS74辅助光电编码器测转向
3).光电编码器输出脉冲计数
4).1602液晶显示转速
二、方案总体设计
设计一个基于51单片机的光电编码器测测速。
设计一个电路来实现光电编码器测量;
利用单片机内部精确到微妙的定时计数器来实现一个周期的时间来统计脉冲数;
74LS74作为辅助芯片来完善光电编码器测转向的功能;
P0和P2口控制1602液晶显示转速;
利用P1^1和P1^2来实现液晶显示每秒钟和每分钟转速的功能;
利用复位按键功能来实现复位操作。
调节蓝白滑动变阻器来调节液晶亮度。
2.1方案一
51单片机的定时/计数器工作在模式2时是一个可以自动重装载的8位定时/计数器。
工作时高八位和低八位装入相同的初值,当低八位装满时,高八位的值自动装入到第八位中,从而可以省去用户软件中重装初值常数的语句,可产生相当精确的定时时间。
由于只有八位参与计数,所以其计数周期最大为256微妙。
采用初值装入0x38,每个200微妙进入一次中断,5000次中断为100毫秒,即实现周期为1秒的脉冲计数。
光电编码器的A相接在单片机的外部中断,光电编码器的B相接在单片机的P1^0。
A相发出的脉冲每触发一次中断就就计数一个脉冲,并且再对P1^0的高低电平进行检测,如果为高电平则为反转,如果是低电平则为正转。
反向器中的两个作为放大作用。
再接两个三极管作为开关作用,组成一个直流电机的驱动电路。
P1^1和P1^2分别控制液晶显示每分钟的转速和每秒钟的转速。
P2口控制1602液晶的数据口,P0的三个引脚控制1602液晶的数据/命令选择端、读/写选择端、使能端来显示速度。
2.2方案二
51单片机的定时/计数器工作在模式0时是一个16位位定时/计数器。
工作时高八位和低八位各装入初值,当低八位装满时,高八位加1。
由于是16位参与计数,所以其计数周期最大为65536微妙。
采用初值高八位装入0xfc,初值低八位装入0x18,每个1000微妙进入一次中断,1000次中断为1秒,即形成周期为1秒的脉冲计数。
本方案在方案1的基础上外接一个74LS74的芯片。
光电编码器的A相接在单片机的P3^4的引脚,利用单片机的计数器1进行脉冲计数,同时接在74LS74的时钟信号接口。
光电编码器的B相接在74LS74的D接口。
Q端接在P3^2引脚,Q非端接在P3^3引脚。
利用两个外部中断来判断正反转。
2.3系统采用方案
1)总体设计
图1为设计总体框架图,通过该图大致的介绍了一下整个光电编码器测速系统的各个主要部分。
图1系统总体框架
2)总体工作原理
由于定时器工作模式2是八位,可装入的值太小,每进行一个周期的脉冲统计需要进入5000次定时器中断,由于进入中断的次数太多,所以很容易出现在低八位装满本应触发而程序还在中断子程序中运行,而无法触发中断的情况,所以不采用工作模式2。
工作模式0只需要进入定时中断1000次就可以进行一个周期的脉冲统计,所以选择功能模式0。
方案一中用,用纯软件计数虽然电路简单,但是计数速度慢,难以满足实时性要求,而且容易出错。
我们可以用单片机内部的计数器来实现加减计数。
单片机片内有两个16位定时计数器都可以用来脉冲计数,用两个外部中断来检测正反转,避免了每一个脉冲都要进行高低电平检测的步骤。
控制按键,液晶和复位方面的设计在方案一和方案二中一样。
综上考虑,最终方案确定为方案二。
三、硬件设计
3.1单片机最小系统
单片机要正常工作,首先要产生片内时钟信号。
在单片机内部的振荡器的输入端XTAL1和输出端XTAL2之间接一个石英晶振就可以够成一个自激振荡器。
再在两端之间串联接个电容并且在两个电容之间接地以便于稳定频率还对振荡频率有微调作用。
电容通常选30PF左右,振荡脉冲频率范围为0~24MHZ。
该电路中选用12MHZ晶振。
时钟电路图如下:
图2时钟电路图
单片机在启动时与其他微处理器一样,要让CPU及系统各部件处于确定的初始状态,并从初始开始工作。
这就需要复位操作。
复位电路有两种方式:
上电自动复位和按键自动复位。
上电自动复位只是在开始接通电源瞬间复位,接下来想要再次复位就需要断电重启,不方便。
按键自动复位不仅可以在开始接通电源瞬间复位还可以通过按下按键复位随时复位。
所以选择按键复位方式。
复位电路如下:
图3复位电路图
3.2液晶显示模块
该可调直流电机最大速度为每分钟1200转,采用1602液晶显示。
控制1602液晶亮度的是蓝白滑动变阻器。
1602液晶有16个管脚。
编号为1,2管脚为电源正负极管脚,15,16为背光源正负极管脚;
7~14为dataI/O管脚与单片机的P0口相连,负责液晶与芯片之间的信息传送;
4,5,6分别为数据/命令选择端、读/写选择端、使能端,与单片机的,P2^0、P2^1、P2^2相连,负责控制液晶与芯片之间数据命令的读写操作;
3为液晶显示偏压信号端,用于调整液晶显示对比度。
1602液晶显示原理图如下:
图4液晶显示系统图
3.3系统电源
为了方便控制系统的上电与断电,系统电源中连接了一个蓝白自锁开关。
此开关两边各有三个引脚,不同的连接方式,开关的控制方法就不同。
电源的正负极各接在此开关的两边。
为了方便观察电源是否接上,在电路中的VCC与GND之间接一个发光二极管并且加一个限流电阻防止发光二极管烧坏,电源通电时发光二极管亮,断电时,则暗。
再接四个排针便两边的两个排针用于外部电源给系统上电,中间的两个排针是用于单片机烧录程序。
如图所示:
图5系统电源图
3.4光电编码器电路
这是一张光电编码器部分的电路原理图。
图上的74LS74芯片上就是两个D触发器。
A相接在P3^4的引脚用于计数器0采集脉冲。
A相同时接在CLK端,B相接在D端,Q接在P3.2引脚,外部中断0检测和Q非接在P3.3外部中断1来检测。
另外A相和B相各需接一个上拉电阻,阻值为1K。
这样输出的脉冲就可以直接接在单片机上,进行检测了。
另外74LS74芯片的SET引脚,CLR引脚,VCC引脚都接电源,GND引脚接地。
整个电路就连接完成了。
图6光电编码器电路
3.5整体电路
这是采用网络标号的画出的以一张整体电路图。
它将整张可调直流电机的电路原理图分为七个部分:
电源模块,P0口上拉电阻,1602液晶模块,51单片机,复位晶振电路,控制按键和光电编码器电路。
整张原理看起来美观,明了并且根据标号很容易找到与之对应的引脚。
图7整体电路图
四、软件设计
4.1keil软件介绍
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
单片机开发中除必要的硬件外,同样离不开软件,我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种Keil软件图标是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。
机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。
运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。
掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选(目前在国内你只能买到该软件、而你买的仿真机也很可能只支持该软件),即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
用过汇编语言后再使用C来开发,体会更加深刻。
4.2系统程序流程
1)主程序流程
图8为光电编码器测速系统的主程序流程图。
通过该图可以直观的了解到整个调控程序的大致走向为先扫描每秒钟速度和每分钟速度的控制按键,确定了是显示速度的方式之后,再执行液晶显示程序,显示出速度。
接着又重新回到控制按键扫描的程序中,如此不断重复循环。
图8主程序流程图
2)中断程序流程
图9为光电编码器测速系统的中断程序流程图。
脉冲计数周期主要是由单片机内部精确到毫秒的定时器每次以间隔相同的时间进入中断,中断1000次才形成一个周期。
一个周期的时间到了,就进行一次脉冲计算。
一个周期时间没到就进入主程序。
从而控制每个周期的方波高电平和低电平各自持续的时间,即控制了方波的占空比。
通过该图也可以清晰明了的知道,该中断程序主要涉及的就是方波的调控。
先是判断高电平是否未达到调控的时间,如果未达到则让gdp+1,即让继续高电平保持。
如果gdp为100则说明主程序已经把方波调控到一直保持高电平,就让gdp为0,就可以一直输出高电平了。
如果高电平达到了调控的时间,就让控制电机的两个引脚都为低电平并让ddp+1,即让继续低电平保持。
如果低电平未达到了调控的时间,就进入主程序继续保持低电平等待下一次中断。
如果低电平达到了调控的时间,就让ddp=gdp=0,即重新开始下一个方波。
图9定时器中断程序流程图
五、仿真与实现
5.1proteus软件介绍
Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。
是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的