技术不高,只为分享。
有帖子说,因为看见“周期最好60ms以上,所以就不太想用超声波了”,确实,在没看到王童鞋的“建议重新学习计数器/定时器”时,我还没有什么灵感和想法。
以前没灵感是因为野火的三天学会K60只给出了pit_init周期中断函数,如果用周期中断对 超声波的高电平测时间显然不可能,偶然发现了PIT模块中的Timer Load Value Register (PIT_LDVALn)、Current Timer Value Register (PIT_CVALn)这两个寄存器。
PIT模块用bus_clock作频率源,从PIT_LDVALn递减到0,产生中断又装载PIT_LDVALn值。那么为测量echo端的高电平时间,只要知道如下图所示的第二个时间节点时的PIT_CVALn值就行。根据公式(PIT_LDVALn - PIT_CVALn)*总线时钟周期*声速/2。
实现过程如下:
1.trig脚 简单随意的来个10微秒以上的脉冲;
2.echo脚 设成跳变沿触发中断,在第1步之后,开启引脚中断;
在第一个上升沿中断开启 PITn中断,中断周期可以设定为60毫秒(这个值PIT_LDVALn 自己设定);
在第二个下降沿中断读取PIT_CVALn值,然后关闭PITn定时器和IO口中断,结束此次测量。
3.还有注意PITn产生中断就说明没有接收到返回来的波,(即前面没障碍或很远),也结束此次测量。
虽然还没用砖头测试,但是测墙面还是很准的,1.5m还是可以保证的(若以直道4m/s的速度,假设完成一次测距要100ms,那么小车走过的距离是40cm,因此1.5m应该可以了)。
通过这次我发现仅用提供的库可能还是不够的,得看看K60内部强大的资源了。