電流大小控制步進馬達之疑問 |
答題得分者是:aki
|
ryqrc418445
一般會員 發表:5 回覆:4 積分:1 註冊:2012-02-04 發送簡訊給我 |
TRIG_WR REG P3.0 ;定義/WRITW(ADC0804)腳位
TRIG_INTR REG P3.1 ;定義/INTR(ADC0804)腳位 LARGE_LED REG P3.2 ;定義LARGE_LED(較大)輸出腳位 EQUAL_LED REG P3.3 ;定義EQUAL_LED(相等)輸出腳位 SMALL_LED REG P3.4 ;定義SMALL_LED(較小)輸出腳位 DATA_IN REG P1 ;定義DATA_IN(資料輸入)腳位 DATA_OUT REG P0 ;定義DATA_OUT(資料輸出)腳位 DSP_0 EQU 40H ;七段顯示器0"字形碼 DSP_H EQU 09H ;七段顯示器H"字形碼 DSP_L EQU 47H ;七段顯示器L"字形碼 SM_DATA DB FEH,FDH,FBH,F7H,0H ;正轉 SM1_DATA DB F7H,FBH,FDH,FEH,0H ;反轉 SP EQU 59 ORG 0H ;----- 啟動ADC0804開始載入輸入電壓V(X)轉換----- CLR F0 ;令旗標F0=0" START SETB TRIG_WR ;令ADC0804 IC之/WR=1" CLR TRIG_WR ;令ADC0804 IC之/WR=0" SETB TRIG_WR ;令ADC0804 IC之/WR=1" WAIT JB TRIG_INTR,WAIT ;等待ADC0804 IC之/INTR=0" ;----- 當/INTR=0"讀入轉換完成的V(X)對應值值 ----- READ MOV A,DATA_IN ;把資料讀入ACC(累加器) MOV B,A ;把資料保存在B(暫存器) ;----- 判斷輸入電壓V(X)是否大於3V ------- CLR C ;清除進位旗號C=0" SUBB A,#153 ;ACC值減去153(對應於V(X)=3V值) JNC LARGE ;當C=0"跳到LARGE路徑 ;----- 判斷輸入電壓V(X)是否小於2V ------- MOV A,B ;由B(暫存器)重新拷貝原先的資料 CLR C ;清除進位旗號C=0" SUBB A,#102 ;ACC值減去102(對應於V(X)=2V值) JC SMALL ;當C=1"跳到SMALL路徑 ;----- MIDDLE CLR EQUAL_LED ;令黃色LED_ON SETB LARGE_LED ;令紅色LED_OFF SETB SMALL_LED ;令綠色LED_OFF MOV DATA_OUT,#DSP_0 ;顯示0" CLR F0 ;令旗標F0=0" JMP BACK ;----- LARGE SETB EQUAL_LED ;令黃色LED_OFF CLR LARGE_LED ;令紅色LED_ON SETB SMALL_LED ;令綠色LED_OFF MOV DATA_OUT,#DSP_H ;顯示H" JNB F0,NEXT_10 ;當旗標F0=0"則跳到NEXT_10 JMP BACK ;------- NEXT_10 MOV R0,#20 ;計數20次 $1:MOV DPTR,#SM_DATA ;載入馬達正轉脈波資料 CALL ROTATE ;馬達正轉 DJNZ R0,$1 ;迴轉判斷 MOV R5,#50 ;延遲0.5秒 CALL DELAY JMP BACK ;------------- SMALL SETB EQUAL_LED ;令黃色LED_OFF SETB LARGE_LED ;令紅色LED_OFF CLR SMALL_LED ;令綠色LED_ON MOV DATA_OUT,#DSP_L ;顯示L" JNB F0,NEXT_20 ;當旗標F0=0"則跳到NEXT_20 JMP BACK ;-------------- NEXT_20 MOV R0,#20 ;計數20次 $2:MOV DPTR,#SM1_DATA ;載入馬達反轉脈波資料 CALL ROTATE ;馬達反轉 DJNZ R0,$2 ;迴圈判斷 MOV R5,#50 ;延遲0.5秒 CALL DELAY JMP BACK ;------------------------- ROTATE: LOOP: CLR A ;清除累加器 MOVC A,@A DPTR ;取出馬達旋轉控制信號 CJNE A,#0,0 ;判斷信號是否有效不為0 RET ;若為0則停止送出信號 OP: MOV P2,A ;將控制信號由P2送出 MOV R5,#5 CALL DELAY ;延遲50ms INC DPTR ;增加控制信號指標值 JMP LOOP ;在執行迴圈一次 BACK JMP START ;-------------------------- ;DELAY R5*10 ms ;延遲副程式 DELAY: ;總延遲時間R5x10ms MOV R6,#50 $1:MOV R7,#100 $2:DJNZ R7,$2 DJNZ R6,$1 DJNZ R5,DELAY RET ;------ END 這是我要做電流大小控制步進馬達正反轉的程式 目前七段顯示跟電流大小偵測都正常 使用X8051來偵測程式,它所顯示的錯誤我都改掉了 但是步進馬達一直不轉動,不知道是我接錯還是程式出錯 我是P2輸出接到ULN2003---P2.0接1腳-P2.1接3腳-P2.2接2腳-P2.4接4腳 馬達A接16腳,A-接14腳,B接15腳,B-接13腳
------
?? | ||
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
請把電路圖 post 上來吧! ===================引 用 ryqrc418445 文 章=================== TRIG_WR REG P3.0 ;定義/WRITW(ADC0804)腳位 TRIG_INTR REG P3.1 ;定義/INTR(ADC0804)腳位 LARGE_LED REG P3.2 ;定義LARGE_LED(較大)輸出腳位 EQUAL_LED REG P3.3 ;定義EQUAL_LED(相等)輸出腳位 SMALL_LED REG P3.4 ;定義SMALL_LED(較小)輸出腳位 DATA_IN REG P1 ;定義DATA_IN(資料輸入)腳位 DATA_OUT REG P0 ;定義DATA_OUT(資料輸出)腳位 DSP_0 EQU 40H ;七段顯示器0"字形碼 DSP_H EQU 09H ;七段顯示器H"字形碼 DSP_L EQU 47H ;七段顯示器L"字形碼 SM_DATA DB FEH,FDH,FBH,F7H,0H ;正轉 SM1_DATA DB F7H,FBH,FDH,FEH,0H ;反轉 SP EQU 59 ORG 0H ;----- 啟動ADC0804開始載入輸入電壓V(X)轉換----- CLR F0 ;令旗標F0=0" START SETB TRIG_WR ;令ADC0804 IC之/WR=1" CLR TRIG_WR ;令ADC0804 IC之/WR=0" SETB TRIG_WR ;令ADC0804 IC之/WR=1" WAIT JB TRIG_INTR,WAIT ;等待ADC0804 IC之/INTR=0" ;----- 當/INTR=0"讀入轉換完成的V(X)對應值值 ----- READ MOV A,DATA_IN ;把資料讀入ACC(累加器) MOV B,A ;把資料保存在B(暫存器) ;----- 判斷輸入電壓V(X)是否大於3V ------- CLR C ;清除進位旗號C=0" SUBB A,#153 ;ACC值減去153(對應於V(X)=3V值) JNC LARGE ;當C=0"跳到LARGE路徑 ;----- 判斷輸入電壓V(X)是否小於2V ------- MOV A,B ;由B(暫存器)重新拷貝原先的資料 CLR C ;清除進位旗號C=0" SUBB A,#102 ;ACC值減去102(對應於V(X)=2V值) JC SMALL ;當C=1"跳到SMALL路徑 ;----- MIDDLE CLR EQUAL_LED ;令黃色LED_ON SETB LARGE_LED ;令紅色LED_OFF SETB SMALL_LED ;令綠色LED_OFF MOV DATA_OUT,#DSP_0 ;顯示0" CLR F0 ;令旗標F0=0" JMP BACK ;----- LARGE SETB EQUAL_LED ;令黃色LED_OFF CLR LARGE_LED ;令紅色LED_ON SETB SMALL_LED ;令綠色LED_OFF MOV DATA_OUT,#DSP_H ;顯示H" JNB F0,NEXT_10 ;當旗標F0=0"則跳到NEXT_10 JMP BACK ;------- NEXT_10 MOV R0,#20 ;計數20次 $1:MOV DPTR,#SM_DATA ;載入馬達正轉脈波資料 CALL ROTATE ;馬達正轉 DJNZ R0,$1 ;迴轉判斷 MOV R5,#50 ;延遲0.5秒 CALL DELAY JMP BACK ;------------- SMALL SETB EQUAL_LED ;令黃色LED_OFF SETB LARGE_LED ;令紅色LED_OFF CLR SMALL_LED ;令綠色LED_ON MOV DATA_OUT,#DSP_L ;顯示L" JNB F0,NEXT_20 ;當旗標F0=0"則跳到NEXT_20 JMP BACK ;-------------- NEXT_20 MOV R0,#20 ;計數20次 $2:MOV DPTR,#SM1_DATA ;載入馬達反轉脈波資料 CALL ROTATE ;馬達反轉 DJNZ R0,$2 ;迴圈判斷 MOV R5,#50 ;延遲0.5秒 CALL DELAY JMP BACK ;------------------------- ROTATE: LOOP: CLR A ;清除累加器 MOVC A,@A DPTR ;取出馬達旋轉控制信號 CJNE A,#0,0 ;判斷信號是否有效不為0 RET ;若為0則停止送出信號 OP: MOV P2,A ;將控制信號由P2送出 MOV R5,#5 CALL DELAY ;延遲50ms INC DPTR ;增加控制信號指標值 JMP LOOP ;在執行迴圈一次 BACK JMP START ;-------------------------- ;DELAY R5*10 ms ;延遲副程式 DELAY: ;總延遲時間R5x10ms MOV R6,#50 $1:MOV R7,#100 $2:DJNZ R7,$2 DJNZ R6,$1 DJNZ R5,DELAY RET ;------ END 這是我要做電流大小控制步進馬達正反轉的程式 目前七段顯示跟電流大小偵測都正常 使用X8051來偵測程式,它所顯示的錯誤我都改掉了 但是步進馬達一直不轉動,不知道是我接錯還是程式出錯 我是P2輸出接到ULN2003---P2.0接1腳-P2.1接3腳-P2.2接2腳-P2.4接4腳 馬達A接16腳,A-接14腳,B接15腳,B-接13腳 |
||
ryqrc418445
一般會員 發表:5 回覆:4 積分:1 註冊:2012-02-04 發送簡訊給我 |
http://delphi.ktop.com.tw/download.php?download=upload/4f40b442c181e_圖.JPG
左手邊的ADC0804部分沒有問題了 現在有問題的是步進馬達的部分 測了幾次都不理我 馬達的接線也確定了 但是因為和子丟掉了 所以忘記是12V還是5V的 如果是12V的怎麼辦 5V的又要怎麼處理 打擾 謝謝
------
?? |
||
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
(1)你先可以將 ADC 部分 and step motor 部分先分開來處理. (2)你所提供的圖很不清楚,不過可以確定 Step motor 應該有畫錯! (3)請先參閱很多 8051 的書, step motor 應該是標準範例題了,內有電路也有 source code, 照抄還錯,那就是你的問題. (4)如果擔心 12V 加在 Step motor 上,先用 5V 驅動看看. 你有加 ULN2003還有不會太快燒毀! 以上 ===================引 用 ryqrc418445 文 章=================== http://delphi.ktop.com.tw/download.php?download=upload/4f40b442c181e_圖.JPG 左手邊的ADC0804部分沒有問題了 現在有問題的是步進馬達的部分 測了幾次都不理我 馬達的接線也確定了 但是因為和子丟掉了 所以忘記是12V還是5V的 如果是12V的怎麼辦 5V的又要怎麼處理 打擾 謝謝 |
||
ryqrc418445
一般會員 發表:5 回覆:4 積分:1 註冊:2012-02-04 發送簡訊給我 |
STEPS EQU 200 TIMES EQU 10 PHASE EQU 11H OUT REG P1 ;------------------------ ORG 0 START: MOV A,#PHASE CALL POSITION LOOP1: ;左轉一圈 MOV R4, #STEPS RL_1: MOV OUT,A MOV R5,#TIMES CALL DELAY RL A DJNZ R4,RL_1 ;右轉一圈 MOV R4,#STEPS RR_1: MOV OUT,A MOV R5,#TIMES CALL DELAY RR A DJNZ R4,RR_1 JMP LOOP1 ;<-加入此行 ;------------------------ DELAY: MOV R7,#100 D1: MOV R6,#250 DJNZ R6,$ DJNZ R7,D1 DJNZ R5,DELAY RET ;------------------------ POSITION: MOV 30H,#4 MOV A,#PHASE P_1: MOV OUT,A MOV R5,#TIMES CALL DELAY RL A DJNZ 30H,P_1 RET ;------------------------ END 這些東西都是本討論區的資料!! 按程式及圖接上後馬達還是不動 馬達是四線兩相,因為還有兩隻接腳所以跑去問電子街的人 得知那兩隻腳為COM1,COM2所以就接上線接到輸入電壓 馬達編號KH42JM2B011,電壓5,V阻抗17歐姆,電流0.3A,精度1.8DEG 89S51,ULN2003訊號都有動作~用LED測試過了 卡在這裡好久了!!一直沒辦法往前走!!
------
?? |
||
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
|||
ryqrc418445
一般會員 發表:5 回覆:4 積分:1 註冊:2012-02-04 發送簡訊給我 |
===================引 用 aki 文 章=================== 假設你的程式與接線都確認沒有錯,那回不會是提供電流太小? 你的馬達每像要 0.3A=300mA,你先提供 5V@1A 的功率看看會不會動? 版主大大!!我聽你的去買一條變壓器5V@1A的 目前我在猜測是馬達的問題 但是我還是想請問您一些訊號跟電壓的問題 接ULN2003的IC輸入的電壓大約在3.8V-4V跳動這表示有頻率有訊號 但是輸出端的腳位沒有像這樣輸入端這樣跳動而且只有1V左右 問老師:他說這樣電壓一定不夠!! 我就跟她說有COM1.COM2來輸入驅動電壓←這樣的概念對嗎? 我還有式過接4050 FT5754的電路,整個測出來比ULN2003的輸出電壓還悲劇 IC輸給馬達的4隻腳電壓只有0.3V 這兩種接法都是書上的 這些接法最主要不是提升它的電壓嗎? 怎麼都DOWN下來了
------
?? |
||
aki
版主 發表:30 回覆:696 積分:755 註冊:2004-01-15 發送簡訊給我 |
>
===================引 用 ryqrc418445 文 章=================== ===================引 用 aki 文 章=================== 假設你的程式與接線都確認沒有錯,那回不會是提供電流太小? 你的馬達每像要 0.3A=300mA,你先提供 5V@1A 的功率看看會不會動? 版主大大!!我聽你的去買一條變壓器5V@1A的 目前我在猜測是馬達的問題 但是我還是想請問您一些訊號跟電壓的問題 接ULN2003的IC輸入的電壓大約在3.8V-4V跳動這表示有頻率有訊號 但是輸出端的腳位沒有像這樣輸入端這樣跳動而且只有1V左右 問老師:他說這樣電壓一定不夠!! 我就跟她說有COM1.COM2來輸入驅動電壓←這樣的概念對嗎? 我還有式過接4050 FT5754的電路,整個測出來比ULN2003的輸出電壓還悲劇 IC輸給馬達的4隻腳電壓只有0.3V 這兩種接法都是書上的 這些接法最主要不是提升它的電壓嗎? 怎麼都DOWN下來了 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |