单片机实现数字化B超键盘设计
扫描二维码
随时随地手机看文章
摘要:针对目前使用的RS232接口数字化B超键盘存在PC主机启动时不能设置BIOS,提出一种PS2键盘的设计方法。基于W78E052D单片机,采用8通道串行A/D转换器设计了8个TGC电位器信息采集电路,电位器位置信息以键盘扫描码序列形式发送,正交编码器信号通过XC9536XL转换为单片机可接收的中断信号,软件接收到中断信息后等效处理成按键。结果表明,在满足开机可设置BIOS同时,又可实现超声特有功能,不需要专门设计驱动程序,接口简单,成本低。
关键词:RS232;单片机;PS2;键盘
早期B超产品设计大多采用单片机和可编程器件(CPLD)来控制整个系统,键盘直接由主控单片机扫描处理,或专门用单片机处理键扫并经RS232接口与主控单片机通讯。随着B超数字化技术的诞生,需要大量控制数据存储并可下传给超声模块,主控单片机逐渐被计算机取代。在B超数字化过程中,RS232接口的键盘存在需要设计驱动程序,且存在PC启动时无法进入BIOS设置的问题,而且串口有逐渐被取消的趋势。如果直接采用PS2或USB标准键盘,则需要另行设计超声特有的功能模块、该模块与主机的接口及其驱动程序,而且PC键盘的外观会影响B超整体造型设计。
本文提出了一种用单片微机实现PS2超声键盘的设计方法,键盘包括字母数字按键和超声功能模块,设计兼顾BIOS设置,直接可使用操作系统(Windows)提供的驱动程序。
1 接口协议
PS2接口协议是现在大多数键盘、鼠标与PC机通讯的标准协议。键盘与鼠标在传输协议上,只是传输数据内容不一样。
充分理解该接口协议,可以帮助设计者自主开发专用的多功能键盘。
PS2接口协议是一种双向同步串行协议,换句话说,PS2设备可以发送数据到主机,而主机也可以发送数据到设备,但主机总是在总线上有优先权,它可以在任何时候抑制来自于设备的通讯——即把时钟拉低。
从设备发送到主机的数据在时钟信号的下降沿被读取,从主机发送到设备的数据在上升沿被读取。不管通讯的方向怎样,设备总是产生时钟信号,如果主机要发送数据它必须首先告诉设备开始产生时钟信号。最大时钟频率是33 kHz,而且大多数设备工作在10~20 kHz。
PS2连接器、发送或接收数据的细节、命令集在《PS/2技术参考》一文中有详细描述。
2 扫描码
键盘处理器获得有键按下、释放或按住的信息,信息最终以扫描码的形式发给计算机。
标准计算机上的每个按键都有唯一的通码和断码,所有这些通断码组成了扫描码集。扫描码集一共有3套,分别对应3种键盘,现代键盘默认的是第二套扫描码集。
1)扫描码分通码和断码。根据扫描码的不同,可将按键分为3种;
2)通码为1字节,断码为0xF0+通码形式;
3)通码为2字节,0xE0+0xXX形式,断码为0xE0+0xF0+0xXX形式;
特殊按键,有两个,Pause和Print screen。
扫描码个数是固定的,无法随意增加,自行设计PS2键盘就是要灵活运用第二套扫描码集。B超键盘用到了数字字符键,这一部分跟计算机键盘基本相同。除数字字符键外的标准键盘按键和预留按键的扫描码就当作功能操作调节时的信息代码。
3 键盘方案及硬件设计
3.1 键盘方案设计
数字化B超键盘由字母数字(Alphanumeric)键、功能键、功能调节编码器、总增益调节编码器、八段TGC(时间增益补偿,Time Gain Compensation)调节电位器等几部分组成,如图1所示。
按键总数为88个,且需今后扩充,故采用行列结构,字母数字键的扫描码参照标准键盘设计,功能键则直接使用字母数字键除外的扫描码,这样B超键盘相当于在标准键盘的基础上增加编码器处理和TGC电位器数据采集两个模块。
编码器输出具有A相、B相的方波正交信号,而且二者相序取决于编码器的正反转方向,文献中对原理及处理方法有详细描述。不同的是,只用鉴相器,两个编码器正转时产生的脉冲信号分别输出至,反转时分别输出至。
8个TGC电位器以前采用8通道并行ADC或单通道ADC+8选1模拟开关完成模拟量到数字量的转换,占用单片机I/O口较多,电路接口复杂,现采用串行8通道ADC,控制简单,跟MAX111相比不需要转换时间,而且集成度更高。
3.2 硬件设计
键盘硬件电路由单片机W78E052D、串行AD转换器TLC0838、可编程器件XC9536XL和两片3-8译码器74HC138等组成,如图2所示。
W78E052D是台湾新唐科技(Nuvoton)推出的一款宽电压(2.4-5.5 V)低功耗CMOS8位单片机,指令系统与8052完全兼容。PLCC44封装的W78E052D片内含8KB的可编程的Flash只读程序存储器,256字节RAM,4个8位双向、可位寻址的I/O口,一个附加的4位I/O口P4,3个16位定时/计数器,一个硬件看门狗定时器及一个串行口。比传统8051增加了两个外中断,可满足接入4个外中断信号的需求。
TLC0838是TI公司生产的8位逐次逼近模数转换器。具有输入可配置的多通道多路器和串形输入输出方式。由于TLC0838采用的是串行输入结构,因此封装体积小,可节省51系列单片机I/O资源,价格也较适中。因8个通道全部使用,故其多路器由软件配置为单端输入。
编码器输出正交的信号经CPLD(XC9636XL)作倍频鉴相转换成单片机能接收的脉冲信号,单片机的处理工作得以简化。两个编码器共输出4路信号,以此作为单片机的外部中断源。在CPLD中还扩展了6个输出口用于指示Depth、Zoom、Focus、LP、A-Pwr调节功能是否可用及图像是否处于冻结状态。
键盘按键以行列形式排成16x8矩阵,输出列线16根,输入检测行线8根,最多支持128键,每个行列线交叉处设置一个按键。为了减少I/O的占用,采用两片3-8译码器(74HC138)实现4-16译码,给A11-A8依次输出0000、0001、0010、0011、0100、1000、1001、1010、1011、1100、1101、1110、1111,即可依次拉低列线S00-S015,同时读取行线P1口,行线为低代表当前拉低的列线与该行线交叉处的按键被按下。比采用接口芯片,成本更低。
4 软件设计
4.1 主程序设计
软件设计部分的主程序流程如图3所示。
主程序完成初始化后,进人命令查询处理,不断查询有没有来自计算机的命令,有则应答并处理,接着检查键扫标志,有键扫标志(即=1)则进行键盘处理,否则继续查询命令。
键盘处理流程如下:在实时状态,对TGC电位器进行AD采样,并与上一次结果比较,有变化则发送给计算机,冻结状态跳过TGC处理;接着判断扫描编码器旋转标志位,有则以键码形式发送给主机;然后扫描键盘阵列,有键按下或释放,则以查表方式取得扫描码,并发给计算机。
键盘扫描采用定时器0中断方式,晶体频率为24 MHz按方式1工作,最大定时时间为32.768ms,定时器中实现计数3次,可定时98.3ms,以此作键盘处理周期,定时间到则将键盘扫描标志置为1。
4.2 外中断程序设计
新增的2个中断,其中断信号由P4口输入,中断功能/状态通过XICON寄存器控制,P4和XICON不是标准80C52的寄存器,需预先定义——在源文件头上加入以下两行:
P4 EQU 0D8H
XICON EQU 0C0H
中断服务程序只完成置编码器旋转标志位的处理,主程序中根据标志位以按键键码的形式发送信息。中断服务程序源代码如下:
4.3 初始化及命令查询处理
初始化过程是设计过程中需要注意的。计算机启动过程跟主板有关,因为主机在总线上有优先权,通信过程发生异常,将禁用设备,而且目前找不到介绍计算机启动过程中对键盘操作细节的描述,所以本部分的设计是难点。
经过试验发现,上电后,键盘完成白检即发送代码0AAH给计算机,计算机在启动过程中可以进行复位、读ID、停止键扫、使能键扫、控制LED状态等操作,而且有时计算机会拉低时钟信号——抑制通讯,在整个过程中,只要主机认为设备异常,将抑制通讯导致键盘无法使用而且不能进入操作系统。
每个由计算机发送到键盘的数据都能从键盘获得一个0FAH应答的回应,唯一例外的是键盘对Resend和Echo命令的回应。在发送下一个字节给键盘之前,主机要等待应答。键盘作为从设备,无法预先知道什么时候主机会发送控制命令,一旦主机发送命令给设备,设备没有回应,主机即将该设备挂起,除非重新开机。
针对命令集,设计了专门的应答子程序,根据设备收到的命令,作出相应的回答和处理。
经逻辑分析仪测试、分析和反复验证,发现在主程序中插入命令查询处理程序,既能满足初始化的要求,还可以保证键盘及时接收和处理来自主机的信息,维持键盘设备正常工作,命令查询处理程序流程如图4所示。这部分概括起来就是空出360μs的等待时间(15μsx20),作查询,如果在这段时间内,数据线和时钟线同时变为低电平,表示键盘有命令需发送,设备产生时钟以接收命令,并根据收到的命令做相应的处理。
4. 4 TGC数据处理
TGC数据发送实质上是一个扫描码的序列,如第一个TGC增益数据为80,依次向计算机发送0x14 0x16 0x3E0x45 0xF0 0x14,对应键“L Ctrl”按下、键“1”按下、键“8”按下、键“0”按下、键“L Ctrl”释放的动作,超声系统软件实现解析。实践证明,发送每个序列数据过程中两个数据间至少应延时1.06 ms。
上述组合不会引起计算机异常,此前尝试过其他组合,在没进入超声软件时调节TGC易引起误操作。
特别要注意的是:
1)开机时ADC采样使能标志清0,禁止采集TGC;
2)键盘上电完成初始化后开启定时器1,联合应用定时器和计数器,定时5 s,时间到则ADC采样使能标志置1,可以采集TGC数据,TGC数据有变化则发送给计算机;
3)设立转换通道标志码,实时状态每次键扫时根据标志码只进行相对应的一个电位器的模数转换,转换后将转换标志码指向下一通道。
采用上述措施旨在解决因开机过程中键盘发送TGC数据和正常工作时TGC数据频繁发送导致键盘死机问题,频繁发送数据以至主机认为键盘异常而禁用键盘。
4.5 状态同步处理
标准键盘上有Num Lock,Caps Lock和Scroll Lock3个LED指示灯,为了实现主机与键盘的状态同步,采用了如下解决方案:键盘只发送Num Lock、Caps Lock、Scroll Lock按下或者释放的代码;根据按键情况,主机发送专门用于指示键盘上Num Lock、Caps Lock和ScrollLo-ck3个LED状态的指令;键盘处理器收到指令后刷新指示灯。
设计中冻结键使用Scroll Lock以保持状态同步。
Depth、Zoom、Focus、I.P、A-Pwr与功能调节编码器组合使用,5个按键中每次只有1个激活,激活时led指示灯亮,按键状态则由键盘MCU寄存和切换控制,不同功能激活时调节编码器产生不同的键码,如:Depth激活时编码器左旋产生“KP-”按下的代码,右旋则产生“KP +”按下代码;Zoom激活时编码器左旋产生“Page Up”按下的代码,右旋则产生“Page Down”按下代码。该方法成功解决了状态同步问题。
5 结论
对基于W78E052D单片机设计的PS2键盘方案、硬件和软件设计做了详细阐述,命令查询、TGC和状态同步处理对自行设计非标PS2键盘有借鉴意义,在整个设计过程中,通过不断改进硬件和调试软件,得到了预期的效果。相对于采用多片MCU分别处理几个模块最终通过USB集线器同PC主机通讯的方案,接口更简单,成本更低,而且不需要专门开发键盘驱动程序。在需要3个以上编码器的应用中,编码器处理方案有待于进一步改进。