基于CY7C63813-SXC 控制器轨迹球的设计与实现

2022-03-24 02:34官茂
长沙大学学报 2022年2期
关键词:高电平自动识别光标

官茂

(湖南兴天电子科技有限公司技术中心,湖南 长沙 410006)

目前,人们在计算机上使用的人机接口设备,如鼠标、键盘等,大部分都是USB 接口,但PS/2接口因其传输距离相对更长,在某些特定领域仍被使用。例如,支持PS/2 接口的嵌入式轨迹球(以下简称轨迹球)是一种特殊的鼠标,是使用光学感应元器件和其原理制造的能管控屏幕或光标的人机接口设备,可在一定程度上让使用人手腕的疲劳感降低,同时具有定位精准、手感较好的优点,所以在工业控制和军用设备中仍被广泛使用。

目前,市面上一部分轨迹球仅能支持PS/2或USB 接口的工作模式。在此基础上,文章采用Cypress 公司的enCoRe™ Ⅱ系列USB 控制器CY7C63813-SXC 作为核心器件(enCoRe™ ⅡLow Speed USB Peripheral Controller)[1],使用C 语言编程,设计了一款在USB 和PS/2 接口模式下都能工作的轨迹球。 此轨迹球在CY4623例程(CY4623 是Cypress 公司提供的鼠标参考设计样例)的基础上,实现了自动识别PS/2 接口和USB 接口的算法,采集轨迹球球体在X轴、Y轴方向的移动量的算法及通过拨码开关切换X轴、Y轴及其正方向的算法。

1 嵌入式轨迹球工作原理

自动识别USB 和PS/2 接口的轨迹球主要由主控制电路(含CY7C63813 芯片)、光耦(包括X轴、Y轴、Z轴,其中Z轴光耦是预留设计,文章没有使用)、按键(L、M、R,即左键、中键、右键)、PS/2 接口连接器、USB 接口连接器等组成。

光耦作为产生、探测、接收红外光线,并将红外光信号转换成电信号的器件,先接收球体在X轴、Y轴方向的转动位移量,再将此位移量转换为电信号传送给CY7C63813 芯片,CY7C63813芯片经过数据分析处理后,通过PS/2 或USB 协议通信模块转换为相应协议信号,再通过相应的接口连接器传送到上位机的相应接口。 球体在X轴、Y轴方向的转动位移量通过USB 接口或PS/2接口传送给上位机后,就可实现控制光标在屏幕上按照轨迹球球体转动而移动的人机接口设备功能。

2 硬件电路设计

CY7C63813-SXC 控制器是基于enCoRe™ Ⅱ内核的8 位哈佛架构微控制器,主频可达到24MHz,内部集成有晶体振荡器、3.3V 电源调整器和8KB 的FLASH 存储器等,芯片不需其他外部器件就可配置成USB 或PS/2 模式。CY7C63813 芯片集成了很多功能模块,减少了其所需的周边器件数量,降低了成本及应用复杂度,并且其指令集针对PS/2 及USB 操作也进行了优化。

CY7C63813 芯片接收的是数字信号,根据图1 的硬件平台组成可知,光耦将球体在X轴、Y轴方向上的移动信号转换为电信号后,传送给主控制电路(其中的微控制单元MCU 就是CY7C63813 芯片)。但光耦转换后的电信号并不是标准的数字信号,而是类似正弦波的模拟信号,此信号若直接传送给CY7C63813 芯片,将难以被识别,需先将其整形为标准数字信号。文章采用施密特触发反相器74HCT14D(以下简称74HCT14D),先将光耦转换后的电信号整形为标准数字信号,再向CY7C63813 芯片发送。74HCT14D 是恩智浦半导体公司的一款用于波形和脉冲整形的芯片,具有施密特触发动作和六反相缓冲器,能将缓慢变化的输入信号转换为稳定无抖动的输出信号[2]。

图1 硬件平台组成

轨迹球球体转动时,带动光栅切割光耦(X轴、Y轴方向各有一个光耦,目前使用较多的光耦是美国威世公司的TCUT1300X01[3])的红外发光二极管产生的红外光线,光耦上的两个光电晶体管探测器根据接收的红外光线先后顺序(根据先后顺序的不同,可知光栅是顺时针切割光线还是逆时针切割光线,即可知光栅也就是球体的移动方向)产生相应的电信号波形,并传送给74HCT14D,经过波形整形后,再传送给MCU,MCU 对数据进行处理分析(即判断出球体在相应轴向上的移动量及方向)后,再通过相应连接的主机接口将数据传送给主机等。

3 固件程序设计

文章采用PSoC(Programmable System on Chip)芯片开发工具编制程序(PSoC Designer)[4]。PSoC芯片是一种将微控制器、逻辑电路等模块进行集成(集于一芯片上),并构建成一个具备信号采集及I/O处理等功能的可编程型系统。PSoC Designer 是用于PSoC 芯片开发的工具,也是由Cypress 公司开发的,该工具支持C 语言等数种编程语言,是一款按模块化方式进行程序设计开发的工具。该工具内含各种已设计好的程序模块,使用时,只要调用相应的程序用户模块集成到主程序中,就可进行程序设计了。

3.1 CY4623 例程及程序模块引用分析

试验安装的PSoC Designer 是5.4 版,固件设计是以CY4623 例程[5]为基础,增加并实现其他所需功能的算法程序代码而完成的。用户先下载并打开CY4623 例程,加载MSTIMER、PITIMER12、SPIM、PS2D、USB 五个用户模块,加载用户模块的同时,其会将程序代码、寄存器、定时器等模块所需的参数自动设置好,用户只需调用已有的函数等便可实现相关开发。

(1)MSTIMER 用户模块:这是一个定时器(1ms 间隔的)用户模块,主要是给USB 用户模块进行USB 挂起处理、HID 报告闲置时使用。

(2)PITIMER12 用户模块:这是一个12 位的可编程的计数寄存器用户模块,该模块最高能达到24MHz 的源时钟频率,可实现计数值的自动重新载入功能。

(3)SPIM 用户模块:这是将CY7C63813 芯片作为SPI 串行通信中的主设备的用户模块,用于SPI 串行通信。因为参照CY4623 例程实现的是光电鼠标设计,Cypress 公司的主控IC 需要与光学感应器进行SPI 串行通信,因此要用到此用户模块。而自动识别USB 和PS/2 接口轨迹球则无须进行SPI 串行通信,其是将SPI 串行通信的相应针脚当作GPIO 接口来使用。但为了给后续设计光电鼠标等其他产品奠定基础,文章仍然保留了CY4623 例程中的SPIM 用户模块和其程序代码。

(4)PS2D 用户模块:这是PS/2 设备的协议用户模块,要将CY7C63813 芯片作为PS/2 鼠标来使用,就必须调用此模块。其内部已建立好完整并经过充分验证的PS/2 鼠标协议和命令集,且其集成了USB SIE(串行接口引擎),可配合USB用户模块实现自动识别USB 和PS/2 应用程序的功能。

(5)USB 用户模块:这是USB 接口所需,要让CY7C63813 芯片具有USB 鼠标接口,就必须采用此模块。其内部已建立好完整且经过充分验证的USB 协议和命令集,为控制端点建立好了符合USB 协议的底层驱动程序,能对主机发出的请求进行解码及分配,支持 USB HID。并且可采用该模块的USB 设置向导,设置USB 描述符等参数,以生成符合要求的USB 程序代码。当然,使用者需要具备USB 相关的基本知识,以便更好地进行自动识别USB 和PS/2 接口轨迹球的程序设计。

以上五个模块就是进行自动识别USB 和PS/2 接口轨迹球的程序设计需要用到的PSoC Designer 自带的用户模块,用户将以上模块进行加载并设置好后,就建好了软件开发基础平台。

3.2 CY4623 例程修改分析

CY4623 例程主要有以下三方面不满足自动识别USB 和PS/2 接口轨迹球的功能需求,使用者需要修改和增加相应的程序代码。

(1)自动识别USB 和PS/2 接口轨迹球要求能自动识别连接的接口类型,并能按照连接的相应接口,将数据进行转换,实现相应的通信功能,而CY4623 例程缺少此自动识别的程序代码。

(2)CY4623 例程实现的是光电鼠标设计,但自动识别USB 和PS/2 接口轨迹球是要求识别球体在X轴、Y轴方向上的转动信息,以此实现控制光标移动的功能。

(3)因为不同加固轨迹球项目的结构安装要求可能不同,自动识别USB 和PS/2 接口轨迹球的安装方向也不会只有一个,如图2 所示,在四个安装方向下,都必须保证球体向上(或向下)移动时,能控制光标向Y轴正方向(或负方向)移动(球体向左或向右移动同此理),必须满足X轴、Y轴及其正方向可互换的要求。采用拨动拨码开关的方式,可调节X轴、Y轴及其正方向。但CY4623 例程不具备此功能。

图2 轨迹球安装方向示意(视角为从顶部观看)

3.3 算法的具体实现分析

为了实现以上功能,文章研究相关算法,并根据其算法编制相应的程序代码,主要有PS/2 接口和USB 接口的自动侦测算法,球体转动控制光标移动算法,X轴、Y轴及其正方向可互换功能的算法。

自动识别USB 和PS/2 接口轨迹球基本功能的程序如图3 所示,这也是软件的程序流程图。

图3 自动识别USB 和PS/2 接口轨迹球基本功能

3.3.1 PS/2 接口和USB 接口的自动侦测算法及程序实现

试验通过深入研究PS/2 协议、USB 协议(尤其是USB HID 相关部分),并参考相关文献资料发现,PS/2 设备在上电后500ms 左右,才向主机发送BAT自检成功代码“0xAA”。因此,程序完全可以利用PS/2 设备发送BAT 成功代码之前的500ms 左右的时间,检测其连接的是主机的PS/2 接口,还是USB 接口。PS/2 接口的时钟信号(CLOCK)和数据信号(DATA)通常是高电平信号,而USB 接口的DATA+和DATA-信号则是高速差分信号。以此为基础设计PS/2 接口和USB 接口的自动侦测算法,算法流程见图4。

图4 PS/2 接口和USB 接口的自动侦测算法程序

(a)轨迹球上电后,延时50ms。程序代码:

timer_delay_msec(50);//延时50ms。

(b)在2ms 的时间内反复侦测DATA-(即DATA)和DATA+(即CLOCK)的电平,如果有连续4 次高电平(DATA-或DATA+),就是PS/2 接口,否则进入步骤(c)。程序代码:

INT8 samples = 4;//一个整数型[6]samples,数值为4。

while(temp1 != b1mscounter)

{if((PS2_PORT&PS2_PORT_BITS)&&(!--samples))

return(0);}//如果有连续4 次高电平,就返回0,判定为PS/2 接口。

(c)先通过设置CY7C63813 芯片的寄存器,打开USB 上拉电阻,再延时250μs,频繁侦测DATA-和DATA+的电平,直到其中有一个出现高电平。若DATA+是高电平,便是PS/2 接口;若DATA-是高电平,便进入步骤(d)。程序代码:

USBXCR=USBXCR_ENABLE;//开启上拉

time_delays_100_usec();time_delays_100_usec();timer_delay_10_usec();timer_delay_10_usec();timer_delay_10_usec();timer_delay_10_usec();timer_delay_10_usec();

//通过调用多个延时函数,凑成延时250μs。

if( b1msflags & ONE_MSEC_FLAG )//采用if语句反复侦测DATA-和DATA+的电平,直到其中有一个信号出现高电平。无论哪个是高电平,都退出此if 语句。

(d)通过设置CY7C63813 的寄存器,关闭USB上拉电阻,再延时100μs,若DATA- 和DATA+都为低电平,就不是PS/2 接口,只能是USB 接口,反之亦然。程序代码:

USBXC = 0x00;//关闭上拉

time_delays_100_usec();//延时100μs。

return(!(PS2_PORT & PS2_PORT_BITS));//CLOCK、DATA 所在的CY7C63813 的P1 端口的bit0(第0 位)、bit1(第1 位),分别与1 进行与操作(即与0x03 进行与操作),判断这两位是否为高电平,根据判断结果,返回相应的数值。

仔细测算实现以上算法的程序代码的运行所需时间,发现其小于500ms,符合PS/2 协议要求。以上算法的步骤(c)、步骤(d)中,延时的时间主要是配置寄存器后为使硬件运行稳定所需要的时间,与USB 协议、PS/2 协议都不冲突。

3.3.2 球体转动控制光标移动算法及程序实现

因为CY4623 例程与轨迹球通过球体转动控制光标移动的实现方式不同,研究认为可采用以下算法实现管控光标的目的,程序流程见图5。

图5 球体转动控制光标移动程序

(a)每1ms 读取一次X轴、Y轴两个光耦所在的I/O 口,并将结果放入一个有16 个元素的数组(bOpticsArray[16])中。程序代码:

char bOpticsArray[16];//字符[7]数组有16个元素。

(b)读取bOpticsArray[16]中的元素,并进行比较运算,转换为光标沿X轴、Y轴移动的增减量,从而实现球体转动控制光标移动的功能。程序代码:

void ProcessOptics(void)//此函数内的程序代码将数组中的元素按顺序对比数值。

3.3.3X轴、Y轴及其正方向可互换功能的算法及程序实现

因为该自动识别USB 和PS/2 接口轨迹球将会被应用到不同项目中,但不同项目的结构安装要求可能不同,轨迹球的安装方向也不能唯一,可采用拨动拨码开关来调节X轴、Y轴及其正方向的方式实现此要求,此两针脚分别为高电平或低电平,可实现四种组合方式,满足模块不同安装要求。文章经过研究,认为可采用读取球体转动控制光标移动算法及程序实现中的数据字节函数,并在此函数中,将X轴、Y轴数据的位置对调或数值取负值,实现X轴、Y轴及其正方向的相互转换,从而实现X轴、Y轴及其正方向可互换功能。 程序代码:

BOOL optical_get_report(OPTICAL_REPORT*report);//定义一个指针型结构变量,实现X轴、Y轴及其正方向可互换的功能[8]。

4 试验与验证

文章将设计出的嵌入式轨迹球完成硬件调试和固件程序的编译下载后,进行功能性能测验。当轨迹球被初次插入计算机USB 接口后,计算机右下方会弹出发现新硬件提示,且在设备管理器中可看到该USB 设备的基本信息;当设备被插入计算机PS/2 接口后,重新启动计算机系统,在设备管理器中会看到一个PS/2 Mouse 图标。在这两种模式下进行测试,轨迹球能实现稳定的数据通信,光标移动灵活,左中右按键功能正常。测试其信号波形,发现无论是PS/2 接口,还是USB 接口,信号波形都较稳定,且毛刺较少,没有失真。

文章中的自研轨迹球,已用于龙芯、飞腾、Intel 至强及x86 等多种平台的产品中,并配套过中标麒麟、Linux、Windows Server、Windows 10/7/xp等多款操作系统,以及这些平台的USB、PS/2 接口,运行情况良好,没有出现过故障或兼容性问题。并通过了以下环境试验的验证,运行情况良好,工作正常:

(1)低温贮存:-55℃保温24h,恢复常温4h 后检测,温变率≤3℃/min;

(2)低温工作:-40℃保温4h,工作运行2h,温变率≤3℃/min;

(3)高温贮存:70℃保温48h,恢复常温4h后检测,温变率≤3℃/min;

(4)高温工作:60℃保温4h,工作运行2h,温变率≤3℃/min。

5 结语

文章设计的基于CY7C63813-SXC 控制器的自动识别USB 和PS/2 接口轨迹球研制测试完成后,能够实现预期功能,已投入生产并交付多个批次,可以在 USB 和PS/2 接口模式下自适应工作,可以任意调节轨迹球的安装方向,满足不同应用场景下的使用要求,也验证了采用PSoC 芯片开发计算机周边设备的可行性。

猜你喜欢
高电平自动识别光标
小麦面条和面过程不同阶段面絮的划分与自动识别
基于数据挖掘的船舶航迹自动识别系统
基于VR技术的X射线图像安检危险品自动识别
高电平MMC子模块电容电压控制策略研究
数字电子技术的应用
浅谈物理电路与数字电路
关于Multisim10.0的高电平调幅电路仿真研究
陈光标 遭遇质疑
陈光标吃剩饭倒了谁的胃口
睡着笑醒