国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于CY7C63813-SXC 控制器軌跡球的設計與實現(xiàn)

2022-03-24 02:34官茂
長沙大學學報 2022年2期
關(guān)鍵詞:高電平自動識別光標

官茂

(湖南興天電子科技有限公司技術(shù)中心,湖南 長沙 410006)

目前,人們在計算機上使用的人機接口設備,如鼠標、鍵盤等,大部分都是USB 接口,但PS/2接口因其傳輸距離相對更長,在某些特定領(lǐng)域仍被使用。例如,支持PS/2 接口的嵌入式軌跡球(以下簡稱軌跡球)是一種特殊的鼠標,是使用光學感應元器件和其原理制造的能管控屏幕或光標的人機接口設備,可在一定程度上讓使用人手腕的疲勞感降低,同時具有定位精準、手感較好的優(yōu)點,所以在工業(yè)控制和軍用設備中仍被廣泛使用。

目前,市面上一部分軌跡球僅能支持PS/2或USB 接口的工作模式。在此基礎(chǔ)上,文章采用Cypress 公司的enCoRe? Ⅱ系列USB 控制器CY7C63813-SXC 作為核心器件(enCoRe? ⅡLow Speed USB Peripheral Controller)[1],使用C 語言編程,設計了一款在USB 和PS/2 接口模式下都能工作的軌跡球。 此軌跡球在CY4623例程(CY4623 是Cypress 公司提供的鼠標參考設計樣例)的基礎(chǔ)上,實現(xiàn)了自動識別PS/2 接口和USB 接口的算法,采集軌跡球球體在X軸、Y軸方向的移動量的算法及通過撥碼開關(guān)切換X軸、Y軸及其正方向的算法。

1 嵌入式軌跡球工作原理

自動識別USB 和PS/2 接口的軌跡球主要由主控制電路(含CY7C63813 芯片)、光耦(包括X軸、Y軸、Z軸,其中Z軸光耦是預留設計,文章沒有使用)、按鍵(L、M、R,即左鍵、中鍵、右鍵)、PS/2 接口連接器、USB 接口連接器等組成。

光耦作為產(chǎn)生、探測、接收紅外光線,并將紅外光信號轉(zhuǎn)換成電信號的器件,先接收球體在X軸、Y軸方向的轉(zhuǎn)動位移量,再將此位移量轉(zhuǎn)換為電信號傳送給CY7C63813 芯片,CY7C63813芯片經(jīng)過數(shù)據(jù)分析處理后,通過PS/2 或USB 協(xié)議通信模塊轉(zhuǎn)換為相應協(xié)議信號,再通過相應的接口連接器傳送到上位機的相應接口。 球體在X軸、Y軸方向的轉(zhuǎn)動位移量通過USB 接口或PS/2接口傳送給上位機后,就可實現(xiàn)控制光標在屏幕上按照軌跡球球體轉(zhuǎn)動而移動的人機接口設備功能。

2 硬件電路設計

CY7C63813-SXC 控制器是基于enCoRe? Ⅱ內(nèi)核的8 位哈佛架構(gòu)微控制器,主頻可達到24MHz,內(nèi)部集成有晶體振蕩器、3.3V 電源調(diào)整器和8KB 的FLASH 存儲器等,芯片不需其他外部器件就可配置成USB 或PS/2 模式。CY7C63813 芯片集成了很多功能模塊,減少了其所需的周邊器件數(shù)量,降低了成本及應用復雜度,并且其指令集針對PS/2 及USB 操作也進行了優(yōu)化。

CY7C63813 芯片接收的是數(shù)字信號,根據(jù)圖1 的硬件平臺組成可知,光耦將球體在X軸、Y軸方向上的移動信號轉(zhuǎn)換為電信號后,傳送給主控制電路(其中的微控制單元MCU 就是CY7C63813 芯片)。但光耦轉(zhuǎn)換后的電信號并不是標準的數(shù)字信號,而是類似正弦波的模擬信號,此信號若直接傳送給CY7C63813 芯片,將難以被識別,需先將其整形為標準數(shù)字信號。文章采用施密特觸發(fā)反相器74HCT14D(以下簡稱74HCT14D),先將光耦轉(zhuǎn)換后的電信號整形為標準數(shù)字信號,再向CY7C63813 芯片發(fā)送。74HCT14D 是恩智浦半導體公司的一款用于波形和脈沖整形的芯片,具有施密特觸發(fā)動作和六反相緩沖器,能將緩慢變化的輸入信號轉(zhuǎn)換為穩(wěn)定無抖動的輸出信號[2]。

圖1 硬件平臺組成

軌跡球球體轉(zhuǎn)動時,帶動光柵切割光耦(X軸、Y軸方向各有一個光耦,目前使用較多的光耦是美國威世公司的TCUT1300X01[3])的紅外發(fā)光二極管產(chǎn)生的紅外光線,光耦上的兩個光電晶體管探測器根據(jù)接收的紅外光線先后順序(根據(jù)先后順序的不同,可知光柵是順時針切割光線還是逆時針切割光線,即可知光柵也就是球體的移動方向)產(chǎn)生相應的電信號波形,并傳送給74HCT14D,經(jīng)過波形整形后,再傳送給MCU,MCU 對數(shù)據(jù)進行處理分析(即判斷出球體在相應軸向上的移動量及方向)后,再通過相應連接的主機接口將數(shù)據(jù)傳送給主機等。

3 固件程序設計

文章采用PSoC(Programmable System on Chip)芯片開發(fā)工具編制程序(PSoC Designer)[4]。PSoC芯片是一種將微控制器、邏輯電路等模塊進行集成(集于一芯片上),并構(gòu)建成一個具備信號采集及I/O處理等功能的可編程型系統(tǒng)。PSoC Designer 是用于PSoC 芯片開發(fā)的工具,也是由Cypress 公司開發(fā)的,該工具支持C 語言等數(shù)種編程語言,是一款按模塊化方式進行程序設計開發(fā)的工具。該工具內(nèi)含各種已設計好的程序模塊,使用時,只要調(diào)用相應的程序用戶模塊集成到主程序中,就可進行程序設計了。

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

試驗安裝的PSoC Designer 是5.4 版,固件設計是以CY4623 例程[5]為基礎(chǔ),增加并實現(xiàn)其他所需功能的算法程序代碼而完成的。用戶先下載并打開CY4623 例程,加載MSTIMER、PITIMER12、SPIM、PS2D、USB 五個用戶模塊,加載用戶模塊的同時,其會將程序代碼、寄存器、定時器等模塊所需的參數(shù)自動設置好,用戶只需調(diào)用已有的函數(shù)等便可實現(xiàn)相關(guān)開發(fā)。

(1)MSTIMER 用戶模塊:這是一個定時器(1ms 間隔的)用戶模塊,主要是給USB 用戶模塊進行USB 掛起處理、HID 報告閑置時使用。

(2)PITIMER12 用戶模塊:這是一個12 位的可編程的計數(shù)寄存器用戶模塊,該模塊最高能達到24MHz 的源時鐘頻率,可實現(xiàn)計數(shù)值的自動重新載入功能。

(3)SPIM 用戶模塊:這是將CY7C63813 芯片作為SPI 串行通信中的主設備的用戶模塊,用于SPI 串行通信。因為參照CY4623 例程實現(xiàn)的是光電鼠標設計,Cypress 公司的主控IC 需要與光學感應器進行SPI 串行通信,因此要用到此用戶模塊。而自動識別USB 和PS/2 接口軌跡球則無須進行SPI 串行通信,其是將SPI 串行通信的相應針腳當作GPIO 接口來使用。但為了給后續(xù)設計光電鼠標等其他產(chǎn)品奠定基礎(chǔ),文章仍然保留了CY4623 例程中的SPIM 用戶模塊和其程序代碼。

(4)PS2D 用戶模塊:這是PS/2 設備的協(xié)議用戶模塊,要將CY7C63813 芯片作為PS/2 鼠標來使用,就必須調(diào)用此模塊。其內(nèi)部已建立好完整并經(jīng)過充分驗證的PS/2 鼠標協(xié)議和命令集,且其集成了USB SIE(串行接口引擎),可配合USB用戶模塊實現(xiàn)自動識別USB 和PS/2 應用程序的功能。

(5)USB 用戶模塊:這是USB 接口所需,要讓CY7C63813 芯片具有USB 鼠標接口,就必須采用此模塊。其內(nèi)部已建立好完整且經(jīng)過充分驗證的USB 協(xié)議和命令集,為控制端點建立好了符合USB 協(xié)議的底層驅(qū)動程序,能對主機發(fā)出的請求進行解碼及分配,支持 USB HID。并且可采用該模塊的USB 設置向?qū)?,設置USB 描述符等參數(shù),以生成符合要求的USB 程序代碼。當然,使用者需要具備USB 相關(guān)的基本知識,以便更好地進行自動識別USB 和PS/2 接口軌跡球的程序設計。

以上五個模塊就是進行自動識別USB 和PS/2 接口軌跡球的程序設計需要用到的PSoC Designer 自帶的用戶模塊,用戶將以上模塊進行加載并設置好后,就建好了軟件開發(fā)基礎(chǔ)平臺。

3.2 CY4623 例程修改分析

CY4623 例程主要有以下三方面不滿足自動識別USB 和PS/2 接口軌跡球的功能需求,使用者需要修改和增加相應的程序代碼。

(1)自動識別USB 和PS/2 接口軌跡球要求能自動識別連接的接口類型,并能按照連接的相應接口,將數(shù)據(jù)進行轉(zhuǎn)換,實現(xiàn)相應的通信功能,而CY4623 例程缺少此自動識別的程序代碼。

(2)CY4623 例程實現(xiàn)的是光電鼠標設計,但自動識別USB 和PS/2 接口軌跡球是要求識別球體在X軸、Y軸方向上的轉(zhuǎn)動信息,以此實現(xiàn)控制光標移動的功能。

(3)因為不同加固軌跡球項目的結(jié)構(gòu)安裝要求可能不同,自動識別USB 和PS/2 接口軌跡球的安裝方向也不會只有一個,如圖2 所示,在四個安裝方向下,都必須保證球體向上(或向下)移動時,能控制光標向Y軸正方向(或負方向)移動(球體向左或向右移動同此理),必須滿足X軸、Y軸及其正方向可互換的要求。采用撥動撥碼開關(guān)的方式,可調(diào)節(jié)X軸、Y軸及其正方向。但CY4623 例程不具備此功能。

圖2 軌跡球安裝方向示意(視角為從頂部觀看)

3.3 算法的具體實現(xiàn)分析

為了實現(xiàn)以上功能,文章研究相關(guān)算法,并根據(jù)其算法編制相應的程序代碼,主要有PS/2 接口和USB 接口的自動偵測算法,球體轉(zhuǎn)動控制光標移動算法,X軸、Y軸及其正方向可互換功能的算法。

自動識別USB 和PS/2 接口軌跡球基本功能的程序如圖3 所示,這也是軟件的程序流程圖。

圖3 自動識別USB 和PS/2 接口軌跡球基本功能

3.3.1 PS/2 接口和USB 接口的自動偵測算法及程序?qū)崿F(xiàn)

試驗通過深入研究PS/2 協(xié)議、USB 協(xié)議(尤其是USB HID 相關(guān)部分),并參考相關(guān)文獻資料發(fā)現(xiàn),PS/2 設備在上電后500ms 左右,才向主機發(fā)送BAT自檢成功代碼“0xAA”。因此,程序完全可以利用PS/2 設備發(fā)送BAT 成功代碼之前的500ms 左右的時間,檢測其連接的是主機的PS/2 接口,還是USB 接口。PS/2 接口的時鐘信號(CLOCK)和數(shù)據(jù)信號(DATA)通常是高電平信號,而USB 接口的DATA+和DATA-信號則是高速差分信號。以此為基礎(chǔ)設計PS/2 接口和USB 接口的自動偵測算法,算法流程見圖4。

圖4 PS/2 接口和USB 接口的自動偵測算法程序

(a)軌跡球上電后,延時50ms。程序代碼:

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

(b)在2ms 的時間內(nèi)反復偵測DATA-(即DATA)和DATA+(即CLOCK)的電平,如果有連續(xù)4 次高電平(DATA-或DATA+),就是PS/2 接口,否則進入步驟(c)。程序代碼:

INT8 samples = 4;//一個整數(shù)型[6]samples,數(shù)值為4。

while(temp1 != b1mscounter)

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

return(0);}//如果有連續(xù)4 次高電平,就返回0,判定為PS/2 接口。

(c)先通過設置CY7C63813 芯片的寄存器,打開USB 上拉電阻,再延時250μs,頻繁偵測DATA-和DATA+的電平,直到其中有一個出現(xiàn)高電平。若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();

//通過調(diào)用多個延時函數(shù),湊成延時250μs。

if( b1msflags & ONE_MSEC_FLAG )//采用if語句反復偵測DATA-和DATA+的電平,直到其中有一個信號出現(xiàn)高電平。無論哪個是高電平,都退出此if 語句。

(d)通過設置CY7C63813 的寄存器,關(guān)閉USB上拉電阻,再延時100μs,若DATA- 和DATA+都為低電平,就不是PS/2 接口,只能是USB 接口,反之亦然。程序代碼:

USBXC = 0x00;//關(guān)閉上拉

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

return(?。≒S2_PORT & PS2_PORT_BITS));//CLOCK、DATA 所在的CY7C63813 的P1 端口的bit0(第0 位)、bit1(第1 位),分別與1 進行與操作(即與0x03 進行與操作),判斷這兩位是否為高電平,根據(jù)判斷結(jié)果,返回相應的數(shù)值。

仔細測算實現(xiàn)以上算法的程序代碼的運行所需時間,發(fā)現(xiàn)其小于500ms,符合PS/2 協(xié)議要求。以上算法的步驟(c)、步驟(d)中,延時的時間主要是配置寄存器后為使硬件運行穩(wěn)定所需要的時間,與USB 協(xié)議、PS/2 協(xié)議都不沖突。

3.3.2 球體轉(zhuǎn)動控制光標移動算法及程序?qū)崿F(xiàn)

因為CY4623 例程與軌跡球通過球體轉(zhuǎn)動控制光標移動的實現(xiàn)方式不同,研究認為可采用以下算法實現(xiàn)管控光標的目的,程序流程見圖5。

圖5 球體轉(zhuǎn)動控制光標移動程序

(a)每1ms 讀取一次X軸、Y軸兩個光耦所在的I/O 口,并將結(jié)果放入一個有16 個元素的數(shù)組(bOpticsArray[16])中。程序代碼:

char bOpticsArray[16];//字符[7]數(shù)組有16個元素。

(b)讀取bOpticsArray[16]中的元素,并進行比較運算,轉(zhuǎn)換為光標沿X軸、Y軸移動的增減量,從而實現(xiàn)球體轉(zhuǎn)動控制光標移動的功能。程序代碼:

void ProcessOptics(void)//此函數(shù)內(nèi)的程序代碼將數(shù)組中的元素按順序?qū)Ρ葦?shù)值。

3.3.3X軸、Y軸及其正方向可互換功能的算法及程序?qū)崿F(xiàn)

因為該自動識別USB 和PS/2 接口軌跡球?qū)粦玫讲煌椖恐?,但不同項目的結(jié)構(gòu)安裝要求可能不同,軌跡球的安裝方向也不能唯一,可采用撥動撥碼開關(guān)來調(diào)節(jié)X軸、Y軸及其正方向的方式實現(xiàn)此要求,此兩針腳分別為高電平或低電平,可實現(xiàn)四種組合方式,滿足模塊不同安裝要求。文章經(jīng)過研究,認為可采用讀取球體轉(zhuǎn)動控制光標移動算法及程序?qū)崿F(xiàn)中的數(shù)據(jù)字節(jié)函數(shù),并在此函數(shù)中,將X軸、Y軸數(shù)據(jù)的位置對調(diào)或數(shù)值取負值,實現(xiàn)X軸、Y軸及其正方向的相互轉(zhuǎn)換,從而實現(xiàn)X軸、Y軸及其正方向可互換功能。 程序代碼:

BOOL optical_get_report(OPTICAL_REPORT*report);//定義一個指針型結(jié)構(gòu)變量,實現(xiàn)X軸、Y軸及其正方向可互換的功能[8]。

4 試驗與驗證

文章將設計出的嵌入式軌跡球完成硬件調(diào)試和固件程序的編譯下載后,進行功能性能測驗。當軌跡球被初次插入計算機USB 接口后,計算機右下方會彈出發(fā)現(xiàn)新硬件提示,且在設備管理器中可看到該USB 設備的基本信息;當設備被插入計算機PS/2 接口后,重新啟動計算機系統(tǒng),在設備管理器中會看到一個PS/2 Mouse 圖標。在這兩種模式下進行測試,軌跡球能實現(xiàn)穩(wěn)定的數(shù)據(jù)通信,光標移動靈活,左中右按鍵功能正常。測試其信號波形,發(fā)現(xiàn)無論是PS/2 接口,還是USB 接口,信號波形都較穩(wěn)定,且毛刺較少,沒有失真。

文章中的自研軌跡球,已用于龍芯、飛騰、Intel 至強及x86 等多種平臺的產(chǎn)品中,并配套過中標麒麟、Linux、Windows Server、Windows 10/7/xp等多款操作系統(tǒng),以及這些平臺的USB、PS/2 接口,運行情況良好,沒有出現(xiàn)過故障或兼容性問題。并通過了以下環(huán)境試驗的驗證,運行情況良好,工作正常:

(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 結(jié)語

文章設計的基于CY7C63813-SXC 控制器的自動識別USB 和PS/2 接口軌跡球研制測試完成后,能夠?qū)崿F(xiàn)預期功能,已投入生產(chǎn)并交付多個批次,可以在 USB 和PS/2 接口模式下自適應工作,可以任意調(diào)節(jié)軌跡球的安裝方向,滿足不同應用場景下的使用要求,也驗證了采用PSoC 芯片開發(fā)計算機周邊設備的可行性。

猜你喜歡
高電平自動識別光標
小麥面條和面過程不同階段面絮的劃分與自動識別
基于數(shù)據(jù)挖掘的船舶航跡自動識別系統(tǒng)
基于VR技術(shù)的X射線圖像安檢危險品自動識別
高電平MMC子模塊電容電壓控制策略研究
數(shù)字電子技術(shù)的應用
淺談物理電路與數(shù)字電路
關(guān)于Multisim10.0的高電平調(diào)幅電路仿真研究
陳光標 遭遇質(zhì)疑
陳光標吃剩飯倒了誰的胃口
睡著笑醒
阿巴嘎旗| 太康县| 利辛县| 宁陵县| 鄂托克旗| 集安市| 安国市| 老河口市| 连云港市| 镇远县| 林口县| 焦作市| 专栏| 屯留县| 安远县| 盐亭县| 耿马| 彭水| 股票| 社会| 安西县| 河东区| 车险| 余庆县| 蕉岭县| 威远县| 万安县| 长子县| 岳池县| 西丰县| 城市| 聊城市| 财经| 陇川县| 鄂托克旗| 元氏县| 晋江市| 临清市| 衡东县| 井冈山市| 邛崃市|