Robofun 機器人論壇

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

[求助] 如何同時控制伺服馬達 #2

[複製鏈接]
konica777 該用戶已被刪除
跳轉到指定樓層
1#
發表於 2009-1-20 15:39:45 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
小弟是之前有發問過相同的問題,但是仍然沒能解決(不過在此先向nichal 和 wboe大大致謝)。我想對nichal大大說的是我有照著你給的劃圈的圖改了程式,但還是得到一樣的結果(另外我也有換顆馬達和接腳),他都是只做R1的指令,似乎我R2所給的指令他都沒有輸出,這到底是為什麼??  謝謝!!!

補充一下,之所以要控制馬達的速度是因為讓機器人用馬達全速去動作的話,機器人會變得不穩而跌倒,所以想用部分的馬達能夠速度變慢來讓整個機器人穩定的完成動作,這樣的想法是對的嗎??

程式碼:
org 00h
mov r1,#00100000b
mov r2,#00000010b
jmp start
start:
mov r4,#50
loop: ; 到起始位置 90度
mov p1,r1
call delay15
mov p1,r2
call delay15
mov p1,#00000000b
call delay200
djnz r4,loop
;開始控制速度
;動作1
mov r4 ,#1
Loop1:
mov r7, #1 ;代表0.02的倍數
mov p1,r1
call delay15
call delay002
mov p1,r2
call delay15 ;
call delay002 ; 跟上面合起來是1.52ms
mov p1,#00000000b
call delay17ms    ; 17ms
djnz r4 , Loop1
;動作2
mov r4 ,#1
Loop2:
mov r7, #2 ;代表0.02的倍數
mov p1,r1
call delay15
call delay002
mov p1,r2
call delay15 ;
call delay002 ; 跟上面合起來是1.52ms
mov p1,#00000000b
call delay17ms    ; 17ms
djnz r4 , Loop2
;動作3
mov r4 ,#1
Loop3:
mov r7, #3 ;代表0.02的倍數
mov p1,r1
call delay15
call delay002
mov p1,r2
call delay15 ;
call delay002 ; 跟上面合起來是1.52ms
mov p1,#00000000b
call delay17ms    ; 17ms
djnz r4 , Loop3
..
..
..接著是相同的指令

[ 本帖最後由 konica777 於 2009-1-20 15:44 編輯 ]
nichal 該用戶已被刪除
2#
發表於 2009-1-20 16:25:42 | 只看該作者
大大您好

我先提一個小概念
不是邏輯的問題
可能是系統的問題

請您先想辦法用示波器
看一下您的P1埠是否有正確輸出?
如果R2確定沒有輸出
那我想問題應該就出在一開始你所寫的
mov r1,#00100000b
mov r2,#00000010b
這兩行上!!!

試試看把r1直接用#00100000b來代
r2用#00000010b來代

再不行
就在程式的一開始先加上
  mov r0,#0
$ djnz r0,$
再接著寫您的程式

51在使用上
有很多時候跟您的邏輯觀念無關
而是跟您對51系統的熟悉度有關
請再試試看吧
祝你順利唷~~~

新年快樂!!!
konica777 該用戶已被刪除
3#
 樓主| 發表於 2009-1-20 17:26:45 | 只看該作者
謝謝大大你的回應,你說用示波器的方法我會去試試看的。那個你說直接用#00100000b來代入我之前就用過了是一樣的,另外
mov r0,#0     
$ djnz r0,$
這兩行的用途是在清除嗎??不太懂。

最後也祝大大新年快樂!
nichal 該用戶已被刪除
4#
發表於 2009-1-21 08:58:12 | 只看該作者
重置時可能會有一些硬體狀態還沒完全到位
加這個小延遲的用意是讓系統狀態回穩
然後才開始執行程式

雖然不見得一定可以解決您的問題
但至少可以確定跟重置後的硬體不穩定狀態無關
忘了問
一開始的50個迴圈是20mS一個循環嗎?
konica777 該用戶已被刪除
5#
 樓主| 發表於 2009-2-2 14:17:25 | 只看該作者
大大 我試著用示波器測量過R1 R2 得到的結果為
     _      _                                              _    _
     l l     l l                                              l l    l l
__l l__ l l__    (R1 到90度的波形)---> __l l__l l__   (R1 開始有速度控制的)  但兩著好像沒什麼差..
                                                           ___         __
                                                           l     l        l    l
      (同上)        (R2 到90度的)   ---->  __l     l____l    l____ (R2 ....) 就是變得比較寬
但是這兩者 我看不出她們間的關連,還請大大幫忙解答。

另外  大大說將
mov r0,#0     
$ djnz r0,$
放到程式前端 但會初現錯誤,這要如何改進??

  最後  你問的      一開始的50個迴圈是20mS一個循環嗎?
  是有超過20ms 不過就只有一點點。   謝謝!!!
nichal 該用戶已被刪除
6#
發表於 2009-2-3 10:12:35 | 只看該作者
大大您好
波形的大小決定了SERVO的角度
而一個完整波形的時間如果超過20mS
很可能SERVO就不動作
波形在high的時間超過2.5mS
SERVO也可能會誤動作
請您再檢查看看吧~~~

又觀看時間間隔的方式
可以用時間游標來觀看(cursors--time)
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-24 14:56 , Processed in 0.201934 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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