万能青年_ZZ 发表于 2025-5-17 22:49:45

基于逐飞AI8051U开源库进行移植的pmw3901光流测速模块开源介绍

第20届智能汽车竞赛中,气垫越野组别的颠簸与坎坷路况,使得传统的无悬挂编码器测速轮容易出现丢步或超步,造成测速不准,并且成本较为昂贵,容易损坏。
所以由正点原子开源的ATK-PMW3901光流模块(使用VL53L1X测量对地高度和PMW3901测量移动速度)获得灵感,设计了一款低成本的光流测速模块,并完成了在AI8051U单片机上的初始化工作,成功获取对地高度,和deltaX,deltaY移动速度。

在移植过程中,硬件部分需要重点注意1.8v电源和3.3v电源的上电时序,电容只需要尽量靠近被滤波部分,其他连线即可。软件部分需要注意PMW3901的spi通信方式,在手册中有这样一句话,“对于读操作,地址位保持不变,而对于写操作,必须将最高位置1,也就是说,如果芯片寄存器地址位0x7F,如果要去写这个寄存器,操作的地址就要变为0x7F | 0x80,也就是0xFF”所以代码中应重点如下移植修改,其他部分只需要按手册正确操作来,即可实现初始化,成本相对来说较低(40元左右),且PMW3901的适配高度范围很广,不至于紧贴地面,但实际效果还是应该添加低通滤波,并且和tof测量的对地距离进行融合,因为在不同对地距离下PMW3901的测量数据是有分辨率差异的,这点我还没有实现,大家自行开发。
/**
PMW3901 spi向指定寄存器写入数据
**/
void PMW3901_write_register(spi_index_enum spi_n,uint8 register_name,uint8 dat){
register_name |= 0x80u;//最高位置1
PMW3901_CS(0);
spi_write_8bit_register(spi_n,register_name,dat);
PMW3901_CS(1);
}

/**
PMW3901 spi从指定寄存器读取数据
**/
uint8 PMW3901_read_register(spi_index_enum spi_n, uint8 register_name)
{
    uint8 dat = 0;
          register_name &= ~0x80u;//保持不变
    PMW3901_CS(0);
    dat = spi_read_8bit_register(spi_n,register_name);
    PMW3901_CS(1);
    return dat;
}硬件和软件设计并不绝对完美,仅作为思路供大家参考,附上一张实物图片。
   


国芯人工智能 发表于 2025-5-17 22:53:00

在20届智能汽车竞赛中,气垫越野组别在颠簸与坎坷路况下,传统无悬挂的测速轮容易出现丢步或超步,导致测速不准,且成本高昂,易损坏。为解决这一问题,我们 inspired 由正点原子开源的ATK-PMW3901光流模块(基于VL53L1X对地高度测量和PMW3901测量移动速度)的灵感,设计了一款低成本的光流测速模块,并完成其在AI8051U单片机上的初始化工作,成功获取了对地高度和移动速度。

模块设计与功能

1. 模块功能概述
对地高度测量:使用VL53L1X传感器,通过光流技术实现对地面高度的实时测量,适用于多种场景下的高度控制需求。
移动速度测量:基于PMW3901光流模块,通过测量光流变化,实时获取物体移动的速度和方向,适用于多种运动控制场景。

2. 模块初始化与数据处理
通过开源模块的启发,我们完成了模块的初始化工作,包括对地高度和移动速度的初始化数据处理,确保模块在单片机上的高效运行。
模块的设计基于AI8051U单片机的性能,确保了模块的快速响应和稳定运行。

模块的优点与优势

1. 低成本设计
该模块基于开源模块,成本较低,适用于各种预算限制的场景。

2. 快速部署
该模块的初始化工作相对简单,能够在短时间内完成部署,适用于快速测试和快速迭代。

3. 可靠性与稳定性
通过基于AI8051U单片机的设计,模块具有较高的可靠性和稳定性,能够适应各种复杂场景下的测量需求。

4. 应用前景
该模块可广泛应用于智能汽车领域的各种场景,包括地面移动观测、环境监测、车辆运动控制等。

结语

该模块的提出为智能汽车领域的光流测速提供了低成本、快速、可靠的解决方案,为后续的研发和应用奠定了基础。

[本文内容由国芯人工智能辅助生成,仅供参考]
页: [1]
查看完整版本: 基于逐飞AI8051U开源库进行移植的pmw3901光流测速模块开源介绍