找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3162|回复: 0
收起左侧

单片机红外对管测扇叶转速设计论文

[复制链接]
ID:368021 发表于 2018-7-9 18:44 | 显示全部楼层 |阅读模式
课外实践设计
单片机红外遥控测扇叶转速

专业年级
学    号
姓    名 (组长)
指导教师
成员

目录

一、设计任务与要求
1.1设计任务
1.2设计要求
二、方案总体设计              3
2.1设计目的              3
2.2硬件功能描述              3
2.3设计方案选择
2.4总体设计              5
2.5总体方案
三、硬件设计              6
3.1 STC89C51芯片              6
3.2电源模块及晶振模块              7
3.3数码管显示模块              8
3.4蜂鸣器部分              9
3.5按键部分
3.6红外部分
3.7整形部分
3.8硬件部分原理图
    3.9 洞洞板设计
四、软件设计
4.1 Keil C简介
4.2系统流程
4.3源程序
    软硬件调试              22
六、设计总结与体会              25
七、参考文献              26


一、设计任务与要求
1.1设计任务

利用红外接收管的“光电导”特性,将扇叶旋转时对光遮挡产生的光信号转换为单片机可处理的脉冲信号,从而实现对扇叶的测速。

1.2设计要求

以51单片机为基础,通过红外对管测量扇叶的旋转速度,用4位数码管显示,超过规定转速时,蜂鸣器警告。


二、方案总体设计

在设计光电转换电路时我们想象用红外发光二极管和红外接收管固定于旋转物体定轴上,在转轴上安装一遮光板,板做成8叶扇形,当转轮旋转时,发光二极管、扇孔、光敏三极管在一条直线上,即有红外光通过,其他时间则由于挡板作用,没有光通过,红外接收管接收红外光转化为一个脉冲,产生一个脉冲说明转八分之一圈。这样只需要测量一秒内光敏三极管输出脉冲个数,就知道转速了,其中我们还利用施密特触发器将光敏三极管产生的脉冲转化为了方波。在设计计时电路时,我们使用555定时器作为施密特触发器。并用51单片机作为信号处理。显示电路就是利用七段式数码显示器将数据显示出来。

2.1设计目的

随着测控技术的高速发展,电机的测速已经成为安全生产必不可少的一部分,本次课程设计一方面是为了巩固自己所学的知识,一方面是了深入了解生产生活:

1)进一步熟练掌握单片机编程的方法和思想。

2)掌握555定时器接成斯密特触发器的方法。

3)学会利用红外对管将光信号转换为脉冲信号。

4)进一步掌握独立式键盘的编程控制并认识独立式键盘在实际中的运用。

5)增强对单片机的兴趣及动手能力, 并在此过程中学会对程序的逐步调试。

2.2硬件功能描述

红外测速仪可以将光信号转换为脉冲信号,即可以将电机在转动过程中对光线遮挡的频率转换为同等频率的脉冲信号,通过单片机内部信号处理,通过四位八段数码管显示转速。另外处于安全的考虑,当电机转速超过某一规定值时,蜂鸣器响以警告,按键2可以控制是否打开此功能。

2.3设计方案选择

1)测速方案:

采用红外对管

红外对管由红外发光管和红外接收管两部分组成:

红外线发射管在LED封装行业中主要有三个常用的波段,如下850NM、875NM、940NM。根据波长的特性运用的产品也有很大的差异,850NM波长的主要用于红外线监控设备,875NM主要用于医疗设备,940NM波段的主要用于红外线控制设备

红外线接收管功能与光敏接收管相似只是不受可见光的干扰,感光面积大,灵敏度高,属于光敏二极管,一般只对红外线有反应。

2)显示方案:

一个良好的显示模块对一个系统来说非常重要,所有操作结果和计时结果,都要通过显示模块来显示出来,同时显示模块提供了良好的人机交互平台。常用的显示模式有LED 、8段数码管显示 、点阵显示和液晶显示。

方案1:液晶显示屏

液晶显示屏(LED)具有轻薄短小,低耗电量,无辐射危险,平面直角显示以及形象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点,但由于液晶其成本偏高,在使用时,不能有静电干扰,否则易烧坏其液晶的显示芯片。

方案2LED数码管

led数码管(LEDSegmentDisplays)是由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。led数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。位数有半位,1,2,3,4,5,6,8,10位等等,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。颜色有红,绿,蓝,黄等几种。led数码管广泛用于仪表,时钟,车站,家电等场合。选用时要注意产品尺寸颜色,功耗,亮度,波长等。

3)整形芯片

由于红外管接收光信号后产生的脉冲波形并不稳定,需要整形成边沿陡峭的电压波形方便单片机处理。

方案一:555定时器

555定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。它也常作为定时器广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。

方案二:74系列芯片

74系列芯片包括有74LS18双四输入与非门(施密特触发)、74LS19六反相器(施密特触发)、74132、74LS132、74S132、74F132、74HC132四2输入与非施密特触发器触发器74221、74LS22174 HC221、74 C221双单稳态多谐振荡器(有施密特触发器)

方案三:LM393

LM393为双电压比较器集成电路,成本低,性能可靠,并可方便的接成正向输入迟滞比较器电路提高抗干扰能力

综合考虑到各方面因素,此课程设计采用红外对管测速,LED数码管显示,NE555为整形芯片

2.4总体设计

总体框架图如图1

图1 总体框架图

由总体框架图可知:整个设计以51单片机为主体,有两个输入,分别为红外接收部分输入,按键输入部分输入;两个输出,数码管输出,蜂鸣器输出。

2.5总体方案

此设计以51单片机为数据处理的中心,红外对管完成数据的采集,按键为输入部分,四位八段数码管和蜂鸣器为输出部分。工作时,首先由红外对管采集数据,经555定时器整形后送往单片机外部中断P3^2进行处理,然后由四位八段数码管进行显示,数码管位选P1^4~P1^7口控制,段选由P0口8位控制,另外按键和蜂鸣器由P1^5~P1^7控制。

三、硬件设计3.1 STC89C51芯片

STC89C51是一个低功耗,高性能CMOS8位单片机,片内含具有如下特点:40个引脚(引脚图如图1-1所示),4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDTC)电路,片内时钟振荡器。

此外,STC89C51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。STC89C51单片机引脚图如图2

图2 单片机引脚图

本系统采用单片机STC89C51为控制核心,系统主要包括播放模块、按键控制模块、红外对管和555芯片模块。下面对各模块的设计逐一进行论证比较。

3.2电源模块及晶振模块

单片机复位时只要保持RST引脚接2us的高电平即可。在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平。单片机系统自动复位。

外接晶振引脚XTAL1和TXAL2接外部晶振和微调电容的一端。振荡电路的频率就是晶体的固有频率。晶振电路结合单片机内部电路产生单片机所需的时钟频率。晶振提高频率越高,单片机运行速度越快。单片机一切指令的执行都是建立在晶振提供的时钟频率上。

另外此系统还设置了自锁开关用来控制整个电路。

模块原理图如图3

图3 电源模块和晶振模块图

3.3数码管显示模块

1)数码管的分类

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(即多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等等数码管;按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

2)四位八段共阴数码管及上拉电阻

51系列的单片机如果是普通,没有强输出的的话,很难驱动数码管,在实际应用中,一般是需要添加三极管驱动的。

数码管的电流计算:每个段的电流乘以8,就当你用的是红色管,这样电流可以设计在5~10mA,这样的话,当显示数字8带点时,电流就是40~80mA,单片机是很难直接输出这么大的电流的,所以需要加驱动.用共阳数码管,P0口做输出就无需加上拉电阻了。

此报告中,数码管的段选为P0口,正常工作时电流约为5~10mA,所以在P0口接1k的排阻以提供5mA左右的电路使数码管正常工作。

数码管及上拉电阻图如图4

图4 数码管及上拉电阻图

3.4蜂鸣器部分

有源蜂鸣器与无源蜂鸣器的区别:

1)内部区别:需要注意的是这里的“源”不是指电源,而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。

2)外观区别:两者的高度略有区别,有源蜂鸣器,高度为9mm,而无源蜂鸣器的高度为8mm。如将两种蜂鸣器的引脚都朝上放置时,可以看出有绿色电路板的一种是无源蜂鸣器,没有电路板而用黑胶封闭的一种是有源蜂鸣器。

3)辨别方式:除了从外观上来看,进一步判断有源蜂鸣器和无源蜂鸣器,还可以用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "-"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。

有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。

无源蜂鸣器的优点是:

1)便宜;

2)声音频率可控 ,可以做出“多来米发索拉西”的效果;

3)在一些特例中,可以和LED复用一个控制口有源蜂鸣器的优点是程序控制方便。

由于客观条件与经济能力有限,本系统采用无缘蜂鸣器,使用s9012三极管驱动,蜂鸣器原理图如图5:

图5 蜂鸣器原理图

3.5按键部分

常用的按键有三种:机械触点式按键、导电橡胶式和柔性按键(又称触摸式键盘)。

机械触点式按键是利用机械弹性使键复位,手感明显,连线清晰,工艺简单,适合单件制造。但是触点处易侵入灰尘而导致接触不良,体积相对较大。导电橡胶按键是利用橡胶的弹性来复位,通过压制的方法把面板上所有的按键制成一块,体积小,装配方便,适合批量生产。但是时间长了,橡胶老化而使弹力下降,同时易侵入灰尘。

柔性按键是近年来迅速发展的一种新型按键,可以分为凸球型和平面型两种。柔性按键最大特点是防尘、防潮、耐蚀,外形美观,装嵌方便。而且外形和面板的布局、色彩、键距可按照整机的要求来设计。

键盘编程中主要考虑去抖动的问题:当测试表明有键被按下之后,紧接着就进行去抖动处理。因为键是机械开关结构,由于机械触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动。为保证键识别的准确,在电压信号抖动的情况下不能进行行状态输入。为此需进行去抖动处理。去抖动有硬件和软件两种方法。硬件方法就是加去抖动电路,从根本上避免抖动的产生。软件消抖,在第一次检测到有键按下时,执行一段延时程序之后,再检测此按键,如果第二次检测结果仍为按下状态,CPU便确认此按键己按下,消除了抖动。

但是由于客观条件与经济能力有限,本系统采用机械触点式按键。共四个,分别为复位键,切换键,功能键。

按键部分原理图如图6:

图6 按键原理图

3.6红外部分

红外对管说明

红外对管是红外线发射管与光敏接收管,或者红外线接收管,或者红外线接收头配合在一起使用时候的总称。红外线接收管红外线接收管功能与光敏接收管相似只是不受可见光的干扰,感光面积大,灵敏度高,属于光敏二极管,一般只对红外线有反应。

红外接收管在红外光线照射的情况下,正向向电阻发生比较大的变化,利用此特性,将红外接收管与一合适电阻串联,光照与无光照时即可输出不同电压。

如图8连接测试电路,调节R5和R4的阻值,当接收管接收到红外光时,接收管两端电压约为1V,当红外光线被遮挡时,接收管两端电压约为4V,然后使用555接成斯密特触发器输出即可

图7为红外接收原理图

图7红外接收

3.7整形部分

555定时器成本低,性能可靠,只需要外接几个电阻、电容,就可以实现多谐振荡器、单稳态触发器及施密特触发器等脉冲产生与变换电路。它也常作为定时器广泛应用于仪器仪表、家用电器、电子测量及自动控制等方面。

它内部包括两个电压比较器,三个等值串联电阻,一个RS触发器,一个放电管T及功率输出级。它提供两个基准电压VCC/3和2VCC/3。

555定时器的功能主要由两个比较器决定。两个比较器的输出电压控制RS 触发器和放电管的状态。在电源与地之间加上电压,当5脚悬空时,则电压比较器C1的反相输入端的电压为 2VCC/3,C2 的同相输入端的电压为VCC /3。若触发输入端TR的电压小于VCC/3,则比较器 C2的输出为0,可使 RS触发器置1,使输出端OUT=1。如果阈值输入端 TH 的电压大于2VCC/3,同时TR端的电压大于VCC/3,则C1的输出为0,C2的输出为1,可将 RS触发器置0,使输出为0电平。

它的各个引脚功能如下:

1. 1脚:外接电源负端VSS或接地,一般情况下接地。

2. 2脚:低触发端。

   3.3脚:输出端Vo。

   4. 4脚:是直接清零端。当此端接低电平,则时基电路不工作,此时不论TR、TH处于何电平,时基电路输出为“0”,该端不用时应接高电平。

5. 5脚:VC为控制电压端。若此端外接电压,则可改变内部两个比较器的基准电压,当该端不用时,应将该端串入一只0.01μF电容接地,以防引入干扰。

6. 6脚:TH高触发端。

7. 7脚:放电端。该端与放电管集电极相连,用做定时器时电容的放电。

8. 8脚:外接电源VCC,双极型时基电路VCC的范围是4.5 ~ 16V,CMOS型时基电路VCC的范围为3 ~ 18V。一般用5V。

555芯片接口如下图,本电路是将555做施密特触发器,对霍尔传感器输出的信号进行整形,然后在输出给单片机的外部中断口进行计数,可以有效减少计数干扰。

图8 NE555原理图

3.8硬件部分原理图

3.9 洞洞板设计

通过这次课程设计,验证了以前很多的不确定性,如:那种我们使用的比较小的线能否承载我们想要的电流、三极管基极工作电流以及集电极工作电流的计算、器件摆放对整个万用板焊接时的方便程度、以及模型线和段线的选择、焊接时的一些小细节。

而对于各种元器件来说,更为深刻的体会到其数据手册的实用性,但还是要考虑其数据手册尽量使用英文版的,中文版的数据手册往往在翻译的时候会出现纰漏。

再设计硬件整过中,要充分考虑到你的走线对你的焊接时的影响,同时也要考虑到后期对器件的电气检查时的方便程度,这样有利于后期维护及保障器件的可靠性。

根据自己动手的实际情况,总结出自己本次设计中硬件焊接方面的不足之处,经过自己的理解,总结出了一些关于实物焊接的注意事项:




    • 烙铁的使用

掌握好电烙铁的温度和焊接时间,选择恰当的烙铁头和焊点的接触位置,才可能得到良 好的焊点。正确的手工焊接操作过程可以分成五个步骤:

步骤一:准备施焊:左手拿焊丝,右手握烙铁,进入备焊状态。要求烙铁头保持干净,无焊渣等氧化物,并在表面镀有一层焊锡。

步骤二:加热焊件:靠在两焊件的连接处,加热整个焊件全体,时间大约为1~2秒钟。对于在印制板上焊接元器件来说,要注意使烙铁头同时接触两个被焊接物。

步骤三:送入焊丝焊件的焊接面被加热到一定温度时,焊锡丝从烙铁对面接触焊件。注意:不要把焊锡丝送到烙铁头上!

步骤四:移开焊丝当焊丝熔化一定量后,立即向左上45°方向移开焊丝。

步骤五:移开烙铁焊锡浸润焊盘和焊件的施焊部位以后,向右上45°方向移开烙铁,结束焊接。从第三步开始到第五步结束,时间大约也是1~2秒。







    • 焊接方法

1.保持烙铁头的清洁。

2.靠增加接触面积来加快传热,加热要靠焊锡桥。

3.烙铁撤离有讲究,烙铁的撤离要及时,而且撤离时的角度和方向与焊点的形成有关 。尽量使焊锡呈现出三角锥型,防止出现虚焊现象。

4.在焊锡凝固之前不能。

5.焊锡用量要适中,过多的焊锡不仅浪费材料,而且恩容易造成虚焊,在调试班子的过程中出现很多类似接触不良问题而引起的调试过程不便。

6..不要使用烙铁头作为运送焊锡的工具。





    • 焊点外观

1.形状为近似圆锥而表面稍微凹陷,呈漫坡状,以焊接导线为中心,对称成裙形展开。虚焊点的表面往往向外凸出,可以鉴别出来。

2.焊点上,焊料的连接面呈凹形自然过渡,焊锡和焊件的交界处平滑,接触角尽可能小

3.表面平滑,有金属光泽。

4.无裂纹、针孔、夹渣。

4)万能板焊接技巧

在我们焊接板子的过程中,由于焊接基本功的不扎实,容易短路或断路。除了布局不够合理和焊锡不良等因素外,缺乏技巧是造成这些问题的重要原因之一。掌握一些技巧可以使电路反映到实物硬件的复杂程度大大降低,减少飞线的数量,让电路更加稳定。下面就自己焊接的感受谈谈PCB的焊接技巧。

1.初步确定电源、地线的布局:电源贯穿电路始终,合理的电源布局对简化电路起到十分关键的作用。某些PCB布置有贯穿整块板子的铜箔,应将其用作电源线和地线;如果无此类铜箔,你也需要对电源线、地线的布局有个初步的规划。

2.善于利用元器件的引脚:PCB的焊接需要大量的跨接、跳线等,不要急于剪断元器件多余的引脚,有时候直接跨接到周围待连接的元器件引脚上会事半功倍。另外,本着节约材料的目的,可以把剪断的元器件引脚收集起来作为跳线用材料。

3.善于设置跳线:特别要强调这一点,巧妙的设置跳线不仅可以简化连线,而且要美观得多。

4.善于利用元器件自身的结构:笔者焊接的矩阵键盘。这是一个利用了元器件自身结构的典型例子:图中的轻触式按键有4只脚,其中两两相通,我们便可以利用这一特点来简化连线,电气相通的两只脚充当了跳线。

5.善于利用排针:排针有许多灵活的用法。比如两块板子相连,就可以用排针和排座,排针既起到了两块板子间的机械连接作用又起到电气连接的作用。这一点借鉴了电脑的板卡连接方法。



3.10焊接实物图


四、软件设计4.1 Keil C简介

本次设计使用keil 软件进行程序的编辑与编译。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。KeiluVision2是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,使用接近于传统C语言的语法来开发,与汇编相比,C语言易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近于汇编的工作效率。KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。

4.2系统流程

图9 程序流程图

主函数:

  •    打开定时器中断和外部中断。
  •    进入主循环。
  •    检测按键。
  •    检测转速超额:若每秒转速超过额定值,蜂鸣器响。

外部中断:

1 )  检测到P3^2口低电平,计数值加一。

定时器部分:

1)  定时器设置定时2ms,中断调用显示函数,即每2ms调用显示函数一次,用数码管动态扫描的方法,使数码管实现动态显示。

2)  定时器计时中断500次即每隔1s时读取外部中断的计数值

  • 软硬件仿真
5.1 仿真软件简介

Proteus是由Labcenter Electronics开发的功能强大的单片机仿真软件,现在最新版本6.9 SP5,其演示版本可在其官方网站下载。

Proteus与其他的仿真软件相比较,在下面的优点

1)能仿真模拟电路、数字电路、数模混合电路;

2)能绘制原理图、PCB图;

3)几乎包括实际中所有使用的仪器 ;

4)其最大的亮点在于能够对单片机进行实物级的仿真。从程序的编写,编译到调试,目标版的仿真一应俱全。支持汇编语言和C语言的编程。还可配合Keil C实现程序的联合调试,将Proteus中绘制的原理图作为实际中的目标板,而用Keil C集成环境实现对目标板的控制,与实际中通过硬件仿真器对目标板的调试几乎完全相同,并且支持多显示器的调试,即Proteus运行在一台计算机上,而Keil C运行在另一台计算机上,通过网络连接实现远程的调试。

5.2硬件调试

硬件调试是针对单片机部分进行的调试。在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况的任务。注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。

在确保硬件电路正常且无异常情况(短路或断路)的情况下方可上电调试,上电调试的口的是检测单片机控制部分、数码管点亮部分、和音频转换电路硬件调试。

1)数码管LED电路调试:接通电源,按下六脚开关可以看到数码管显示数字。

2)按键调试:接通电源,按下按键一,数码管量程切换。

3)红外对管调试:接通电源,用纸片从红外对管中间划过,可看到数码管有显示。

5.3软件调试

调试主要方法和技巧:通常一个调试程序应该具有至少四种性能:跟踪、断点、查看变量、更改数值。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序进行分别调试。

1)数码管调试:数码管调试部分主要是让数码管可以实现三种不同的量程,调试效果图如图10:

              

图10 三种不同量程的数码管显示效果

2)输入部分调试:由于proteus仿真中无法实现模拟红外对管的实际效果,所以以正弦波代替红外输出的电压波形,用555整形,原理图和整形效果如图11

图11 555接成斯密特触发器和整形效果

5.4使用说明

1)单片机分别接VCC和GND使单片机处于供电状态;

2)接上TXD和RXD将程序导入单片机中;

3)按下六角开关,可到指示灯亮后,数码管显示000.0;

4)电机装挡板置于红外对管中间,工作时数码管即可显示当前平均1s的转速。

软硬件仿真图:

六、设计总结与体会

进行了一个多月的设计在不知不觉中结束,当遇到一个细节部分的设计障碍时,那是绞尽脑汁,煞费苦心,通过我们团队查阅资料以及同学的交流讨论,老师的引导点化,一个个难点最终一一击破。

通过这次的设计,使我们对红外线测速仪的基本原理有了一个初步的认识,同时也使我掌握了设计的基本思想和方法。即根据设计目的和用途先进行原理的转换,再确定电路方案,根据原理图选择所需要的器件,最终连线仿真测试,测试中再不断完善电路和方案。同时我们也感到了我们数电知识的匮乏和思路的局限性,要设计好一个方案,必须纵观全局,知难而进,锐意进取。总之这次设计让我受益匪浅,不仅用实践巩固了所学的知识,而且学到了解决实际问题的方法,积累了经验。我们在以后的学习实践中会更加认真仔细,当然,这次设计的完成还要感谢老师的指导和帮助。


焊接说明

本说明仅以某一个例子对板子焊接方法进行说明,并不针对所购买的特定模块,方法是一致的,希望灵活掌握与运用。拿到套件资料的时候会有以下两个图:

1 焊接正面图

2 焊接背面图(镜像图)


拿到套件时切忌直接焊接,请把器件清单仔细阅读,同时仔细阅读“焊接正面图”和“焊接背面图”的相关说明,并对器件的特性进行了解,比如极性、公共端、方向等。

在上述工作的基础上建议根据“焊接正面图”中器件的分布,用MARK笔将所有器件的管脚在洞洞板上标注出来(无焊盘的那面)MARK笔粗头在板子上对应的孔上点一下就可以了,具体如下:

3 器件管脚分布图

标注出器件管脚分布之后,并仔细与“焊接正面图”进行对照,确保无误,尤其需要注意的是模板可能和实际洞洞板尺寸有差异。在保证无误情况下,将原件焊接到洞洞板上,焊接过程中重点注意有方向性的器件焊接,确保焊接无误。焊接完的板子如下图所示。

注意:

数码管版本:晶振和单片机IC座略有点打架,先焊单片机IC座,再焊晶振,焊的时候将晶振焊至晶振底面与IC座塑料壳平齐高度,再往右边略掰一下,不挡单片机即可;

液晶版本:发光二极管和IC座略有点打架,先焊发光二极管,发光二极管要插到底,再焊单片机IC座和边上的复位按键。

4 焊完器件的洞洞板

焊接完器件之后,参考图2,用MARK笔(那种笔头较尖的,写光盘的),照图所示,将所有导线在洞洞板上绘出;飞线暂时放一边,不要绘制;同时某些细小的连接不方便绘制,可以暂时放一边,把主要的线路绘制完成即可。如下图所示:

5 绘制线路图


然后根据板上所绘制的线路,利用去皮的导线或者焊锡,贴着洞洞板,沿线路将各个焊盘连接(建议长线用去皮导线连,短线用焊锡连,这样快捷省锡),中间适当在几个点上点下锡,起固定作用。然后补齐各个细小的连线。最后将焊好的板子和图2进行对照,确保线路无问题,并仔细检查板上有无“短路和断路”,尤其是有时候某个焊盘上焊锡有一丝丝和周围焊盘连通的情况,需要特别注意,这种现象很容易被忽视。最后,处理飞线,用带皮导线将红色线标注有焊盘的地方连接上,注意飞线外皮不要剥太多,以致与周围焊盘短路。

完成上述工作之后,仔细核对线路和短路的问题,最后上电测试。


单片机源程序如下:
  1. #include<reg52.h>
  2. #define DataPort P0//定义P1口
  3. sbit moshi = P3^3;
  4. sbit INC = P3^4;
  5. sbit DEC = P3^7;
  6. sbit SPK=P3^6;//蜂鸣器引脚
  7. unsigned long warnspeed=50;
  8. unsigned char moshicount=1;
  9. unsigned char code DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//断码
  10. unsigned char code DuanMa1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//加小数点显示断码
  11. unsigned char code WeiMa[]={0xef,0xdf,0xbf,0x7f};//位码
  12. unsigned char TempData[8];//存储显示值的全局变量
  13. unsigned long speedtmp=0,speed=0;                //外部中断每秒计数,每秒速度
  14. unsigned short sectime=0;                            //单个定时2MS,定时满sectime=50为一秒
  15. void Ini_int(void);//定时器打开
  16. void Display(unsigned char);//显示函数
  17. void Delay(unsigned int t);//延时us级
  18. void DelayMs(unsigned char t);//延时ms级
  19. /*----------------------------------------中断打开------------------------------------------------*/
  20. void Ini_int(void)
  21. {
  22. TMOD |= 0x01;            
  23. IP=1;                                  //外部中断0为高优先级
  24. EA=1;            //总中断打开
  25. ET0=1;           //定时器中断打开
  26. TR0=1;           //定时器开关打开
  27. EX0=1;           //外部中断打开
  28. IT0=1;           //边沿触发方式,不能采用电平方式
  29. }
  30. /*-------------------------------------定时器中断子程序----------------------------------------*/
  31. void Timer0_isr(void) interrupt 1
  32. {
  33. TH0=(65536-2000)/256;                              //重新赋值 2ms
  34. TL0=(65536-2000)%256;
  35. sectime++;
  36. if(sectime>=250)                                                        //定时到一秒则开始计算速度
  37. {
  38. sectime=0;
  39. speed=speedtmp*20/4;              //10为将速度扩大10倍,为小数显示作准备4为扇叶一周的脉冲数
  40. speedtmp=0;            
  41. }
  42. if(speed>warnspeed*10)                                                                                    //高于50转打开警告
  43. {
  44. SPK = !SPK;
  45. }
  46. else              SPK = 1;
  47. }
  48. /*----------------------------------外部中断子程序-----------------------------------*/
  49. void pulse(void) interrupt 0//外部中断0
  50. {
  51. speedtmp++;//计数加1
  52. }
  53. /*----------------------------------显示函数-----------------------------------------*/
  54. void Display(unsigned long int speed)
  55. {
  56. if(speed>10000)              speed=speed%10000;
  57. TempData[0]=DuanMa[speed%10000/1000];
  58. TempData[1]=DuanMa[speed%1000/100];
  59. TempData[2]=DuanMa1[speed%100/10];//第三位带小数点
  60. TempData[3]=DuanMa[speed%10];
  61. P2=WeiMa[0];                   //送位选信号
  62. DataPort=TempData[0];                                           //送数据
  63. Delay(250);
  64. P2=WeiMa[1];                   //送位选信号
  65. DataPort=TempData[1];                                           //送数据
  66. Delay(250);
  67. P2=WeiMa[2];                   //送位选信号
  68. DataPort=TempData[2];                                           //送数据
  69. Delay(250);
  70. P2=WeiMa[3];                   //送位选信号
  71. DataPort=TempData[3];                                           //送数据
  72. Delay(250);
  73. P2=0xff;
  74. }
  75. /*--------------------------------延时函数us级-------------------------------------*/
  76. void Delay(unsigned int t)
  77. {
  78.               while(--t);
  79. }
  80. /*--------------------------延时函数ms级-------------------------------------------*/
  81. void DelayMs(unsigned char t)
  82. {
  83.               while(t--)
  84.               {
  85.      //大致延时1mS
  86.                             Delay(245);
  87.                             Delay(245);
  88.               }
  89. }              */
  90. //阈值设置函数
  91. void shezhi()
  92. {
  93.                 if(moshi==0)              //moshi键按下
  94.                 {
  95.                               Delay(250);
  96.                               if(moshi==0){
  97.                                                            moshicount++;
  98.                                                            if(moshicount>2)moshicount=1;
  99.                                                            while(moshi==0);
  100.                                }
  101.                  }
  102.                  switch(moshicount)
  103.                  {
  104.                                           case 1:
  105.                                 {            
  106.                                                         Display(speed);                                                        //显示转速
  107.                                                         break;
  108.                                  }
  109.                                           case 2:
  110.                                           {
  111.                                               if(INC==0)              //INC按下warnspeed加1
  112.                                               {
  113.                                                              Delay(250);
  114.                                                              if(INC==0){
  115.                                                                            warnspeed=warnspeed+10;
  116.                                                                                     if(warnspeed>200)warnspeed=200;
  117.                                                                                     while(INC==0);
  118.                                                                       }
  119.                                                }
  120.                                                if(DEC==0)   //DEC按下warnspeed减1
  121.                                                {
  122.                                                               Delay(250);
  123.                                                              if(DEC==0){
  124.                                                                                     if(warnspeed==0)warnspeed=10;
  125.                                                                                     warnspeed=warnspeed-10;
  126.                                                                 while(DEC==0);
  127. ……………………

  128. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
红外对管测电机转速.doc (6.68 MB, 下载次数: 29)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表