<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 簡(jiǎn)單程序打造“山寨”版機(jī)器手

          簡(jiǎn)單程序打造“山寨”版機(jī)器手

          作者: 時(shí)間:2011-02-21 來源:網(wǎng)絡(luò) 收藏

          如今,進(jìn)入網(wǎng)絡(luò)世界,君便可見滿 山遍野都是"山寨",在這個(gè) "山寨文化"蓬勃興起的年代,很多 人都對(duì)這個(gè)新生事物充滿著好奇心, 躍躍欲試。本人亦不例外,也想來 "山寨"一下。要"山寨"一件什么 東西好呢?想了N久,想不出來,恰 好,本人正學(xué)了和C語(yǔ)言不久, 就用C語(yǔ)言編個(gè)"山寨"程序吧;剛 好自己又是個(gè)機(jī)器人迷,就拿定主意 給編個(gè)簡(jiǎn)單的程序,做個(gè)"山 寨"版的機(jī)器手吧。

          機(jī)器手的硬件平臺(tái)與電路原理

          做 " 山寨 " 版的機(jī)器手 , 只在 紙上談兵或者在仿真軟件里仿真是不 行的,必須讓它"活"起來。首先, 需要構(gòu)筑一個(gè)硬件平臺(tái),用什么芯 片好呢?51?PIC?AVR?ARM?呵 呵,也許有人已經(jīng)猜到了,對(duì)!就是 用51芯片,對(duì)于一個(gè)初學(xué)者來說, 51芯片最合適不過了。具體型號(hào)就 用AT89C2051,這個(gè)芯片對(duì)于許多高 手、大俠來說,簡(jiǎn)直是小菜一碟,里 邊的資源已經(jīng)是"隔夜的"了,對(duì)于 像我這樣的菜鳥,就找本基礎(chǔ)的書慢 慢"刨"吧。"刨"完書,你就會(huì)發(fā) 現(xiàn)很多硬件設(shè)計(jì)都脫離不了如 圖 1所示的最小系統(tǒng)。 本"機(jī)器手"也不例外,只是在 外圍添加了少許元件而已,如圖2所 示。圖中的P1和P3口除了P1.0、 P1.1和P3.0外,內(nèi)部均有上拉電阻, P1口全部用作獨(dú)立式按鍵接口,由于 P1.0和P1.1比較特殊,是AT89C2051 內(nèi) 置 模 擬 比 較 器 的 同 相 輸 入 端 (AIN0)和反相輸入端(AIN1),內(nèi) 部沒有上拉電阻,故需在外部接入上 拉電阻,阻值選用常用的10kΩ就可以 了。P3口的P3.6沒有引出,而是作為 比較器的輸出,故不能像普通的I/O口 那樣訪問引腳 ;P3.2~P3.5、P3.7則 接伺服電機(jī)。

          接著 , 還是來介紹一下我們機(jī) 器手的另一個(gè)重要元件吧,這就是伺 服電機(jī),它在航模界中被廣泛使用, 亦稱為"舵機(jī)",是一種PWM控制 部件。當(dāng)它收到一串指定角度的"指 令"時(shí),其輸出軸就會(huì)轉(zhuǎn)動(dòng)到指定的 角度上。伺服電機(jī)跟其他電機(jī)不太一 樣,輸入線不像直流電機(jī)那樣只有2 根,也不像步進(jìn)電機(jī)(兩相式)那樣 有 6根,它有自己的特色,只有3根, 引線末端使用杜邦頭,如圖3所示。 圖 3中的杜邦頭引線由上至下, 紅色的是控制線(脈沖輸入線),接 到主控芯片上;中間的是電源線正極,第三條是地線(即電源負(fù)極), 供電電壓一般是4 ~6V。伺服電機(jī)是 一個(gè)PWM控制部件,在其控制線上 輸入一個(gè)周期性的脈沖信號(hào),這個(gè)周 期性脈沖信號(hào)的高電平時(shí)間通常在 0.5 ~2.0ms之間,而周期在5 ~20ms 之間,要求并不十分嚴(yán)格,如圖4所 示,圖中表格給出了一個(gè)典型的20ms 周期性脈沖的脈沖寬度與伺服電機(jī)輸 出軸旋轉(zhuǎn)角度之間的對(duì)應(yīng)關(guān)系。

          根據(jù)表格中的數(shù)據(jù)可總結(jié)出一條 輸出軸角度D和脈沖寬度T的轉(zhuǎn)換關(guān)系 式: D=90T-135(T?[0.5,2.5]) 有了這個(gè)公式,我們就可以很方 便地將轉(zhuǎn)角角度與脈寬互相轉(zhuǎn)換,計(jì) 算出初始化等所需要的脈沖寬度。

          程序的編寫

          作為一個(gè)初學(xué)者,對(duì)于單片機(jī)內(nèi) 部的資源往往理解不深,故程序?qū)懙?不好,還請(qǐng)各位高手們手下留情,多 多包涵。機(jī)器手程序的總流程圖如圖5 所示。程序初始化后,就執(zhí)行輸出脈 寬,接著進(jìn)行按鍵掃描,完畢后又返 回輸出脈寬,循環(huán)不止。

          圖 6是輸出脈寬到每個(gè)伺服電機(jī) 程序的詳細(xì)流程圖,W1、W2、W3、 W4、W5是5個(gè)脈沖寬度,按順序分時(shí) 地從P3.2~P3.5、P3.7引腳向5個(gè)伺服 電機(jī)輸出。例如要在P3.2輸出一個(gè)寬度 為W1(ms)的脈沖,如程序1所示。 程序中Delay_ms(W1)是一個(gè)以 延時(shí)1ms為單位的函數(shù),需要延時(shí)多 少毫秒只需在括號(hào)內(nèi)填入對(duì)應(yīng)的數(shù)字 即可(該函數(shù)的程序很簡(jiǎn)單,不再列 出)。

          圖 7是按鍵掃描子程序流程圖。 為了說明原理和排版簡(jiǎn)潔,圖中S1和 S2掃描判斷原理采用詳細(xì)流程,而對(duì) S3~S8則使用簡(jiǎn)化框圖。進(jìn)入此流 程,首先以一個(gè)判斷語(yǔ)句判斷S1是否 按下,若未按下則繼續(xù)往下掃描;若 按下了,則W1加1,并以2500為上限 值;如W1未超過該上限值,則繼續(xù)往 下掃描;S2的掃描原理與S1相似,稍 有不同之處是判斷W1的下限值,下限 為500。其他按鍵掃描的原理則分別與 S1和S2類同。

          程序2所示是掃描S1和S2的程序代碼。

          讀完代碼,大家是否覺得按鍵掃 描部分是不是少了點(diǎn)什么東西?呵呵, 對(duì)了,就是沒有延時(shí)去抖。剛開始自己 也覺得奇怪,沒有消抖程序怎么能正確 識(shí)別出按鍵呢?后來,請(qǐng)教了其他高手 之后才知道,由于程序簡(jiǎn)短,整體循環(huán) 周期短,按鍵按下后,若第一次沒掃 到,后一周期還可以掃到;即使受到抖 動(dòng)干擾,由于Wn的數(shù)據(jù)變化量很小, 對(duì)伺服電機(jī)轉(zhuǎn)角的改變影響并不大,故 消抖程序可以省去。 此時(shí)或許有人提出 : 是否可以 插入掃描按鍵釋放的代碼?關(guān)于這個(gè) 問題,本人也曾作過嘗試,發(fā)現(xiàn)在代 碼中插入釋放判別后,當(dāng)按鍵的按放 次數(shù)很少時(shí),伺服電機(jī)是看不出有轉(zhuǎn) 動(dòng)跡象的,只在按放次數(shù)達(dá)幾十次時(shí) 才有比較明顯的效果,這樣操作者會(huì) 感覺很累,原因是伺服電機(jī)轉(zhuǎn)角參數(shù) Wn的范圍是在500 ~2500之間。鑒于 此,我就試著將Wn的增幅加大一點(diǎn), 于是伺服電機(jī)達(dá)到了比較明顯的旋轉(zhuǎn) 效果,但旋轉(zhuǎn)精度卻會(huì)大打折扣,故 程序中未插入掃描按鍵釋放的代碼。 程序通過仿真后,就可以動(dòng)手制 作硬件電路了。

          PCB電路板的設(shè)計(jì)與制作

          圖 8所示是在DXP2004 SP2 下設(shè) 計(jì)的PCB,圖中,已將按鍵從主板中獨(dú) 立出來,兩塊板使用10針排線互聯(lián), 這樣就可以很方便地操作機(jī)械手。圖9 (a)和圖9(b)是PCB3D仿真的正反 兩面圖。

          由于電路很簡(jiǎn)單,我們可以直接 用"洞洞板"焊接,按圖紙施工,不 需半小時(shí)便可完成,注意把按鍵接線 引出,接到控制手柄上。本人找了只 廢舊的PS2游戲手柄改裝代用,只需用 到其中的8個(gè)按鈕,其余的可以去掉。 這樣既看起來美觀又用起來方便,如 圖10所示。

          完成后,用萬(wàn)用表檢查無誤,把 程序"灌"入芯片即可。至此,"山寨 版"機(jī)器手的軟硬件部分都完成了,接 著就可以著手加工機(jī)械零件了。

          機(jī)械部分的制作與調(diào)整

          機(jī)械部分零件大部分采用2mm厚 的黑色廣告用塑料板制作,為了提高板 材的機(jī)械強(qiáng)度,采取了雙板粘合的辦法 (粘合劑為氯仿),經(jīng)粘合后的板材, 強(qiáng)度大大增強(qiáng),估計(jì)可達(dá)單層的4~6 倍,為整機(jī)安全工作提供了足夠的保 證。為了減少零部件并減輕機(jī)器上部重 量,直接使用螺栓將伺服電機(jī)和板材進(jìn) 行組合,省去了伺服電機(jī)自帶的舵臂。 這樣既降低了重心,增大了穩(wěn)定度,又 減輕了伺服電機(jī)的負(fù)載。

          以伸縮臂與伺服電機(jī)組合為例, 簡(jiǎn)單介紹一下組合方法吧。首先,用 卡尺(最好用電子卡尺或帶表卡尺, 精確度高些)量出伺服電機(jī)輸出軸外 徑f a和內(nèi)徑f b,然后在單層側(cè)板上 合適的位置,按f a尺寸稍小開一圓 孔,使轉(zhuǎn)軸穿過圓孔時(shí),緊湊為宜。 注意,側(cè)板兩頭應(yīng)各開一孔,留一邊 待用;取另一未開孔單層側(cè)板B,在與 A側(cè)板相同位置上以fb稍大開孔,再 將A、B側(cè)板用氯仿粘合,待干后,一 塊具有較高強(qiáng)度的新側(cè)板C就誕生了。 再根據(jù)需要在側(cè)板中部打若干個(gè)組裝 孔,取一顆M3螺絲穿過側(cè)板f b孔把伺服電機(jī)輸出軸暫時(shí)固定,再往側(cè)板 fa孔中注入適量有機(jī)溶劑,使孔壁軟 化,收緊M3螺絲,使輸出軸與側(cè)板完 全配合,孔壁硬化后形成齒狀內(nèi)壁, 恰好與輸出軸緊密接觸,使側(cè)板能隨 軸轉(zhuǎn)動(dòng)。側(cè)板的另一頭也用相同的方 法,連接另一伺服電機(jī)。取另一個(gè)已 組裝單個(gè)伺服電機(jī)的側(cè)板,用合適長(zhǎng) 度的銅柱和若干M3螺絲將兩側(cè)板組裝 成臂體,組裝時(shí)注意同端的兩個(gè)伺服 電機(jī)轉(zhuǎn)角一致。擰緊螺絲,臂體就完 成了。 該機(jī)器手的其中一個(gè)伺服電機(jī)需 要使用雙輸出軸,而一般伺服電機(jī)底 部均無輸出軸,所以必須給它定造一 個(gè)"義軸",要求與原輸出軸同心。 截取一塊與伺服電機(jī)底部同等大小的 雙層塑料板D,在適當(dāng)位置鉆孔,注意 D板貼上伺服電機(jī)底部時(shí)孔要與輸出軸 同心,在任意一面上將孔擴(kuò)大(切不 可整孔都擴(kuò)),深度只需2mm左右, 用于藏入一個(gè)M3螺母,擴(kuò)孔畢,取 一個(gè)螺母和長(zhǎng)5mm的帶螺紋銅柱,擰 緊,"義軸"便做成了。

          采用相似的方法完成各部件后, 便可組裝成整體了。組裝完成以后, 還需作最后的整機(jī)測(cè)試,若伺服電機(jī) 初始化值和上下限值不適合,可以按 實(shí)際調(diào)試修改。確定后,將修改完的 源代碼編譯成bin或Hex文件,下載到 AT89C2051中。再找個(gè)合適的電源適 配器給它供電,至此,"山寨版"的 機(jī)器手工程順利竣工。圖11為完全手 工制作的"山寨版"機(jī)器手外形。

          功能測(cè)試

          機(jī)器完成后,本人做了些簡(jiǎn)易的 測(cè)試,主要是回旋范圍和夾持搬運(yùn)不 同物品的性能。

          1.回旋范圍測(cè)試 圖11測(cè)試左右旋轉(zhuǎn)范圍,圖12、 圖13是測(cè)試前后伸展距離。

          2.夾持不同物品搬運(yùn)測(cè)試 圖14是搬運(yùn)鉛筆測(cè)試,圖15是搬運(yùn)中的鐵皮罐。

          寫在后面的話

          我剛開始設(shè)計(jì)這個(gè)機(jī)器手時(shí)是仿 照國(guó)外的5個(gè)自由度的,后來因采購(gòu)的 伺服電機(jī)的輸出力矩不足(需要使用 大力矩的金屬齒輪伺服電機(jī)),而改 為 4個(gè)自由度,在圖11中能看到有些 "改造"的痕跡。制作機(jī)械部分時(shí)也 嘗試過使用亞克力板材,由于條件所 限,加工設(shè)備只有手鋸、銼刀和一把 電鉆,加工起來效果不佳,最后只好 放棄了亞克力,改用了現(xiàn)在所用的普 通塑料板。另外,程序設(shè)計(jì)時(shí),編寫 了兩個(gè)方案,一個(gè)見上文,另一個(gè)方 案見源代碼,可到www.radio.com.cn 上下載,其原理也不復(fù)雜,請(qǐng)有興趣 的讀者可自行分析。

          伺服電機(jī)相關(guān)文章:伺服電機(jī)工作原理




          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();