当地声速对超声波测距测量精度的影响也比较大。超声波在大气中传播的速度受介质气体的温度、密度及气体分子成分的影响如式(2)[1]:
由上式知,在空气中,当地声速只决定于气体的温度,在实际情况下温度每上升或者下降 1℃,声速将增加或者减少 0。607m/s。因此提高超声波测量精度的重中之重就是获得准确的当地声速。假定超声波速度C=344m/s(20℃室温),忽略声速的传播误差。则测距误差 <0。000002907s,即2。907ms。即在超声波的传播速度是准确的前提下,测量距离的传播时间差值精度只要在达到微秒级,就能保证测距误差小于1mm的误差。使用12 MHz 晶体作时钟基准的AT89C52单片机定时器能方便的计数到1μs 的精度,因此系统采用AT89C52的定时器能保证在20℃室温下时间误差在1mm的测量范围内。
在实际生产应用中,提高精度的关键在于准确得到当地的温度数据。可采用温度传感器测得当地温度,并在软件中实现温度补偿。
3 系统硬件
3。1 单片机主控系统
3。1。1 单片机选择
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。引脚排列如图3所示[4]。
图3 AT89C52外形及引脚排列图
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口作为AT89C52的一些特殊功能口,管脚备选功能
P3。0 RXD(串行输入口)
P3。1 TXD(串行输出口)
P3。2 /INT0(外部中断0)
P3。3 /INT1(外部中断1)
P3。4 T0(记时器0外部输入)