《电子工程师项目教学与训练》课件第8章.ppt

上传人(卖家):momomo 文档编号:8216351 上传时间:2025-01-09 格式:PPT 页数:72 大小:890.50KB
下载 相关 举报
《电子工程师项目教学与训练》课件第8章.ppt_第1页
第1页 / 共72页
《电子工程师项目教学与训练》课件第8章.ppt_第2页
第2页 / 共72页
《电子工程师项目教学与训练》课件第8章.ppt_第3页
第3页 / 共72页
《电子工程师项目教学与训练》课件第8章.ppt_第4页
第4页 / 共72页
《电子工程师项目教学与训练》课件第8章.ppt_第5页
第5页 / 共72页
点击查看更多>>
资源描述

1、第第8 8章章 超声波测距仪设计超声波测距仪设计 8.1 引言引言8.2 超声波测距仪设计任务超声波测距仪设计任务8.3 设计方案设计方案8.4 硬件电路设计硬件电路设计 8.5 软件设计软件设计 8.6 程序清单程序清单8.1 引引 言言距离测量与工农业生产及人们的日常生活息息相关,随着科学技术的不断进步,人们对距离测量的方式、方法不断创新,测量的精度和效率不断提高,距离测量的应用不断扩展。超声波具有沿直线传播、指向性强、绕射小、传输过程中衰减少、传播的距离较远及遇到障碍面时会产生反射等特点,应用于距离测量可以解决现实中许多实际的难题,具有广泛的应用前景。8.2 超声波测距仪设计任务书超声波

2、测距仪设计任务书1设计任务设计任务设计制作一台以单片机为微控制器、以超声波探头为传感器的超声波测距仪,测量结果采用数码管进行显示,并且可以通过按键控制测量方式。2设计要求设计要求(1)超声波探头:采用两个40 kHz超声波探头进行测量,其中一个探头用于发射,一个探头用于接收。(2)系统构成:采用单片机作为系统的主控制器,通过4位LED数码管来显示测量结果,可通过键盘灵活设置测距仪的工作方式。(3)测量方式的设置:可通过键盘设置测距仪工作于四种工作方式,这四种方式为连续测量方式、单次测量方式、单次测量延时回零方式及对射测量方式。进入某种方式后由LED指示相应的方式。(4)测量范围及误差:测量范围

3、为0.15.0 m,误差范围为0.01 m。(5)电路输入电压:采用单一+12 V电源供电,系统内部数字部分电源由+12 V电源变换得到。(6)适用范围:能够用于较短距离、非接触或者接触条件下快速、准确的距离测量。8.3 设设 计计 方方 案案1超声波测距仪的基本原理超声波测距仪的基本原理超声波测距仪进行距离测量的基本原理是:超声波发射探头发射超声波信号,然后由接收探头接收发射波或反射波,测出超声波在空气中的传播时间,由时间进而计算出超声波在空气介质中传播的距离。具体测量方法可以分两种:反射法测量和对射法测量。1)反射法测量 如图8-1所示为反射法测量的原理示意图。该方法是检测超声波从发射端发

4、出到遇到障碍物反射产生回波被接收探头测到的时间,由该时间计算超声波发射端到障碍物之间的距离。设超声波在空气中的传播速度为v,由图8-1可以看出,超声波由发射到被反射回来总的传播时间为t+t1+t2,其中t为超声波测距的盲区时间(当超声波测量距离小于该时间对应的传输距离时测距离将无法测量,这称为盲区)。由超声波的传播时间可以计算出探头与障碍物之间的距离S为在一定的温度条件下,超声波在空气中传播的速度为一常数,因此只要测得超声波的传输时间,就可以计算出距离。221tttvS图8-1 反射法测量原理示意图 2)对射法测量如图8-2所示是对射法测量的原理示意图。发射探头发出的超声波沿直线传播并直接被接

5、收探头接收,超声波在两个探头之间传播的时间即代表了两个探头之间的距离。反射法和对射法测量的本质没有什么区别,但在具体应用时却有着较大的区别。反射法主要应用于非接触的距离测量,如汽车的倒车雷达等;而采用对射法测量时,两个探头是分开安装的,通常一个固定、另一个可以随被测物体移动,多用于接触式的测量。图8-2 对射法测量原理示意图 2超声波信号的产生方式超声波信号的产生方式频率为40 kHz的方波可以由两种方式产生:第一种方法是用门电路构成可控多谐振荡器,如图8-3所示,只要电路中的各个元件的参数设置合适,在接通电源后,就会产生40 kHz的方波,这种方法需要设置可控多谐振荡电路,硬件电路成本高,频

6、率稳定性较差;第二种方法是用单片机的定时/计数器直接控制产生40 kHz的方波,这种方式在应用时只要定时时间设置合适,就会产生标准的方波,而且硬件电路无需增加其他成本。综合上面两种方式,这里采用第二种方式来产生40 kHz的方波。图8-3 可控多谐振荡 用单片机产生40 kHz的方波可以有两种选择:第一种是用只有两个定时计数器的51系列单片机,第二种是用含有3个定时计数器的52系列单片机。相对于51系列单片机而言,52系列单片机含有3个定时计数器,除和51系列单片机相同的T0、T1外,还多了定时器T2,而且T2还可以工作于重载、时钟输出等多种模式下,可方便地产生标准40 kHz的方波。综合以上

7、考虑,这里采用第二种选择。3超声波测距仪原理框图超声波测距仪原理框图图8-4是超声波测距仪的原理框图。图8-4 超声波测距仪原理框图 8.4 硬件电路设计硬件电路设计8.4.1 主处理器及其外围电路设计主处理器及其外围电路设计此次设计中的主控制器选用AT89S52。AT89S52是一种低功耗、高性能的8位CMOS微控制器,具有8 KB在系统可编程Flash 存储器。该芯片使用Atmel公司的高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容,并且片上Flash允许程序存储器在系统可编程,也可以用常规编程器编程。其主要性能如下:(1)与MCS-51单片机产品兼容。(2)8 K

8、B字节在系统可编程Flash存储器。(3)1000次擦写周期。(4)全静态操作:033 Hz。(5)三级加密程序存储器。(6)32个可编程I/O口线。(7)三个16位定时器/计数器。(8)八个中断源。(9)全双工UART串行通道。(10)低功耗空闲和掉电模式。(11)空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。(12)看门狗定时器。(13)双数据指针。(14)掉电标识符。(15)含片内晶振及时钟电路。图8-5是主控制器及其外围电路。图8-5 主控制器及其外围电路 该系统采用了外部晶振作为时钟源,系统的复位电路采用了普通的按键复位电路。ISP接口是用来下载程序的,

9、当程序需下载到单片机内部时,用下载线连接计算机与该接口,即可很快完成程序下载固化,无需专用的编程器,开发方便,节省成本。在下载程序时,占用单片机的并口即P1.5P1.7,但是这并不影响P1口的正常使用。P1.0是定时计数器T2的时钟输出口,用来控制输出40 kHz的方波,该端口接在超声波发送端的驱动反相器上。P2.0P2.3接译码显示电路,用来输出显示数据,P1.1P1.4是译码器的片选端。CS_S是超声波的接收端口,P0.0P0.3接控制按键,用来控制测量方式。P0.4P0.7接LED发光二极管,可以用来指示测量距离的方式。PZ1是10 k的排阻,因为P0口内部本来不含有上拉电阻,当把P0口

10、作为一般I/O口使用时必须外接上拉电阻,以便P0口能正常工作。8.4.2 超声波发射与接收电路设计超声波发射与接收电路设计1超声波发射电路超声波发射电路超声波的发射电路如图8-6所示。超声波发射电路的功能是把40 kHz的信号转换为同频率的超声波信号并发射出去。为了取得较好的发射效果,要求加在超声波发射探头上的信号频率与探头本身的固有频率一致,并且驱动信号具有一定的强度。图8-6中,JP为一个跳线座,当2、3脚短接时,超声波的信号源由硬件构成的多谐振荡器产生;当1、2脚短接时,信号源由单片机产生。在实际的制作中采用了后一种方案,即由单片机的定时器T2来产生40 kHz的时钟源。为了取得较强的驱

11、动信号,40 kHz的发射信号先经三个并联的CMOS反相器驱动,再由达林顿管T1推动加在超声波发射探头的两端,探头谐振产生超声波并发射出去。由于功率管导通时流过电阻R35的电流较大,因此R35必须选择功率电阻。CS_F是40 kHz的超声波发射探头,其两引脚跨接在功率管的集电极和发射极。当达林顿管T1饱和导通时,超声波探头上的驱动电压接近为零;而当达林顿管T1截止时,超声波探头上的为12 V;当T1输入端加40 kHz的驱动信号后,在超声波探头上即产生同频的驱动电压。图8-6 超声波发射电路 2超声波接收电路超声波接收电路超声波的接收电路如图8-7所示。由超声波接收探头接收到的信号是非常弱的电

12、信号,该信号必须通过放大、整形及变换才能被单片机识别。从图8-7中可以看出,由集成运算放大器4558构成两级比例积分电路,其作用是对接收到的信号进行放大。在本系统中采用+12 V的电压为放大器供电。为了使放大器有一个合适的工作点,两级放大电路通过分压的方式为每一级放大器产生近似+6 V的直流工作点。接收信号经过两级放大之后变成具有较强幅度的正弦波信号,该信号被接到由LM311构成的比较器的同相输入端,经比较之后变换为方波信号,进而该方波信号经两级反相器变换为幅值为+5 V的方波信号送单片机,供单片机处理。图8-7 超声波接收电路 8.4.3 显示与按键电路设计显示与按键电路设计1显示电路显示电

13、路显示电路如图8-8所示。该电路是由4片译码驱动芯片CD4511构成的4位静态显示电路。CD4511具有4位显示数据输入端A、B、C、D以及一个数据锁存控制端LE。当需要向CD4511送入显示数据时,先将要送入的数据加载到数据输入端A、B、C、D,然后在LE端加锁存脉冲,输入端的数据被锁存并译码驱动数码管显示。单片机P2口的低4位被用做显示数据的输出口,与4片CD4511的数据输入端相并接,单片机的P1.1P1.4被用做4片CD4511的数据锁存控制。当进行数据显示时,4位数码管的显示数据代码被依次送到CD4511的输入端,并由锁存信号依次锁存。最高位的数码管小数点一直点亮,显示数据格式为0.

14、000,即1位整数、3位小数。图8-8 显示电路 2按键电路按键电路按键电路如图8-9所示。该电路采用独立式键盘,外接上拉电阻后接在P0口的低四位。图8-9 按键电路 8.5 软软 件件 设设 计计8.5.1 系统程序结构系统程序结构系统的主程序结构如图8-10所示。系统上电之后先进行必要的初始化操作,然后读取按键的状态,再通过按键来设置测距仪距离测量的模式。在初始化程序中先设置状态指示灯全部点亮,数码管显示0.000,设置相关的I/O端口状态以及进行内部寄存器、定时计数器及中断初始化等。初始化完成之后系统即进入到键扫描、处理程序中。程序中定义了全局变量key,用于存放按键值,按键值的对应关系

15、为:0 x01表示按键S1,0 x02表示按键S2,0 x03表示按键3,0 x04表示按键S4。在按键处理程序中根据不同的按键值执行相应的处理程序,以完成相应的测量要求。图8-10 程序主流程图 8.5.2 按键按键1处理程序设计处理程序设计如图8-11所示为按键1处理程序流程。在初始化完成之后,如果按下按键1,则系统进入循环测试模式,在该模式下系统不断检测被测距离,并把结果送LED数码管进行显示。为了提高测量的准确度和稳定性,循环测试中采用了简单的数字平均滤波算法,即进行连续5次测量,然后求5次测量的平均值,再把该平均值送显示口显示。每次测量时发射出去的超声波信号可能无法被接收探头检测到,

16、这样用于计时的定时器将一直计数,检测接收信号的外中断也无法被触发,这样就可能造成测距仪的死锁而无法正常工作。为了防止这种情况的发生设置了超时标志位f_over,当正常测量时,定时器不会溢出,f_over位不会置位,否则,如果超声波探头不能接收到有效的信号,定时器将溢出,f_over被置位,当前的一次测量将被作为无效测量处理。进入到循环测量模式之后,如果再次按下按键1则程序退出循环测试模式。图8-11 按键1处理程序流程 8.5.3 其他按键处理程序设计其他按键处理程序设计1按键按键2处理程序处理程序按键2的处理程序实际上就是单次测量程序。在系统初始化完成后,如果按下按键2,则系统进入单次测量模

17、式,在该模式下只进行一次距离测量,并把测量结果显示出来,如果再次按下按键2则重新进行测量并显示结果。在该模式下,测量结束后系统实际上已经回到主循环,但测量结果一直显示,直到有新的键命令被输入。2按键按键3处理程序处理程序按键3的处理程序与按键2的处理程序相似,不同点在于每次测量完成后显示结果仅保留1 s,然后显示回零,因此该模式成为单次测量延迟回零模式。3按键按键4处理程序处理程序按键4用来设置测距仪工作于反射工作模式还是对射工作模式,上电初始化为反射工作模式,如果按键4被按下就可以切换到对射工作模式,当然再次按下按键4也可以从对射工作模式切换回反射工作模式。8.5.4 子程序及中断服务程序设

18、计子程序及中断服务程序设计1)按键扫描程序该程序实现按键扫描功能,如果有按键按下则带回相应的按键值,如果无按键按下则带回的按键值为0 xff。按键值为0 xff。/*按键扫描*/ucharkey_scan()uchari,j=0 xFF;kd|=0 x0F;key_led=kd;_nop_();_nop_();i=key_led;i=i;i&=0 x0F;if(i!=0)delay(10);/消抖 i=key_led;i=i;i&=0 x0F;if(i!=0)switch(i)/按键判断 case 0 x01:j=0 x01;break;case 0 x02:j=0 x02;break;cas

19、e 0 x04:j=0 x03;break;case 0 x08:j=0 x04;break;default:break;do i=key_led;i=i;i&=0 x0F;while(i);/等待按键释放 return j;2)超声波发送程序先发送20个方波的脉冲,发射完成后延时10个方波的时间来避开盲区,以防超声波未经反射直接进入接收探头,最后打开计时、接收中断。/*发送脉冲*/void send()flag=0;time_end=0;T0_init();T2_init();while(time_end=0);time_end=0;T00_init();TR0=1;while(TF0=0)

20、;TR0=1;TF0=0;TH1=0;TL1=0;IE1=0;EX1=1;EA=1;ET1=1;TR1=1;3)定时器T0的中断程序定时器T0被用来控制发射超声波脉冲的数目。每次测量时发送20个40 kHz的脉冲信号,当脉冲发送开始时同时启动定时器T0,当T0中断时表示20个脉冲发送完毕。在中断处理程序中关闭定时器T2,将停止超声波信号的发射。4)接收和溢出中断外部中断INT1作为超声波脉冲接收中断,在初始化时被设置为下降沿触发。当接收到超声波信号后INT1中断,在该中断处理程序中将定时器T1的计数值保存,并关闭INT1和定时器T1的定时中断,最后置位接收中断标志位flag后返回,flag表示

21、成功地接收到了超声波信号。当INT1直到定时计数器T1的溢出中断已经发生还没有触发,则说明发射的超声波信号未被接收到,可能是探头未对准障碍物没有足够强的信号被反射回来或测量超范围,此时可以调整重新测量。当T1溢出中断发生时,在其中断程序中会设置f_over=1,表示测量超时,中断返回后依据此标志的置位终止当前的一次测量,这样就能防止程序发生死锁现象。8.6 程程 序序 清清 单单1头文件头文件typedefunsigned charuchar;typedefunsigned charcodeucharc;typedefunsigned intuint;typedefunsigned long

22、int ulong;/*位变量定义*/sbit clk=P10;sbitle1=P11;sbitle2=P12;sbitle3=P13;sbitle4=P14;sbitfmq=P37;sbit led1=P04;sbit led2=P05;sbit led3=P06;sbit led4=P07;sbit CS_F=P36;/*全局变量定义*/uchar bdata kd;sbit ls1=kd4;sbit ls2=kd5;sbit ls3=kd6;sbit ls4=kd7;bit flag,time_end,f_over,f_h;uchar key;ulongtemp;ulong dis5=0

23、,0,0,0,0;uchartl=0,th=0;uchar disbuf4=0,0,0,0;2程序文件程序文件/*/*超声波测距仪*/*/#include#include#include#define dateport P2#define key_led P0/*函数定义*/void delay(uint);void T0_init(void);void T00_init(void);void T1_init(void);void T2_init(void);void INT1_init(void);void T0_ON();void T1_ON();void INT1_ON();void M

24、CU();void send();void add();void uFiliter();void date_div();void display(uint,uint,uint,uint);uchar key_scan();void key1();void key2();void key3();void key4();/*延时Zms*/void delay(uint z)uint i,j;for(i=0;iz;i+)for(j=0;j200;j+);/*发脉冲定时*/用于定时发送10个超声波信号所用的时间/超声波周期为25 s,2025=500 svoid T0_init(void)uchar

25、i;i=TMOD;i|=0 x01;TMOD=i;TH0=(65536-1000)/256;TL0=(65536-1000)%256;/N=(1/40000)*1000000*20*0.5 TF0=0;TR0=0;ET0=0;EA=0;/*定时延时*/void T00_init(void)uchar i;i=TMOD;i|=0 x01;TMOD=i;TH0=(65536-500)/256;TL0=(65536-500)%256;/N=(1/40000)*1000000*10*0.5 TF0=0;TR0=0;ET0=0;EA=0;/*T2发脉冲并开定时中断*/void T2_init(void)

26、T2MOD=0 x02;/T2OE=1,T2的允许输出位 C_T2=0;/定时模式 TH2=(65536-150)/256;TL2=(65536-150)%256;RCAP2H=(65536-150)/256;RCAP2L=(65536-150)%256;TR0=1;/定时器T0定时250 s开始 TR2=1;/定时器T2使能,开始发送超声波 ET0=1;EA=1;/*传播时间计时设置*/void T1_init(void)uchar i;i=TMOD;i|=0 x10;TMOD=i;TF1=0;TR1=0;ET1=0;/*脉冲接收中断初始化设置*/void INT1_init(void)IT

27、1=1;EX1=0;IE1=0;/*T0脉冲发完*/void T0_ON()interrupt 1 using 1 clk=1;TR0=0;TR2=0;ET0=0;EA=0;time_end=1;/*脉冲发完,开始计时和接收中断*/void INT1_ON()interrupt 2 using 2 TR1=0;TF1=0;ET1=0;EA=0;EX1=0;IE1=0;th=TH1;tl=TL1;flag=1;/void T1_ON()interrupt 3 using 3 TR1=0;TF1=0;ET1=0;EA=0;EX1=0;IE1=0;f_over=1;/*发送脉冲*/void send

28、()flag=0;time_end=0;T0_init();T2_init();while(time_end=0);time_end=0;T00_init();TR0=1;while(TF0=0);TR0=1;TF0=0;TH1=0;TL1=0;IE1=0;EX1=1;EA=1;ET1=1;TR1=1;/*计算*/void add()temp=th*256+tl;temp=temp+1500;temp-=150;temp/=2;if(f_h=0)temp/=2;temp*=34;temp/=100;/*算术平均滤波*/void uFiliter()temp=0;temp+=dis0;temp+

29、=dis1;temp+=dis2;temp+=dis3;temp+=dis4;temp/=5;/*数据分离*/void date_div()ulong i;i=temp;disbuf0=i/1000;i%=1000;disbuf1=i/100;i%=100;disbuf2=i/10;i%=10;disbuf3=i;/*显示*/void display(uint q,uint b,uint s,uint g)le1=0;dateport=q;le1=1;le2=0;dateport=b;le2=1;le3=0;dateport=s;le3=1;le4=0;dateport=g;le4=1;/*按

30、键扫描*/uchar key_scan()uchar i,j=0 xFF;kd|=0 x0F;key_led=kd;_nop_();_nop_();i=key_led;i=i;i&=0 x0F;if(i!=0)delay(10);/消抖 i=key_led;i=i;i&=0 x0F;if(i!=0)switch(i)/按键判断 case 0 x01:j=0 x01;break;case 0 x02:j=0 x02;break;case 0 x04:j=0 x03;break;case 0 x08:j=0 x04;break;default:break;do i=key_led;i=i;i&=0

31、 x0F;while(i);/等待按键释放 return j;/*按键1处理*/循环测试模式void key1()uchar j=0;bit rep_end;ls1=0;ls2=1;ls3=1;key_led=kd;do /*循环测试5次求平均值*/do send();do if(flag=1)break;/计时到时flag=1 if(f_over=1)break;/计数器溢出时f_over=1 while(1);if(flag=1)flag=0;add();disj+=temp;/存放测量的五个数据 if(f_over=1)f_over=0;delay(50);while(j!=5);j=0

32、;uFiliter();/测量的五个数据求平均值 date_div();display(disbuf0,disbuf1,disbuf2,disbuf3);delay(1000);key=key_scan();/扫描有无跳出按键 if(key=0 x01)rep_end=1;if(rep_end=1)/有跳出按键时返回 ls1=1;ls2=1;ls3=1;key_led=kd;display(0,0,0,0);rep_end=0;return;while(1);/*按键2处理*/单次测试void key2()ls1=1;ls2=0;ls3=1;key_led=kd;send();do if(fl

33、ag=1)break;if(f_over=1)break;while(1);if(flag=1)flag=0;add();date_div();display(disbuf0,disbuf1,disbuf2,disbuf3);if(f_over=1)f_over=0;delay(1000);/*按键3处理*/单次测试并返回零状态void key3()ls1=1;ls2=1;ls3=0;key_led=kd;send();do if(flag=1)break;if(f_over=1)break;while(1);if(flag=1)flag=0;add();date_div();display(

34、disbuf0,disbuf1,disbuf2,disbuf3);if(f_over=1)f_over=0;/delay(1000);display(0,0,0,0);ls1=1;ls2=1;ls3=1;key_led=kd;/*按键4处理*/void key4()f_h=!f_h;if(f_h=1)le4=0;else le4=1;void MCU()le1=1;le2=1;le3=1;le4=1;f_h=0;/表示反射工作模式 T0_init();T1_init();INT1_init();void main()IE=0 x00;SP=0 x50;CS_F=1;MCU();kd=0 x0f;clk=1;display(0,0,0,0);time_end=0;f_over=0;delay(1000);while(1)key=key_scan();if(key=0 x01)key1();if(key=0 x02)key2();if(key=0 x03)key3();if(key=0 x04)key4();

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 大学
版权提示 | 免责声明

1,本文(《电子工程师项目教学与训练》课件第8章.ppt)为本站会员(momomo)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|