这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 手势翻页笔第三篇-过程二(PAJ7620U2)

共12条 1/2 1 2 跳转至

手势翻页笔第三篇-过程二(PAJ7620U2)

菜鸟
2024-06-05 17:23:38     打赏

驱动PAJ7620U2手势传感器


PAJ7620U2简介

    PAJ7620U2是一款由台湾省的原相科技(PixArt)生产的手势识别传感器。它由手势辨识传感器、LED和镜头组合而成的小尺寸模组组成,并且内置的红外LED和光学镜头,可以在低光和黑暗环境下工作它有两种不同的工作模式,分别是「手势模式」或「游标模式」。工作在手势模式:识别9种不同的手势,工作在:游标模式:可输出追踪物体的位置、尺寸和亮度的实时数据。本次我们需要使用的就是手势模式。

    手势模式可以识别包括上、下、左、右、前、后、顺时针、逆时针、摇摆在内的9种基本手势,PAJ7620U2使用I2C接口与MCU通信,通信速度可达400kHz,工作距离最多可达20公分。


PAJ7620U2驱动获取

    从上文的介绍中得知了PAJ7620U2的生产商,所以获取PAJ7620U2资料最好的途径常常是该原厂的官网,****如下:

https://www.pixart.com/products-detail/cn/37/PAJ7620U2

image.png

打开后,会发现没有地方下载规格书等任何信息,点击支援中心,会发现要登录账号,如下图。

image.png

其实原相科技一直都是这样的以前在调试一款原相科技生产的心率传感器(PAH8009ES)想要一份规格书 和 驱动,千辛万苦找到原厂深圳办公室得知,资料可以给但是要签NDA,非常费劲!所以这一次要通过别的路径去获取资料了!

 

最简单,也是最有效的方法就是:淘宝!!

image.png

随便找一家有售卖PAJ7620U2模块的商家,简介中可以非常容易的获得驱动 与 相关的规格书!资料收集完毕后,就开始调试了


I2C驱动

Cube mx配置

随意选择一组I2C口,初始化后,使用杜邦线连接模块即可。

image.png

image.png

以上就完成了I2C初始化!



测试代码

 
# define ADDR 0x2C
uint8_t cmd[3]={0x01,0x02,0x03};

HAL_I2C_Master_Transmit(&hi2c1,ADDR,(uint8_t *)cmd,3,100);

在I2C初始化后,添加以上的代码就可以测试I2C初始化正常与否。


引脚确认

上文可知P6BPB7分别是I2CSCL SDA,两引脚在开发板上的具体位置如下图

image.png

电源正负极,直接直接接到3V3 GND即可


实验发现

image.png

    Cube Mx默认把I2CIO配置为开漏、悬空、低速模式,这样会在外围没有上拉的情况下根本采集不到I2C的波形(开发板上因为不清楚你会把这IO作为什么功能使用所以没有,外接模块的话要取决于你的模块,我习惯先使用逻辑分析仪确认初始化成功与否,所以在默认的情况下根本捕捉不到正确波形,进而才发现这里!)

image.png

    将IO配置为下图的模式(推挽、上拉、高速)后,逻辑分析仪就可以正确捕获波形了

image.png

如图,初始化成功后,发送了从机地址0X2C,但是没有应答就结束了(我没接从机,只接了逻辑分析仪),所以波形是正确的!


驱动移植

驱动流程理解

这个传感器驱动起来比较简单。

一、上电后配置通电顺序

发送Init_Register_Array[][2]

 

二、配置Bank

两个不同的模式下有些寄存器会共用,为了区分开要配置不同的Bank,同理配置为手势模式。

0xEF寄存器,写0


三、配置工作模式

上文我们提到这个传感器有两个不同的模式手势模式 游标模式。工作模式取决于传感器初始化配置的参数,分别为以下两个数组二维数组名:

1、Init_Gesture_Array[][2] 手势模式

2、Init_PS_Array[][2] 游标模式

所以在上电进行初始化的时候把Init_Register_Array的数据发送出去,就可以了。

 

四、读取手势

之后就可以向0x43读取两个字节的,手势码来区分手势即可。

手势代码如下:

#define PAJ_UP        0x01

#define PAJ_DOWN       0x02

#define PAJ_LEFT       0x04

#define PAJ_RIGHT       0x08

#define PAJ_FORWARD       0x10

#define PAJ_BACKWARD      0x20

#define PAJ_CLOCKWISE   0x40

#define PAJ_COUNT_CLOCKWISE  0x80

#define PAJ_WAVE    0x100

 

按照以上的流程就可以初始化并驱动传感器了!

 

测试实验


int main(void)
{
    。
    。
    。
    
  MX_GPIO_Init();
  MX_USART3_UART_Init();
  MX_I2C1_Init();
  MX_ICACHE_Init();
   
  
  uint8_t str[] = "Hello EEPW & DigKey! Hello STM32H503!\r\n";
  HAL_UART_Transmit(&huart3,(uint8_t*)str,sizeof(str)-1,1000);
    
  paj7620u2_updata();
  
  while (1)
  {
      
      get_paj7620u2_state();
      HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);
      HAL_Delay(500);

  }
}


测试成果

image.png

GIF效果

23233232 (2).gif





关键词: PAJ7620U2    

专家
2024-06-05 19:21:21     打赏
2楼

感谢分线


院士
2024-06-05 21:15:04     打赏
3楼

您这全文阅读下来,感觉您这传感器的步骤没有调度通过啊!?


高工
2024-06-06 09:06:04     打赏
4楼

谢谢分享


专家
2024-06-06 11:08:33     打赏
5楼

加油,我来学习了!


高工
2024-06-06 14:19:55     打赏
6楼

谢谢分享


菜鸟
2024-06-06 17:06:09     打赏
7楼

更新了一些内容 和 GIF,GIF单个限制大小10M,很糊,没办法,又不想分为多个,只能勉强看了


专家
2024-06-09 17:40:05     打赏
8楼

谢谢分享


专家
2024-06-11 01:08:16     打赏
9楼

谢谢分享


专家
2024-06-11 07:54:49     打赏
10楼

感谢分享


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]