Robofun 機器人論壇

標題: [求助]四軸機械手臂 [打印本頁]

作者: sky4012    時間: 2006-8-17 23:31
標題: [求助]四軸機械手臂
目前正在做四軸機械手臂,遇到了一些問題,想請各位大大幫忙一下,用8051晶片去控制,程式是C語言,問題如下
1.用開關控制方向時轉速有點快,想要改慢一點,不過我不知道變慢的辦法
2.當手臂往前和往下移動時,不知道是馬達不夠力還是怎樣,已經停止了還會自己慢慢的往下滑動,沒辦法讓它定點
3.每次啟動手臂的電源時,控制方向的開關還未開始按就會自己先移動一下

手臂是買套件組的,開關是自己另外焊接上去的,馬達用的是廣達S03T,夾子部分則是naro的。
目前要控制他去夾住東西還是有點困難,因為轉動的有點快,每次要夾東西都要調很久才可以夾到東西,
下次應該會拍個手臂動作的實際情況,到時候在放上來給大大們檢查

目前線控算是成功不過還有很多瑕疵的地方要改進,接著打算改成無線遙控的

想再問一下塑膠齒輪的馬達是不是很容易壞掉呀!因為已經玩壞了兩顆馬達了==

程式
http://homelf.kimo.com.tw/chening951/t1.txt


手臂照片


控制方向的開關

作者: marbol    時間: 2006-8-18 09:10
原帖由 sky4012 於 2006-8-17 23:31 發表
目前正在做四軸機械手臂,遇到了一些問題,想請各位大大幫忙一下,用8051晶片去控制,程式是C語言,問題如下
1.用開關控制方向時轉速有點快,想要改慢一點,不過我不知道變慢的辦法
2.當手臂往前和往下移動時,不 ...

sky4012大大~~~~~~


基本上那個程式相當簡潔,很容易入手,不過,不能讓p1輸出腳持續輸出pwm訊號,所以只有按下控制紐時,對應的伺服機才會有動作出現~~~~~所以會出現您說的"當手臂往前和往下移動時,不知道是馬達不夠力還是怎樣,已經停止了還會自己慢慢的往下滑動,沒辦法讓它定點"
以及"每次啟動手臂的電源時,控制方向的開關還未開始按就會自己先移動一下"
要讓p1輸出腳持續輸出pwm訊號,只有改程式了~~~~~原理請參考
http://www.robofun.net/forum/viewthread.php?tid=232&extra=page%3D1&page=3


而這個程式把伺服機正逆轉已經定死正轉到底與逆轉到底兩種動作,如果要調整速度的話,試試看(200-DEA)與(200-DEB)改成(500-DEA)與(500-DEB),就是把200自行往上調整,不過扭力會有變小的傾向~~~~(或許可以考慮把200這個位置設成變數,然後由外部透過串列傳輸來改變這個變數值藉以觀查調整不同數值對轉動速度的影響)

您確定看看是伺服機齒輪壞還是伺服機內部電路燒壞了,齒輪壞的話可以訂零件來換或者改成金屬齒來用~~~~~內部電路燒壞的話,只有送修或者買新的來用了!!!S03T2BBMG這顆比S03T多了軸承與金屬齒,算是那個系列最勇的啦!!!

[ 本帖最後由 marbol 於 2006-8-19 20:36 編輯 ]
作者: iwill920ya    時間: 2006-8-18 09:46
我玩這一台..目前依然健在..沒有崩齒或燒壞的情形..而且動作順暢..你可以參考一下(影片中的已賣出..現在可機受訂做)
=============================

nt 6600

可來信索取示範短片
   iwill920ya@yahoo.com.tw

顏色可訂做

專題的最佳拍檔

整體採用3mm壓克力雷射切割..
搭載廣營so3T x 2 and micro x 2 ..
去買servo時都是請店員把servo全部拿出來..
然後用自己做的servo測試器做測試...不通過的就淘汰..
因此我買的servo品質會比較穩定...比較不會用沒2下就壞掉

6軸可動

每顆servo可轉180度

靈活度高

夾爪採對稱式齒輪結構...

約可夾起200g物體

(ps--不含控制設備)

[ 本帖最後由 iwill920ya 於 2006-9-5 09:25 編輯 ]
作者: sky4012    時間: 2006-8-18 23:00
原帖由 marbol 於 2006-8-18 09:10 發表
基本上那個程式相當簡潔,很容易入手,不過,不能讓p1輸出腳持續輸出pwm訊號,所以只有按下控制紐時,對應的伺服機才會有動作出現
要讓p1輸出腳持續輸出pwm訊號,只有改程式了~~~~~原理請參考
http://www.robofun.net/forum/viewthread.php?tid=232&extra=page%3D1&page=3

謝謝marbol大大

這個程式的確非常簡潔,因為我還是初學者,太深的程式看不太懂,當初花了兩個禮拜的時間才讓馬達能夠正反轉。話說還是不太懂他的角度是怎麼計算的。

那個pwm訊號圖很難參透的說,恕我沒有慧根,圖中的意思是假設我有四個pwm要控制的話,當第一個sever1(p1.0)動作為low的時候,sever2(p1.1)讓他為2ms的H,當為low時就換另一個sever動作,然後一直重複循環,是這樣的意思嗎?
那這樣的話是不是等於預設馬達的動作了。

這個套件買來的時候,廠商是有提供VB的控制介面如圖http://homelf.kimo.com.tw/chening951/1.JPG
可以調整四顆馬達的角度,選好要的角度後,再放到93C66這顆記憶體裡面,總共可以預設40種動作。
因為當初老師要我們做這個的時候,希望我們把組合語言改成C語言,後來因為我真的不會VB這個程式,因為我沒學過,也不是很懂vb如何跟8051去做配合,而且組合語言已經有兩年沒碰過了所以早就忘記了。所以廠商提供的8051組合語言程式其實我也看不懂因為沒有註解。然後覺得每次機械手臂要去夾東西的時候都要自己去vb那裡調整,這都是預設的動作,而且東西部可能固定放在同個位子,所以覺得這樣設計很麻煩,乾脆改成線控的好了,我上的時候他就上,下就下,夾東西就夾東西,能讓我自由的去控制,所以程式才被我寫成只有按下控制紐時,對應的伺服機才會有動作出現

真的很抱歉,我的慧根真的很差,如果那個pwm訊號我解釋錯誤的話,請一定要糾正我,因為今天跟同學討論後,我們也還是不是很懂,我一直卡在是每個sever輪流轉動,還是單顆sever不段的送出脈波這裡。要是單顆sever不斷送出脈波的話,當我開關往上移一下的話是不是就會一直往上跑,例如我給2ms五個週期,直到五個週期結束他才停止。

今天也把手臂夾住東西的影片給拍好了,不過檔案有點大40多M,背景聲音有點吵,請大大不要介意
http://ocean951.myweb.hinet.net/MOV00507.MPG

這是經過幾次練習後好不容易才夾住的,今天早上才剛把夾子那顆naro馬達換過,結果不到兩個小時又被我們用壞掉了,真的是非常脆弱呀!拆下後是齒輪崩掉了,然後我們就拿舊的那顆好的齒輪跟新的換,現在免強可以夾輕的東西,太重的夾不動。

真是不好意思了,日後可能還有很多問題,而且問題可能會讓大大想打我,因為很多基礎的東西其實我還不是很明瞭。尤其是硬體上面的東西我比較沒辦法,所以硬體部分是同學負責的,程式則是我負責的,不過程式撰寫上也需要硬體同學非常明確的告訴我要做什麼我才能寫出來,因為有時後腦袋會打結。

iwill920ya大大
您說的對這顆naro齒輪脆弱,所以今天新的又玩壞掉了
您建議在程式前面加入帶機程式這個會試看看,至於購買新的一台,目前沒有預算,因為本身這台是學校提供的,經費有限呀!
作者: marbol    時間: 2006-8-19 20:14
原帖由 sky4012 於 2006-8-18 23:00 發表


謝謝marbol大大

這個程式的確非常簡潔,因為我還是初學者,太深的程式看不太懂,當初花了兩個禮拜的時間才讓馬達能夠正反轉。話說還是不太懂他的角度是怎麼計算的。

那個pwm訊號圖很難參透的說,恕我沒有慧 ...


"那個pwm訊號圖很難參透的說,恕我沒有慧根,圖中的意思是假設我有四個pwm要控制的話,當第一個sever1(p1.0)動作為low的時候,sever2(p1.1)讓他為2ms的H,當為low時就換另一個sever動作,然後一直重複循環,是這樣的意思嗎?
那這樣的話是不是等於預設馬達的動作了。"

的確,只有這樣持續輸出PWM才能維持伺服機的扭力與角度,才不會發生您控制另一顆伺服機,而這一顆伺服機滑走的現象~~~順帶一提的是,伺服機不像步進馬達,步進馬達是一組脈波序列轉動一下,伺服機則是靠改變PWM的寬度來控制它的角度,要維持角度則要持續輸出PWM給伺服機~~~~~

"預設馬達的動作"~~~也沒錯~~~您可以想想怎麼改變這個困境~~~一定要有額外的"手"去做這件事 ,這額外的"手"就是在程式內加一個中斷,裡面包含我常講的"命令格式解碼程式",把我們要控制的哪個伺服機,要何種角度的字串丟給這個"命令格式解碼程式"處理後,自然就會改變"預設馬達的動作"了~~~ ,到這裡其實您也不知不覺進入儀控的領域了~~~~
http://www.robofun.net/forum/viewthread.php?tid=232&extra=page%3D1&page=5

到底能夾多重,舉多重~~其實可以看看伺服機的扭力規格值(kg-cm),然後配上槓桿原理,粗估一下,畢竟簡單的物理還是可以幫我們算一下選用的伺服機或者是使用的極限,不要把伺服機操過度囉!要好好愛惜它喔!

其它的問題不妨爬爬網站內的基礎文章(ayu),只有基礎觀念打好,軟硬體整合才會有感覺,加油囉!!






[ 本帖最後由 marbol 於 2006-8-19 21:12 編輯 ]
作者: sky4012    時間: 2006-8-21 16:41
原帖由 marbol 於 2006-8-19 20:14 發表

"預設馬達的動作"~~~也沒錯~~~您可以想想怎麼改變這個困境~~~一定要有額外的"手"去做這件事 ,這額外的"手"就是在程式內加一個中斷,裡面包含我常講的"命令格式解碼程式",把我們要控制的哪個伺服機,要何種角度的字串丟給這個"命令格式解碼程式"處理後,自然就會改變"預設馬達的動作"了~~~ ,到這裡其實您也不知不覺進入儀控的領域了~~~~
http://www.robofun.net/forum/viewthread.php?tid=232&extra=page%3D1&page=5

其它的問題不妨爬爬網站內的基礎文章(ayu),只有基礎觀念打好,軟硬體整合才會有感覺,加油囉!!

真是越來越複雜了。如果一定得連續送出脈波才能維持那個角度的話,我就得知道當我用開關轉動方向時他轉了幾度,這可真是個難題呀!目前是有一個想法,就是讓馬達每次轉動10度,每轉一次度數就計數一次,到最後我開關停止後就連續送出最後計數那次角度的脈波。不過不知道可行嗎?說是很簡單,不過寫起來卻很難。

ayu大大的文章我有去讀過,目前還在慢慢吸收當中,最近腦袋被卡住了,所以理解的很慢。

同學叫我別再想那個滑動的問題,直接做下一步無線遙控的,問一下接收部分是不是要運用到8051的串列埠,若是的話我可能要在去研讀一下8051的書了,因為串列埠應用我還不太會。

滑動問題我會努力想想該如何判斷我開關放掉後他到底已經跑到哪一個角度去了。

謝謝大大~我會繼續努力的。
作者: marbol    時間: 2006-8-21 18:08
原帖由 sky4012 於 2006-8-21 16:41 發表

真是越來越複雜了。如果一定得連續送出脈波才能維持那個角度的話,我就得知道當我用開關轉動方向時他轉了幾度,這可真是個難題呀!目前是有一個想法,就是讓馬達每次轉動10度,每轉一次度數就計數一次,到最後我 ...


嗯!!很有意思的想法,每按一次開關就在程式內累加(DEA=DEA+10)或累減(DEA=DEA-10).這樣的確可以在不更動硬體的情形下做出寸動正轉或逆轉的效果~~~~~~不過要記得伺服機的pwm脈波"H"範圍在1ms~2ms之間

下列網頁希望對您理解伺服機與控制訊號的關係有幫助
http://www.mh.ttu.ee/risto/rc/electronics/radio/signal.htm

無線控制的部份請參考
http://www.robofun.net/forum/viewthread.php?tid=521&extra=page%3D1
作者: sky4012    時間: 2006-8-23 22:34
謝謝marbol 大大
目前還在努力中~
如果有進展的話再來回報~
謝謝~
作者: sky4012    時間: 2006-9-2 11:25
花了一個禮拜多做出了無線控制的~以下是無線控制的圖

接收模組


接收模組解碼IC,使用了兩顆解碼IC,因為一顆只能控制四個方向,我們有八個所以用了兩組


發射模組,焊上去才想到要拍照所以只能免強照下來了,同樣用了兩顆編碼IC,原因也是八個方向


接收模組與手臂結合


整體加開關盒,把發射模組的板子藏在盒子裡面,這樣看起來比較美觀


程式,沒有多大的變化,只有加入接收模組VT腳的判斷
http://homelf.kimo.com.tw/chening951/noline.txt

marbol大大
目前我還是沒寫出我計畫的那個每次轉動10度的程式。
現在速度有變慢,不過被組員把脈波寬度從20改成80ms,我們改過50ms不過還是轉的太快,但是我卻覺得改成80ms不是很好,因為當手臂呈現平行時,要往上拉時會不夠扭力,所以目前還是計畫看是否能夠將成寫成每次都轉10度。

因為老師希望我們做出智慧型來,不過目前沒有智慧型的功能,老師是希望我們能讓馬達自動判斷要轉幾度角,例如當我不小心過頭太右邊,待會開關往左邊時他會變慢。但是提出來的寫法很奇怪,第一次轉快,第二次就變慢,接著越來越慢,組員提出來的寫法也很奇怪,是用脈波去控制他的快慢,第一次20ms第二次乘2第三次乘3,這樣我覺得很奇怪,感覺上好像很容易使馬達壞掉的樣子,因為扭力一下大一下小的,而且動作感覺更奇怪,往左就會變成快慢慢,往又也會變成快慢慢,這樣好像無法達到我們想要的效果吧!

如果要他判斷該變快或變慢,應該還要在手臂上加上感應器這類東西吧!他才有辦法自己判斷何時該快該慢,若是照組員那種寫法應該達不到吧!除非開關有加速或減速的效果,這樣才能讓我自己想控制他快或是慢吧!但是卡在加速和減速該如何著手。記憶中遙控車好像可以加速和減速,當我搖桿往前到底就會越來越外,越往中間移速度就比較慢,不過還不知道是怎樣辦到的。不知道是否能用遙控車那種開關使手臂達到加速或減速的效果,我們目前使用的那種彈跳開關我不知道是否能做到。

現在卡再讓他自己判斷。有組員提議做聲控的,不過聲控算是智慧型的一種嗎?因為覺得感應的有很難。
老師原本還說要裝個ccd來讓他自己判斷,不過ccd應用太過難了,組員說用紅外線那種的會比較簡單。
有什麼演算法能讓他自己判別快或慢嗎?我總覺得還是要配合感應器才能辦到才對。

這次又遇到難題,目前還在加緊想辦法寫出之前的計畫。若再有進一步消息或問題會在提出來。
作者: doubletime    時間: 2006-9-2 18:49
sky4012大大你好,可否請教一下你的機構是怎麼做的?
想copy你的機構我改用dspic來做一台
dspic單純控制伺服馬達是非常容易的 而且不會脈波不持續的問題,除非中斷改變脈長度
希望可以互相切搓一下
謝謝
作者: uucww    時間: 2006-9-3 05:50
sky4012 大大.....
http://homelf.kimo.com.tw/chening951/noline.txt
請問這組是哪一種晶片適合的燒入的!!!??
照片上感覺像是AT89C2051小顆的晶片....體積小性能好!!
謝謝....看見您的實驗作品....相當成功!!加油!!!感恩!!

/*無線成功*/
#include<reg51.h>


sbit pub = P1^0;  //底座伺服機控制左右轉
sbit pur = P1^1;  //右邊伺服機控制前後
sbit pul = P1^2;  //左邊伺服機控制上下
sbit pug = P1^3;  //伺服機夾子
sbit vt1 = P1^4;   //接收模組致能控制信號1
sbit vt2 = P1^5;   //接收模組致能控制信號2

sbit k1 = P0^0;
sbit k2 = P0^1;
sbit k3 = P0^2;
sbit k4 = P0^3;
sbit k5 = P0^4;
sbit k6 = P0^5;
sbit k7 = P0^6;
sbit k8 = P0^7;

#define DEA 3    //右邊脈波時間0.3ms
#define DEB 25   //左邊脈波時間2.5ms

/* 0.1ms (93*1.08057us) */
void del(int p)
{
        while(p>0)
        {
                TR0=1;
                TH0=(256-93);
                TL0=(256-93);
                while(TF0!=1);
                TF0=0;
                p--;
         }
         TR0=0;
}

//右轉程式
pu_right()
{               
                int low=800-DEA;
                pub=1;
                del(DEA);
                pub=0;
                del(low);
               
}

//左轉程式
pu_left()
{
        int low=800-DEB;
        pub=1;
        del(DEB);
        pub=0;
        del(low);               
}

//後
pu_back()
{               
                int low=800-DEA;
                pur=1;
                del(DEA);
                pur=0;
                del(low);
        
}

//前
pu_for()
{
        int low=800-DEB;
        pur=1;
        del(DEB);
        pur=0;
        del(low);               
}

//下
pu_down()
{               
                int low=800-DEA;
                pul=1;
                del(DEA);
                pul=0;
                del(low);
        
}

//上
pu_up()
{
        int low=800-DEB;
        pul=1;
        del(DEB);
        pul=0;
        del(low);
}

//夾
pu_close()
{               
                int low=600-DEA;
                pug=1;
                del(DEA);
                pug=0;
                del(low);
        
}

//開
pu_open()
{
        int low=600-DEB;
        pug=1;
        del(DEB);
        pug=0;
        del(low);
}

//接收
rx1()
{
                        if(k1==0){        pu_right(); return;} //開關1控制右轉
                        if(k2==0){        pu_left();  return;} //開關2控制左轉
                        if(k3==0){        pu_for();   return;} //開關3控制前
                        if(k4==0){        pu_back();  return;} //開關4控制後
               
}               

rx2()
{
                        if(k5==0){        pu_up();    return;} //開關5控制上
                        if(k6==0){        pu_down();  return;} //開關6控制下
                        if(k7==0){        pu_open();  return;} //開關7控制開
                        if(k8==0){        pu_close(); return;} //開關8控制夾
}
/*--------------------------------*/
main()
{        
        
        
                while(1)
            {        
                          TMOD=0x02;
                        if(vt1==1) rx1();  //第一組接收
                        if(vt2==1) rx2();  //第二組接收                                
                }
        
}

[ 本帖最後由 uucww 於 2006-9-3 07:32 編輯 ]
作者: sky4012    時間: 2006-9-4 11:05
原帖由 doubletime 於 2006-9-2 18:49 發表
sky4012大大你好,可否請教一下你的機構是怎麼做的?
想copy你的機構我改用dspic來做一台
dspic單純控制伺服馬達是非常容易的 而且不會脈波不持續的問題,除非中斷改變脈長度
希望可以互相切搓一下
謝謝

您說的是機械手臂的結構嗎?很抱歉那個手臂是買現成的喔~只有線控和無線控制版是自己焊接的~

uucww大大
那個晶片是AT89C51的
目前還在想怎麼讓他變成智慧型的手臂
我會繼續加油的
作者: doubletime    時間: 2006-9-4 18:35
要不要考慮加個顏色感應器,最簡單的就是把前方放一張白紙,物體用黑色包起來,可以自動去抓此物體
僅供參考
作者: marbol    時間: 2006-9-6 18:29
原帖由 sky4012 於 2006-9-2 11:25 發表
花了一個禮拜多做出了無線控制的~以下是無線控制的圖

接收模組
接收模組解碼IC,使用了兩顆解碼IC,因為一顆只能控制四個方向,我們有八個所以用了兩組

如果要他判斷該變快或變慢,應該還要在手臂上加上感應器這類東西吧!他才有辦法自己判斷何時該快該慢,若是照組員那種寫法應該達不到吧!除非開關有加速或減速的效果,這樣才能讓我自己想控制他快或是慢吧!但是卡在加速和減速該如何著手。記憶中遙控車好像可以加速和減速,當我搖桿往前到底就會越來越外,越往中間移速度就比較慢,不過還不知道是怎樣辦到的。不知道是否能用遙控車那種開關使手臂達到加速或減速的效果,我們目前使用的那種彈跳開關我不知道是否能做到。

現在卡再讓他自己判斷。有組員提議做聲控的,不過聲控算是智慧型的一種嗎?因為覺得感應的有很難。
老師原本還說要裝個ccd來讓他自己判斷,不過ccd應用太過難了,組員說用紅外線那種的會比較簡單。
有什麼演算法能讓他自己判別快或慢嗎?我總覺得還是要配合感應器才能辦到才對。

這次又遇到難題,目前還在加緊想辦法寫出之前的計畫。若再有進一步消息或問題會在提出來。
h ...

1.其實只要加一顆(16對4編碼器ic),就可以控制十六個方向囉!!
2.遙控器搖桿,其實就是電位計,依照搖桿的變動幅度,對應PWM訊號的duty cycle的變化,就可以產生加減速的現象,不過這是用在動力馬達的速度控制上,而對於伺服機,對應PWM訊號的duty cycle的變化,產生的是角度變動的現象,基本上您採用的彈跳開關不是0就是1,無法產生"步階"的效果,要做到加速或減速雖不是很容易,但還是可以在程式內加入計時中斷加上遞增或遞減功能的方式來模擬產生~~~~~

3.為什麼要需要用感測器來判斷快慢呢??基本上只要發出PWM訊號就可以直接控制手臂的動作,這種開迴路的控制方式,並不需要感測器來進行回授控制,就如同步進馬達的控制一樣(不過步進馬達可以透過加減速曲線的規劃以及定位點的輔助,來進行開迴路控制速度跟位置,而伺服機據說可以控制速度跟角度,只不過伺服機的速度控制方法還需要研究看看如何做到)

4.如果要自動夾取放在某個位置的東西,就需要有判斷東西的位置的感測器,可以用超音波或者加上顏色判斷的影像感測器,這是一個很有挑戰性的整合性專題喔!!

[ 本帖最後由 marbol 於 2006-9-10 08:59 編輯 ]
作者: uucww    時間: 2006-9-8 14:21
原帖由 sky4012 於 2006-9-4 11:05 發表


您說的是機械手臂的結構嗎?很抱歉那個手臂是買現成的喔~只有線控和無線控制版是自己焊接的~

uucww大大
那個晶片是AT89C51的
目前還在想怎麼讓他變成智慧型的手臂
我會繼續加油的

sky4012大大....請問可否提供電路圖....我想深入研究這程式功能....謝..感恩!!
智慧型機器人手臂....屬於最高境界發展....小弟我在此為您加油!!!加油!!!

[ 本帖最後由 uucww 於 2006-9-8 14:23 編輯 ]
作者: sky4012    時間: 2006-9-15 16:49
原帖由 uucww 於 2006-9-8 14:21 發表


sky4012大大....請問可否提供電路圖....我想深入研究這程式功能....謝..感恩!!
智慧型機器人手臂....屬於最高境界發展....小弟我在此為您?

抱歉我沒有電路圖耶~我們做好後都沒畫電路圖~
我也不太會畫電路圖~如果我畫的出來的話在補上來~

感謝各位大大提供的意見~目前我們做到這裡就停擺了~組員們好像不想繼續做下去了~
我們的題目單晶片為基礎之智慧型演算法設計~所以老師才一直要我們用出智慧型~
希望我們能加上一些模糊邏輯的演算方法~讓手臂能夠自行判斷~
不過我們也沒學過什麼模糊邏輯~搞的我們完全一頭霧水~
目前還在努力中~~




歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2