一、简介:手势传感器,捕捉手势的芯片。
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},
};