14系统硬件设计硬件主要以8051型单片机为核心,功能电路主要包括超声波测距电路、光线报警电路、定时报警电路以及报警发声电路等核心电路。利用单片机的C语言和汇编语言进行编程。图4.1是本系统设计的基本框图。图4.1系统设计基本框图4.1超声波测距4.1.1超声波测距原理超声波发生器可以分为两大类:一类是用电气方式产生超声波,一类是用机械方式产生超声波。电气方式包括压电型、电动型等;机械方式有加乐统笛、液哨气流旋笛等,它们所产生的超声波的频率、功率和声波特性各不相同,因面用途也各不相同。目前在近距离测量方面较为常用的是压电式超声波换能器。根据设计要求并综合各个方面因素,采用压电式超声波换能器。超声波测距系统设计框架如图4.2所示。超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2。这就是所谓的时间差测距法。超声波测距的原理是利用超声波在空气中的传播速度为已知,测量超声波测距电路声光报警电路单片机光敏二极管检测电路2声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。图4.2超声波测距系统设计框图测距的公式表示为:L=C×T式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。超声波测距误差分析根据超声波测距公式L=C×T,可知测距的误差是由超声波的传播速度误差和测量距离传播的时间误差引起的。时间误差:当要求测距误差小于1mm时,假设已知超声波速度C=344m/s(20℃室温),忽略声速的传播误差。测距误差s△t(0.001/344)≈0.000002907s即2.907μs。在超声波的传播速度是准确的前提下,测量距离的传播时间差值精度只要在达到微秒级,就能保证测距误差小于1mm的误差。使用的12MHz晶体作时钟基准的89C51单片机能方便的计数到1μs的精度,因此系统采用89C51定时器能保证时间误差在1mm的测量范围内。超声波传播速度误差超声波的传播速度受空气的密度所影响,空气的密度越高则超声波的传播速度就越快,而空气的密度又与温度有着密切的关系。对于超声波测距精度要求达到1mm时,就必须把超声波传播的环境温度考虑进去。例如当温度0℃时超声波速度是332m/s,30℃时是350m/s,温度3变化引起的超声波速度变化为18m/s。若超声波在30℃的环境下以0℃的声速测量100m距离所引起的测量误差将达到5m,测量1m误差将达到5mm。4.1.2超声波发射电路超声波发射电路原理图如图4.3所示。发射电路主要由反向器74SL04和超声波发射换能器K3构成,单片机P1.0端口输出的40kHz方波信号一路经一级反向器后送到超声波换能器的一个电极,另一路经两级反向器后送到超声波换能器的另一个电极。用这种推挽形式将方波信号加到超声波换能器两端,可以提高超声波的发射强度。输出端采用两个反向器并联,用以提高驱动能力。上拉电阻R16、R17一方面可以提高反向器74LS04输出高电平的驱动能力,另一方面可以增加超声换能器的阻尼效果,缩短其自由振荡的时间。压电式超声波换能器是利用压电晶体的谐振来工作的。超声波换能器有两个压电晶片和一个共振板。当它的两个极外加脉冲信号,其频率等于压电晶片的固有振荡频率时,压电晶片将会发生共振,并带动共振板振动产生超声波,这时它就是一个超声波发生器;反之,如果两电极间示外加电压,当共振板接收到超声波时,将压迫压电晶片作振动,将机械能转换为电信号,这时它就成了超声波接收换能器了。4.1.3超声波检测接收电路集成电路CX20106A是一款红外线检波接收的专用芯片,常用于电视机红外遥控接收器。考虑到红外遥控常用的载波频率38kHz与测距的超声波频率40kHz较为接近,可以利用它制作超声波检测接收电路,如图4.4所示。据以往的经验表明用CX20106A接收超声波(无信号时输出高电平),具有很高的度和较强的抗干扰能力。适当更改电容C11的大小,可以改变接收电路的灵敏度和抗干扰能力。4图4.3超声波发射电路图4.4超声波接收电路4.2环境光检测由光敏二极管检测环境中的光线强弱,反馈给单片机,再由单片机控制报警电路的工作与否。环境光检测模块的流程图如图4.5所示。5图4.5环境光检测模块流程图图4.6光敏控制电路环境光检测是比较重要的一个部分,其中关键的元件有两个,一个是光敏二极管,一个是4.7K的电阻。光敏二极管与普通二极管最大的区别就是当有光照射时,光敏二极管的反向电阻会大大降低,所以光敏二极管要反向接入电路使用。这个电阻的作用限制通过电路的电流,从而达到减少功耗或满足端口最大电流的限制。灯光暗的情况下,系统会发出声音和闪灯提示用户自己开灯。灯光暗的时候光敏传感器测不到光,所以是开闭的,因此三极管不被导通,C极的电位等于5V,P20=5V,单片机P2.0测到的是低电平。此低电平会让声光报警电路中的三极管导通,从而导通报警电路,发出声光提示。光亮的时候Dtt始终是导通的,三极管是导通状态,所以这个时候我们可以认为C极电位和B极电位都是低电平,因此单片机测到p30是低电平,p20是高电平,不会使报警电路中的三极管导通,也就不能让报警电路发出声光提示。4.3声光报警电路声光的报警电路的工作流程图如图4.7所示。图4.7声光报警电路原理流程图光敏二极管单片机声光报警电路三极管导通报警电路导通发出声光提示6声光的报警电路的原理图如图4.8所示。图4.8报警电路原理图此报警电路的工作原理为:当P20端口输入为高电平时,三极管截止,整个报警电路也就处于断开状态,电路不工作,没有声光报警。当P20端口输入为低电平时,三极管导通,从而促使整个报警电路导通,电路工作,发出声光报警提示使用者注意坐姿或者开灯。75软件设计由于简单的程序可以用汇编明显提高执行速度,但在大型程序开发时,需要考虑多方面因素,工程开发周期等需要合理选择编程语言,所以本文主要采用单片机汇编语言来完成软件设计和程序代码的编写,程序简单易懂,可执行性强。5.1系统软件设计主程序流程图如图5.1所示。NYYNNY图5.1主程序流程图开始光亮?距离是否过近?声光提示45分钟到?8软件采用KeilSoftware,使用c语言和单片机汇编语言共同编写。因为汇编可以完成有些C语言完成不了的操作。程序中对时间要求苛刻的部分可以用内嵌汇编来重写,以促进速度上的显著提高。但是,开发和测试汇编代码是一件辛苦的工作,它将花费更长的时间,因而要慎重选择要用汇编的部分。一个合格的程序员应该是写出高质量标准化程序。5.2主要程序介绍本设计采用汇编语言和C语言编写。汇编语言比机器语言易于读写、调试和修改,同时具有机器语言全部优点。汇编语言的特点:①.面向机器的低级语言,通常是为特定的计算机或系列计算机专门设计的。②.保持了机器语言的优点,具有直接和简捷的特点。③.可有效地访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。④.目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。⑤.经常与高级语言配合使用,应用十分广泛。采用汇编语言编程与采用高级语言编程相比,有以下优点:1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用内存单元和CPU少,执行速度快。2)可直接调用访问存储器,输入/输出接口以及扩展的各种芯片,也可以直接处理中断,因此,它能直接管理和控制硬件设备。3)能准确的掌握指令的执行时间,适用于实时控制系统。程序设计,就是用计算机所能接受的形式把解决问题的步骤描述出来。简单的说,程序设计就是编制计算机程序。汇编语言程序设计就是采用汇编指令来编写计算机程序,对应用中需要使用的寄存器,存储单元,I/O端口等要先做出具体安排。骤为:①根据设计要求计算出各个元件的初值,并通过汇编语言设定初值。②启动各个元器件。③检测各个元器件的信号,看是否满足条件。④根据条件是否得到满足执行各自的中断程序,触发报警发声电路。各个主要程序段介绍如下:9设计要求满足定时45分钟后报警,其初值计算如下:45min*60=2700s=54000*50ms50ms用T0定时设置T0工作方式1,54000次用T1计数,设T1工作方式为11。T0的定时初值为:2^16-100ms/2us=15536=C3B0H;T1的计数初值为65536-30000=35536=8AD0H5.3超声波测距的软件设计超声波测距的的程序设置定时器T0工作模式为16位定时计数器模式,总中断允许位EA并给显示端口P0和P2清0.然后调用超声波发生子程序送出一个超声波脉冲,为了避免超声波从发射器直接传送到接收器引起的直射波触发,需要延时约0.1ms(这就是超声波测距会有一个最小可测距离的原因)后,才打开外中断0接收返回的超声波信号。由于采用的是12MHz晶振,计数器每计一个数就是1us,当主程序检测到接收成功的标志位后,计数器T0中的数(即超声波来回所用的时间)按式(5.1)计算,即可得被测物体与测距器之间的距离,设计时取20℃时的声速为344m/s则有d=(c*t)/2=172*T0/10000cm(5.1)式中T0为计数器T0的计数值。在超声测距中,一般采用40KHz的信号。可以通过硬件来产生,比如555,CMOS电路CD4046。还可以通过软件来产生。本方案中采用单片机软件产生。关于40KHz信号的产生。如果用单片机定时器中断产生,要特别注意中断服务程序的编写。中断服务不能过长,如果过长,单片机在前一个中断服务程序还没执行完之前,又会有下一个中断产生。所以,单片机将会产生一个错误频率的信号。往往这个错误的频率会比预期的值偏低。比如程序原本要产生一个40KHz的信号。实际单片机只能产生一个20KHz左右的信号。10NY图5.2超声波测距程序流程图40KHz的信号可以用一个汇编语言子程序来产生。程序如下:NAMECS_T?PR?CS_T?CS_TSEGMENTCODEPUBLICCS_TRSEG?PR?CS_T?CS_TCS_T:PUSHACCMOVTH0,#00HMOVTL0,#00HMOVA,#4D等待反射超声波计算距离系统初始化发送超声波脉冲开始声光提示小于35cm?11SETBTR0CST_1:CPLP1.0NOPNOPNOPNOPNOPNOPNOPNOPNOPDJNZACC,CS_T1POPACCRETEND5.4定时模块的软件设计主程序的流程图如图5.3所示,采用模块的方法设计,先规划出各功能子模块,然后各个击破,这也是软件开发的方式。图5.4使定时器T0的中断程序流程图,图5-5使计数器T1终端服务流程图,其程序设计原理如下:单片机控制电路由8051单片机的P3.4和P3.5即T0和T1定时/计数器通过单片机的汇编语言来实现!定时时间为45分钟,其计时初值可计算如下:45*60=2700s=54000*50ms100ms用T0定时设置T0工作方式1,54000次用T1计数,设T1工作方式为11。T0的定时初值为:2^16-100ms/2us=15536=C3B0H;T1的计数初值为65536-30000=35536=8AD0H其中T0为定时器,T1为计数器,定时器T0定时100ms后,计数器T1计数一次,此时,定时器T0进行中断服务程序ZDT0进行定时器T0循环定时进入下一个定时周期,当满足又一次定时满50ms时,再由计数器T1计数一次,如此循环下去,直到满足计数器T1计数54000次,计数器T112进入中断服务程序ZDT1,其功能是使单片机的P3.0引脚发送一个脉冲触发定时报警发声电路,由定时报警发声电路发出报警信号,使学生意识到已经学习了45分钟了,需要休息一下,进而达到保护学生视力的目的。此时,学生应关闭视力保护器电源,休息后在