89c51 控制 廣營 GWS NARO+D 無法控制 請教組語及伺服馬達高手
用簡單的High Low控制 產生脈波 分別是 1ms 0度 1.5ms 60度 2ms 120度目前問題是 當電源開啟後只會動1ms 後面兩個都不動 也就是只動一次後面所產生的脈波 根本不理
測試很多方法 也改變1ms跑20次 才結束 換 1.5ms以此類推 還是無法 問題點出不來
但單一分別控制就很準確 單送 1ms 1.5ms 20ms 都會正確動作 但同個輸出波產生三種不同脈波寬度 就只動第一個
程式碼如下 :
ORG 0000H
LOOP1:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms共 1ms
CLR P1.0 ;清除為0 Low
MOV R0,#38 ;設R0暫存器跑38次 38*0.5(Delay)=19
WAIT19R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT19R0 ;R0不為零則跳到WAIT19R0 共跑38次19ms
LOOP2:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共1.5 ms
CLR P1.0 ;清除為0 Low
MOV R0,#37 ;設R0暫存器跑37次 37*0.5(Delay)=18.5
WAIT18_5R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT18_5R0 ;先減1 R0不為零則跳到WAIT18_5R0 共跑37次18.5ms
LOOP3:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共2.0 ms
CLR P1.0 ;清除為0 Low
MOV R0,#36 ;設R0暫存器跑36次 36*0.5(Delay)=18
WAIT18R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT18R0 ;先減1 R0不為零則跳到WAIT18_5R0 共跑37次18.5ms
JMP LOOP1 ;跳回迴圈
DELAY: ;Delay 0.5ms
MOV TMOD,#00010000B
D1:
MOV TH1,#FEH
MOV TL1,#0CH
SETB TR1
JNB TF1,$
CLR TF1
RET
END 流程是不是
送出1ms再送1.5ms再送2ms再回到1ms的迴圈
這樣會不會跳太快.伺服機都還沒轉到1.5mS位置就到2mS了接著送出1mS
這樣因該抖動吧
但單一分別控制就很準確 單送 1ms 1.5ms 20ms 都會正確動作
因為是一直連續送出一種信號
上面是我的想法.有錯請告知 沒錯 就是這樣 我有試過 放慢如程式 還是一樣 只動一次
ORG 0000H
LOOP:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms共 1ms
CLR P1.0 ;清除為0 Low
MOV R0,#38 ;設R0暫存器跑38次 38*0.5(Delay)=19
MOV R1,#50 ;設R1暫存器跑50次
WAIT19R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT19R0 ;R0不為零則跳到WAIT19R0 共跑38次19ms
DJNZ R1,LOOP ;重複(1ms high) (0 low) 週期 20ms 共50次 才換下個狀態
LOOP2:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共1.5 ms
CLR P1.0 ;清除為0 Low
MOV R0,#37 ;設R0暫存器跑37次 37*0.5(Delay)=18.5
MOV R1,#50 ;設R1暫存器跑50次
WAIT18_5R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT18_5R0 ;先減1 R0不為零則跳到WAIT18_5R0 共跑37次18.5ms
DJNZ R1,LOOP2 ;重複(1.5ms high) (0 low) 週期 20ms 共50次 才換下個狀態
LOOP3:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共2.0 ms
CLR P1.0 ;清除為0 Low
MOV R0,#36 ;設R0暫存器跑36次 36*0.5(Delay)=18
MOV R1,#50 ;設R1暫存器跑50次
WAIT18R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT18R0 ;先減1 R0不為零則跳到WAIT18_5R0 共跑37次18.5ms
DJNZ R1,LOOP3 ;重複(2ms high) (0 low) 週期 20ms 共50次 才換下個狀態
JMP LOOP ;跳回迴圈
DELAY: ;Delay 0.5ms
MOV TMOD,#00010000B
D1:
MOV TH1,#FEH
MOV TL1,#0CH
SETB TR1
JNB TF1,$
CLR TF1
RET
END 迴圈起始值放錯地方
ORG 0000H
MAIN:
MOV R1,#50 ;設R1暫存器跑50次
LOOP:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms共 1ms
CLR P1.0 ;清除為0 Low
MOV R0,#38 ;設R0暫存器跑38次 38*0.5(Delay)=19
WAIT19R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT19R0 ;R0不為零則跳到WAIT19R0 共跑38次19ms
DJNZ R1,LOOP ;重複(1ms high) (0 low) 週期 20ms 共50次 才換下個狀態
MOV R1,#50 ;設R1暫存器跑50次
LOOP2:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共1.5 ms
CLR P1.0 ;清除為0 Low
MOV R0,#37 ;設R0暫存器跑37次 37*0.5(Delay)=18.5
WAIT18_5R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT18_5R0 ;先減1 R0不為零則跳到WAIT18_5R0 共跑37次18.5ms
DJNZ R1,LOOP2 ;重複(1.5ms high) (0 low) 週期 20ms 共50次 才換下個狀態
MOV R1,#50 ;設R1暫存器跑50次
LOOP3:
SETB P1.0 ;設置P1.0為1 High
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms
CALL DELAY ;呼叫延遲0.5ms 共2.0 ms
CLR P1.0 ;清除為0 Low
MOV R0,#36 ;設R0暫存器跑36次 36*0.5(Delay)=18
WAIT18R0:
CALL DELAY ;呼叫延遲0.5ms
DJNZ R0,WAIT18R0 ;先減1 R0不為零則跳到WAIT18_5R0 共跑37次18.5ms
DJNZ R1,LOOP3 ;重複(2ms high) (0 low) 週期 20ms 共50次 才換下個狀態
JMP MAIN ;跳回迴圈
DELAY: ;Delay 0.5ms
MOV TMOD,#00010000B
D1:
MOV TH1,#0FEH
MOV TL1,#0CH
SETB TR1
JNB TF1,$
CLR TF1
RET
END 本帖最後由 xu3u4rmp4 於 2011-8-26 00:46 編輯
這樣修改有成功嗎?
你有用示波器看過信號嗎? 迴圈起始值放錯地方
ORG 0000H
MAIN:
MOV R1,#50 ...
jason0821 發表於 2011-8-25 22:42 http://www.robofun.net/forum/images/common/back.gif
同意jason0821大的做法,
只是R1用到50太多了,如果伺服機的反應為0.2秒轉60度,那用0.2秒除以20ms為10左右,
考量最後一個迴圈回到第一個迴圈大幅的擺動時間,把R1設為30左右ok 請問一下那如果速度要加快 有甚麼方法嗎?
不要提高電壓 改週期有用嗎? 請問一下那如果速度要加快 有甚麼方法嗎?
不要提高電壓 改週期有用嗎?
ginners 發表於 2011-9-9 00:17 http://www.robofun.net/forum/images/common/back.gif
不要提高電壓的前提下,改週期沒有必要,也無法加快動作速度,
因為從選擇伺服機後就被限制了最高的速度表現~~~ 那可以降速嗎? http://www.gws.com.tw/chinese/product/SERVO/servo%20form.h
RPV 遙控模型用伺服馬達的注意事項
工作電壓 : D. C. 4.8V - 7.5VMax. (特殊規格 : 12.0-15.0V;24.0-28.V)
速度 : 從 0.05;0.05-0.15;0.15-0.30;0.30-0.60;至 0.60 秒/60 度以上
扭力 : 1.0;1.0-3.0;3.0-10.0;10-49;50-100;100-300;300-1000 公斤/公分等範圍
以上規格,均符合遙控模型的應用;我們亦可依客戶的規格需求而設計。
工作溫度 : -20°C ~ +60°C
脈寬範圍 (週期: 16-23 ms)
http://www.gws.com.tw/images/product/servo001.jpg
最大 : 2.1 ms
最小 : 0.9 ms
超出以上之訊號範圍,將導致伺服機不正常工作.
擺臂位置 (旋轉角度)
以下規格表為轉動角度與輸入脈寬之相對關係:
脈寬 擺臂位置 (角度)
0.8 ms 安全界限 (順時針方向)
0.9 ms +60° ± 10° (順時針方向)
1.5 ms 0° (中立點)
2.1 ms -60° ± 10° (逆時針方向)
2.2 ms 安全界限 (逆時針方向) Wish this may help? 回復 11# gws4ceo
恩恩! 已成功讓伺服馬達轉動了
感謝您的熱心指教 : )
頁:
[1]