STM32
直播中

李波

7年用户 1365经验值
私信 关注
[问答]

如何利用Trig和Echo引脚去实现HC_SR04超声波测距呢

如何利用Trig和Echo引脚去实现HC_SR04超声波测距呢?如何对其进行测试?

回帖(1)

甘晓茵

2021-12-13 09:41:28
用Trig和Echo引脚实现测距的流程:
1.通过Trig输出一段至少10us的高电平(脉冲),触发一次测距,超声波在传输的过程中Echo一直输出高电平。
2.在Trig脉冲输出后,立即检测Echo引脚的电平,测出Echo高电平持续的时间t,t就是超声波在所测距离一个来回所需时间。
感应角度:不大于15度
探测距离:2cm-450cm
高精度可达0.2cm





利用定时器3的TIM_IT_Update中断来计数,stm32f103时钟是72M, TIM3_Int_Init(1000-1,72-1);//1Mhz的计数频率,1us计数一次,计数到1000为1ms,产生一次溢出中断 ,超声波的速度取344m/s=344mm/ms,具体可更据温度设置,以毫秒为单位乘以速度,当前counter值补足1ms时,把us换算成ms:如图





计数距离就是用上面的函数得到来回时间(ms为单位),除以2得到单程时间,再乘以速度344mm/ms,得到距离ms为单位)





2种处理数据的方法(前面两个函数实质一样)
GetLength_Hc()
GetLength2_Hc()
GetLength3_Hc()


测试实验:1,当使用GetLength_Hc()获取长度,求和再取平均





串口现象:第一个值刚开始测距,不准确,理所应当





2,当使用GetLength2_Hc()获取长度,实际和1一样,求和再取平均





串口现象:





3,当使用GetLength3_Hc()获取长度,去掉最大最小,剩下的取平均





串口现象:















结论:最后的算法更接近真实距离。
距离大概是272-278mm,可能由于单手改代码测试,另一种手抖也造成了稍微移动,误差多少?起始距离在哪?我也不知道咋参考,请读者赐教,需要源文件的可以私信。





编程犯的几个错误:
1,比较大小时,采用min=0去比较大小,正数都比0大,请问谁能抢到min这个宝座??
2,double GetLength3_Hc(void)函数中,计算平均值时,忘了打括号写成average=sum/N-2,正确应为average=sum/(N-2);
举报

更多回帖

发帖
×
20
完善资料,
赚取积分