PDA

View Full Version : Điều khiển Stepper Motor


picfan
28-02-2006, 04:15 AM
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:

;************************************************* *******

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


Em cảm ơn

picfan
28-02-2006, 06:28 PM
Em dung "2-phase unipolar stepper motor" . Gồm 48 bước và mỗi bước 7.5 độ.

tinhthanthep
01-03-2006, 03:29 PM
Cậu cho hỏi là 4 chân nào của PIC nối với 4 dây của động cơ?
và chân nào của PIC nối với các nút bấm.

linhnc308
26-04-2006, 11:48 AM
Tôi có cái lập trình cho Step bằng CCS. Điều khiẻn theo cả 3 kiểu: 1 pha, 2 pha và nửa bước. Mới viết cho step nên chắc còn gà lắm.

code:
int8 duty_cycle;

while (1)
{
//Dieu khien dong co buoc: DK nua buoc (ULN2803)
if (mode)
{
PortD = 0x60;
delay_ms(duty_cycle);
PortD = 0x70;
delay_ms(duty_cycle);
PortD = 0x30;
delay_ms(duty_cycle);
PortD = 0xB0;
delay_ms(duty_cycle);
PortD = 0x90;
delay_ms(duty_cycle);
PortD = 0xD0;
delay_ms(duty_cycle);
PortD = 0xC0;
delay_ms(duty_cycle);
PortD = 0xE0;
delay_ms(duty_cycle);
}
else
{
PortD = 0xE0;
delay_ms(duty_cycle);
PortD = 0xC0;
delay_ms(duty_cycle);
PortD = 0xD0;
delay_ms(duty_cycle);
PortD = 0x90;
delay_ms(duty_cycle);
PortD = 0xB0;
delay_ms(duty_cycle);
PortD = 0x30;
delay_ms(duty_cycle);
PortD = 0x70;
delay_ms(duty_cycle);
PortD = 0x60;
delay_ms(duty_cycle);
}
}

Tôi dùng động cơ loại 6 dây. ĐK khá tốt, quay thạnn ngược và ĐK tôc độ bằng máy tính. Mà không biết mạch công suất cho Step dùng H1061 đc không nhỉ. Cái trên tôi dùng ULN2803.

cpc
25-07-2006, 07:57 PM
Nói tới cái này mới nhớ!Hôm trước mới chôm được cáo động cơ bước mà không biết bao nhiêu độ một bước .có cách nào dể nhận thấy điều này nhỉ!Không lẻ kích xung rồ đo độ!

cpc
29-07-2006, 01:30 PM
hic cai' động cơ đó có 6 dây!mình kiểm tra thử thì 2 dây ở giữa là dây chung ,còn 4 dây hai bên là dây kích .mình đoán thử từng cuộn dây 1,2,3,4.mình thử điều khiển nhưng động cơ tác động nhưng nó vẫn cân bằng tại một chổ.Chắc do chương trình sai.Có ai có thể giúp đỡ mình với.Động cơ này quay một bước là 1,8 độ.

cpc
29-07-2006, 01:32 PM
à viết bằng 8051 nhá!mình không có pic.Hi vọng được giúp đỡ!

trungduc
04-11-2008, 02:44 PM
hic cai' động cơ đó có 6 dây!mình kiểm tra thử thì 2 dây ở giữa là dây chung ,còn 4 dây hai bên là dây kích .mình đoán thử từng cuộn dây 1,2,3,4.mình thử điều khiển nhưng động cơ tác động nhưng nó vẫn cân bằng tại một chổ.Chắc do chương trình sai.Có ai có thể giúp đỡ mình với.Động cơ này quay một bước là 1,8 độ.

ban co the dung 1 cuc pin han 2 dau day va thu dan tung truong hop. Cua minh loai 6 day nhung 2 cuc ngoai cung la chung minh noi vao + neu theo thu tu tu trai qua phai la 123456
thi thu tu la : 2-5-3-4 quay vong.
chuc may man

hangocminh1989
04-11-2009, 08:23 PM
anh em ơi,luồng này hình như lâu rùi không bàn bạc nữa thì phải. các sư phụ cho em hỏi về vụ chọn động cơ bước thế nào mới phù hợp với yêu cầu, làm sao biết cái nào 2 pha, 3 pha, em là lính mới nên gà lắm. mong các sư huynh giúp đỡ nhiệt tình nha, em xắp phải nộp bài tập lớn rùi. thank

nhatson.elec
23-04-2010, 08:45 AM
động cơ bước laọi nào thường trên mác sẽ có ghi, có thể đựa vào góc bước dể xác định, 5 pha thường là 0.72, 3 pha là 1.2, còn 2 pha là 1.8o

robotden
25-04-2010, 12:23 AM
muốn biết 2 pha, 3 pha, 5 pha thì tốt nhất nên xem động cơ buớc đó hiệu j. sau đó search google. Hoặc có thể nhìn số lượng dây mà đoán

haruoi
30-04-2010, 12:14 AM
hic cai' động cơ đó có 6 dây!mình kiểm tra thử thì 2 dây ở giữa là dây chung ,còn 4 dây hai bên là dây kích .mình đoán thử từng cuộn dây 1,2,3,4.mình thử điều khiển nhưng động cơ tác động nhưng nó vẫn cân bằng tại một chổ.Chắc do chương trình sai.Có ai có thể giúp đỡ mình với.Động cơ này quay một bước là 1,8 độ.



Mình cũng dùng 8051 điều khiển động cơ bước. Mình nghĩ nếu khi bạn cấp tín hiệu vào từng pha của động cơ bước mà động cơ vẫn cân bằng tại 1 chỗ thì lý do là:
1. Bạn xác định nhầm thứ tự các đầu dây của động cơ bước.
2. Điện áp đặt vào các pha không đủ lớn. Mình mua động cơ bước ngoài chợ giời. Ngoài vỏ thì nghi là DC 5,6 V nhưng mình phải cấp 12V thì động cơ mới chạy.
3. Bạn lập trình lỗi. Lúc đầu t thử cấp tín hiệu vào từng pha( phải theo thứ tự xác định). Sau thì t cấp tín hiệu vào 2 pha kề nhau. Như vậy thì momen chuyển động của dc sẽ lớn hơn.

haruoi
30-04-2010, 12:16 AM
Hix, trả lời xong. Để ý lại bài thì đã từ năm 06.