CH58x三模键盘模组方案测试体验(CH555主控)

原文链接:

CH58x三模键盘模组方案测试体验(CH555主控) - SweetTea_lllpc - 博客园 (cnblogs.com)

前言:

去年B站稚晖君的瀚文键盘一经推出,给键盘客制化圈子带来了不小的影响。在此之前,键盘客制化一般指外壳、轴体的选择,很少有针对键盘软件功能做新颖的开发。功能性的开发似乎已经进入了瓶颈阶段,来回折腾开发也只是围绕在灯光律动、屏幕等软件功能。稚晖君的瀚文键盘是最基本的有线键盘,然而功能上却异常丰富:灯光/自带屏幕/与上位机通信可调等功能。从终端用户可二次开发这一最基本的概念阐释何为客制化。

笔者在了解了稚晖君的方案后,又实际测试体验了几款高流量的键盘方案,发现软件功能仍然存在很大的问题。最明显的如PWM调光,肉眼可见的屏闪,灯光切换缓慢,以及在不开灯光时1000mAh电池只能使用1~2周。虽然其凭借优秀的外观收获不少的拥趸,但笔者认为,作为客制化键盘最需要打磨的优先是功能性,其他的如外观、铝坨坨、声优轴等都是为功能服务的。带着这样的目的,笔者专门在键盘方案市场寻找了几款方案,都是针对功能性需求开发的,本次也给大家带来其中一款介绍:沁恒CH58x三模模组方案(CH555主控)

原理:

基本功能框架:CH555作为主控完成键扫+灯光等效果;CH582作为无线模块完成无线双模功能(2.4G+BLE)。

CH555作为可二次开发的芯片提供给终端进行二次开发,键扫、灯光、上位机配套均由此芯片完成。

CH582作为模块提供给终端直接进行指令的调配使用。CH582也可以实现键扫和简单灯光的闪烁功能。听原厂工程师说,为了实现2.4G模式上报率达到1Khz,所以CH582只作为无线透传使用,其他功能均放在了主控芯片完成。可以实现2.4G作为电竞需求使用。整体来看,这也符合资源与性能的配置要求。

如需要CH582单芯片实现三模功能,则适当牺牲灯光、上报率等性能,即可实现。

具体指令集参考如下:

CH58x三模模组方案(CH555主控)

灯光效果演示:

本次收到是方案板是半成品,包括软硬件。硬件用开发板搭建,听说原厂硬件已经绘制好了,可以自行打样(然而没有给我打样版本...)。据原厂工程师说这两个板子可以实现键盘的基本功能🐶

灯光效果专门找了一块CH555作为主控的DEMO板进行演示。

效果图如下:

无线连接:

①BLE连接

接下来使用CH555控制CH582通过串口(预留SPI)实现无线HID控制传输。

CH555通过串口1映射(P1.6/P1.7)(115200),发送控制命令;

CH582通过串口1映射(PB12/PB13)(115200),接收上位机控制命令。通过串口0(PB7)(921600)观察调试结果。

具体接线如下:

CH555 - CH582:P1.6(RXD1_) - PB13;P1.7(TXD_1) - PB12

测试BLE的功能,测试连接和键值A的发送。

发送以下指令:

/*实际使用时需要判断每一条指令发送后的返回值是否符合标准。
    符合标准则发送下一条指令,否则重新发送上条指令。
    以下仅进行简单功能验证参考。*/
    UART1_SendStr(CMD_reload, (UINT8)sizeof(CMD_reload));    //恢复出厂
	mDelaymS(20);
	UART1_SendStr(CMD_clrpair, (UINT8)sizeof(CMD_clrpair));  //清除配对信息
	mDelaymS(20);
	UART1_SendStr(CMD_free, (UINT8)sizeof(CMD_free));        //模组切换到空闲状态
	mDelaymS(20);
	UART1_SendStr(CMD_ble_1, (UINT8)sizeof(CMD_ble_1));      //模组切换到蓝牙设备1
	mDelaymS(20);
	UART1_SendStr(CMD_pair, (UINT8)sizeof(CMD_pair));        //进入配对模式
	mDelaymS(00);
	UART1_SendStr(CMD_adc, (UINT8)sizeof(CMD_adc));          //模组采集电量,返回电压值
	
	mDelaymS(1000);
	while(1){
		mDelaymS(1000);
		UART1_SendStr(CMD_kbd_bit_a, (UINT8)sizeof(CMD_kbd_bit_a));    //发送全键盘的按键A
		mDelaymS(2);
		UART1_SendStr(CMD_kbd_bit_releas, (UINT8)sizeof(CMD_kbd_bit_releas));    //发送完成后及时释放
	}

使用电脑和手机均可连接并可以接收到数据。

②2.4G连接

接下来测试2.4G功能和传输的速度。

传输的指令跟BLE基本类似:

void main(void)
{
	CfgFsys();
	mDelaymS(20);
	mInitSTDIO();                                                             /* 为了让计算机通过串口监控演示过程 */
	CH555UART0Alter();                                                         //串口0引脚映射
	printf("ID=%02X\n", (UINT16)CHIP_ID);
	printf("UART demo start ...\n");
 
	CH555UART1Init();                                                          //串口1初始化
	CH555UART1Alter();                                                         //串口1引脚映射   
 
	UART1_SendStr(CMD_free, (UINT8)sizeof(CMD_free));
	mDelaymS(20);
	UART1_SendStr(CMD_rf, (UINT8)sizeof(CMD_rf));
	mDelaymS(20);
	UART1_SendStr(CMD_adc, (UINT8)sizeof(CMD_adc));
	
	mDelaymS(1000);
	while(1){
		mDelayuS(400);
		UART1_SendStr(CMD_kbd_bit_a, (UINT8)sizeof(CMD_kbd_bit_a));
		mDelayuS(400);
		UART1_SendStr(CMD_kbd_bit_releas, (UINT8)sizeof(CMD_kbd_bit_releas));
		mDelayuS(400);
		UART1_SendStr(CMD_kbd_bit_s, (UINT8)sizeof(CMD_kbd_bit_s));
		mDelayuS(400);
		UART1_SendStr(CMD_kbd_bit_releas, (UINT8)sizeof(CMD_kbd_bit_releas));
	}
	
	while(1){
	};
}

同时另外拿了一块板子烧录Dongle代码。

烧录后将Dongle后上电即可建立连接(注意主机非睡眠状态,连接的时候保持醒来)。

建立连接后通过2.4G发送数据,每隔400us上传一个键值。键值上传到Dongle后再通过USB传给主机。实测可以达到1KHz的速率。

如下图使用沁恒的USB分析仪抓包可以看到对应的速度。

功耗测试:

功耗测试因为手上只有开发板,无法直接测试,因此直接借用官方的测试结果。

①BLE功耗:

测试项目

测试模式

  广播平均功耗(mA)工作平均功耗(mA)快速发键功耗(mA)长按单键功耗(mA)低功耗休眠(uA)深度休眠(uA)

B

L

E

模组17.48-7.528.12-8.138.14-8.188.15-8.17149.12-165.396.38-7.42
模组27.42-7.438.10-8.138.22-8.238.17-8.18144.73-166.826.53-6.74
模组37.44-7.458.12-8.138.15-8.218.16-8.18150.14-171.636.41-6.51

②2.4G功耗:

测试项目

测试模式

2.4G未连接功耗(mA)2.4G配对阶段功耗(mA)2.4G连接后正常使用功耗(mA)快速发键功耗(mA)长按单键功耗(mA)低功耗休眠(uA)深度休眠(uA)

2.4G

模组16.92-6.9317.85-17.8611.71-11.7611.42-11.4311.46-11.51143.27-144.955.57-5.62
模组26.91-6.9717.63-17.8811.66-11.7211.47-11.5111.37-11.47143.88-144.095.46-5.60
模组36.91-6.9417.85-17.8711.54-11.5611.47-11.4811.45-11.48144.11-145.295.32-5.67

总结:

上面对基础功能进行了测试,主要围绕键盘最基本的功能,灯光配置/功耗配置/上报率等,听原厂工程师提到还有上位机工具可以diy键盘的配置功能,接下来进行尝试再测试看看效果。

目前整体的测试效果还是比较满意的,上报率达到1KHz正好符合笔者的电竞需求,配上RGB灯光加持,已经迫不及待看到成品了!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HC32L13X是一款32位ARM Cortex-M3内核的微控制器,而CH455H是一款4位5段共阳数码管驱动芯片。在使用HC32L13X驱动CH455H数码管时,可以采用以下步骤: 1. 确定连接方式 CH455H数码管有共阳和共阴两种接法,需要确定使用的是哪一种接法,并将数码管连接到HC32L13X的GPIO引脚上。 2. 编写初始化代码 在使用HC32L13X驱动CH455H数码管前,需要先对GPIO口进行初始化。可以通过以下代码实现: ```c // 初始化IO口 void init_gpio(void) { stc_gpio_init_t stcGpioCfg; // 使能GPIO外设时钟 CLK_FcgPeriphClockCmd(CLK_FCG_GPIO, Enable); // 配置引脚 stcGpioCfg.u16PinAttr = PIN_ATTR_OUTPUT; GPIO_Init(GPIO_PORT, GPIO_PIN, &stcGpioCfg); } ``` 3. 编写驱动代码 接下来,需要编写一个函数来驱动CH455H数码管的显示。可以通过以下代码实现: ```c // 数码管显示 void display(uint8_t data) { uint8_t i; // 设置数码管 GPIO_ResetPins(GPIO_PORT, GPIO_PIN); GPIO_SetPins(GPIO_PORT, 1 << (data & 0x0F)); // 延时 for (i = 0; i < 10; i++) { __NOP(); } // 清空数码管 GPIO_ResetPins(GPIO_PORT, GPIO_PIN); } ``` 4. 编写矩阵键盘代码 如果需要实现矩阵键盘的功能,可以通过以下代码实现: ```c // 矩阵键盘扫描 uint8_t scan_key(void) { uint8_t i, j; uint8_t key_val = 0xFF; // 设置行为高电平 for (i = 0; i < ROWS; i++) { GPIO_SetPins(GPIO_PORT_ROW, 1 << i); // 判断列是否有按键按下 for (j = 0; j < COLS; j++) { if (GPIO_GetBit(GPIO_PORT_COL, j) == 0) { key_val = i * COLS + j; break; } } // 复位行 GPIO_ResetPins(GPIO_PORT_ROW, 1 << i); if (key_val != 0xFF) { break; } } return key_val; } ``` 以上就是使用HC32L13X驱动CH455H数码管及矩阵键盘的实现示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值