zl程序教程

您现在的位置是:首页 >  系统

当前栏目

PAJ7620u2手势模块

模块 手势
2023-09-11 14:20:47 时间

一、简介:手势传感器,捕捉手势的芯片。

1、内置光源和环境光源抑制滤波器集成的led,镜头和手势感测器在一个小的立方体模组,能在黑暗或低光环境下工作。

2、内置9个手势类型:上,下,左,右,前,后,顺时针旋转,逆时针旋转,挥动。支持输出中断。

3、支持接近检测功能,检测物体体积大小和亮度。

4、分辨率:60x60 pixels   ,每个像素的大小是:20x20 um2 , 最大支持的速率:720fps。  

5、模式:gesture / cursor / image modes

6、控制速度:

        在普通模式下:60~600°/s

          在gaming模式下:60~1200°/s

7、通讯模式:

        I2C模式(for gesture/ curcos 模式):最高能达到400kbit/s

        4-wire  SPI (for Image 模式):22~48Mhz(Frame subtraction mode) / 44~48Mhz(Raw data mode)

二、工作原理:

PAJ7620u2工作时通过内部LED驱动器,驱动红外LED向外发射红外信号,当传感器阵列在有效地距离中探测到物体时,目标信息提取阵列会对探测目标进行特征原始数据地获取,获取数据会存在寄存器中,同时手势识别阵列会对原始数据进行识别处理,最后将手势结果存到寄存器中,用户可根据I2C接口对原始数据和手势数据地结果进行读取。

三、模块BANK简介:

1、在PAJ7620内部有两个BANK 寄存器区域,分别是BANK0,BANK1。

2、想访问其中地bank区域下的寄存器,需要在访问前发送控制指令进入该寄存器区域,具体控制指令如表:

BANK区域

地址

数值

BANK0

0XEF

0X00

BANK1

0XEF

0X01

进入BANK0区域,往传感器0XEF地址写0X00。

进入BANK1区域,往传感器0XEF地址写0x01

四、上电流程图

五、IIC通讯模式

 1、在iic通讯接口上,只能作为从站,不能作为主站。

2、读写控制的三种状态:写貌似只能单个字节的写,读可以分为单字节读取,和多字节读取。

3、IIC的速率:分为标准模式和极速模式。

 

4、IIC的时序:

 六、寄存器简介:

1、bank寄存器

进入BANK0区域,往传感器0XEF地址写0X00。

进入BANK1区域,往传感器0XEF地址写0x01. 

2、使能工作寄存器在BANK1 地址 0X72  。

只关心bit0 ,设置为1,则使能PAJ7620工作,设置为0,则失能PAF7620工作

3、bank 0 下的挂起管理寄存器:地址0x03

进入挂起状态

先写寄存器BANK1 ,addr 0x72,写入0X00,禁用paj7620.

然后写寄存器BANK0,ADDR 0X03,写入0x01,处理IC suspend命令。

退出挂起状态

先通过写入ID,处理I2C唤醒命令,

然后写寄存器BANK 1 ,ADDR 0x72,写入0x01,启用PAJ7620.

4、手势识别寄存器:0X43,0X44

 

5、物体亮度寄存器:0XB0 

 6、物体大小寄存器:0XB1,0XB2

七、经验理解:

 1、0x43寄存器是手势检测的标志,即0x43寄存器有bit位为高的时候,就是检测到手势了。然后读取0x44之后,0x43寄存器内容就自动设置为0了。

2、上电之后有几个延迟要注意下。

3、读取手势寄存器的时候,需要判断下,当读取到的内容不为0,就操作自己的逻辑。

4、第一步激活IIC的时候,往iic从站里,写入地址就可以了,不需要写内容。

5、切换bank的之后,最好延迟一下。

6、我的从站地址是0x73,仅作参考。

八、初始化代码:

设备初始化:

const unsigned char Init_Register_Array[][2] = {
    {0xEF,0x00},
    {0x37,0x07},
    {0x38,0x17},
    {0x39,0x06},
    {0x41,0x00},
    {0x42,0x00},
    {0x46,0x2D},
    {0x47,0x0F},
    {0x48,0x3C},
    {0x49,0x00},
    {0x4A,0x1E},
    {0x4C,0x20},
    {0x51,0x10},
    {0x5E,0x10},
    {0x60,0x27},
    {0x80,0x42},
    {0x81,0x44},
    {0x82,0x04},
    {0x8B,0x01},
    {0x90,0x06},
    {0x95,0x0A},
    {0x96,0x0C},
    {0x97,0x05},
    {0x9A,0x14},
    {0x9C,0x3F},
    {0xA5,0x19},
    {0xCC,0x19},
    {0xCD,0x0B},
    {0xCE,0x13},
    {0xCF,0x64},
    {0xD0,0x21},
    {0xEF,0x01},
    {0x02,0x0F},
    {0x03,0x10},
    {0x04,0x02},
    {0x25,0x01},
    {0x27,0x39},
    {0x28,0x7F},
    {0x29,0x08},
    {0x3E,0xFF},
    {0x5E,0x3D},
    {0x65,0x96},
    {0x67,0x97},
    {0x69,0xCD},
    {0x6A,0x01},
    {0x6D,0x2C},
    {0x6E,0x01},
    {0x72,0x01},
    {0x73,0x35},
    {0x74,0x00},
    {0x77,0x01},
};

手势检测初始化:
//Gesture register initializes array
const unsigned char Init_Gesture_Array[][2] = {
    {0xEF,0x00},
    {0x41,0x00},
    {0x42,0x00},
    {0xEF,0x00},
    {0x48,0x3C},
    {0x49,0x00},
    {0x51,0x10},
    {0x83,0x20},
    {0x9F,0xF9},
    {0xEF,0x01},
    {0x01,0x1E},
    {0x02,0x0F},
    {0x03,0x10},
    {0x04,0x02},
    {0x41,0x40},
    {0x43,0x30},
    {0x65,0x96},
    {0x66,0x00},
    {0x67,0x97},
    {0x68,0x01},
    {0x69,0xCD},
    {0x6A,0x01},
    {0x6B,0xB0},
    {0x6C,0x04},
    {0x6D,0x2C},
    {0x6E,0x01},
    {0x74,0x00},
    {0xEF,0x00},
    {0x41,0xFF},
    {0x42,0x01},
};

物体检测初始化:

//Approaches register initialization array
const unsigned char Init_PS_Array[][2] = {
    {0xEF,0x00},
    {0x41,0x00},
    {0x42,0x00},
    {0x48,0x3C},
    {0x49,0x00},
    {0x51,0x13},
    {0x83,0x20},
    {0x84,0x20},
    {0x85,0x00},
    {0x86,0x10},
    {0x87,0x00},
    {0x88,0x05},
    {0x89,0x18},
    {0x8A,0x10},
    {0x9f,0xf8},
    {0x69,0x96},
    {0x6A,0x02},
    {0xEF,0x01},
    {0x01,0x1E},
    {0x02,0x0F},
    {0x03,0x10},
    {0x04,0x02},
    {0x41,0x50},
    {0x43,0x34},
    {0x65,0xCE},
    {0x66,0x0B},
    {0x67,0xCE},
    {0x68,0x0B},
    {0x69,0xE9},
    {0x6A,0x05},
    {0x6B,0x50},
    {0x6C,0xC3},
    {0x6D,0x50},
    {0x6E,0xC3},
    {0x74,0x05},
};