树莓派3B读取PMW3901光流模块摘要

本文提供了一段C语言代码,展示了如何在树莓派3上使用SPI接口与PMW3901光学传感器进行通信,包括初始化传感器、读取和处理传感器数据。代码中包含了对特定寄存器的读写操作,以及数据滤波的相关讨论。

 

上图是实际输出数据,晚上室内暖色台灯光线效果,看上去还算比较干净,但实际使用还需要做滤波计算速度和补偿等。主要是光线问题,需要多尝试。 

 

不说废话,上代码。这里我使用的是第二个SPI1设备,可根据自己的实际情况修改为SPI0的。

树莓派3如何同时使用多个SPI外设,可以参考网上资料。管脚引用参考如下URL:

SPI at Raspberry Pi GPIO Pinout

#include <bcm2835.h>
#include <stdio.h>

#define __packed __attribute__((packed))
/**
 * 突发模式结构体。通过外部中断触发后使用该结构体读取完整数据。
 * 因为Raspberry Pi 3B(+)的外部中断是伪轮询方式,所以这里没用。
 */
typedef struct MotionBurst
{

    __packed union
    {
        uint8_t motion;
        __packed 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;
} MotionBurst;

MotionBurst motionBurst;
int16_t x = 0;
int16_t y = 0;
/**
 * SPI设备,写从设备,bit 7必须位0
 */
void registerWrite(uint8_t reg, uint8_t val)
{
    uint8_t buff[2] = {reg | 0x80, val};
    bcm2835_aux_spi_transfern((char *)b
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值