本项目介绍了超声波测距模块的使用,展示了如何将超声波测距模块测到的距离定量地表示在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开源社区