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

看板ASM (組合語言)作者 (TDiCS)時間17年前 (2007/10/20 16:40), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/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) 所有 port 都可以當 IO port datasheet 有說明 : (1)if key pressed(port P1 pin 0) , the motor loop forward 2 step per second    : (是不是說在P1的pin 0打勾,就要讓馬達每秒鐘正轉2個半步) 我猜 打勾 這個應該是 keil C 裡面的IO模擬功能吧 如是,那你的解釋就沒錯 不過,我不曉得你的 半步 是多少 題意來說,是指 每秒 2個 full step (每秒兩步) 另,題目是說 key press 這個應該是指 按一下 不過 keil C 裡,打勾表邏輯訊號 HI(永遠) (勾 - HI ; 不勾 - Low) 這個算是 key down 表 按住 : (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 反 ) 你的解釋沒錯,不過簡單來說,pin2只是用來控制 Full step 還是 half step 兩者間的切換 跟 pin0, pin1 沒有關係 : 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 什麼意思,完全看不太懂) : 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 也完全看不懂) 我不曉得你的馬達有幾條線,簡單一點的 就是 四條線(四線二相),上述 binary 四個bit 剛好對應四條電線的電訊號 這樣不曉得, 1428..... ,了解否 不過,如果使用題目給定的 p4~7 當output 此值就不是1 4 2 8 or 1 5 4 ..... 至於 啥是 full step 啥是 half step 簡單來說,馬達轉一圈如果需要 24 step 的話(每步18度) full step - 每圈24步 half step - 每圈48個半步 (恩~很白癡的解釋) 另外 full step 有兩個模式 單相激磁 雙相激磁 題目所給的 為單相激磁 更詳細的,google一下 step motor 步進馬達 都有很多資料 : 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負的表示反轉) : 又臭又長,感謝大家努力的看完它,謝謝。 不完全是 你會錯意了 對照 題目給的 table (控制訊號) 以 full step 來說 有四個不同的控制訊號 也就是 上上的 step[i] i = 0~3 那個 你如果要馬達轉動的話 i 的順序為(正向) 0 1 2 3 0 1 2 3 0 1 2 3 對照下 上上述 i 則為 begin end 裡面的 step step ~ steptab maxstep 則為 3 direction 則是方向 +1 表 正向(正轉) 0 表 停止 -1 表 反向(反轉) ------ 我最討厭這種前後變數名稱不一的題目了 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.220.183 ※ 編輯: FancyWing 來自: 140.115.220.183 (10/20 16:46)

10/20 18:19, , 1F
感謝你,正在努力的看你的解決 :)
10/20 18:19, 1F
文章代碼(AID): #176Ry0Jk (ASM)
文章代碼(AID): #176Ry0Jk (ASM)