大家好,第一次发帖求助,因为这个问题不知道该怎么问,所以会写很长一段描述,请见谅…
目标: 简单来说就是做成红外对射,超声波对射,距离显示误差可以在±10mm之间。发射端发射红外,接收端接收到红外后,两者差不多同时发射超声波,接收端能接收到发射端发射的超声波。
材料: 接收端:12MHz的stc89C52单片机开发板一个,VS838一个,SR-04一个,LCD1602一个 发射端:11.0592MHz的stc89C52RC开发板一个,红外发射模块(无晶振)一个,SR-04一个
前提: 1.SR-04在Trig端提供10us左右高电平后,自动开启模块内部定时器,在接收完超声波后,内部定时器结束计时并通过Echo端发送内部定时器所获取时间的高电平,高电平持续时间即为超声波来回一次的时间。 2.因为暂时缺设备,无法确定硬件是否有问题。所以只能先假设硬件都没问题…
为了找到能差不多同步发送超声波的时间点,发射端用keil4测从红外程序到超声波发射前所用时间。接收端则用计时器多次统计这段时间后取平均值。然后根据两者时间差求得补偿值。 使用C语言写的,补偿已经考虑到晶振、进入外部中断前的语句时间、函数调用和退出。
之前把接收端的程序稍微修改下变成发射端程序后,我也是这么计算补偿的,结果大致符合要求。但是发射端单独写就出现这个问题了。
发射端:约68620us
接收端:约68654us 5(进程序)+12(堆栈)+ 68571(取测得最大值)+1(TR1=0)+12(退栈)+5(再进程序)+12(再堆栈)+12(再退栈)+7(irflag判断前几句)+1(irflage=0)+13(timer_init)+3(distance=0) (既然测得的最大值的补偿都无法满足,那平均值的补偿就更没有意义了)
在发射端添加补偿+34us后,接收端显示的距离还是小。 实际距离,mm | LCD显示,mm | 100 | 20,34 | 150 | 88,94 | 200 | 156,162 | 250 | 196,204 | 300 | 244,250 |
如果根据数据显示的,直接再多补偿+50mm,差不多额外+148us那显示可以正常。
问题: 1.是因为对超声波模块的理解有问题吗? 2.是因为程序哪里没有考虑到才引起的这个额外补偿吗?
发射和接收程序见附件:
help.rar
(84.29 KB, 下载次数: 10)
|