簡(jiǎn)單程序打造“山寨”版機器手
如今,進(jìn)入網(wǎng)絡(luò )世界,君便可見(jiàn)滿(mǎn) 山遍野都是"山寨",在這個(gè) "山寨文化"蓬勃興起的年代,很多 人都對這個(gè)新生事物充滿(mǎn)著(zhù)好奇心, 躍躍欲試。本人亦不例外,也想來(lái) "山寨"一下。要"山寨"一件什么 東西好呢?想了N久,想不出來(lái),恰 好,本人正學(xué)了單片機和C語(yǔ)言不久, 就用C語(yǔ)言編個(gè)"山寨"程序吧;剛 好自己又是個(gè)機器人迷,就拿定主意 給單片機編個(gè)簡(jiǎn)單的程序,做個(gè)"山 寨"版的機器手吧。
機器手的硬件平臺與電路原理
做 " 山寨 " 版的機器手 , 只在 紙上談兵或者在仿真軟件里仿真是不 行的,必須讓它"活"起來(lái)。首先, 需要構筑一個(gè)硬件平臺,用什么芯 片好呢?51?PIC?AVR?ARM?呵 呵,也許有人已經(jīng)猜到了,對!就是 用51芯片,對于一個(gè)初學(xué)者來(lái)說(shuō), 51芯片最合適不過(guò)了。具體型號就 用AT89C2051,這個(gè)芯片對于許多高 手、大俠來(lái)說(shuō),簡(jiǎn)直是小菜一碟,里 邊的資源已經(jīng)是"隔夜的"了,對于 像我這樣的菜鳥(niǎo),就找本基礎的書(shū)慢 慢"刨"吧。"刨"完書(shū),你就會(huì )發(fā) 現很多單片機硬件設計都脫離不了如 圖 1所示的最小系統。 本"機器手"也不例外,只是在 外圍添加了少許元件而已,如圖2所 示。圖中MCU的P1和P3口除了P1.0、 P1.1和P3.0外,內部均有上拉電阻, P1口全部用作獨立式按鍵接口,由于 P1.0和P1.1比較特殊,是AT89C2051 內 置 模 擬 比 較 器 的 同 相 輸 入 端 (AIN0)和反相輸入端(AIN1),內 部沒(méi)有上拉電阻,故需在外部接入上 拉電阻,阻值選用常用的10kΩ就可以 了。P3口的P3.6沒(méi)有引出,而是作為 比較器的輸出,故不能像普通的I/O口 那樣訪(fǎng)問(wèn)引腳 ;P3.2~P3.5、P3.7則 接伺服電機。
接著(zhù) , 還是來(lái)介紹一下我們機 器手的另一個(gè)重要元件吧,這就是伺 服電機,它在航模界中被廣泛使用, 亦稱(chēng)為"舵機",是一種PWM控制 部件。當它收到一串指定角度的"指 令"時(shí),其輸出軸就會(huì )轉動(dòng)到指定的 角度上。伺服電機跟其他電機不太一 樣,輸入線(xiàn)不像直流電機那樣只有2 根,也不像步進(jìn)電機(兩相式)那樣 有 6根,它有自己的特色,只有3根, 引線(xiàn)末端使用杜邦頭,如圖3所示。 圖 3中的杜邦頭引線(xiàn)由上至下, 紅色的是控制線(xiàn)(脈沖輸入線(xiàn)),接 到主控芯片上;中間的是電源線(xiàn)正極,第三條是地線(xiàn)(即電源負極), 供電電壓一般是4 ~6V。伺服電機是 一個(gè)PWM控制部件,在其控制線(xiàn)上 輸入一個(gè)周期性的脈沖信號,這個(gè)周 期性脈沖信號的高電平時(shí)間通常在 0.5 ~2.0ms之間,而周期在5 ~20ms 之間,要求并不十分嚴格,如圖4所 示,圖中表格給出了一個(gè)典型的20ms 周期性脈沖的脈沖寬度與伺服電機輸 出軸旋轉角度之間的對應關(guān)系。
根據表格中的數據可總結出一條 輸出軸角度D和脈沖寬度T的轉換關(guān)系 式: D=90T-135(T?[0.5,2.5]) 有了這個(gè)公式,我們就可以很方 便地將轉角角度與脈寬互相轉換,計 算出初始化等所需要的脈沖寬度。
程序的編寫(xiě)
作為一個(gè)初學(xué)者,對于單片機內 部的資源往往理解不深,故程序寫(xiě)得 不好,還請各位高手們手下留情,多 多包涵。機器手程序的總流程圖如圖5 所示。程序初始化后,就執行輸出脈 寬,接著(zhù)進(jìn)行按鍵掃描,完畢后又返 回輸出脈寬,循環(huán)不止。
圖 6是輸出脈寬到每個(gè)伺服電機 程序的詳細流程圖,W1、W2、W3、 W4、W5是5個(gè)脈沖寬度,按順序分時(shí) 地從P3.2~P3.5、P3.7引腳向5個(gè)伺服 電機輸出。例如要在P3.2輸出一個(gè)寬度 為W1(ms)的脈沖,如程序1所示。 程序中Delay_ms(W1)是一個(gè)以 延時(shí)1ms為單位的函數,需要延時(shí)多 少毫秒只需在括號內填入對應的數字 即可(該函數的程序很簡(jiǎn)單,不再列 出)。
圖 7是按鍵掃描子程序流程圖。 為了說(shuō)明原理和排版簡(jiǎn)潔,圖中S1和 S2掃描判斷原理采用詳細流程,而對 S3~S8則使用簡(jiǎn)化框圖。進(jìn)入此流 程,首先以一個(gè)判斷語(yǔ)句判斷S1是否 按下,若未按下則繼續往下掃描;若 按下了,則W1加1,并以2500為上限 值;如W1未超過(guò)該上限值,則繼續往 下掃描;S2的掃描原理與S1相似,稍 有不同之處是判斷W1的下限值,下限 為500。其他按鍵掃描的原理則分別與 S1和S2類(lèi)同。
程序2所示是掃描S1和S2的程序代碼。
讀完代碼,大家是否覺(jué)得按鍵掃 描部分是不是少了點(diǎn)什么東西?呵呵, 對了,就是沒(méi)有延時(shí)去抖。剛開(kāi)始自己 也覺(jué)得奇怪,沒(méi)有消抖程序怎么能正確 識別出按鍵呢?后來(lái),請教了其他高手 之后才知道,由于程序簡(jiǎn)短,整體循環(huán) 周期短,按鍵按下后,若第一次沒(méi)掃 到,后一周期還可以?huà)叩?;即使受到?動(dòng)干擾,由于Wn的數據變化量很小, 對伺服電機轉角的改變影響并不大,故 消抖程序可以省去。 此時(shí)或許有人提出 : 是否可以 插入掃描按鍵釋放的代碼?關(guān)于這個(gè) 問(wèn)題,本人也曾作過(guò)嘗試,發(fā)現在代 碼中插入釋放判別后,當按鍵的按放 次數很少時(shí),伺服電機是看不出有轉 動(dòng)跡象的,只在按放次數達幾十次時(shí) 才有比較明顯的效果,這樣操作者會(huì ) 感覺(jué)很累,原因是伺服電機轉角參數 Wn的范圍是在500 ~2500之間。鑒于 此,我就試著(zhù)將Wn的增幅加大一點(diǎn), 于是伺服電機達到了比較明顯的旋轉 效果,但旋轉精度卻會(huì )大打折扣,故 程序中未插入掃描按鍵釋放的代碼。 程序通過(guò)仿真后,就可以動(dòng)手制 作硬件電路了。
PCB電路板的設計與制作
圖 8所示是在DXP2004 SP2 下設 計的PCB,圖中,已將按鍵從主板中獨 立出來(lái),兩塊板使用10針排線(xiàn)互聯(lián), 這樣就可以很方便地操作機械手。圖9 (a)和圖9(b)是PCB3D仿真的正反 兩面圖。
由于電路很簡(jiǎn)單,我們可以直接 用"洞洞板"焊接,按圖紙施工,不 需半小時(shí)便可完成,注意把按鍵接線(xiàn) 引出,接到控制手柄上。本人找了只 廢舊的PS2游戲手柄改裝代用,只需用 到其中的8個(gè)按鈕,其余的可以去掉。 這樣既看起來(lái)美觀(guān)又用起來(lái)方便,如 圖10所示。
完成后,用萬(wàn)用表檢查無(wú)誤,把 程序"灌"入芯片即可。至此,"山寨 版"機器手的軟硬件部分都完成了,接 著(zhù)就可以著(zhù)手加工機械零件了。
機械部分的制作與調整
機械部分零件大部分采用2mm厚 的黑色廣告用塑料板制作,為了提高板 材的機械強度,采取了雙板粘合的辦法 (粘合劑為氯仿),經(jīng)粘合后的板材, 強度大大增強,估計可達單層的4~6 倍,為整機安全工作提供了足夠的保 證。為了減少零部件并減輕機器上部重 量,直接使用螺栓將伺服電機和板材進(jìn) 行組合,省去了伺服電機自帶的舵臂。 這樣既降低了重心,增大了穩定度,又 減輕了伺服電機的負載。
以伸縮臂與伺服電機組合為例, 簡(jiǎn)單介紹一下組合方法吧。首先,用 卡尺(最好用電子卡尺或帶表卡尺, 精確度高些)量出伺服電機輸出軸外 徑f a和內徑f b,然后在單層側板上 合適的位置,按f a尺寸稍小開(kāi)一圓 孔,使轉軸穿過(guò)圓孔時(shí),緊湊為宜。 注意,側板兩頭應各開(kāi)一孔,留一邊 待用;取另一未開(kāi)孔單層側板B,在與 A側板相同位置上以fb稍大開(kāi)孔,再 將A、B側板用氯仿粘合,待干后,一 塊具有較高強度的新側板C就誕生了。 再根據需要在側板中部打若干個(gè)組裝 孔,取一顆M3螺絲穿過(guò)側板f b孔把伺服電機輸出軸暫時(shí)固定,再往側板 fa孔中注入適量有機溶劑,使孔壁軟 化,收緊M3螺絲,使輸出軸與側板完 全配合,孔壁硬化后形成齒狀內壁, 恰好與輸出軸緊密接觸,使側板能隨 軸轉動(dòng)。側板的另一頭也用相同的方 法,連接另一伺服電機。取另一個(gè)已 組裝單個(gè)伺服電機的側板,用合適長(cháng) 度的銅柱和若干M3螺絲將兩側板組裝 成臂體,組裝時(shí)注意同端的兩個(gè)伺服 電機轉角一致。擰緊螺絲,臂體就完 成了。 該機器手的其中一個(gè)伺服電機需 要使用雙輸出軸,而一般伺服電機底 部均無(wú)輸出軸,所以必須給它定造一 個(gè)"義軸",要求與原輸出軸同心。 截取一塊與伺服電機底部同等大小的 雙層塑料板D,在適當位置鉆孔,注意 D板貼上伺服電機底部時(shí)孔要與輸出軸 同心,在任意一面上將孔擴大(切不 可整孔都擴),深度只需2mm左右, 用于藏入一個(gè)M3螺母,擴孔畢,取 一個(gè)螺母和長(cháng)5mm的帶螺紋銅柱,擰 緊,"義軸"便做成了。
采用相似的方法完成各部件后, 便可組裝成整體了。組裝完成以后, 還需作最后的整機測試,若伺服電機 初始化值和上下限值不適合,可以按 實(shí)際調試修改。確定后,將修改完的 源代碼編譯成bin或Hex文件,下載到 AT89C2051中。再找個(gè)合適的電源適 配器給它供電,至此,"山寨版"的 機器手工程順利竣工。圖11為完全手 工制作的"山寨版"機器手外形。
功能測試
機器完成后,本人做了些簡(jiǎn)易的 測試,主要是回旋范圍和夾持搬運不 同物品的性能。
1.回旋范圍測試 圖11測試左右旋轉范圍,圖12、 圖13是測試前后伸展距離。
2.夾持不同物品搬運測試 圖14是搬運鉛筆測試,圖15是搬運中的鐵皮罐。
寫(xiě)在后面的話(huà)
我剛開(kāi)始設計這個(gè)機器手時(shí)是仿 照國外的5個(gè)自由度的,后來(lái)因采購的 伺服電機的輸出力矩不足(需要使用 大力矩的金屬齒輪伺服電機),而改 為 4個(gè)自由度,在圖11中能看到有些 "改造"的痕跡。制作機械部分時(shí)也 嘗試過(guò)使用亞克力板材,由于條件所 限,加工設備只有手鋸、銼刀和一把 電鉆,加工起來(lái)效果不佳,最后只好 放棄了亞克力,改用了現在所用的普 通塑料板。另外,程序設計時(shí),編寫(xiě) 了兩個(gè)方案,一個(gè)見(jiàn)上文,另一個(gè)方 案見(jiàn)源代碼,可到www.radio.com.cn 上下載,其原理也不復雜,請有興趣 的讀者可自行分析。
伺服電機相關(guān)文章:伺服電機工作原理
評論