欢迎光临散文网 会员登陆 & 注册

PMW3901光流传感器

2023-03-17 23:44 作者:bili_42806779649  | 我要投稿

概述

        PMW3901是中国台湾省原相科技(PixArt)推出的一款芯片,它可以测量二维平面X轴和Y轴的相对运动偏移量(我个人理解成运动速度),类似于鼠标,和鼠标不同的是,这款芯片的工作距离是80mm到无穷远,淘宝价格大概在30块钱一片,所以是理想的小无人机室内定位的理想选择,也就是大家所说的光流传感器的核心芯片。


原理图设计

        芯片应用电路图如下图所示(来自于官网技术手册截图):


PMW3901应用电路图


       其中VDD可承受的电压范围是1.8V~2.1V,VDDIO可承受的电压范围是1.8V~3.6V,芯片平均工作电流只有9ma;

        也就是说,用一片LDO将5V或者3.3V转成2V给PMW3901供电,注意原理图VDD端口串联有电阻,将会分去部分电压,所以不要将VDD电压调到1.8V,这样工作的时候有可能会超出芯片正常工作电压范围,2V输出的LDO有很多,例如国产南京微盟的ME6206A20M3G,https://item.szlcsc.com/139341.html。

        而对于VDDIO,直接接3.3V,这样就可以和STM32或者GD32这类3.3V处理器通过SPI直接通讯。


        PMW3901还有一个LED_N引脚,可以用来作为光源的控制信号,用来增加环境亮度,如果有需要可以增加。

光源控制信号


PCB设计

        PCB设计只有一条需要注意,就是各个电容尽量靠近芯片相对应的引脚,别的线只需要能连接上即可。


PCB焊接

        这种类型的芯片,如果是手焊的话只能先在焊盘上上点锡,把芯片放上去,然后用热风枪从PCB背面来吹,但是要注意,这个芯片自带了一颗小镜头,不要带上这个镜头去用热风枪吹,镜头顶不住温度会融化,芯片就报废了。

        正确做法是先把芯片吹到PCB上面焊接好,然后再撕去芯片镜头上面的保护膜,再把镜头安装上去,镜头很小,用手摁进去就行了,镜头没有什么卡扣或者固定的设计,需要在外面点胶水或者使用别的方法固定。

镜头


        安装完成长这样,镜头相对于芯片表面会高出一点点。

安装完成


安装完成侧面


        如果要拆芯片的时候也要记得先把镜头拆下来再吹。


通讯接口

        除了SPI使用的四根线以外,芯片还有一个NRESET引脚和MOTION引脚,

NRESET:复位芯片,拉低复位芯片,上电启动的时候有用。

MOTION:中断信号引脚,有运动发生时引脚会拉低,这样会产生一个下降沿,这样处理器可以用中断的方式去处理。


        SPI使用模式0,通讯最大速率2Mhz,初始化SPI后,可以去读取一下芯片的地址为0x00的寄存器或者地址为0x5F寄存器,这两个寄存器的值不变且不为0或者0xFF。

对于地址0x00寄存器,如果读出来的值为0x49,说明SPI通讯成功。

对于地址0x5F寄存器,如果读出来的值为0xB6,说明SPI通讯成功。

寄存器列表


        对于读操作,地址位保持不变,而对于写操作,必须将最高位置1,也就是说,如果芯片寄存器地址位0x7F,如果要去写这个寄存器,操作的地址就要变为0x7F | 0x80,也就是0xFF。


传感器初始化

        如果SPI通讯测试通过,接下来就应该初始化传感器,初始化必须严格按照如下顺序:

  1. 上电,两个电源达到对于的电压范围,两个电源上电的时间差要小于100ms,100ms一般也不会有问题,毕竟一般都是一起上电。

  2. 等待至少40ms。

  3. 复位传感器,有两种操作方式,第一种是向0x3A寄存器写入0x5A(按照前面的写操作规则,0x3A需要变为0xBA),第二种是直接拉低前面提到的NRESET引脚,可以保持5ms,然后再拉高。

  4. 等待1ms,等待复位结束。

  5. 将0x02,,0x03,,0x04,,0x05,0x06按顺序全部读一遍。

  6. 加载配置

        加载配置比较长,主要内容就是写很多数据到寄存器,中间还夹杂有两处读取数据判断然后再写入,内容又臭又长,大家自行参考技术手册的8.2节,只要前面验证了SPI通讯,这部分按手册顺序往下写寄存器就不会有问题。主要要注意一点,写寄存器快结束的时候,中间有一段需要等待10ms,这部分不能忽略。

延时


传感器数据读取

        读取操作按如下顺序进行:

  1. 读取地址为0x02的寄存器,看看最高位是不是1,如果是1,那就说明有运动产生,如果为0,那就说明没运动。当然,有运动的时候中断引脚会产生下降沿中断,主要看你是用轮询的方式还是中断的方式读取。

  2. 如果0x02寄存器最高位为1,那就按顺序读取0x03、0x04、0x05、0x06、0x07和0x0C寄存器;0x03和0x04表示的是X方向的移动量,0x04是高八位,值的范围为-32768~32767;0x05和0x06表示的是Y方向的移动量,0x06是高八位,值的范围为-32768~32767;

    0x7C和0x0C主要用来判断数据是否有效,当0x7C的值小于0x19且0x0C的值等于0x1F,说明这次运动的数据无效。

  3. 重复以上两步骤就可以连续读取数据。


其他

        芯片还有一些其他的操作模式,如果有需要可以自行参考技术手册。对于技术手册,芯片官网本身是下载不到的,其他地方下载的也可能遇到后面不全的情况,不过可以直接去正点原子的百度网盘链接下载,可以获取到完整的资料。

http://www.openedv.com/docs/modules/other/PMW3901.html

PMW3901光流传感器的评论 (共 条)

分享到微博请遵守国家法律