PYNQ经典项目分享之 - 超声测距

本项目介绍了超声波测距模块的使用,展示了如何将超声波测距模块测到的距离定量地表示在LED灯条上,会学习到PYNQ框架中对Microblaze软核编程的方法以及其它的PYNQ基本API使用。

使用到的外设有:

Grove Ultrasonic Distance Sensor

https://www.seeedstudio.com/Grove-Ultrasonic-Distance-Sensor.html

Grove LED Bar

https://www.seeedstudio.com/Grove-LED-Bar-v2-0.html

Pmod-Grove adapter

Grove Base Shield for Arduino

https://www.seeedstudio.com/Base-Shield-V2.html

本项目中,需要将LED Bar连接在Seeed Base Shield的D6接口,超声波测距模块则连接在Pmod-Grove转接器的G1接口,并且要将Pmod-Grove转接器接在PYNQ-Z2的PMODA上,连接方式如下图所示。


快速开始

在Jupyter Notebook的命令行终端中运行以下命令:

sudo git clone https://github.com/Siudya/pynq-ledbar-ultrasonic-ranger.git /home/xilinx/jupyter_notebooks/pynq-ledbar-ultrasonic-ranger

完成后会在Jupyter Notebook的主页面出现pynq-ledbar-ultrasonic-ranger目录。

案例演示

超声波测距模块的时序如下所示:

触发信号是在超声波测距模块的信号管脚发出一个10us以上的正脉冲,模块将发射8个40khz的超声波脉冲到外界。随后超声波模块将在信号管脚上产生一个正脉冲,这个脉冲的持续时间和测量到的距离成正比。

打开ledbar_and_ultrasonic_ranger.ipynb。这个案例使用PMOD A接口的Microblaze软核来控制超声波测距模块的启动,并利用定时器测量超声波测距模块发回的数据脉宽。


这一部分是对Microblaze的编程,可以看到本案例使用gpio发出了启动脉冲(creat_10us_pulse函数),然后用定时器计算脉冲宽度。最后返回的是定时器计时的时钟数。

脉冲数乘以时钟周期就可以得到脉冲持续时间,由此完成超声波测距模块的驱动。

这里是主功能实现的部分,本案例将测到的距离显示在LED灯条上,距离越近灯条亮得越多。

总结

这个案例涉及了在Jupyter Notebook中对microblaze的编程,可以看到这样可以很方便的封装C语言到python的接口,PL 上的microblaze和PS交互也十分方便,大大降低了开发难度,提高了开发效率。

文章来源: PYNQ开源社区

最新文章

最新文章