|
Tài trợ cho PIC Vietnam |
Cơ cấu chấp hành (Actuator) Động cơ DC, AC, động cơ không chổi than, động cơ không cảm biến... |
|
Ðiều Chỉnh | Xếp Bài |
28-02-2006, 04:15 AM | #1 |
Nhập môn đệ tử
Tham gia ngày: Feb 2006
Bài gửi: 2
: |
Điều khiển Stepper Motor
Em là thành viên mới, em muốn hỏi về điều khiển Stepper motor sử dụng PIC6F84. Em có 1 đoạn code, sử dụng 3 nút bấm điều khiển quay ben trái, quay ben phải, va dừng lại. em muốn thêm một nút điều khiển cho tự quay có chu kỳ, quay hết một vòng rồi quay ngược lại (vì quay liên tục sẽ bị rối dây cáp).
Đây là code: Code:
;******************************************************** list p=pic16f84a include p16f84a.inc __config _hs_osc & _wdt_off & _pwrte_on & _cp_off ;**************** Label Definition ******************** cblock h'0c' mode ;Operation mode ;0=stop 1=right 2=left count1 ;Wait counter count2 ;Wait counter(for 1msec) endc rb0 equ 0 ;RB0 of PORTB rb1 equ 1 ;RB1 of PORTB rb2 equ 2 ;RB2 of PORTB rb5 equ 5 ;RB5 of PORTB rb7 equ 7 ;RB7 of PORTB ;**************** Program Start *********************** org 0 ;Reset Vector goto init org 4 ;Interrupt Vector clrf intcon ;Clear Interruption reg ;**************** Initial Process ********************* init bsf status,rp0 ;Change to Bank1 clrf trisa ;Set PORTA all OUT movlw b'00100111' ;RB0,1,2.5=IN RB7=OUT movwf trisb ;Set PORTB movlw b'10000000' ;RBPU=1 Pull up not use movwf option_reg ;Set OPTION_REG bcf status,rp0 ;Change to Bank0 clrf mode ;Set mode = stop clrf count1 ;Clear counter clrf count2 ;Clear counter movlw b'00000101' ;Set PORTA initial value movwf porta ;Write PORTA bsf portb,rb7 ;Set RB7 = 1 btfsc portb,rb5 ;RB5 = 0 ? goto $-1 ;No. Wait start ;************* Check switch condition ***************** btfsc portb,rb1 ;RB1(stop key) = ON ? goto check1 ;No. Next clrf mode ;Yes. Set stop mode goto drive ;No. Jump to motor drive check1 btfsc portb,rb2 ;RB2(right key) = ON ? goto check2 ;No. Next movlw d'1' ;Yes. Set right mode movwf mode ;Save mode goto drive ;No. Jump to motor drive check2 btfsc portb,rb0 ;RB0(left key) = ON ? goto drive ;No. Jump to motor drive movlw d'2' ;Yes. Set left mode movwf mode ;Save mode ;******************** Motor drive ********************* drive movf mode,w ;Read mode bz start ;mode = stop bsf portb,rb7 ;Set RB7 = 1 btfsc portb,rb5 ;RB5 = 0 ? goto $-1 ;No. Wait movlw d'5' ;Set loop count(5msec) movwf count1 ;Save loop count loop call timer ;Wait 1msec decfsz count1,f ;count - 1 = 0 ? goto loop ;No. Continue bcf portb,rb7 ;Set RB7 = 0 btfss portb,rb5 ;RB5 = 1 ? goto $-1 ;No. Wait movf porta,w ;Read PORTA sublw b'000000101' ;Check motor position bnz drive2 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive1 ;Yes. Right movlw b'00001001' ;No. Set Left data goto drive_end ;Jump to PORTA write drive1 movlw b'00000110' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive2 movf porta,w ;Read PORTA sublw b'000000110' ;Check motor position bnz drive4 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive3 ;Yes. Right movlw b'00000101' ;No. Set Left data goto drive_end ;Jump to PORTA write drive3 movlw b'00001010' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive4 movf porta,w ;Read PORTA sublw b'000001010' ;Check motor position bnz drive6 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive5 ;Yes. Right movlw b'00000110' ;No. Set Left data goto drive_end ;Jump to PORTA write drive5 movlw b'00001001' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive6 movf porta,w ;Read PORTA sublw b'000001001' ;Check motor position bnz drive8 ;Unmatch movf mode,w ;Read mode sublw d'1' ;Right ? bz drive7 ;Yes. Right movlw b'00001010' ;No. Set Left data goto drive_end ;Jump to PORTA write drive7 movlw b'00000101' ;Set Right data goto drive_end ;Jump to PORTA write ;------- drive8 movlw b'00000101' ;Compulsion setting drive_end movwf porta ;Write PORTA goto start ;Jump to start ;************* 1msec Timer Subroutine ***************** timer movlw d'200' ;Set loop count movwf count2 ;Save loop count tmlp nop ;Time adjust nop ;Time adjust decfsz count2,f ;count - 1 = 0 ? goto tmlp ;No. Continue return ;Yes. Count end ;******************************************************** ; END of Stepper Motor controller ;******************************************************** end |
|
|
Similar Threads | ||||
Ðề tài | Người gửi | Chuyên mục | Trả lời | Bài mới |
Stepper motor và Servo Motor | briantk_1988 | Cơ cấu chấp hành (Actuator) | 3 | 11-12-2007 08:01 PM |
8 wire stepper motor | briantk_1988 | Cơ cấu chấp hành (Actuator) | 3 | 30-09-2006 11:51 PM |
Làm chủ các motor với PIC18F4x31 | ksngoc | Cơ bản về vi điều khiển và PIC | 1 | 02-07-2006 08:59 PM |