LabVIEW,32路舵機(jī)控制板和多自由度機(jī)械臂
從題目上看,這篇文章涉及了LabVIEW的編程、32路舵機(jī)控制板的使用和多自由度機(jī)械臂的動作演示,應(yīng)該還有藍(lán)牙通訊,后面三部分內(nèi)容,在前面的文章中講述過,文章題目《32路舵機(jī)控制板與多自由度機(jī)械臂》,網(wǎng)址:http://www.eefocus.com/zhang700309/blog/12-09/286479_a1c80.html。這篇文章主要講LabVIEW如何編程來與舵機(jī)控制板串口通信,并進(jìn)而控制機(jī)械臂上的各個舵機(jī)。
32路舵機(jī)控制板由國內(nèi)公司DFRobot出品,上一篇文章講述了如何用控制板自帶的舵機(jī)控制軟件,來設(shè)置舵機(jī)動作的方法,這篇文章希望用LabVIEW程序來代替廠家的舵機(jī)控制軟件一部分功能,來做一個為這個實(shí)驗(yàn)項(xiàng)目量身定做的人機(jī)界面。
實(shí)驗(yàn)視頻:
點(diǎn)擊網(wǎng)址,全屏看視頻,
http://www.tudou.com/v/anpCVbq0ZDI/&rpid=96368873&resourceId=96368873_04_05_99/v.swf。
多自由度機(jī)械臂的6個舵機(jī)分別控制爪子抓放、腕部旋轉(zhuǎn)、腕部上下、肘部上下、臂部上下和臂部旋轉(zhuǎn),這些部位的舵機(jī)按照從爪子到塔臺的順序,分別通過控制線接到舵機(jī)控制板的通道上,通道編號為3、4、5、13、14、15,如下圖所示。
6自由度機(jī)械臂:(所有圖片,雙擊都可以放大觀看?。?/p>
32路舵機(jī)控制板:
多自由度機(jī)械臂上的6個舵機(jī)都支持180度轉(zhuǎn)角,舵機(jī)的轉(zhuǎn)動角度是通過調(diào)節(jié)PWM(脈沖寬度調(diào)制)信號的占空比來實(shí)現(xiàn)的,標(biāo)準(zhǔn)PWM信號的周期固定為20ms(50Hz),脈寬在500us到2500us之間,脈寬和舵機(jī)的轉(zhuǎn)角0°~180°相對應(yīng)。
從人機(jī)對話前面板入手,開始講解LabVIEW編程,看看下圖LabVIEW前面板中,有六個滑動桿控件,用鼠標(biāo)移動游標(biāo),在行程范圍從500到2500的滑動桿上移動,就可以分別控制機(jī)械臂上的六個舵機(jī)轉(zhuǎn)動角度。
六個滑動桿的當(dāng)前值會立即反饋到后臺程序,即LabVIEW框圖程序,這個程序會把這些數(shù)據(jù)組合成一行字符串命令,并通過串口,下達(dá)給32路舵機(jī)控制板,進(jìn)而控制機(jī)械臂上的舵機(jī)。所以這次LabVIEW編程有兩個要點(diǎn):1、如何編寫LabVIEW串口通信程序,讓舵機(jī)控制板接受到上位機(jī)下達(dá)的字符串命令;2、如何把數(shù)據(jù)類型為整數(shù)的六個舵機(jī)PWM脈寬數(shù)據(jù)組合成字符串,而且這個字符串必須符合控制板對字符串命令的格式要求。
框圖程序:(所有圖片,雙擊都可以放大觀看!)
上圖的圖形化編程設(shè)計(jì)是采用NI_VISA串口Serial函數(shù)來訪問和控制串口的。VISA中的Serial函數(shù)庫里包含VISA 配置串口、VISA 寫入、VISA 讀取、VISA 關(guān)閉等子函數(shù)。這些子函數(shù)的提取路徑是:函數(shù)庫→儀器I/O→串口,本設(shè)計(jì)用到的三個VISA串口子函數(shù)是:VISA串口配置函數(shù)VISA Configure Serial Port、VISA寫入函數(shù)VISA Write、和VISA 關(guān)閉函數(shù)VISA Close。它們的圖標(biāo)見下圖所示:
VISA串口配置函數(shù)的作用是完成串口參數(shù)的初始化設(shè)置,包括了串口資源名稱,波特率,奇偶校驗(yàn)、數(shù)據(jù)比特、是否啟用終止符等,上圖中該函數(shù)連接了兩個輸入變量,變量名為“請選擇串口名”和“波特率”,它們分別連在串口資源名稱和波特率參數(shù)端子上,變量值是在前面板上相應(yīng)控件來設(shè)定的,其它輸入?yún)?shù)采用默認(rèn)值。圖中VISA串口配置函數(shù)有兩個輸出端子,圖標(biāo)上面的輸出端子輸出的是串口資源名稱,下面的輸出端子輸出的是錯誤碼,輸出端子向下游函數(shù)傳遞信息。
VISA寫入函數(shù)有三個輸入端子,上面一個輸入端子是前面VISA串口配置函數(shù)傳遞的串口資源名稱,下面的輸入端子是傳遞的錯誤碼,意思是若前面的函數(shù)出錯了,會往這里輸入一個錯誤碼,然后繼續(xù)往下面?zhèn)鬟f,有錯誤碼出現(xiàn)時程序是不會工作的。中間的輸入端子是寫入緩沖區(qū)入口,寫入緩沖區(qū)支持的數(shù)據(jù)格式是字符串。
VISA關(guān)閉函數(shù)VISA Close的作用是當(dāng)程序停止之前,必須要把使用的串口設(shè)備關(guān)閉,若不關(guān)閉,其他程序就不能使用該設(shè)備。
了解了LabVIEW的串口通信函數(shù),下面的問題是如何把六個整數(shù)數(shù)據(jù)組合成字符串,而且這個字符串必須符合格式要求,然后把它送到VISA寫入函數(shù)的寫入緩沖區(qū)。
DF-USBSSC32控制板說明書網(wǎng)址:http://wiki.dfrobot.com.cn/index.php?title=USB%E7%89%8832%E8%B7%AF%E8%88%B5%E6%9C%BA%E6%8E%A7%E5%88%B6%E6%9D%BF(SKU:DRI0005)
,看看里面的說明書,多舵機(jī)字符串命令的格式是如何解釋的。
說明書文摘:
舵機(jī)群運(yùn)動實(shí)例:#5 P1600 #10 P750 T2500
通道5移動到1600us位置,通道10移動到750us的位置,2個都同時在2500us內(nèi)完成,這個命令能協(xié)調(diào)多個舵機(jī)的速度。
機(jī)械臂上有六個舵機(jī),它們的控制線接到舵機(jī)控制板的控制通道為3、4、5、13、14、15,不考慮移動速度,如果所有舵機(jī)都轉(zhuǎn)動到90度位置,那么這個字符串命令應(yīng)該如何寫?答案是:
#3 P1500 #4 P1500#5 P1500 #13 P1500#14 P1500 #15 P1500
由于舵機(jī)安裝的方位不同,所以程序中“3000-滑動桿當(dāng)前值”算式的意思是讓滑動桿游標(biāo)的移動方向與舵機(jī)轉(zhuǎn)動方向調(diào)整為一致,比如希望滑動桿游標(biāo)左移,希望舵機(jī)順時針旋轉(zhuǎn),如果發(fā)現(xiàn)實(shí)際情況是舵機(jī)逆時針旋轉(zhuǎn),就要用到這個算式。
再看看LabVIEW框圖程序中,與生成字符串命令相關(guān)的部分,我把它們單獨(dú)截屏下來了。
按照DF-USBSSC32控制板說明書上所述,在這個字符串命令后面要加入
框圖程序中,VISA配置串口函數(shù)下方的程序是:1、串口波特率設(shè)定為115200b/s;2、控制各舵機(jī)轉(zhuǎn)角的滑動桿初值都設(shè)置為1500us,即舵機(jī)角度設(shè)置為90度,使程序開始運(yùn)行時,機(jī)械臂到達(dá)工作初始位置,我在機(jī)械臂上安裝舵機(jī)時,事先把所有舵機(jī)的轉(zhuǎn)角都調(diào)整為90度,才把它們安裝上去。
通過以上編程,符合格式要求的字符串命令就這樣一步步生成了,把這個字符串往VISA寫入函數(shù)“一送”,就OK了,通過串口寫到了下位機(jī)DF-USBSSC32控制板中,控制板不需要編寫一行程序,它會自動理解下達(dá)的命令,同時響應(yīng)前面板上滑動桿控件的游標(biāo)移動,并驅(qū)使各舵機(jī)轉(zhuǎn)動角度,讓機(jī)械臂完成鼠標(biāo)操縱者所希望達(dá)到的各種動作。