楊森杰,盧玄興,楊朝火,劉月紅
(桂林理工大學 信息科學與工程學院,廣西桂林,541004)
如今視力防護越來越受到社會的關注,這不僅是關系到青少年的未來,也關系到國家的發展。眼球的模擬移動在視力養護及眼球知識演示等方面的設備中至關重要。本文中基于STM32 的模擬眼球移動裝置,用簡單的二自由度旋轉式云臺系統,簡單模擬了眼球的移動,具有一定的現實意義和應用價值。
本文中基于STM32 的模擬眼球移動裝置系統由單片機、矩陣鍵盤模塊、電機驅動模塊、OLED 屏幕塊以及紅外激光燈組成,總體結構如圖1 所示。設計以STM32F103C8T6 為主控板,TB6600 為步進電機驅動模塊。

圖1 系統總體結構圖
系統可通過上位機平臺進行控制,并實時采集數據由42 步進電機上的紅外線模塊發出紅外線照射到坐標紙上的坐標,從而實現對眼球移動做出簡單模擬。其中的電機驅動模塊主要接收用戶發出的指令發送脈沖控制電機轉動;OLED 屏幕模塊用于顯示單片機發送的光點坐標數據;紅外激光讓使用者通過光點移動來感受眼球視線的移動。
具體設計內容包括硬件和軟件兩個部分,現分別介紹如下。
系統硬件設計包括電源模塊、主控模塊、步進電機模塊和顯示模塊四個部分。系統硬件設計主要電路如圖2 所示。

圖2 系統主要電路
電源模塊提供整個系統的動力,為單片機和步進電機供電,具體電路如圖3 所示。

圖3 電源電路圖
因整個系統的控制需要單片機一直待機工作,且電機驅動器驅動需要至少12V 的電壓,為了避免一直連接電源導致使用不便,外接了一個直流可調壓電源KJS-1509。電源模塊輸出12V 給電機驅動器TB6600 穩定供電,再通過DC-DC 降壓模塊轉為3.3V 給單片機和OLED 模塊供電。
單片機是系統的主控部分,我們的模擬眼球系統使用STM32F103C8T6 作為系統的主控芯片。該芯片是一款以ARM 公司旗下研發的CortexM3 為內核的處理器。如圖3所示,處理器支持的外設豐富。且在內部設計上,數據和指令各自走不同的線路,可確保CPU 的運行速度,達到最大化。此特性能讓本設計的二自由度旋轉式云臺系統的實時性需求得到保證。STM32F103C8T6 有37 個I/O 引腳,提供電機驅動器控制信號所需要的接口;其內置I2C 總線接口能夠工作于多主模式或從模式,滿足OLED 屏幕坐標的需求。
主控單片機接線如圖4 所示,串口PA9 和PA10 分別接到OLED 顯示屏的SDA 和SCL 控制顯示部分的工作;PA1 口和PA2 口分別接電機驅動器的串口DIR 和PUL,用來控制電機的正反轉。

圖4 主控芯片和顯示電路
電機模塊是系統的執行部件,本設計中具體包括步進電機及其驅動器。
2.3.1 電機的選擇
裝置中的執行部件選擇了步進電機,它是一種將數字脈沖量轉換為相應的角位移或線位移的特殊電機,具有反應靈敏、精確步進、無累計誤差等優點[1],是很多控制系統的核心組成部件,可以通過外部控制電路實現需求功能的驅動與控制,在許多領域得到了廣泛應用[2]。故采用步進電機能很好地滿足本設計對電機的轉動高精度要求。
2.3.2 電機驅動器的選擇
整個平臺的控制實際上就是對步進電機的驅動。控制系統的精度和速度都取決于對步進電機的控制。因此要選擇合適的步進電機以及合理的控制方式。
在本設計中,選取能適合42 型兩相步進電機的TB6600步進電機驅動器。該驅動器采用H 橋雙極恒相流驅動,9~42VDC 供電,并有7 檔細分控制(1、2/A、2/B、4、8、16、32)和8檔電流控制(0.5A、1A、1.5A、2A、2.5A、2.8A、3.0A、3.5A)。最高可有4A 電流輸出。其信號端配有高速光電隔離,防止信號干擾,并支持共陰、共陽兩種信號輸入方式。此外,驅動器支持脫機保持功能,用戶可在通電狀態下調試;內置溫度保護和過流保護,適應各種復雜的工作環境,能較為精準地控制本裝置中的步進電機。TB6600 采用共陰極接法,ENA-、DIR-、PUL-都接地,ENA+接單片機高電平,DIR+接單片機PA1 口控制電機正反轉,PUL+接單片機PA2 口控制脈沖。B-、B+、A-、A+分別接電機對應的相位。具體電路如圖5 所示。

圖5 電機驅動模塊電路圖
顯示部分是系統人機交換的重要部分,本設計的顯示部件為OLED 液晶顯示屏。它是LCD 技術和LED 技術的升級,沿用LED 自發光技術,并改變了LCD 的背光發光技術。OLED 顯示不僅具有高清晰度分辨率,而且有柔軟的拼接特征。不但能顯示數字,而且還能顯示字符、漢字等[3]。在本裝置中,能清楚地顯示當前視線(光點坐標)所在位置,更好地實現人機交互。
文中模擬眼球移動裝置使用的編程軟件是KeilμVision5,設計的主程序中包含了硬件設計中各個模塊初始化以及各功能借助算法函數的調用實現功能。軟件設計流程圖如圖6 所示。

圖6 軟件設計流程圖

圖7 逐點比較示意圖

圖8 坐標角度示意圖
程序設計了兩種模式,分別是畫線模式和畫圓模式。用戶通過上位機串口發送指令從而選擇模式:發送坐標,程序執行畫線模式實現相應畫線運動;發送圓心和半徑,程序執行畫圓模式實現相應圓周運動。此外程序還設計了復位功能,其功能是將系統復位,具體作用為將云臺還原到原點位置。OLED 屏幕顯示光點定位坐標。
本系統軟件設計中直線運動插補與圓弧運動插補采用逐點比較法。其過程是在輸出直線或圓弧的過程中,每走完一步就與理論的直線或圓弧進行比較,確定當前點是在線或弧上,還是在線或弧的一側,然后再決定下一步的走向,這樣一步一步地逼近所畫直線或圓弧。軟件設計中的算法實現,就是寫好一個定點函數,根據所給坐標更新步進電機的當前對應角度。然后在直線與圓弧插補里面不斷調用定點函數來進行插補。
若畫直線或弧線OA,起點為O(0,0),終點為A(xa,ya),設繪圖筆當前的位置為K(xk,yk)。點K 相對于OA 的位置有三種情況:點K 在OA 上方,點K 在OA 上以及點K 在OA 下方。為了判斷點K 與OA 的相對位置,引入偏差函數Fk:
當K 在OA 上時,Fk=0;
K 在OA 上方時,Fk>0;
k 在OA 下方時,Fk<0;
因此,對第一象限內的直線生成規定如下:
即偏上了向右走;偏下了向上走。設Δx=1,則當F ≥O 時,繪圖筆從當前位置沿+X 方向走一步,記作+Δx;當F<0 時,繪圖筆從當前位置沿+Y 方向走一步,記作+Δy;在繪圖筆到達新的位置時,應計算出新位置的偏差,為判斷繪圖筆下一步走向做準備。
控制x 軸與y 軸的電機轉動時,需根據實際定位的坐標換算成當前相對初始狀態要轉動的角度和脈沖次數,從而電機在脈沖驅動下按要求轉動。
步進電機每收到一個脈沖就步進一個角,方案采用32細分,進角為1.8/32,即0.05625°,則x 軸電機與y 軸電機脈沖個數=需要轉動的角度/0.05625。
本裝置的調試主要包括輸入輸出和控制部分。通過鍵盤輸入不同的坐標,即通過兩個按鍵來控制橫縱坐標的加減,通過復位鍵來切換選擇橫縱坐標,坐標會同時在串口助手顯示出修改后的坐標,讓步進電機按照不大于0.3mm 的誤差在光點照射的坐標紙上進行移動,當步進電機轉動結束后,單片機會在OLED 屏幕上顯示坐標。同時,核心板上的key1(加)、key2(減)按鍵控制坐標加減也能控制步進電機的轉動。顯示部分的調試結果如圖9 所示,調試數據如表1 所示。經過三次相同條件下的測試并記錄數據,通過表1 測試得到的數據可見,本裝置實際定點到的坐標和指定的目的坐標存在的誤差控制在0.3mm 內。測試畫圓功能時,只需要在串口助手輸入“模式2”,單片機讀取到串口識別的指令后會自動切換成識別圓的坐標,圓心和初試半徑通過串口助手以輸入坐標的形式發送數據,而key1(加)、key2(減)按鍵能控制目標圓的半徑大小,同樣經過三次相同條件下的測試并記錄數據,整合到如表2的數據所示,通過指定的圓與實際畫的圓的相比,圓心和半徑分別存在的誤差也在0.3mm 以內,滿足設計要求。

表1 輸入目的坐標得到對應的實際坐標/cm

表2 想要畫的圓與相應實際畫出的圓/cm

圖9 調試圖片
基于STM32 的模擬眼球移動裝置系統組裝后的樣機如圖10 所示。亞克力板通過銅固定云臺,使二軸步進電機能夠穩定運行;OLED 屏幕用熱熔膠固定在舵機前方能夠實時顯示光點坐標,便于觀察光點坐標移動的位置。

圖10 樣機實物圖
針對目前視力疾病相關的各種問題,作者將機械結構設計和軟硬件設計結合起來,用 STM32 作為主控芯片,設計了一款適用性強且符合模擬實驗需求的二自由度旋轉式云臺系統。本設計的二維移動平臺控制器,既包括電機驅動功能,又含有實時顯示的功能。同時,OLED 屏幕的坐標顯示能準確表示光點模擬眼睛視線的移動。