[讨论] SFR05超声波测距,用外部中断方式,测距不准而且有抖动变化大,希望大家看看

赵怡彬   2017-4-18 17:34 楼主
我没有用输入捕获,也不是在while循环里判断,而是用外部中断我定时器配置1us计数频率,然后再中断函数里计算距离,但是有点问题,首先数据不准确,而且数据抖动很大,不知道啥原因,但从原理上来说我这样检测应该是没问题的呀,而且反而比while循环检测好。网上好多要么是定时器输入捕获,要么是while循环判断,没有用外部引脚中断的,我觉得这也是一种好方法,希望大家帮我看看,哪里有问题
搜狗截图20170418172409.png 搜狗截图20170418172733.png 搜狗截图20170418172801.png
本帖最后由 赵怡彬 于 2017-4-18 18:19 编辑

回复评论 (11)

这么干看很难看出问题,感觉你time的计数会溢吧,大于65535us就测不对了。

原理上说还是用定时器捕获的比较合理,管脚中断到中断处理有时间差,捕获方法没有这个问题。

你这样用一个信号源实验一下看对不对
点赞  2017-4-18 19:35
中断法可用,但定时器编程要注意。回波时间如果大于定时器周期,必须借助寄存器用累加法扩展计时时间。另外,距离计算程序不宜全部放在中断中进行,中断程序应尽量精简。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2017-4-18 20:48
引用: huo_hu 发表于 2017-4-18 19:35
这么干看很难看出问题,感觉你time的计数会溢吧,大于65535us就测不对了。

原理上说还是用定时器捕获的 ...

0.065毫秒*声速340差不多22米肯定是够了,这个有效检测距离也才4.5米,而且我试验的时候差不多10cm左右,也还是会跳动。
点赞  2017-4-19 12:48
引用: huo_hu 发表于 2017-4-18 19:35
这么干看很难看出问题,感觉你time的计数会溢吧,大于65535us就测不对了。

原理上说还是用定时器捕获的 ...

而且用51也是靠定时器计数来得到的,我在51上可以的,而且感觉还是比较准确的测距,就是想用51这种思维方式移植到32上
点赞  2017-4-19 12:50
引用: chunyang 发表于 2017-4-18 20:48
中断法可用,但定时器编程要注意。回波时间如果大于定时器周期,必须借助寄存器用累加法扩展计时时间。另外 ...

我试了一下,如果只是把定时器数据传出来,在串口上看也会有波动,有时候个位数跳变到百位数,这样可以看出,我定时器应该配置的没有问题了,只是不知道外部中断有问题,还是程序处理那里有问题
点赞  2017-4-19 12:53
引用: 赵怡彬 发表于 2017-4-19 12:53
我试了一下,如果只是把定时器数据传出来,在串口上看也会有波动,有时候个位数跳变到百位数,这样可以看 ...

用示波器看看输入信号即可获知,软件问题的可能性大。
上传了一些书籍资料,也许有你想要的:https://download.eeworld.com.cn/user/chunyang
点赞  2017-4-19 14:10
也可能是信号抖动
点赞  2017-4-19 14:34
程序进入定时器中断需要一定时间,中断处理也需要时间。信号是不是有抖动?这都是可能的问题。用单片机中断做超声信号捕获要求单片机主频够高,测距不能太短。
点赞  2017-4-20 11:45
引用: dlcnight 发表于 2017-4-20 11:45
程序进入定时器中断需要一定时间,中断处理也需要时间。信号是不是有抖动?这都是可能的问题。用单片机中断 ...

我没有用定时器中断
点赞  2017-4-20 15:31
引用: huo_hu 发表于 2017-4-19 14:34
也可能是信号抖动

但是用51就很稳定,能不能帮我看看是不是程序框架有问题还是配置有问题
点赞  2017-4-20 15:32
请问楼主问题解决了吗 我现在也是数据不稳定,模块在振动时,数据完全不对,不知道是不是模块整体的震动导致接收头角度发生变化,或者收到了多次反射的回波 本帖最后由 ljmf5 于 2017-6-4 14:08 编辑
点赞  2017-6-4 14:07
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复