林鑫,李玉榕,陳建國
1. 福州大學 電氣工程與自動化學院,福建 福州 350108;2. 福建省醫(yī)療器械和醫(yī)藥技術重點實驗室,福建 福州 350108
肌力是反映人體運動功能的重要指標,一些肌肉骨骼系統(tǒng)受損的患者通常會導致肌力減弱,進而影響肢體的運動功能[1]。針對這種情況,適當?shù)刈鲆恍┘×τ柧?,可以促進患者運動功能的康復[2]。有相關研究將肌力訓練應用于疾病的治療中,也取得了良好的治療效果[3-5]。訓練的模式有等長、等速、等張以及被動模式。等長模式是通過設備使得受試者關節(jié)能夠固定在指定位置。等速模式是通過設備使得受試者關節(jié)保持恒定的速度運動。等張模式是由設備輸出一個恒定的阻力矩進行訓練。被動模式是由設備帶動受試者關節(jié)以設定的速度運動[6]。
早期的肌力訓練設備由于缺乏動力控制系統(tǒng),不僅訓練的效率低下,而且只能依靠經(jīng)驗來制定訓練計劃?,F(xiàn)在的肌力訓練設備大部分都引入控制系統(tǒng),但是設備的功能也存在差異。比如法國BodyGreen公司開發(fā)的實用型等速訓練機只能實現(xiàn)單一的等速訓練模式,不帶有計算機系統(tǒng)。美國Biodex公司設計的多關節(jié)等速力量測試及訓練系統(tǒng)可以進行多關節(jié)多模式的訓練,所配備的計算機系統(tǒng)功能也很完善,但是上位機顯示的數(shù)據(jù)比較繁瑣,不方便觀察。廣州一康公司生產(chǎn)的肌力訓練設備雖然可以實現(xiàn)多種模式的訓練,但是等長模式下,無法選擇角度。綜合來看,國外設計的肌力訓練設備還是比較穩(wěn)定、可靠,大部分的研究也都是基于國外的產(chǎn)品,比如Biodex 、Isomed[7-8]。
本文利用伺服電機作為執(zhí)行機構,以STM32作為控制器, 并加入伺服驅動器,利用驅動器的轉速模式以及位置模式,實現(xiàn)電機的轉速閉環(huán)和位置閉環(huán)控制。還加入角度傳感器和扭矩傳感器,用于采集訓練過程中的角度、力矩數(shù)據(jù)。同時,基于JAVA語言設計了對應的上位機軟件用于訓練參數(shù)的設置以及數(shù)據(jù)的顯示。
本文設計的動力控制系統(tǒng)組成部分有計算機、控制器STM32、伺服驅動器ASDA-B2、伺服電機、扭矩傳感器、角度傳感器。信號連接如圖1所示,以控制器STM32為核心,上位機、角度傳感器、扭矩傳感器以及伺服驅動器都連接到控制器上。其中,上位機連接到控制器的串口1,角度傳感器連接到控制器的SPI接口,扭矩傳感器連接到控制器的CAN接口,伺服驅動器連接到控制器的串口2。
圖1 動力控制系統(tǒng)信號連接圖
為了便于操作,搭建了一個平臺用來放置伺服電機、傳感器等硬件,機械結構如圖2所示。由伺服電機、傳感器等硬件所組成的動力頭是肌力訓練控制系統(tǒng)的執(zhí)行部位,主要是利用伺服電機來帶動主傳動軸轉動。伺服電機到主傳動軸的動力傳遞是采用同步帶輪以及渦輪蝸桿實現(xiàn)的,然后在主傳動軸的輸出軸上安裝訓練支架就可以實現(xiàn)對應關節(jié)的訓練。扭矩傳感器通過螺絲與主傳動軸固定連接,并將扭矩傳感器的底座固定在渦輪中,當主傳動軸與扭矩傳感器底座之間產(chǎn)生相對運動,扭矩傳感器的彈性軸會產(chǎn)生形變,粘貼在彈性軸上的應變電橋的阻值也就會發(fā)生變化,再將應變電橋電阻的變化轉變?yōu)殡娦盘柕淖兓⑼ㄟ^放大器放大,然后經(jīng)過CAN控制芯片輸出數(shù)字信號,控制器通過CAN通信就可以讀取扭矩的數(shù)字信號,實現(xiàn)扭矩的測量。角度傳感器固定在距離主傳動軸后方約2 mm處,且芯片正對主傳動軸軸心,并將磁鋼放置在主傳動軸上,當主傳動軸轉動時,會導致磁鋼的磁場發(fā)生變化,角度傳感器首先檢測磁鋼的磁場,然后利用集成芯片將磁場的變化轉變成數(shù)字信號輸出,控制器就可以利用SPI或者IIC通信讀取角度的數(shù)字信號,實現(xiàn)角度的測量[9]。動力控制系統(tǒng)實物如圖3所示。
圖2 動力頭機械結構圖
圖3 動力控制系統(tǒng)實物圖
要實現(xiàn)控制器和上位機、控制器和伺服驅動器之間的數(shù)據(jù)傳輸,首先需要配置通信的相關協(xié)議。本文選擇串口通信,利用串口1實現(xiàn)控制器和上位機的通信,利用串口2實現(xiàn)控制器和伺服驅動器的通信。首先根據(jù)用到的串口號,開啟對應的時鐘信號,然后將引腳設置為串口功能,并設置引腳的工作模式、串口波特率、數(shù)據(jù)位數(shù)和停止位等。接著對串口中斷進行配置,包括中斷優(yōu)先級、相關的串口中斷服務函數(shù)等。最后使能對應的串口號,就完成串口的基礎配置。
來自上位機的數(shù)據(jù)就是通過串口中斷服務函數(shù)接收,通過讀取串口狀態(tài)寄存器USART_SR的值來判斷是否有串口中斷發(fā)生,當值為1時,表示上位機有數(shù)據(jù)到來,然后就進入串口中斷服務函數(shù)中,將本次接收到的字符數(shù)據(jù)轉化為整形數(shù)保存在定義的整形數(shù)組buf中。然后先判斷第一個元素的值確定接收到的數(shù)據(jù)是控制指令還是訓練參數(shù)。比如為1,表示接收到的是訓練參數(shù),就先將模式標志位Mode_Flag置1,并依次讀取數(shù)組的元素,將速度、力矩等訓練參數(shù)保存在定義的變量中。比如為7,表示這是啟動指令,將啟動標志位Start_Flag置1。
伺服電機與控制器、伺服驅動器組成一個伺服系統(tǒng),控制框圖如圖4所示,有位置環(huán)、速度環(huán)以及電流環(huán)。位置環(huán)可以使伺服系統(tǒng)準確的定位,速度環(huán)可以使電機的轉速保持設定值,電流環(huán)可以使電機電樞繞組電流準確地跟蹤電流指令[10-11]。伺服驅動器的三種工作模式:位置模式、轉速模式以及扭矩模式分別對應伺服系統(tǒng)的位置環(huán)、速度環(huán)以及電流環(huán)控制,因此可以通過給伺服驅動器發(fā)送指令選擇工作模式實現(xiàn)對電機的閉環(huán)控制。本文選用伺服驅動器的轉速模式來實現(xiàn)等長訓練模式、等速訓練模式和等張訓練模式,選擇伺服驅動器的位置模式實現(xiàn)被動訓練模式。伺服驅動器ASDA-B2可支持Modbus協(xié)議,這個協(xié)議有兩種工作模式:ASCII模式和RTU模式。兩種模式的數(shù)據(jù)格式不一樣,ASCII模式傳送一個字節(jié)的數(shù)據(jù)要轉化為2個ASCII碼,比RTU數(shù)據(jù)量多,但是對數(shù)據(jù)格式的表達更加直觀、清楚[12-14]。因此,本文選擇了ASCII模式進行通信。
圖4 伺服系統(tǒng)控制框圖
根據(jù)伺服驅動器ASDA-B2在ASCII模式下的ModBus協(xié)議的數(shù)據(jù)格式,定義了長度為27位的字符數(shù)組Send[27],結構如表1所示。STM32發(fā)送給伺服驅動器的指令,實際上就是按照約定的數(shù)據(jù)格式對字符數(shù)組Send寫入數(shù)據(jù)。當伺服驅動器識別該數(shù)據(jù)后,就會控制電機執(zhí)行相應的指令。
表1 字符數(shù)組Send結構
角度傳感器AS5048A支持SPI或者IIC通信,本文將角度傳感器連接到STM32的SPI接口。SPI 接口一般使用 4 條線通信:MISO 主設備數(shù)據(jù)輸入,從設備數(shù)據(jù)輸出。MOSI 主設備數(shù)據(jù)輸出,從設備數(shù)據(jù)輸入。SCLK 時鐘信號,由主設備產(chǎn)生。CS 從設備片選信號,由主設備控制。根據(jù)AS5048A的數(shù)據(jù)手冊,對AS5048A的控制需要在下降沿讀數(shù)據(jù),在上升沿寫數(shù)據(jù),而且每發(fā)送一次指令后片選信號需要拉高一次。通過改變片選信號的電平,再發(fā)送角度對應的寄存器地址,就可以讀取角度對應的數(shù)字信號,再將這個信號通過公式(1)換算成角度,XA是角度傳感器輸出的14位數(shù)字信號。
扭矩傳感器的信號輸出端連接到一個CAN控制器,CAN的數(shù)據(jù)接收由FIFO來完成,CAN 接收到的有效數(shù)據(jù)都被存儲在3 級郵箱深度的 FIFO 中。FIFO 完全由硬件管理,從而節(jié)省了 CPU 的處理負荷。STM32通過查詢FIFO是否為空來判斷有沒有力矩數(shù)據(jù)傳輸過來,如果為空,就表示FIFO中沒有數(shù)據(jù)。如果不為空扭矩傳感器會返回兩個字節(jié)的數(shù)據(jù),分別定義了兩個整形變量A、B用來保存高字節(jié)、低字節(jié)的數(shù)據(jù),并利用公式(2)計算出力矩。
訓練模式的控制算法在主函數(shù)中完成,通過對上位機、傳感器的數(shù)據(jù)解析處理實現(xiàn)四種訓練模式。主函數(shù)首先進行串口、SPI等協(xié)議配置的初始化,然后進入一個While()循環(huán),利用Switch語句判斷模式標志位Mode_Flag的值,然后進入對應的分支結構執(zhí)行對應的功能。
如果Mode_Flag的值為4,就進入等長訓練模式的分支,程序流程如圖5所示。首先設置驅動器的工作模式為轉速模式,然后將轉速設置為0,并啟動電機開始訓練。訓練的過程中一直循環(huán)讀取角度、扭矩傳感器的值,并發(fā)送到上位機顯示。當上位機發(fā)送了停止指令,即停止電機。
圖5 等長訓練模式程序流程圖
如果Mode_Flag的值為3,就進入等張訓練模式的分支,程序流程如圖6所示。首先設置驅動器的工作模式為轉速模式,再讀取角度、扭矩傳感器的值,并發(fā)送到上位機顯示。并將檢測到的力矩與上位機設定的阻力矩作比較,如果比設定的阻力矩大,就給伺服電機轉速,兩者之間的差值越大,給定的轉速值就越大,最后啟動電機開始訓練。如果到達限定的位置,就設定轉速為0,再判斷是否接收到停止指令,如果是,就停止電機,否則就讀取下一時刻的角度、力矩。
圖6 等張訓練模式程序流程圖
如果Mode_Flag的值為2,就進入等速訓練模式的分支結構,程序流程如圖7所示。首先設置驅動器的工作模式為轉速模式,并將上位機設定的轉速值寫入驅動器,然后檢測關節(jié)的用力情況。如果力矩不為0,就啟動電機開始訓練。當?shù)竭_限定的位置時,就設定轉速為0,然后讀取下一時刻的角度、力矩,直到接收到停止指令時,就停止電機。
圖7 等速訓練模式程序流程圖
如果Mode_Flag的值為1,就進入被動訓練模式的分支結構,程序流程如圖8所示。首先設置伺服驅動器的工作模式為位置模式,利用STM32的定時器生成脈沖來控制伺服電機的轉動。其中,輸入的脈沖個數(shù)確定轉動的角度,脈沖頻率確定轉動的速度。上位機設定好活動范圍以及訓練速度后,先將其轉化為脈沖個數(shù)以及脈沖頻率,然后再發(fā)送脈沖給伺服驅動器。當?shù)竭_上位機設定的次數(shù)后,就關閉定時器。
圖8 被動訓練模式程序流程圖
上位機軟件的整體設計采用JAVA的Swing組件,即用于開發(fā)JAVA圖形界面的工具包,包含了構建圖形界面的各種組件如窗口、標簽、文本框等[15]。Swing工具包主要包含兩種元素:組件和容器。界面的設計過程首先是創(chuàng)建一個容器,然后在容器里面放置組件如按鈕、文本框等,再通過合理的布局就組成了一個圖形界面。
設計的上位機程序結構如圖9所示,src文件夾用于存放設計的JAVA文件。其中,Chart.java是曲線繪制程序,SerialPortManager.java是串口通信程序,SetFrame.java是設置界面設計程序,MainFrame.java是訓練界面設計程序。Referenced libraries 中包含了用到的jar包,jar包就是官方把一些常用的驅動類、方法等壓縮成一個文件包,通過調(diào)用這個jar包就可以實現(xiàn)對應的功能,比如串口通信程序的設計就是基于RXTXcomm.jar,曲線的框架繪制則是基于jfreechart.jar。
圖9 上位機程序結構
上位機設置界面如圖10所示,界面設計時,首先調(diào)用窗體類JFrame創(chuàng)建一個窗體,然后再調(diào)用按鍵類JButton、文本框類JTextArea,生成按鍵與文本框,并調(diào)用標簽類JLabel添加對應的標簽用于說明文本框的內(nèi)容。
圖10 上位機設置界面
為實現(xiàn)和STM32的數(shù)據(jù)傳輸,首先在這個界面的初始化中約定好波特率、數(shù)據(jù)的位數(shù)以及停止位數(shù),再調(diào)用相關的串口類函數(shù)實現(xiàn)和STM32的通信。然后利用監(jiān)聽函數(shù)將用戶所填寫的訓練信息保存在定義的字符數(shù)組Set中,字符數(shù)組Set結構如表2所示。第一個字節(jié)表示訓練模式,比如模式選擇中的四個按鍵分別對應四種模式,每個模式對應一個值,當點擊按鍵時,會將按鍵對應的值保存在Set[0]中。接著讀取速度、力矩等內(nèi)容并依次保存,最后將字符數(shù)組Set通過串口發(fā)送到STM32。
表2 字符數(shù)組Set結構
上位機訓練界面如圖11所示,界面的設計與設置界面類似,同樣是創(chuàng)建窗體,然后放置按鍵、文本框等組件。與設置界面不同的是多調(diào)用了面板容器類JPanel,將生成的面板嵌套在窗體中,用于曲線的繪制。曲線的繪制是利用JAVA的Graphics2D類,這是一種用于繪制幾何圖形的類,可以畫直線、矩形、圓等基本圖形。首先創(chuàng)建串口的監(jiān)聽類函數(shù)用于接收控制器發(fā)送的角度、力矩數(shù)據(jù),并保存在定義的整形數(shù)組Ang、Tor里面。然后繪制坐標軸以及刻度線,再將數(shù)組中的數(shù)據(jù)畫在坐標軸里面,并通過刷新面板實現(xiàn)數(shù)據(jù)的動態(tài)顯示。
圖11 上位機訓練界面
本文以肘關節(jié)為例對四種訓練模式進行了測試,在上位機設置界面中選擇訓練的模式、設定活動的范圍、輸入訓練的速度、力矩等參數(shù),然后進入上位機訓練界面,點擊“開始”按鍵進行訓練,點擊“停止”按鍵結束訓練。
選擇了三個位置進行測試,角度值分別為50°、100°以及150°。其中角度值為100°時的力矩、位置與時間的關系曲線如圖12所示,從圖12中可以看出當力矩值為0時,對應的角度值沒有發(fā)生變化。當力矩值不為0時,對應的角度值也沒有發(fā)生變化,表明肘關節(jié)的位置不隨肘關節(jié)的用力情況而發(fā)生變化,可以保持在設定的位置靜止不動,符合等長訓練模式的需求。
圖12 角度值為100°時的力矩、位置曲線
選擇了三個訓練速度進行測試,分別設定為12°/s、18°/s以及30°/s,肘關節(jié)支架速度的最大誤差如表3所示??梢钥闯?,肘關節(jié)支架速度的最大誤差為0.4~1.2°/s,在合理的波動范圍內(nèi)[16]。造成速度波動的原因在于速度校正和負載波動之間存在時間差,而交流伺服系統(tǒng)的響應時間較快,影響系統(tǒng)響應的主要原因還是在于機械連接裝置的傳遞時間。伺服電機所帶傳動機構的響應速度根據(jù)所采用材料的剛性差異而不同,如果剛性較低其響應速度也就比較慢,就會導致一定的速度波動。
表3 等速訓練模式下肘關節(jié)支架速度最大誤差(°/s)
其中訓練速度為30°/s時的力矩、位置與時間的曲線關系如圖13所示,從圖中可以看出當力矩值為0時,角度值會保持不變,說明肘關節(jié)沒有用力的時候,肘關節(jié)的位置不會發(fā)生變化。當肘關節(jié)順時針用力時,角度值會線性減小,說明此時肘關節(jié)保持設定的速度順時針轉動。當肘關節(jié)逆時針用力時,角度值會線性增大,說明此時肘關節(jié)保持設定的速度逆時針轉動。當肘關節(jié)到達限定的位置時,即使繼續(xù)往前用力,但是角度值會保持不變,說明此時停止在限定的位置,只有往相反方向用力才可以轉動。測試情況符合等速訓練模式的需求。
圖13 訓練速度為30°/s時的力矩、位置曲線
選擇了三個阻力級別進行測試,分別設定為5、8、10 N.m。其中阻力矩為10 N.m時的力矩、位置與時間的曲線關系如圖14所示,從圖中可以看出當肘關節(jié)用力情況小于設定的阻力矩時,角度值是保持不變的,說明肘關節(jié)的位置沒有發(fā)生變化。當肘關節(jié)用力情況大于設定的阻力矩時,角度值會發(fā)生變化,而且力矩值越大,角度值變化越大,說明肘關節(jié)轉動的速度隨著肘關節(jié)用力地增加而變大。當肘關節(jié)到達限定的位置時,即使肘關節(jié)的用力情況大于設定的阻力矩,但是角度值仍然保持不變,說明此時停止在限定的位置,只有往相反方向用力才可以轉動。測試情況符合等張訓練模式的需求。
圖14 阻力矩為10 N·m時的力矩、位置曲線
被動訓練模式是由設備帶動受試者關節(jié)運動,因此訓練時在上位機設定好訓練的速度以及活動范圍,并設定訓練的次數(shù)為3次,然后點擊開始。選擇了三個訓練速度進行測試,分別設定為30°/s、42°/s以及60°/s,肘關節(jié)支架速度的最大誤差如表4所示??梢钥闯?,肘關節(jié)支架速度的最大誤差在0.9°/s到2.0°/s之間,在合理的波動范圍內(nèi)[17]。被動訓練模式由于采用的是伺服驅動器的位置模式,運算量大,驅動器對控制信號的響應會相對慢一點。影響速度穩(wěn)定的主要原因在于伺服電機與機械傳動結構不匹配,機械響應速度不夠及時,導致速度校正存在延時。
表4 被動訓練模式下肘關節(jié)支架速度最大誤差(°/s)
其中訓練速度為30°/s時的力矩、位置與時間的曲線關系如圖15所示,從圖中可以看出,角度值先線性減小,接著又線性增大回到初始的角度,然后重復這個過程3次。說明肘關節(jié)在設定的活動范圍內(nèi)保持設定的速度做了3次訓練,測試情況符合被動訓練模式的需求。
圖15 訓練速度為30°/s時的力矩、位置曲線
在硬件上,本文采用伺服電機作為執(zhí)行機構,具備過載能力強、轉動慣量低等優(yōu)點。并且電機的控制方案相對簡單,而等速設備采用電磁摩擦制動器作為執(zhí)行機構,由于電磁制動器是高度非線性的電磁器件,導致控制方案比較復雜[18]。本研究選用的控制器STM32具備高性能、低成本、低功耗的特點,芯片的外設接口較多,可以和多種傳感器對接。機械連接上,部分設備采用聯(lián)軸器直接連接,需要配備對應的諧波減速器,成本比較高。本文采用同步帶輪以及渦輪蝸桿實現(xiàn)伺服電機到輸出軸的動力傳遞,提高輸出扭矩的同時達到減速的目的。
在軟件上,本文基于JAVA語言設計了對應的上位機操作界面。JAVA語言作為解釋型語言,可以實現(xiàn)跨平臺運行,具有較好的移植性。程序包也比較豐富,通過調(diào)用jar包,可以提高程序的開發(fā)效率。后期還可以引入數(shù)據(jù)庫,通過JDBC接口函數(shù)實現(xiàn)和數(shù)據(jù)庫的連接,方便管理用戶數(shù)據(jù)[19]。有的肌力訓練設備缺乏上位機軟件,只通過人機交互界面進行操作,數(shù)據(jù)的存儲量有限,而且傳輸數(shù)據(jù)不便捷[20]。
目前,用于肌力訓練的設備主要依靠進口國外的產(chǎn)品,這些設備不僅價格昂貴,而且資料有限,所以自主設計肌力訓練設備就顯得尤為重要。本文利用JAVA上位機以及STM32控制伺服驅動器,進而控制伺服電機,能夠實現(xiàn)等長、等速、等張以及被動訓練模式,通過更換不同的支架可以實現(xiàn)多關節(jié)的訓練,所設計的動力控制系統(tǒng)滿足應用需求。下一步工作將在醫(yī)院進行臨床試用,對硬件、算法、上位機軟件進行優(yōu)化,如硬件上可以增加控制芯片專門處理傳感器的信號,提高數(shù)據(jù)傳輸?shù)膶崟r性,上位機軟件引入數(shù)據(jù)庫管理功能。