俞 鵬 賀 順 王 永 袁 奕 陳家輝
?
基于觸摸屏技術(shù)的運動控制器
俞 鵬 賀 順 王 永 袁 奕 陳家輝
目前的運動控制器設(shè)備普遍缺乏美觀的人機界面,本文將在普通的運動控制器基礎(chǔ)上增加一塊觸摸屏來實現(xiàn)人機界面的優(yōu)化,并且實現(xiàn)中文指令的輸入,從而改善運動控制器的交互性與整體性能。
目前 ,我國是世界上經(jīng)濟發(fā)展最快的國家之一,市場上新設(shè)備的控制需求、傳統(tǒng)設(shè)備技術(shù)升級和換代對運動控制器的市場需求越來越大。
基于嵌入式控制芯片的運動控制器可以在沒有PC機的情況下使用,降低了設(shè)備成本,集成了觸摸屏和中文控制指令則可以降低用戶使用難度,在一些加工工藝較為簡單的生產(chǎn)設(shè)備上將會成為不二的選則。
本運動控制器采用意法半導(dǎo)體公司的stm32f103vct6作為核心處理器,外圍設(shè)備有一塊電阻式的觸摸屏,輸入輸出端口,步進電機及驅(qū)動設(shè)備構(gòu)成。觸摸屏用于輸入指令以及界面顯示。輸入輸出端口用于與外部其他設(shè)備的通信。而步進電機和驅(qū)動設(shè)備是我們的控制對象。
觸摸屏程序設(shè)計分為兩個部分,一個是觸屏程序設(shè)計,一個是顯示程序設(shè)計。
觸屏的程序設(shè)計。
觸摸屏的原理簡單來講,它上面有一個XPT2046,它是一個四線制觸摸屏控制器,內(nèi)含12位分辨率125KH轉(zhuǎn)換速率逐步逼近型A/D轉(zhuǎn)換器。XPT2046能通過執(zhí)行兩次A/D轉(zhuǎn)換查出被按的屏幕位置。所以設(shè)計觸摸屏函數(shù)時,就是不斷掃描屏幕是否按下,當屏幕按下的時候,相應(yīng)按下的標志置位,并且得到按下的點的坐標。
下面我們來介紹一下如何根據(jù)上述原理在觸摸屏上做一個按鍵。我們可以先確定想要畫的按鍵位置,然后根據(jù)4個頂點坐標畫一個按鍵的框,該框的坐標值是已知的,程序中先判斷按鍵是否按下,如果按下,判斷按下的點是否在坐標的范圍內(nèi),便可確定顯示屏上的這個按鍵是否按下,然后實現(xiàn)相應(yīng)的功能。
多界面的制作和切換。
由于考慮到運動控制器界面的復(fù)雜性,我們可能需要多個界面,那這些界面該如何切換呢?事實上,我們這里運用了狀態(tài)機的思想。每一個界面作為一種狀態(tài),定義了一個狀態(tài)變量。在while(1)中,使用了一個switch語句,通過狀態(tài)變量來顯示相應(yīng)的界面,每個界面中都會有按鍵可以改變狀態(tài)變量,上圖中的翻頁鍵和設(shè)置鍵便是指向其他界面的鍵。
我們設(shè)計的運動控制器提供的指令有位移指令、延時指令、速度指令、輸入指令、輸出指令、掃描指令、跳轉(zhuǎn)指令、結(jié)束指令。與傳統(tǒng)的控制器不同的是,我們通過取模軟件取模,將所有的指令實現(xiàn)為中文,使得操作的難度大大降低。
指令的存儲格式
下面我們介紹下指令的格式。所有的指令都有自己的序號,名稱和操作數(shù)。第一列的00~04為序號,第二列的位移、時間等為指令名稱,第三列則為操作數(shù)。為了存儲的方便,存儲指令的時候?qū)嶋H上是用結(jié)構(gòu)體實現(xiàn)。定義了一個指令結(jié)構(gòu)體,該結(jié)構(gòu)體的成員為名稱和操作數(shù)。然后建立一個指令的結(jié)構(gòu)體數(shù)組,指令的名稱是一個char型字符,從0x00~0x08(包含空指令)。而指令的操作數(shù)是4位的char型數(shù)組(除了位移指令)。事實上并不是每一個指令都需要4位操作數(shù),這樣做的原因是為了程序存儲時數(shù)據(jù)對齊。
指令名稱 代號 指令參數(shù) 用途空指令 0x00 無 不做任何輸出位移指令 0x01 位移、速度、加速時間 移動相應(yīng)距離延時指令 0x02 延時時間 延時相應(yīng)時間輸入指令 0x03 輸入端口X1~X8,輸入電平程序暫停,直到輸入端口為相應(yīng)電平繼續(xù)執(zhí)行輸出指令 0x04 輸出端口Y1~Y8,輸出電平 Y口輸出相應(yīng)電平掃描指令 0x05當端口為相應(yīng)狀態(tài)后,執(zhí)行a~b之間的程序。跳轉(zhuǎn)指令 0x06 跳轉(zhuǎn)的程序序號 程序跳轉(zhuǎn)到相應(yīng)的序號處掃描端口,電平狀態(tài),起始序號a,結(jié)束序號b循環(huán)指令 0x07 起始序號a、結(jié)束序號b、循環(huán)次數(shù)c執(zhí)行a~b序號之間的程序,執(zhí)行次數(shù)為c結(jié)束指令 0x08 無 程序結(jié)束
指令的解釋和運行
在運行之前,需要對指令做解釋。解釋的總體思路是根據(jù)指令內(nèi)部存儲代號來分別解釋,將4位的操作數(shù)轉(zhuǎn)換為有效的參數(shù)。按順序讀入指令,判斷其代號,然后送入相應(yīng)的函數(shù)做解釋得到指令參數(shù)。
指令運行時,程序中有一個變量j初始化為0,然后讀取數(shù)組第一條指令的代號,判斷是哪種指令,執(zhí)行相應(yīng)的函數(shù),并將上述由操作數(shù)做解釋后的指令參數(shù)作為形參傳入。執(zhí)行完一條程序后返回,j自加1,讀取第二個指令的名稱,繼續(xù)執(zhí)行,直到讀取到結(jié)束指令時停止。
我們先簡單的介紹下步進電機。由于我們使用了相應(yīng)的驅(qū)動,這里只需要對該驅(qū)動輸入相應(yīng)的脈沖和方向便可控制電機。步進電機是每發(fā)一個脈沖走一個角度,所以它的速度取決于發(fā)送脈沖的頻率。
本文采用定時器的PWM模式,設(shè)定占空比為50%,使能定時器的溢出中斷。步進電機的啟動參數(shù)為加減速時間,速度最大值,脈沖個數(shù)。本文所使用的加減速為直線加減速。加減速過程分為兩種情況,一種由于速度值設(shè)置過大,脈沖個數(shù)小,使得運行達不到最大速度,只有加速和減速過程,速度曲線大致為三角形。另一種便是既有加減速又有勻速運行狀態(tài),速度曲線大致為梯形。
具體實現(xiàn)時,先計算中點P=N/2,定時器每發(fā)出一個脈沖便會進入溢出中斷,并對脈沖個數(shù)進行計數(shù),并且根據(jù)式子(1)和(2)計算出下一個脈沖的速度,根據(jù)速度改變定時器的頻率。當個數(shù)小于P時,逐脈沖進行比較,當前速度是否達到最大速度,如果達到,記錄下當前的脈沖個數(shù)P1, P1~(N-P1)階段為勻速階段,而到(N-P1)時電機進入減速階段,這時的加速曲線為梯形。如果到中點P時還未達到最大速度,說明設(shè)置的參數(shù)達不到,此時在中點開始減速,加速曲線變?yōu)槿切?。其?/p>
加速過程中使用的公式為:
減速過程中使用的公式為:
經(jīng)過多次實驗,確定本運動控制器啟動運行平穩(wěn),最高速度能達到10K,能正確完成各項指令,能緊急停止,穩(wěn)定性很高。本文的運動控制器能夠用于多種場合,例如送料系統(tǒng)、幕布的起降系統(tǒng)等。而且因為是中文指令,編程難度顯著下降。本運動控制器在工業(yè)領(lǐng)域的應(yīng)用具有一定的意義。
俞 鵬 賀 順 王 永 袁 奕 陳家輝
俞鵬,男,江蘇南通人,就讀于南京工程學(xué)院,2013級本科,自動化數(shù)控專業(yè),目前研究單片機、嵌入式等方向。
基金類別:江蘇省大學(xué)生實踐創(chuàng)新訓(xùn)練計劃資助項目(201511276057X);江蘇省大學(xué)生創(chuàng)新訓(xùn)練計劃資助項目(201511276002Z)
10.3969/j.issn.1001-8972.2016.11.029