文章目录
前言
1 传感器介绍
1.1 关键特征
1.2 关键参数
2 硬件概述
2.1 信号引脚
2.2 参考电路图
3 寄存器
3.1 寄存器列表
3.2 性能优化寄存器
4 代码说明
4.1 结构体说明
4.2 编译说明
5 波形分析
前言
本文介绍了在 ESP32 DEVKIT V1 开发板上开发 PMW3901MB-TXQ1 光流传感器的过程。
1 传感器介绍
PMW3901MB-TXQT 是 PixArt Imaging 公司最先进的光学导航芯片,采用远场光学技术设计,可实现室内导航,采用 28 引脚板上芯片(COB)封装,可提供 X-Y 运动信息,工作范围从 80mm 到无限远。它最适合用于远场 "运动检测"。
1.1 关键特征
- 工作范围广,从 80mm 到无限远 ;
- 镜头安装过程中无需对焦 ;
- 运行模式下耗电量为 9mA ;
- 16 位运动数据寄存器 ;
- 运动检测引脚输出 ;
- 内部振荡器 ~ 无需时钟输入。
1.2 关键参数
2 硬件概述
2.1 信号引脚
电源
- Pin2 VDD;
- Pin3 VDDIO;
- Pin4 VREG;
- Pin1 GND;
- Pin21 GND。
控制接口
- Pin16 MOSI;
- Pin17 SCLK;
- Pin18 MISO;
- Pin19 NCS。
功能IO
- Pin7 NRESET;
- Pin15 MOTION。
2.2 参考电路图
3 寄存器
3.1 寄存器列表
PMW3901MB 寄存器可通过串行端口访问。这些寄存器用于读取运动数据和状态,以及设置设备配置。
3.2 性能优化寄存器
PMW3901MB 上电后,需要对一些寄存器进行配置,以实现芯片的最佳性能。这些寄存器是 PixArt 的专利信息,因此本数据手册中没有关于这些寄存器说明的其他信息。这些寄存器应按下列顺序写入。
4 代码说明
4.1 结构体说明
typedef struct motionBurst_s {
union {
uint8_t motion;
struct {
uint8_t frameFrom0 : 1;
uint8_t runMode : 2;
uint8_t reserved1 : 1;
uint8_t rawFrom0 : 1;
uint8_t reserved2 : 2;
uint8_t motionOccured : 1;
};
};
uint8_t observation;
int16_t deltaX;
int16_t deltaY;
uint8_t squal;
uint8_t rawDataSum;
uint8_t maxRawData;
uint8_t minRawData;
uint16_t shutter;
} __attribute__((packed)) motionBurst_t;
motion:运动信息,可以根据不同的位去判断运动信息,包括帧判别,运行模式和运动信息检测等;
observation:这个是用于检测 IC 是否出现 EFT/B 或者 ESD 问题,传感器正常工作时,读取出来的值为 0xBF;
deltaX, deltaY:光流检测到图像的 X 和 Y 方向的运动信息;
squal:指运动信息质量,简单说就是运动信息的可信度;
rawDataSum:这个是原数据求和,可用作对一帧数据求平均值;
maxRawData 和 minRawData :最大和最小原始数据;
shutter:是一个实时自动调整的值,目的是保证平均运动数据在正常可操作范围以内,这个值可以搭配 squal,用来判断运动信息是否可用。
4.2 编译说明
1. 下载代码
git clone https://github.com/EmotionFly/ESP32_PMW3901MB.git
cd ESP32_PMW3901MB
2. 获取 esp-idf 库的环境
. $HOME/esp/esp-idf/export.sh
3. 编译—>下载—>监控
idf.py flash monitor