LabVIEW,32路舵機(jī)控制板和多自由度機(jī)械臂
掃描二維碼
隨時(shí)隨地手機(jī)看文章
從題目上看,這篇文章涉及了LabVIEW的編程、32路舵機(jī)控制板的使用和多自由度機(jī)械臂的動(dòng)作演示,應(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ī)械臂上的各個(gè)舵機(jī)。
32路舵機(jī)控制板由國內(nèi)公司DFRobot出品,上一篇文章講述了如何用控制板自帶的舵機(jī)控制軟件,來設(shè)置舵機(jī)動(dòng)作的方法,這篇文章希望用LabVIEW程序來代替廠家的舵機(jī)控制軟件一部分功能,來做一個(gè)為這個(gè)實(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個(gè)舵機(jī)分別控制爪子抓放、腕部旋轉(zhuǎn)、腕部上下、肘部上下、臂部上下和臂部旋轉(zhuǎn),這些部位的舵機(jī)按照從爪子到塔臺(tái)的順序,分別通過控制線接到舵機(jī)控制板的通道上,通道編號(hào)為3、4、5、13、14、15,如下圖所示。
6自由度機(jī)械臂:(所有圖片,雙擊都可以放大觀看?。?/p>
32路舵機(jī)控制板:
多自由度機(jī)械臂上的6個(gè)舵機(jī)都支持180度轉(zhuǎn)角,舵機(jī)的轉(zhuǎn)動(dòng)角度是通過調(diào)節(jié)PWM(脈沖寬度調(diào)制)信號(hào)的占空比來實(shí)現(xiàn)的,標(biāo)準(zhǔn)PWM信號(hào)的周期固定為20ms(50Hz),脈寬在500us到2500us之間,脈寬和舵機(jī)的轉(zhuǎn)角0°~180°相對(duì)應(yīng)。
從人機(jī)對(duì)話前面板入手,開始講解LabVIEW編程,看看下圖LabVIEW前面板中,有六個(gè)滑動(dòng)桿控件,用鼠標(biāo)移動(dòng)游標(biāo),在行程范圍從500到2500的滑動(dòng)桿上移動(dòng),就可以分別控制機(jī)械臂上的六個(gè)舵機(jī)轉(zhuǎn)動(dòng)角度。
六個(gè)滑動(dòng)桿的當(dāng)前值會(huì)立即反饋到后臺(tái)程序,即LabVIEW框圖程序,這個(gè)程序會(huì)把這些數(shù)據(jù)組合成一行字符串命令,并通過串口,下達(dá)給32路舵機(jī)控制板,進(jìn)而控制機(jī)械臂上的舵機(jī)。所以這次LabVIEW編程有兩個(gè)要點(diǎn):1、如何編寫LabVIEW串口通信程序,讓舵機(jī)控制板接受到上位機(jī)下達(dá)的字符串命令;2、如何把數(shù)據(jù)類型為整數(shù)的六個(gè)舵機(jī)PWM脈寬數(shù)據(jù)組合成字符串,而且這個(gè)字符串必須符合控制板對(duì)字符串命令的格式要求。
框圖程序:(所有圖片,雙擊都可以放大觀看!)
上圖的圖形化編程設(shè)計(jì)是采用NI_VISA串口Serial函數(shù)來訪問和控制串口的。VISA中的Serial函數(shù)庫里包含VISA 配置串口、VISA 寫入、VISA 讀取、VISA 關(guān)閉等子函數(shù)。這些子函數(shù)的提取路徑是:函數(shù)庫→儀器I/O→串口,本設(shè)計(jì)用到的三個(gè)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ù)連接了兩個(gè)輸入變量,變量名為“請(qǐng)選擇串口名”和“波特率”,它們分別連在串口資源名稱和波特率參數(shù)端子上,變量值是在前面板上相應(yīng)控件來設(shè)定的,其它輸入?yún)?shù)采用默認(rèn)值。圖中VISA串口配置函數(shù)有兩個(gè)輸出端子,圖標(biāo)上面的輸出端子輸出的是串口資源名稱,下面的輸出端子輸出的是錯(cuò)誤碼,輸出端子向下游函數(shù)傳遞信息。
VISA寫入函數(shù)有三個(gè)輸入端子,上面一個(gè)輸入端子是前面VISA串口配置函數(shù)傳遞的串口資源名稱,下面的輸入端子是傳遞的錯(cuò)誤碼,意思是若前面的函數(shù)出錯(cuò)了,會(huì)往這里輸入一個(gè)錯(cuò)誤碼,然后繼續(xù)往下面?zhèn)鬟f,有錯(cuò)誤碼出現(xiàn)時(shí)程序是不會(huì)工作的。中間的輸入端子是寫入緩沖區(qū)入口,寫入緩沖區(qū)支持的數(shù)據(jù)格式是字符串。
VISA關(guān)閉函數(shù)VISA Close的作用是當(dāng)程序停止之前,必須要把使用的串口設(shè)備關(guān)閉,若不關(guān)閉,其他程序就不能使用該設(shè)備。
了解了LabVIEW的串口通信函數(shù),下面的問題是如何把六個(gè)整數(shù)數(shù)據(jù)組合成字符串,而且這個(gè)字符串必須符合格式要求,然后把它送到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)動(dòng)實(shí)例:#5 P1600 #10 P750 T2500
通道5移動(dòng)到1600us位置,通道10移動(dòng)到750us的位置,2個(gè)都同時(shí)在2500us內(nèi)完成,這個(gè)命令能協(xié)調(diào)多個(gè)舵機(jī)的速度。
機(jī)械臂上有六個(gè)舵機(jī),它們的控制線接到舵機(jī)控制板的控制通道為3、4、5、13、14、15,不考慮移動(dòng)速度,如果所有舵機(jī)都轉(zhuǎn)動(dòng)到90度位置,那么這個(gè)字符串命令應(yīng)該如何寫?答案是:
#3 P1500 #4 P1500#5 P1500 #13 P1500#14 P1500 #15 P1500
由于舵機(jī)安裝的方位不同,所以程序中“3000-滑動(dòng)桿當(dāng)前值”算式的意思是讓滑動(dòng)桿游標(biāo)的移動(dòng)方向與舵機(jī)轉(zhuǎn)動(dòng)方向調(diào)整為一致,比如希望滑動(dòng)桿游標(biāo)左移,希望舵機(jī)順時(shí)針旋轉(zhuǎn),如果發(fā)現(xiàn)實(shí)際情況是舵機(jī)逆時(shí)針旋轉(zhuǎn),就要用到這個(gè)算式。
再看看LabVIEW框圖程序中,與生成字符串命令相關(guān)的部分,我把它們單獨(dú)截屏下來了。
按照DF-USBSSC32控制板說明書上所述,在這個(gè)字符串命令后面要加入
框圖程序中,VISA配置串口函數(shù)下方的程序是:1、串口波特率設(shè)定為115200b/s;2、控制各舵機(jī)轉(zhuǎn)角的滑動(dòng)桿初值都設(shè)置為1500us,即舵機(jī)角度設(shè)置為90度,使程序開始運(yùn)行時(shí),機(jī)械臂到達(dá)工作初始位置,我在機(jī)械臂上安裝舵機(jī)時(shí),事先把所有舵機(jī)的轉(zhuǎn)角都調(diào)整為90度,才把它們安裝上去。
通過以上編程,符合格式要求的字符串命令就這樣一步步生成了,把這個(gè)字符串往VISA寫入函數(shù)“一送”,就OK了,通過串口寫到了下位機(jī)DF-USBSSC32控制板中,控制板不需要編寫一行程序,它會(huì)自動(dòng)理解下達(dá)的命令,同時(shí)響應(yīng)前面板上滑動(dòng)桿控件的游標(biāo)移動(dòng),并驅(qū)使各舵機(jī)轉(zhuǎn)動(dòng)角度,讓機(jī)械臂完成鼠標(biāo)操縱者所希望達(dá)到的各種動(dòng)作。