Re: [問題] 8051控制步進馬達程式

看板ASM (組合語言)作者 (暗黑狂風)時間17年前 (2007/10/31 02:53), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
※ 引述《typecommand (:))》之銘言: : 我先承認這是學校程式,但不是請大家幫我寫,而是我題目看不太懂 : ,題意懂了,我就會寫了 (我是用Keil C去模擬port的訊號) : 一)P1 pin 0-3 are input, pin 4-7 are output and are used to drive motor. : (P1有可能同時做為input port和output port嗎? 我是把P2設為output port) 當然可以 如果你高興的話 也是可以1 3 5 7做output 2 4 6 8做input 只是沒人會這麼閒這樣做就是....XD 一般來說 以作業來講 都是以自己好理解好控制為主 如果有考慮到使用者層面的問題 就得注意一下怎樣的pin腳設計才會讓使用者好用 : (1)if key pressed(port P1 pin 0) , the motor loop forward 2 step per second    : (是不是說在P1的pin 0打勾,就要讓馬達每秒鐘正轉2個半步) 打勾? 應該就是說按鍵吧 如果按下pin0的按鍵 就讓它以每秒2步進行正轉(也就是說每步延遲是0.5s) : (2)if key pressed(port P1 pin 1) , the motor loop backward 2 step per second.      : (同上) 同上 不過這變反轉 : (3)if switch on (port P1 pin 2==1) , using Full step control, else half step  : (是不是pin2 和 pin0同時打勾,就正轉全步) : ( pin2 和 pin1 反 ) 這邊的設定是讓它選擇是用一相激磁(full step)或一~二相激磁(half step) 如果pin2按下的話 就用一相激磁(full step) 沒按就是一~二相激磁(half step) : Step motor control: : Full step : step[0] = 1; { binary 0001 } : step[1] = 4; { binary 0100 } : step[2] = 2; { binary 0010 } : step[3] = 8; { binary 1000 } : (1 4 2 8 什麼意思,完全看不太懂) 這邊就是設定它激磁順序 1 4 2 8用二進位(binary)來看會比較好理解 依照上面的資料來看 它的激磁針腳應該是如下 pin7 pin6 pin5 pin4 B' B A' A ↓激 0 0 0 1 = 1 磁 0 1 0 0 = 4 方 0 0 1 0 = 2 向 1 0 0 0 = 8 所以激磁順序是 A→ B→ A'→ B'→A 循環 每次只激磁一個針腳是一相激磁的特色 : half-step control: : step[0] = 1; { binary 0001 } : step[1] = 5; { binary 0101 } : step[2] = 4; { binary 0100 } : step[3] = 6; { binary 0110 } : step[4] = 2; { binary 0010 } : step[5] = 10; { binary 1010 } : step[6] = 8; { binary 1000 } : step[7] = 9; { binary 1001 } : (1 5 4 6 2 10 8 9 也完全看不懂) 所以這邊解釋如上 但不同的地方在於它是一~二相激磁 它的激磁順序是A→ AB→ B→ BA'→ A'→ A'B'→ B'→ B'A→ A 而這種激磁方式可以提高它轉動的解析度 (也就是一步的度數 在此為提高一倍 為原本一相激磁的半步) 至於原理..請自己查書 XD : procedure onestep( direction ); : begin : step := step + direction; : if step > maxstep then step := 0 : else if step < 0 then step := maxstep; : write( motor, steptab[step] ); : end; : (上述的虛擬碼是不是在說,步進馬達不能一次轉動太多,不能超 : 過maxstep。另外direction有可能是負的嗎?否則幹嘛判斷step<0 : 的時候,step = maxstep,還是說direction負的表示反轉) : 又臭又長,感謝大家努力的看完它,謝謝。 這邊大概就是說你要負責處理步數的問題 0步再反轉也不會是-1步 所以要變成maxstep maxstep再正轉也不會是maxstep+1步 會歸0 至於maxstep步數是多少 就看你用的激磁方式了 以上 -- 好像太晚回 囧rz -- A︵A ( _) (__) (_ ) ≡︽ ︽≡ ╱◢▆◣ ◢▆◣╲ ﹨﹨ ◢▌∥∥ ∕∕ は… Sound Horizon 5th Story CD—Roman うか? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.223.165.40 ※ 編輯: darkstorm 來自: 61.223.165.40 (10/31 02:53) ※ 編輯: darkstorm 來自: 61.223.165.40 (10/31 02:56)
文章代碼(AID): #179tscRt (ASM)
文章代碼(AID): #179tscRt (ASM)