Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
樓主: ffffff2641
打印 上一主題 下一主題

關於控制問題??

[複製鏈接]
81#
發表於 2007-8-24 12:07:37 | 只看該作者

回覆irobot 大大

ok,看的到了,問題大概出在我不會用那個軟體...,原來要看波形時要先按"SAMPLE"這個鈕,
我原本以為只要接好就會看到訊號了=.=,沒想到還要按一個東西,因為之前在試的時候亂按它,
它讀訊號要等一下,我以為會當機就把它關了...大大也沒提到我也不敢亂按 ,
今天想說哀...反正只是+5V和GND的訊號,應該不會怎樣,就發現有訊號了...

1KHZ那個的週期是2ms(因為有兩個DELAY),DW是50%, 總算能用了...真是感謝irobot大大不厭其煩的教導
82#
發表於 2007-8-24 13:31:24 | 只看該作者

回覆irobot 大大

挖....我已經被退件第三次了...攬的打了=.="
怎麼今天才變成限制檔案大小和格式阿@Q@...

我用之前您幫我修改的程式去看波形,發現4個通道的總週期就已經超過20ms了,
單一通道的週期也超過2.5ms,難怪伺服機不動 ,慶幸的是現在只剩程式問題囉~
83#
發表於 2007-8-24 14:41:04 | 只看該作者
恭喜你,有志者事竟成。   你總算在假期完結前做好這個了。它很有用的,有了它你便知程式中的問題出在那裡。
不過你給我不能成功的答案也實在太叫我意外了!  哈哈哈!!!!
也怪我沒有詳細問清楚你使用軟件的情況,我忽略了這可能性。
關於你說的超過 2.5 ms 的情況,有空再給你看一下吧 !!
你再發一次你現在用的 ssc.asm 完整的程式吧。

另外,你現在有了 logic analyzer, 你自己也可以嘗試用它驗證你的 計時 方法是否準確。
自己動手寫一個簡單的 loop ,控制 腳位 輸出 pulse 然後量度。這可有助你解決計時不準的問題。

[ 本帖最後由 irobot 於 2007-8-24 15:00 編輯 ]
84#
發表於 2007-8-25 00:33:17 | 只看該作者

回覆irobot 大大

感謝大大的鼓勵 ,對阿...有這個就方便多了,不需要去借很大隻的示波器,我個人覺得蠻方便的@Q@

現在不知道為什麼不能貼檔案.圖片也限制檔案類型與大小,程式只好貼在下面:


CH1 REG P2.0   
CH2 REG P2.1
COUNT EQU 37H
CUT EQU 39H   
PWM0 EQU 40H ;
PWM1 EQU  41H ;
PWM2 EQU 42H ;
PWM3 EQU 43H ;
PWM4 EQU 44H ;
PWM5 EQU  45H ;
PWM6 EQU 46H ;
PWM7  EQU 47H ;
F EQU 50H
PIN EQU 51H
PWM EQU 52H ;目前被我拿來解決LOW的部分
PIN1 EQU 53H
;------------------------------------------------------
ORG 00H
AJMP START
;ORG 0BH
;LJMP T0_INT  ;timer0中斷
;ORG 1BH
;LJMP T1_INT  ;timer1中斷
               
ORG 30H
START:
MOV SP,#5FH  ;設定堆疊區60H-7FH(固定用法)
MOV DPTR,#TABLE ;查表法,將TABLE的位址傳入DPTR的暫存器
      MOV TMOD,#00010001B ;設定 TIMER1 作業於模式 1,TIMER0 作業於模式 1
;---------------------------------------------------------
;MOV TH0,#>(65536-40)   ;設定TIMER0在每40us中斷一次,if use12Mhz crystal
;MOV TL0,#<(65536-40)
;MOV TH1,#>(65536-10000);設定TIMER1在每10ms計時一次,if use12Mhz crystal(以12MHZ基礎週期為1us)
;MOV TL1,#<(65536-10000)
;--------------------------------------------------------
SETB EA
;SETB ET0 ;啟用TIMER0中斷
;SETB ET1 ;啟用TIMER1中斷
              
MOV CUT,#0  ;賦予解譯旗標CUT歸零(沒用到)
MOV COUNT,#0 ;暫存R0位址的值
;--------------------------------------------------------------------------------
;通道判斷
;--------------------------------------------------------------------------------
MAIN:
MOV R1,#0H
MOV R2,#5H

LOOP:
MOV A,R1
MOVC A,@A+DPTR ;將TABLE裡第一個定義的值存入A
MOV PWM0,A  ;將A的值推入PWM0
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV PWM1,A
INC R1  
MOV A,R1
MOVC A,@A+DPTR
MOV PWM2,A
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV PWM3,A
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV PWM4,A
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV PWM5,A
INC R1
MOV A,R1
MOVC A,@A+DPTR
MOV PWM6,A
INC R1

MOV A,R1
MOVC A,@A+DPTR
MOV PWM7,A
INC R1

ACALL OUT ;短距離呼叫
DJNZ R2,LOOP ;R2不=0則跳回LOOP,=0則回到MAIN
            LJMP MAIN ;遠程跳躍
;--------------------------------------------------------------------------------
TABLE:
DB 0CH,0CH,0CH,0CH,0CH,0CH,0CH,0CH ;先置中(1.5ms的high訊號)
DB 00H,00H,00H,00H,00H,00H,00H,00H
DB 06H,06H,06H,06H,06H,06H,06H,06H
DB 12H,12H,12H,12H,12H,12H,12H,12H
DB 19H,19H,19H,19H,19H,19H,19H,19H
;---------------------------------------------------
;輪序迴圈
;---------------------------------------------------      
OUT:
MOV R0,#40H        
C0: SETB P1.0
            MOV R7,#13 ;每一格"H"的時間,視需要微調
ACALL DEL_H ;1ms
ACALL PWM_WIDTH
CLR P1.0
ACALL DEL_L

C1: SETB P1.1 ;R0=41H
MOV R7,#13 ;每一格"H"的時間,視需要微調
ACALL DEL_H ;1ms
ACALL PWM_WIDTH
CLR P1.1

ACALL DEL_L

C2: SETB P1.2 ;R0=42H
MOV R7,#13 ;每一格"H"的時間,視需要微調賦,目前改成延時0.1ms
ACALL DEL_H ;1ms
ACALL PWM_WIDTH
CLR P1.2
ACALL DEL_L
C3: SETB P1.3 ;R0=43H
MOV R7,#13 ;每一格"H"的時間,視需要微調
ACALL DEL_H ;1ms
ACALL PWM_WIDTH
CLR P1.3
ACALL DEL_L
C4: SETB P1.4 ;R0=44H
MOV R7,#13 ;每一格"H"的時間,視需要微調
ACALL DEL_H ;1ms
ACALL PWM_WIDTH
CLR P1.4

ACALL DEL_L

C5: SETB P1.5 ;R0=45H
MOV R7,#13 ;每一格"H"的時間,視需要微調
ACALL DEL_H ;1ms
ACALL PWM_WIDTH
CLR P1.5
ACALL DEL_L
C6: SETB P1.6 ;R0=46H
MOV R7,#13 ;每一格"H"的時間,視需要微調
ACALL DEL_H ;1ms
ACALL PWM_WIDTH
CLR P1.6
ACALL DEL_L
C7: SETB P1.7 ;R0=47H
MOV R7,#13 ;每一格"H"的時間,視需要微調
ACALL DEL_H ;1ms
ACALL PWM_WIDTH
CLR P1.7

ACALL DEL_L
;DJNZ R3,OUT ;因為輪序迴圈執行共20ms x 250次 = 5秒(顯示五秒)
  
RET
;--------------------------------------------------------------------------------
PWM_WIDTH:
MOV COUNT,@R0
LOOP1:
;SETB TR0 ;開啟T0計數器
;CLR TR0 ;關閉T0計數器
MOV R4,#0AH ;10次
LOOP4:

NOP  ;每個 nop 延時 1us
NOP
DJNZ R4,LOOP4  ;R4=0時跳下一行=>(1us+1us+2us)X10 = 40us,此行本身要2us
           
DJNZ COUNT,LOOP1 ;將PWM的值乘以40us         
MOV CUT,#0 ;因為T0中斷給兩個副程式使用,所以CUT累加在此須清除         

MOV PWM,@R0 ;將R0的值交給DEL_L去取LOW的時間
INC R0 ;找下一個PWM的位置
RET        
;--------------------------------------------------------------------------------
DEL_H:                                       
;延時R7*0.1毫秒,晶振在11.0592MHZ

L7:
MOV R6,#2 ;令 R6=0
L6:
MOV R5,#17 ;令 R5=0
DJNZ R5,$ ;R5=R5-1, 若 R5 <> 0, 則繼續本指令
DJNZ R6,L6 ;R6=R6-1, 若 R6 <> 0, 則跳至 L6
DJNZ R7,L7 ;R7=R7-1, 若 R7 <> 0, 則跳至 L7
RET
;--------------------------------------------------------------------------------
        
DEL_L:                                       
;延時R7*0.1毫秒,晶振在11.0592MHZ
;MOV R7,#1 ;因為執行DEL_H時已經變成0(暫時想不到當初為什麼要+這個)
MOV A,#27H ;27H X 40us 約 = 1.56ms ,先前已經有1ms了
CPL PWM
ADD A,PWM
MOV COUNT,A
LOOP2:
;SETB TR0 ;開啟T0計數器
;CLR TR0 ;關閉T0計數器
MOV R4,#0AH ;10次  
LOOP3:

NOP  ;每個 nop 延時 1us
NOP
DJNZ R4,LOOP3 ;R4=0時跳下一行=>(1us+1us+2us)X10 = 40us

DJNZ COUNT,LOOP2 ;將PWM LOW的值乘以40us         
MOV CUT,#0 ;因為T0中斷給兩個副程式使用,所以CUT累加在此須清除         

RET

;--------------------------------------------------------------------------------
;DEL:
;延時R7*0.1毫秒,晶振在11.0592MHZ
     
;D5:
; MOV R6,#20 ;令 R6=0
;D4:
; MOV R5,#20 ;令 R5=0
; DJNZ R5,$ ;R5=R5-1, 若 R5 <> 0, 則繼續本指令($代表跳回本行)
; DJNZ R6,D4 ;R6=R6-1, 若 R6 <> 0, 則跳至 L4
; DJNZ R7,D5 ;R7=R7-1, 若 R7 <> 0, 則跳至 L5
; RET
;--------------------------------------------------------------------------------
;T0_INT:    ;只用到一個計時中斷
; PUSH A
; PUSH PSW
; CLR TR0
; MOV TH0,#>(65536-40) ;設定TIMER0在每40us中斷一次,if use12Mhz crystal
; MOV TL0,#<(65536-40)
; ;INC  CUT  ;CUT還搞不懂

; POP PSW
; POP A
; RETI
;--------------------------------------------------------------------------------
;T1_INT:
; PUSH A
; PUSH PSW
; CLR TR1
; MOV TH1,#>(65536-10000);設定TIMER1在每10ms中斷一次,if use 12Mhz crystal
; MOV TL1,#<(65536-10000)

; POP PSW
; POP A
; RETI
;---------------------------------------------------------------------
END
85#
發表於 2007-8-25 01:50:17 | 只看該作者
DEL_L:                       ;延時R7*0.1毫秒,晶振在11.0592MHZ
                                   ;MOV R7,#1 ;因為執行DEL_H時已經變成0(暫時想不到當初為什麼要+這個)
MOV A,#27H               ;27H X 40us 約 = 1.56ms ,先前已經有1ms了
CPL PWM
ADD A,PWM
MOV COUNT,A
LOOP2:
                                              ;SETB TR0 ;開啟T0計數器
                                              ;CLR TR0 ;關閉T0計數器
          MOV R4,#0AH             ;10次  
LOOP3:
         NOP                             ;每個 nop 延時 1us
         NOP
         DJNZ R4,LOOP3          ;R4=0時跳下一行=>(1us+1us+2us)X10 = 40us
        DJNZ COUNT,LOOP2    ;將PWM LOW的值乘以40us         
MOV CUT,#0                          ;因為T0中斷給兩個副程式使用,所以CUT累加在此須清除         
RET


我不太肯定紅色語句的寫法有否問題,因為查 8051 instruction set 沒有這種寫法。
可否改為先找取 PWM 內的數值至 A, 執行 CPL  A 指令,然後把 A 內的值回傳至 PWM。再之後才做 這幾句
MOV A,#27H               ;27H X 40us 約 = 1.56ms ,先前已經有1ms了
ADD A,PWM
MOV COUNT,A
LOOP2:
...............
...............
不知這樣有否幫助。
86#
發表於 2007-8-25 09:58:42 | 只看該作者

回覆irobot 大大

當然有幫助阿 ,算數邏輯指令好像都要先放到A暫存器裡,
我真是阿呆=.=",先去試試看~ ,不過現在不能po圖還蠻無奈的


嗯~,改了之後好很多,每一個通道的週期約20ms,每一訊號間隔約2.5ms,因為我把DEL_H改了一下,
目前只會出一種訊號,還不是大問題,不過我拿去接馬達還是不動 ,真是怪怪~
,想說能不能貼digitrace的紀錄檔...,幾kb而已...,不過這裡的檔案類型不接受~屋

[ 本帖最後由 zirok 於 2007-8-25 10:39 編輯 ]
87#
發表於 2007-8-25 11:07:47 | 只看該作者
慢慢來吧。只要肯定訊號準確,問題便是在出在伺服機或提升電阻之類的東西上。
我插入這2kb的圖沒有問題啊。
附件也好像沒有問題。

[ 本帖最後由 irobot 於 2007-8-25 11:12 編輯 ]

prevbutton2.png (3.63 KB, 下載次數: 246)

prevbutton2.png
88#
發表於 2007-8-25 21:32:03 | 只看該作者

回覆irobot 大大

喔... ,那還是要+提升電阻囉,我再改一下程式,實驗時再加上提升電阻看看~1k的可以吧~

關於圖片,當然囉~,您放的圖片是256kb以下的阿,不過我之前上傳的圖片隨便都要1.多mb..
所以覺得現在好麻煩說@q@
89#
發表於 2007-8-25 21:37:31 | 只看該作者
你可以把 jpg 圖片檔壓縮一點啊。好多軟件也可以做到的。用 InfanView 吧,可以改變解像和壓縮比列的。
至於 digitrace的紀錄檔,你可以先改它的副檔名,然後通知其他人要改回的名稱便可以了。
90#
發表於 2007-8-26 19:53:49 | 只看該作者

回覆irobot 大大

喔~,原來如此,可是它每次都會告知有可能會改變檔案我就不太敢改下去
目前進度都算順利,程式的部分靠DIGITRACE看波形,目前碰到的問題都可以解決 ㄏㄏ

先測試看看~雖然是之前的圖@Q@

[ 本帖最後由 zirok 於 2007-8-26 20:10 編輯 ]

1.JPG (28.67 KB, 下載次數: 247)

1.JPG

2.jpg (29.61 KB, 下載次數: 255)

2.jpg

3.JPG (28.56 KB, 下載次數: 255)

3.JPG
91#
發表於 2007-8-26 20:39:58 | 只看該作者
呵呵!! 做得不錯。
圖1的時間超過了 2.5 ms ,不過我想你可以慢慢找出是3個計時部份中哪一個地方要修改的。
92#
發表於 2007-8-27 11:04:38 | 只看該作者

回覆irobot 大大

呵呵,我有小改一下,目前的數值我覺得應該都差不多了,頂多0.1 ~ 0.2ms(其實正確數字沒看很清楚~哈哈),而且錯誤目前都修正了,測馬達還是不能用就只好看看提升電阻能不能讓它動囉,再不行的話我想就是時間控制的不夠精準吧..,平均來說我的2.5ms(理想)都會變成2.7ms左右

p.s.
dgt檔把檔名改成jpg好像還是不行=.=..,它會說你那是無效的檔案@q@,

[ 本帖最後由 zirok 於 2007-8-27 11:20 編輯 ]

4.JPG (37.85 KB, 下載次數: 254)

4.JPG
93#
發表於 2007-8-27 11:54:02 | 只看該作者
看了你的貼圖突然想起,你不如改改程式不要每 20ms 便轉1次訊號,可能伺服機不能作這麼快的反應便不動了。你可先把5次的訊號也做相同的設定看看效果如何。
94#
發表於 2007-8-27 21:23:55 | 只看該作者
zirok大大您好喔,

      您那個E-SKY8克伺服機,小弟也買來測試了喔,它裝在s51上的話,一定要加裝提升電阻。

因為要使它得到大的電壓,所以用1k歐姆的電阻來測試,結果就可控制了喔,不曉得您試驗如何。

如您還想使電壓提高的話,可再用小於1k歐姆的電阻來測試,不過一次不要降太多電阻,慢慢降喔。

看您的軟體示波器已完成了,可看看它的波形變化。
95#
發表於 2007-8-28 08:26:19 | 只看該作者
最近在書局看到一本     

基礎邏輯分析儀設計-以Visual Basic及MCS-51實作

http://www.opentech.com.tw/search/bookinfo.asp?isbn=9572155431

它的內容也是教我們做一台邏輯分析儀 不過都要自己做,功能好像比示波器好很多,看有沒有人做看看,小弟還沒

有時間做出來,如有人可分享的話,感激不盡喔。
96#
發表於 2007-8-28 09:41:23 | 只看該作者
回AYU大大:
自己寫示波器好像蠻困難的說,大大們加油 ,我是"學會"怎麼用而已~,軟體是irobot大大推薦的~

真是讓您破費了還買了伺服機來測試@q@,另外我想確定一下,e-sky8g伺服機的白色線是訊號線,紅色是+vcc,黑色是gnd嗎? 不過應該是沒錯,我接電上去它都會動一下....

還有提升電阻是怎麼接呢?  是接在8051和伺服馬達的訊號線之間齁?  不過我測它的電流也是測不到

感謝irobot . AYU大大的建議,我會試試看的

[ 本帖最後由 zirok 於 2007-8-28 09:48 編輯 ]
97#
發表於 2007-8-28 19:40:58 | 只看該作者
加了提升電阻我還是測不到電流說(爬了之前的文才發現有問過@Q@),
請問加了提升電阻後可以用三用電表量出的"差別"在哪呢?(好讓我知道有沒有插對) 是電流還是電壓會上升??
98#
發表於 2007-8-28 20:26:45 | 只看該作者
應該是量度電壓較好吧!
是升電阻如下接駁。

[ 本帖最後由 irobot 於 2007-8-28 20:30 編輯 ]

pull-up.jpg (11.78 KB, 下載次數: 306)

pull-up.jpg
99#
發表於 2007-8-29 00:09:56 | 只看該作者

回覆irobot 大大

每次都要您費心,麻煩您了 ,嗯...我也是這樣接的,也有量一下電壓...,我是用提供MCU的電源拉一條線去接電阻(1K歐姆),不過好像沒變動很大=~=",嗯..再試試看好了
100#
發表於 2007-8-29 01:25:53 | 只看該作者
原帖由 zirok 於 2007-8-29 00:09 發表
每次都要您費心,麻煩您了 ,嗯...我也是這樣接的,也有量一下電壓...,我是用提供MCU的電源拉一條線去接電阻(1K歐姆),不過好像沒變動很大=~=",嗯..再試試看好了

zirok大大您好喔,

     紅色接正電,黑色接負電,白色接控制訊號(mcu產生的pwm),然後照irobot大大的提升電阻接法去接,伺服機電源不要和mcu的電源共用,分開來測試,再試試看囉。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-11-24 01:10 , Processed in 0.255706 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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