Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 24972|回復: 63
打印 上一主題 下一主題

roboot >>>>S-O-S

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-7-27 14:33:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
以下是小弟製作ㄉroboot!!


以下是roboot的vb控制端!!

所使用的晶片是89c52運用串列圖形控制經rs-232輸出訊號給52再由52的輸出端給予roboot動作!!
晶片的程式是運用ayu大大的ssc程式..可是測試的時候發現問題嚕!!?
1.再連接ㄉ時候pc端上正確的顯示了與連接阜連接了!!可是動作都一直送不出去@@不知是不是程式有寫錯了!!???
2.再連接上電源後,馬達會自行轉動半圈!!不隻是否屬於正常現象???
3.電源連接上51後,過幾分鐘會發燙!!而且我ㄉ電源是使用5V+(pc的power),不知是出了啥原因嚕!!!??
請問各位高手大大有過類似得經驗嗎!>>請問該如何解決呢????
2#
發表於 2007-7-27 20:01:04 | 只看該作者
你的機械人好像做得不錯啊!!發大一點的圖可以嗎?
單憑這些描述很難推測是那裡出問題的。依我小小的經驗,應該把問題反過來想。
那些部份你有測試過肯定沒有問題的?步驟如下:
1. 你的電腦資料輸出至 rs232 埠是否正確。我便試過 com1 是壞的,而要用 com2。可以用 hyperterminal 配合 loop back cable(把 rs232 的 2號和3號腳直接接上) 測試。可以參考這個文件 http://www.8052.com/users/jonled/RS232gd.pdf
2. 89c52 的電路是否正確。我也有使用89s52的經驗,但你的描述說會發盪,我覺得是不正常的。應再次確定電路的接駁是否有錯。
3.  再接駁電源後可以轉半圈。這也很難知道是怎樣一回事的。最徹底的辦法是在示波器上看看它輸出的波形是否正常。有示波器便最理想了,可以確定輸出無誤。如果沒有也可以用聲效卡配合免費的軟件做到相同的效果。我便試過波形正常但伺服機不動的情況,但因我肯定沒有錯最後便試出原來該款伺服機需要較大的訊號電流;要有上拉電阻才可以的。
聲效卡示波器 可以參考這個 http://hk.myblog.yahoo.com/My-DIY/article?mid=24&fid=10
希望你能快些找到原因,做到會動的機械人吧 !!

[ 本帖最後由 irobot 於 2007-7-27 20:39 編輯 ]
3#
 樓主| 發表於 2007-7-27 21:00:50 | 只看該作者
小弟是在麵包板上測試低!!
不過我應該沒有把電源獨立出來...就是晶片的電源和伺服機的電源是共用的@@
現在就是引用了ssc程式...再加上rs232的控制宣告配合pc端給予控制..
請問上拉電阻是否.....>提升電阻,是否跟製作跑馬燈一樣在訊號線上串接電阻呢???
4#
發表於 2007-7-27 23:16:35 | 只看該作者
我也不知道 external pull up 是否叫上拉電阻,只是直譯罷了。就是把+5V 經電阻接駁至c51的輸出腳的意思。
一般伺服機是不需要的,但用在MG995上則需要。如果 ssc 程式是經過其他人驗証的,應該程式本身是沒有問題的。但你要確定使用的 MCU 是否一樣是 c51 系列,和使用晶體的頻率是否一樣。但就算程式有錯,MCU 本身也不會發盪的。所以我懷疑你的線路在接駁上是否有些少誤差呢?當然這是一種推測,因為不知你的線路和實際接駁的情況。
至於共用電源,我的經驗是用89c2051同時接駁6個 futaba s3003 伺服機是完全沒有問題的。
這是我最早期測試3個servo 的畫面:http://hk.myblog.yahoo.com/My-DIY/article?mid=14&fid=9
我想用獨立電源應可進一步排除其它影響因素,可以的話亦不妨一試。
=========================================================
剛看了你說的ssc電路,應該很簡單的。按理不應該駁錯。但可以的話不妨拍個實物參考一下。
至於它的程式好像也沒有很完整的提供(而不知是用12MHz還是11.0592MHz,不過這應該不是主要的因素),不如你發你的出來讓其它高手給你看一下吧。我對彙編語言則不是太懂的,應該幫不上忙了。

[ 本帖最後由 irobot 於 2007-7-28 00:24 編輯 ]
5#
發表於 2007-7-30 08:37:34 | 只看該作者
6#
 樓主| 發表於 2007-7-30 10:45:33 | 只看該作者
請問iroboot大大!!!
我再您的板上有看到一篇也適用232作控制的介面!!
請問您適用什麼atmeag的哪一行晶片作控制的押!!~~??
還有您的程式是怎麼編寫的呢....??
7#
發表於 2007-7-30 10:49:53 | 只看該作者
針對你的問題1,可做簡單的test
找台有2個com port的電腦來做debug平台
com1 使用vb,com2 使用 終端機,將com1  與com2   的tx 、 rx  互接tx接rx,rx接tx,即便知道你是否有傳出資料,如沒有即是ssc出問題,如正常,即51端有問題
如51端出問題,接51之tx 與電腦端rx 相接,rx端正電腦端tx 相接,開啟終端機,觀看你51送出的資料,即便知道51到底有沒有正常在動作了

external pull up 我比較喜歡叫提升電阻,原因是把輸出做成開集極的話,可以增加輸出能力,且51也不必受大電流而增加製程的負擔
因你接的是電腦的5v,有可能在power supply 供應電流不足的情況下導至51需呈受power supply 電源不穩定的負擔,可接示波器看5v 是否真為直流,或是處在1個漣波的情況下,另外就是irobot大大使用的是電池,只要電池有電的情況,當然驅動不會受影響,充電電池的輸出能力非常夠力
話說assembly我也不熟,so 我只能提出對你有問題有看法而已
8#
 樓主| 發表於 2007-7-30 11:17:10 | 只看該作者
這是我51里的晶片程式...是用組合語言寫的
不知加入vb端得接收是否正確..
還有51的接收鮑率是否設定在1200這個值會比較好.....!!!
#ps:<這是與PC端連接控制SEVER MOTOR的程式>引用ssc程式
PWM0            EQU    40H                  
PWM1            EQU    41H                  
PWM2            EQU    42H                  
PWM3            EQU    43H                  
PWM4            EQU    44H                 
PWM5            EQU    45H                  
PWM6            EQU    46H                  
PWM7            EQU    47H                  
COUNT          EQU    37H
CUT            EQU    39H
PIN            EQU    51H
PWM            EQU    52H
PIN1           EQU    53H
                       ORG         00H
        JMP     START
                  ORG   23H
        JMP     INTERR
                  ORG         0BH
        JMP    T0_INT                          
                  ORG         30H
START:
        MOV     SP,#70H
        MOV     R1,#20H
        MOV     21H,#00H
        MOV     IE,#10010000B
        MOV     SCON,#01110000B
        MOV     TMOD,#00100000B
        MOV     TH1,#0f3H
        SETB          TR1
        SETB    EA
        SETB    ET0            
        SETB    ET1                           
        MOV     CUT,#0         
        MOV     COUNT,#0                     
        MOV     PWM0,#12     
        MOV     PWM1,#12
        MOV     PWM2,#12
        MOV     PWM3,#12
        MOV     PWM4,#12
        MOV     PWM5,#12
        MOV     PWM6,#12
        MOV     PWM7,#12
INTERR:
        PUSH    A
        JBC     T0,T0_INT
        JNB     RI,$
        CLR     RI
        MOV     A,SBUF
        MOV     21H,A
        XRL     A,#40H
        JZ      C0
        MOV     A,21H
        XRL     A,#41H
        JZ      C1
        MOV     A,21H
        XRL     A,#42H
        JZ      C2
        MOV     A,21H
        XRL     A,#43H
        JZ      C3
        MOV     A,21H
        XRL     A,#44H
        JZ      C4
        MOV     A,21H
        XRL     A,#45H
        JZ      C5
        MOV     A,21H
        XRL     A,#46H
        JZ      C6
        MOV     A,21H
        XRL     A,#47H
        JZ      C7
        MOV     A,21H
        JZ      STOP
        RETI   
MAIN:
     
              LCALL  OUT           
              LJMP MAIN

DEL_H:                                    

        MOV R7,#1  
L7:
        MOV R6,#2  
L6:
        MOV R5,#17        
        DJNZ R5,$  
        DJNZ R6,L6
        DJNZ R7,L7  
        RET

PWM_WIDTH:
                  MOV  COUNT,@R0
LOOP1:     
           SETB TR0
           JNB  TF0,$
           CLR  TR0
           DJNZ COUNT,LOOP1         
           CLR  TR0
           MOV  CUT,#0        
           INC  R0
           RET
OUT:
           MOV    R0,#40H        
C0:        
           SETB   P1.0
           MOV    R7,#10        
           LCALL  DEL_H
           LCALL  PWM_WIDTH
           CLR    P1.0
C1:     
           SETB   P1.1
           MOV    R7,#10         
           LCALL  DEL_H
           LCALL  PWM_WIDTH
           CLR    P1.1
C2:      
           SETB   P1.2
           MOV    R7,#10         
           LCALL  DEL_H
           LCALL  PWM_WIDTH
           CLR    P1.2
C3:        
           SETB   P1.3
           MOV    R7,#10         
           LCALL  DEL_H
           LCALL  PWM_WIDTH
           CLR    P1.3
C4:        
           SETB   P1.4
           MOV    R7,#10         
           LCALL  DEL_H
           LCALL  PWM_WIDTH
           CLR    P1.4
C5:      
           SETB   P1.5
           MOV    R7,#10         
           LCALL  DEL_H
           LCALL  PWM_WIDTH
           CLR    P1.5
C6:        
           SETB   P1.6
           MOV    R7,#10         
           LCALL  DEL_H
           LCALL  PWM_WIDTH
           CLR    P1.6
C7:        
           SETB   P1.7
           MOV    R7,#10         
           LCALL  DEL_H
           LCALL  PWM_WIDTH
           CLR    P1.7
           SETB   TR1
           RET
STOP:
           MOV    P1,#FFH
           MOV    20H,#5AH
           AJMP   T0_INT
T0_INT:
           PUSH  A
           PUSH  PSW
           CLR   TR0
           MOV   TH0,#>(25536-40)
           MOV   TL0,#<(25536-40)
           INC   CUT
           SETB  TR0
           POP   PSW
           POP   A
           RETI
           END
9#
發表於 2007-7-30 11:40:42 | 只看該作者
還有一點我忘記了說,電腦的 rs232 是不能直接接駁到 c51 的 pin10 , pin11 的。因原來的電腦圖並沒有包括 電壓轉換 的電路,我希望你有自行加入這個 level converter (電平轉換) 的部份吧。
(註:一般 mcu 的邏輯0用0V表示、 邏輯1用+5V表示 (TTL電壓)。但 rs232標準是用在較遠距離的數據傳送上,一般邏輯0為+15V、而邏輯1用 -15V。所以在接駁時是需要做電壓轉換的。rs232 to TTL converter,可用 max232 ic 或 用電阻和3極管取代)
可以參考這個:
max232 / dallas ds275 : http://www.kmitl.ac.th/~kswichit%20/MAX232/MAX232.htm
transistor method :       http://www.kmitl.ac.th/~kswichit%20/ap275/ap275.htm
rs232標準詳細資料 :      http://www.hw-server.com/rs232  

==============================================================
我試驗過的 mcu 有 2 個系列:
1.  51 系列有:89c2051、at89s52(與 c51 的性能是相同的)
2.  avr 系列有:atmega16、atmega48
由於我不太懂 assembly (彙編) ,所以都是用 C 寫的。其實都是用相同的邏輯去寫的。
主要是用1個計時器作 17.5ms 計時,剩餘的 2.5ms 則用 n 個 for-loop 去計時。 n 等於伺服機的數目。
首先要把伺服機的轉向角度(高電平時間)由小至大排序,然後找出每個之間的差值(這個數據是最重要的)。
每個 for-loop 的循環次數正好按之前計算的差值設定(當然要按剛才的順序)。視乎不同mcu的資源,這樣便可以同步控制很多的伺服機了。
可參考這個:http://hk.myblog.yahoo.com/My-DIY/article?mid=376&fid=9
(89c2051=13 servos 、 c52/s52 =20 servos 、 atmega48 = 21 servos 、 atmega16 = 24 servos)

[ 本帖最後由 irobot 於 2007-7-30 12:35 編輯 ]
10#
發表於 2007-7-30 11:50:18 | 只看該作者
原帖由 irobot 於 2007-7-27 23:16 發表
我也不知道 external pull up 是否叫上拉電阻,只是直譯罷了。就是把+5V 經電阻接駁至c51的輸出腳的意思。
一般伺服機是不需要的,但用在MG995上則需要。如果 ssc 程式是經過其他人驗証的,應該程式本身是沒有問題的。但你要確定使用的 MCU 是否一樣是 c51 系列,和使用晶體的頻率是否一樣。但就算程式有錯,MCU 本身也不會發盪的。所以我懷疑你的線路在接駁上是否有些少誤差呢?當然這是一種推測,因為不知你的線路和實際接駁的情況。
至於共用電源,我的經驗是用89c2051同時接駁6個 futaba s3003 伺服機是完全沒有問題的。
這是我最早期測試3個servo 的畫面:http://hk.myblog.yahoo.com/My-DIY/article?mid=14&fid=9
我想用獨立電源應可進一步排除其它影響因素,可以的話亦不妨一試。
=========================================================
剛看了你說的ssc電路,應該很簡單的。按理不應該駁錯。但可以的話不妨拍個實物參考一下。
至於它的程式好像也沒有很完整的提供(而不知是用12MHz還是11.0592MHz,不過這應該不是主要的因素),不如你發你的出來讓其它高手給你看一下吧。我對彙編語言則不是太懂的,應該幫不上忙了。


大大您好,我在您的圖中只有看到電池阻(電源),伺服機的電源好像是由電池提供的,
那mcu的電源是由??提供的呢? 感謝
11#
 樓主| 發表於 2007-7-30 11:52:52 | 只看該作者
回覆..iroboot大大!!
我的51電路上有加裝一顆HIN232..
他跟MAX232的接腳一樣...
現在的問題是...51得接收鮑率是否一定要在1200..
之前有想過使用9600的接收率...
不過我的學長跟我說那樣太快了,51會接收不到資料....
12#
發表於 2007-7-30 12:09:55 | 只看該作者
回覆zirok
所有電源都是靠那4顆 AAA 電池的。它同時供應了給伺服機與mcu。但電路版內是有跳線位設定的,有需要時是可以分開供電的。因我剛開始時也和你們一樣在摸索階段,我也不肯定兩者是否可以共用電源。
===================================================================
啊!! 我誤會了。你是指那個連結內的相片嗎?你留意看第一幅相片,最上一條橙色電線把+ve 電源從第一塊麵包板送至第二塊麵包板,而最底的一條橙色電線把2塊麵包板的 gnd 地線接上。所以 mcu 與 伺服機是共用電源的。

[ 本帖最後由 irobot 於 2007-7-30 12:27 編輯 ]
13#
發表於 2007-7-30 12:19:03 | 只看該作者
回覆ffffff2641
一般來說用低的 baud rate 當然是更大機會成功的,因對mcu的反應時間要求是降低了。或許這樣說:用高baud rate 可以的,用低 baud rate 一定得。但相反用低 baud rate 可以的,用高baud rate 便不一定可以。說了好像沒說,嘻嘻。
前提是 電腦內的設定 要與 mcu 內的設定相同。由於還未看你 post 出來的 彙編,所以也不知你在電腦內設定 1200 的 baud rate 是否正確。
===============================================================
START:
        MOV     SP,#70H
        MOV     R1,#20H
        MOV     21H,#00H
        MOV     IE,#10010000B
        MOV     SCON,#01110000B
        MOV     TMOD,#00100000B
        MOV     TH1,#0f3H
剛看了開頭的部份,彙編實在把我看得頭昏腦脹。
按你的編碼,baud rate 設定是 serial mode 1, Timer mode 2, Timer1 8bit-UART auto-reload。
MOV     TH1,#0f3H  則是對應 crystal 12MHz, 2400 bps 的。 (設 PCON.7 = 0)。
不知你使用的 crystal 頻率是否正確,另外在電腦內 vb 程式的 baud rate 是否也正確定在 2400 bps。
如果你想用 1200 bps 則應寫為 MOV     TH1,#0e6H
其它設定可參考這計數器:http://www.keil.com/c51/baudrate.asp

[ 本帖最後由 irobot 於 2007-7-30 14:52 編輯 ]
14#
發表於 2007-7-30 16:59:54 | 只看該作者
原帖由 ffffff2641 於 2007-7-30 11:52 發表
回覆..iroboot大大!!
我的51電路上有加裝一顆HIN232..
他跟MAX232的接腳一樣...
現在的問題是...51得接收鮑率是否一定要在1200..
之前有想過使用9600的接收率...
不過我的學長跟我說那樣太快了,51會接收不 ...


我平常都用9600,11.0592MHz的震盪器,
如果擔心慢的話,可以換22.1184MHz的震盪器,
不會有任何慢的情況,曾經用過115200傳送,
是出現指令有明顯延遲的情況,
不過9600應該是可以非常穩定!
15#
發表於 2007-7-30 17:05:44 | 只看該作者
原帖由 irobot 於 2007-7-30 12:19 發表

而不知是用12MHz還是11.0592MHz,不過這應該不是主要的因素

MOV     TH1,#0f3H  則是對應 crystal 12MHz, 2400 bps 的。 (設 PCON.7 = 0)。


震盪器使用正確與否,是非常重要的因素!

用12MHz的震盪器算不出2400 bps 的鮑率,
跟8501的UART命令週期有關係,依照官方公佈的算式,用12MHz絕對算不出整數!
16#
發表於 2007-7-30 19:49:51 | 只看該作者
imas 大大的說法是正確的,用12MHz 是不可能得出整數。所以一般是用 11.0592 或 22.1184 MHz 的 crystal。
不過如果你已經買了 12MHz 的 crystal 也可以暫時用著,因為用 baud rate calculator 計算,用#f3H的偏差只是0.16%。一般來說偏差不可超過 (+/-) 1%。
所以如果你檢查後情況還沒有改善,則問題很可能出在你的 彙編程式上了。
======================================================
初步看你的程式,不知我有否看錯;好像是不能夠控制伺服機角度的。因為 沒有發現任何指令是用來改變 pwm0 至 pwm7 內的數值,即永遠是#12。程式有的部份是檢查從 rs232 讀入的字節是代表要改變那一個伺服機,但沒有跟進接收要改變的角度。
不過即使如此,程式好像還是能把各伺服機固定在中位的。所以如果接通電源而伺服機不動,則可能程式還有其它問題。(例如設置 timer)
17#
發表於 2007-7-30 23:23:45 | 只看該作者
樓主大大您好,
      這個程式不能用vb來連接控制,一定要修改晶片內的組語,才可控制,至於樓主大大的文章中提到at89s51接伺服機的問題,請教一下樓主大大,連接伺服機後,有用示波器看控制線的波形嗎?會跟原來的波形相同嗎?

因為測試過LEO大大使用的micro 2bbmg,發現這顆伺服機和富他爸的s3003會把波形拉下來而micro 2bbmg接at89s51就不能動作了。而富他爸的s3003雖波形拉下來,但是還可動作。

所以,想說LEO大大好像用的是華邦的51晶片,手中又有p89c51rd2hbp的晶片,於是用來測試,結果問題解決了,所以得到一個結論,好像at系列的晶片會有問題(不同的伺服機會挑機),用變種的51晶片就不會有這個問題,不曉得其它大大們有沒有測試過或遇到這個現象???



ps測試的伺服機是mg-995和富他爸的s3003、s3001和micro 2bbmg。

ps1 http://www.robofun.net/forum/viewthread.php?tid=519&extra=page%3D2 版主大大這篇文章和ayu大大的解說,如您能嘗試一下,16ssc馬上可作出來哦。vb程式一定要下載 Mr.Chuck Baird 公開的這個程式,http://www.badongo.com/file/2887054 (請跟ayu大大講一下,下載這個程式來用。)才可用在51和avr上哦。

[ 本帖最後由 yyy 於 2007-7-30 23:38 編輯 ]
18#
 樓主| 發表於 2007-7-31 12:09:21 | 只看該作者
請問..各位高手大大~~
s03t這個伺服機在at8051上測試是大部分都不會動作.還是......
有沒有例外的押!!??(我之前是有用過FPGA寫過單顆馬達測試有動作出來!!)
有解決的辦法嗎????
還是只要改晶片內的組語舊行了..
19#
發表於 2007-7-31 13:43:29 | 只看該作者
ffffff2641
關於你的問題,我總結如下:
1. 硬件電路(用ssc貼內的)我傾向相信應該沒有問題。但你用的 crystal 數值為何?
2. 把 PC 與 mcu 連接的 rs232 通訊,應該可以假設通訊埠和電壓轉換部份均沒有問題,以及你有定好雙方的baud rate。
3. 在 PC內的軟體,想知道你是否用這個:http://www.seattlerobotics.org/encoder/200106/16csscnt.zip
    它的通訊格式是每次發3組數據 (開始碼, 伺服機編號, 轉向角度) ,開始碼定為255, 伺服機編號是1至16, 而轉向角度是0至254。
    所以與你提供的 mcu 彙編程式,在接收數據的格式上是有不同的。不知你有否把這 vb 程式做相應的修改呢?
4. 在 mcu 內的程式,如我前貼所說,好像在接收數據和更新轉向角的部份是有點問題的。
5. 關於伺服機的配合,只要在測試時加入提升電阻便可以了。亦即在供電給mcu的地方(+5v),搭一條線出來接約 1000 ohm電阻,
    再經電阻接至待測的訊號腳便可以了。
希望你最終能解決問題,發一個會動的機械人片段上來分享吧!!!

================================================================
另外我對你說的 FPGA 控制伺服機很感與趣,不知你是否有相關的資料,可以發表出來的。
例如:
1. 用什麼牌子的和型號的 FPGA 呢?Xillin, Altera, Lattice or Atmel
2. 有電路圖 或 用什麼測試版呢?
3. 用哪種編程語言 ? schematic design 、VHDL ? 有 source code 嗎?

[ 本帖最後由 irobot 於 2007-7-31 14:47 編輯 ]
20#
 樓主| 發表於 2007-7-31 16:48:28 | 只看該作者
我在去試試看好嚕~~
有問題隨時再向各位大大請教!!!
我是用...atml 的...晶片上有一個max的圖示!
電路圖押~~幾乎不用!!因為我寫完硬體描述直接轉譯成執行碼燒到晶片內了!!再把伺服機接..供應電源接上就可以執行了~~
我使用的語言VHDL!硬體描述語言!!不過...描述上就滿複雜的...要寫好幾個電路描述進去吧!!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-6-13 22:58 , Processed in 0.283170 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表