为什么会有三模电竞鼠标的市场需求呢?主要有这几个原因。第一,现如今年轻人比较爱玩游戏,就需要又能办公,又能玩游戏的鼠标。第二,罗技已经推广一个无线电竞的概念,这就要求鼠标的 report rate 需要达到 1K。第三,Dongle 需要接端口,电脑的 USB 端口没那么多,所以又加入蓝牙接入功能。
世平集团三模电竞鼠标方案,具有高回报率鼠标移动功能。方案采用 NXP QN9080 主控平台设计,它是一款低功耗蓝牙芯片,相比其他竞争对手的同类产品,能够节能40%。方案支持 USB+BLE+2.4G 模式,BLE 兼容目前主流 Windows 系统,支持 Windows、MAC、IOS、Android。
世平电竞鼠标方案最大的优势就是 2.4G 传输协议是世平私有的,并且准备申请专利。2.4G 在采集到 Sensor 按键等外设的数据之后,会先将数据已经自定义压缩,将原本 9 个 Byte 的数据压缩成 3 个 Byte,在发送之前将压缩好的数据存进 Buffer 里面,再判断 Buffer 缓存的数量如果超过 3 组,就将 Buffer 缓存的 3 组压缩好的数据合并成一组数据,并且发送出去,在 Dongle 端检测到特殊标志位时在将压缩的数据进行解压。
此电竞鼠标方案的 Optical Navigation Sensor 采用的是 PixArt 推出的 PAW3335DB‐TZDU,这个 Sensor 在无线鼠标中相对于其他型号的 Optical Navigation Sensor 拥有更高的性价比,PAW3335 工作电流只需要 1.7mA,Power Down 模式下只需要3uA,配合QN9080 完成的鼠标方案能够实现无线模式整机功耗在 4mA 以下,能够保证鼠标更长的续航能力。另外这个 Sensor 拥有最高 16000 的cpi。
在硬件方面,PAW3335 需要注意的是为了实现更低的功耗,在硬件设计的时候为了防止 MCU 的电流倒灌,需要添加电平匹配,将 MCU 提供的 3.3V 转换为 Sensor 所需的 1.8-2.1V。相关原理图如下:
在软件方面,PAW3335 Datasheet 对每一个寄存器有详细描述,对相关的初始化也有相应的描述,下面是 PAW3335 软件初始化的相应代码:
void Sensor_PowerUp(void)
uint8_t VarA = 0;
uint8_t VarB = 0;
delay(t50ms); // 50ms
DRIVER_NCS_OFF;
delay(t1us);
DRIVER_NCS_ON;
Write_Sensor(0x3A, 0x5A);
delay(t1ms); //wait for at least 5ms
delay(t1ms);
delay(t1ms);
delay(t1ms);
delay(t1ms);
Write_Sensor(0x40,0x80);
Write_Sensor(0x55,0x01);
delay(t1ms);
Write_Sensor(0x7F,0x0E);
Write_Sensor(0x43,0x1D);
VarA = (Read_Sensor(0x46)); //check bit3 - bit0
Write_Sensor(0x43,0x1E);
VarB = (Read_Sensor(0x46)); //check bit3 - bit0
Write_Sensor(0x7F,0x14);
Write_Sensor(0x6A,VarA);
Write_Sensor(0x6C,VarB);
Write_Sensor(0x7F,0x00);
Write_Sensor(0x55,0x00);
Write_Sensor(0x4E,0x23);
Write_Sensor(0x77,0x18);
Write_Sensor(0x7F,0x05);
Write_Sensor(0x53,0x0C);
Write_Sensor(0x5B,0xEA);
Write_Sensor(0x61,0x13);
Write_Sensor(0x62,0x0B);
Write_Sensor(0x64,0xD8);
Write_Sensor(0x6D,0x86);
Write_Sensor(0x7D,0x84);
Write_Sensor(0x7E,0x00);
Write_Sensor(0x7F,0x06);
Write_Sensor(0x60,0xB0);
Write_Sensor(0x61,0x00);
Write_Sensor(0x7E,0x40);
Write_Sensor(0x7F,0x0A);
Write_Sensor(0x4A,0x23);
Write_Sensor(0x4C,0x28);
Write_Sensor(0x49,0x00);
Write_Sensor(0x4F,0x02);
Write_Sensor(0x7F,0x07);
Write_Sensor(0x42,0x16);
Write_Sensor(0x7F,0x09);
Write_Sensor(0x40,0x03);
Write_Sensor(0x7F,0x0C);
Write_Sensor(0x54,0x00);
Write_Sensor(0x44,0x44);
Write_Sensor(0x56,0x40);
Write_Sensor(0x42,0x0C);
Write_Sensor(0x43,0xA8);
Write_Sensor(0x4E,0x8B);
Write_Sensor(0x59,0x63);
Write_Sensor(0x7F,0x0D);
Write_Sensor(0x5E,0xC3);
Write_Sensor(0x4F,0x02);
Write_Sensor(0x7F,0x14);
Write_Sensor(0x4A,0x67);
Write_Sensor(0x6D,0x82);
Write_Sensor(0x73,0x83);
Write_Sensor(0x74,0x00);
Write_Sensor(0x7A,0x16);
Write_Sensor(0x63,0x14);
Write_Sensor(0x62,0x14);
Write_Sensor(0x7F,0x10);
Write_Sensor(0x48,0x0F);
Write_Sensor(0x49,0x88);
Write_Sensor(0x4C,0x1D);
Write_Sensor(0x4F,0x08);
Write_Sensor(0x51,0x6F);
Write_Sensor(0x52,0x90);
Write_Sensor(0x54,0x64);
Write_Sensor(0x55,0xF0);
Write_Sensor(0x5C,0x40);
Write_Sensor(0x61,0xEE);
Write_Sensor(0x62,0xE5);
Write_Sensor(0x7F,0x00);
Write_Sensor(0x5B,0x40);
Write_Sensor(0x61,0xAD);
Write_Sensor(0x51,0xEA);
Write_Sensor(0x19,0x9F);
Write_Sensor(0x5B,0x20);
for(uint8_t ctr = 0; ctr< 55; ctr++)
if (Read_Sensor(0x20) == 0x0F)
Read_Sensor(0x20);
break;
delay(t1ms);
delay(t1ms);
Write_Sensor(0x19,0x10);
Write_Sensor(0x61,0xD5);
Write_Sensor(0x40,0x00);
Write_Sensor(0x7F,0x00);
Write_Sensor(0x77,0x24);
Write_Sensor(0x7F,0x0D);
Write_Sensor(0x4E,0x6B);
Write_Sensor(0x7F,0x05);
Write_Sensor(0x44,0xA8);
Write_Sensor(0x4A,0x14);
Write_Sensor(0x7F,0x00);
Write_Sensor(0x4F,0x46);
Write_Sensor(0x4D,0xD0);
Read_Sensor(0x02);
Read_Sensor(0x03);
Read_Sensor(0x04);
Read_Sensor(0x05);
Read_Sensor(0x06);
鼠标方案使用的灯是 Brightek 的 ISC3535VGBC1MBA1,ISC3535VGBC1MBA1 是一颗自带 IC 的RGB 灯,工作电流为 5mA,静态电流为 0.3mA,相对于其他 RGB 灯,ISC3535VGBC1MBA1 只需要通过 IO 口模拟时序就能完成对三种颜色的控制,这个 RGB 是通过对 32 bit 数据进行赋值,R、G、B 各占用 8 bit。只需要一路普通 IO,不需要通过 I2C 去控制,不仅能节省 MCU 的IO 口,更简化了控制 RGB 的流程。
主要时序如下图:
只需要在相应的时间给予 IO 口高低电平就能控制每一个 RGB 的颜色,具体的使用如下: