Robofun 機器人論壇

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

89c51 控制 廣營 GWS NARO+D 無法控制 請教組語及伺服馬達高手

[複製鏈接]
跳轉到指定樓層
1#
發表於 2011-8-25 18:55:09 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
用簡單的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
2#
 樓主| 發表於 2011-8-25 20:06:52 | 顯示全部樓層
沒錯 就是這樣 我有試過 放慢如程式 還是一樣 只動一次
        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
3#
 樓主| 發表於 2011-9-9 00:17:31 | 顯示全部樓層
請問一下那如果速度要加快 有甚麼方法嗎?
不要提高電壓 改週期有用嗎?
4#
 樓主| 發表於 2011-9-15 12:29:42 | 顯示全部樓層
那可以降速嗎?
5#
 樓主| 發表於 2011-11-11 17:03:25 | 顯示全部樓層
回復 11# gws4ceo

恩恩! 已成功讓伺服馬達轉動了
感謝您的熱心指教 : )
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-10 15:23 , Processed in 0.070812 second(s), 9 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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