硬件篇
上篇讲完键盘配列,这篇更新下我的硬件电路。首先,明确一下需要的功能:(需求明确是一个项目最重要的开端,可以说是项目的指导纲领,在需求合理的情况下一切按需求办事,不仅能避开不必要的问题和责任,还能使项目生命周期健康推进,这也是大公司和小公司的区别之一。)
- 设备采用USB接口;
- 支持背光显示, 亮度可调;
- 适当增加背光动画,不必太花哨;
- 按键响应速度快;
- 支持全键无冲;
一、硬件方案
1. USB接口
USB接口有两种方案:一是采用外围USB驱动芯片,如CH9329串口转USB,傻瓜式配置即可实现USB键盘功能,这种方案虽然减少了软件开销和难度,但是增加了硬件成本,且降低通信速率;二是使用带有USB接口的单片机,通过软件实现USB键盘功能,减少了硬件成本但增加了软件负担。
本着软件能解决的问题就不使用硬件的原则,选择使用带有USB接口的单片机,这里用的是最熟悉的STM32F103。
这是STM32F103C8T6最小系统原理图:
2. 背光显示
为了实现LED背光和亮度调整,单纯使用IO是无法驱动的,必然要使用外围器件增加驱动能力,那么就有两种方案:一是使用晶体管元件,二是使用集成驱动芯片。相比之下,使用集成驱动IC,不管在成本上,还是软、硬件开销都优于分立元件搭的驱动电路。经过选型,选用了TM1629A这颗芯片,芯片大致参数如下:
这颗芯片的驱动电流已经完全够用,因此不需要外部元件增加驱动能力,况且太亮的话反而影响使用体验。原理图如下:
3. 按键扫描
为了增加按键响应速度,按键扫描电路应尽可能便于扫描,再普通矩阵键盘的基础上每一行增加一个上拉电阻,这样只要扫描一次就能得出键值,而不需要行列转换扫描,原理图如下:
4.全键无冲
全键无冲属于软件问题,这里大概讲一下USB硬件接口。Micro USB的引脚定义如下:
PIN | 名称 | 描述 |
---|---|---|
1 | VBUS | 电源正5 V |
2 | D- | 数据线负 |
3 | D+ | 数据线正 |
4 | ID | OTG模式下检测ID脚状态高低,从而判断为主设备或从设备 |
5 | GND | 信号地线 |
这里不需要OTG功能,因此ID脚悬空处理。
由于USB2.0是向下兼容USB1.X的,即USB2.0支持高速、全速、低速的USB设备(HIGH-SPEED,FULL-SPEED,LOW-SPEED),而USB1.X不支持高速设备。因此如果高速设备接在USB1.X的hub上,也只能工作在全速状态。因此对速度的识别是很重要的,否则没办法以想要的速度通信。全速设备和低速设备的识别取决于设备端的一个上拉电阻,如果D-上拉1.5K电阻则是低速设备,D+上拉1.5K电阻则是全速设备。高速是基于全速设备基础上,通过握手信号进一步识别,这里就不详细说明。USB接口原理图如下:
至此,硬件原理基本设计完了,下一篇讲一下程序设计。