参照https://blog.csdn.net/hxudhdjuf/article/details/79671892

因为上面那个文章写的很乱,代码也不怎么规范,这里记录一下,顺便给后人排坑。

在校队的时候申了一块PX4Flow,260多不带超声波,真特么贵,超声波要260多,原版的超声波型号是MB1240(这里给出Datasheet),但不得不说效果真的很好,精度和测距范围都很棒。当然当时我是不知道的是PX4Flow如果不带超声波基本没法工作,代码的话我也看得不是很懂。淘宝上可以搜到300不到的PX4Flow,顺便校队里有一个用Pixhawk的无人机就是用的那个光流模块,当时真TM后悔。

好吧闲话不多说,先给出修改原理。HC-SR04的驱动方法相当简单,就是在Trig引脚给一个脉冲,然后等待Echo引脚电平两次变化读取时间,就是发送和接收到超声波的间隔,根据空气音速就能算出距离。所以这里的思路就是用PX4Flow上的STM32F7单片机GPIO引脚来做驱动。

连接方法如下,Trig接4脚(RX),Echo接2脚(PW),GND和VCC供电,分别可以接7脚和6脚,后面应该有GND和VDD的丝印。

需要修改官方的代码,这里提供我修改之后的代码,具体改了哪可以看commit log,这里就不在描述了,修改的部分是超声波的驱动src/modules/flow/sonar.c,以及在src/modules/flow/module.mkCMakeLists.txt中加入exti和syscfg。

其实真的不麻烦,也不用samba什么的,直接一个netatalk就完了。

1
2
#ubuntu下
sudo apt-get install -y netatalk

然后编辑/etc/netatalk/AppleVolumes.default,把带有"Home Directory"的那行去掉(应该是180行),加上

1
<你用来备份的目录>     "TimeMachine"   volsizelimit:600000     options:tm

然后重启一下netatalk

1
sudo service netatalk restart

或者用systectl

1
sudo systemctl restart netatalk

做好之后在Finder中按command+k,输入afp://<你的服务器ip>,输入服务器用户名密码,如果顺利的话就能在TimeMachine设置里面看到这个磁盘了。

这里记录下PMW3901的应用笔记,开发平台为真特么爽的树莓派,使用spidev这个python库。

PMW3901是一个性能还不错的硬件光流方案,来自Pixart厂,使用SPI协议传输,我自己试了下跑个100Hz简直不要太轻松,虽然精度比起OpenCV里面的各种算法差了不少,但是好在小巧而且不需要高性能处理器。(虽然我们今天使用的树莓派就算是性能挺高的处理器了。。。)

硬件连接

当然是接到SPI上啦,参考这里。片选我接的是CE0,当然你要接到CE1也可以,代码稍微改一下就好。注意使用的是SPI0而不是SPI1,因为我们使用的是MODE3,而恰好树莓派的SPI1对MODE3有bug,截止目前这个bug仍未修复。

软件环境

我使用的是raspbian操作系统,spi设备会被挂载到/dev/spidev*.*。你可以用以下命令检查

1
ls /dev/spidev*

如果是其他的操作系统,我不保证能正常运行。

安装spidev

如果你还没有安装的话,可以执行下面的命令来安装。我们使用python3,所以这里是pip3,如果你仍然在使用python2,我建议你现在更换。

1
sudo pip3 install spidev

协议分析

开发一个芯片必备的是什么?datasheet!

对于PMW3901,我们同样需要它的datasheet。比较可惜的是,Pixart似乎不太情愿提供,反正我找了很久都没找到下载datasheet的按钮,后来还是找淘宝卖家要的。