PIC Vietnam

Go Back   PIC Vietnam > Robotics > Cơ cấu chấp hành (Actuator)

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

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...

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 28-02-2006, 04:15 AM   #1
picfan
Nhập môn đệ tử
 
Tham gia ngày: Feb 2006
Bài gửi: 2
:
Exclamation Đ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
Em cảm ơn
picfan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 28-02-2006, 06:28 PM   #2
picfan
Nhập môn đệ tử
 
Tham gia ngày: Feb 2006
Bài gửi: 2
:
Em dung "2-phase unipolar stepper motor" . Gồm 48 bước và mỗi bước 7.5 độ.
picfan vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-03-2006, 03:29 PM   #3
tinhthanthep
Đệ tử 6 túi
 
tinhthanthep's Avatar
 
Tham gia ngày: Jun 2005
Bài gửi: 141
:
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.
tinhthanthep vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-04-2006, 11:48 AM   #4
linhnc308
Đệ tử 5 túi
 
Tham gia ngày: Oct 2005
Bài gửi: 117
:
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.
__________________
CallerID, Ethernet-RS232, PICWEB, Cảnh báo BTS
Giải pháp toàn diện giám sát - điều khiển từ xa qua GSM/Internet
0988006696

http://linhnc308.blogspot.com
linhnc308@gmail.com
linhnc308 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-07-2006, 07:57 PM   #5
cpc
Nhập môn đệ tử
 
Tham gia ngày: Mar 2006
Bài gửi: 6
:
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 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-07-2006, 01:30 PM   #6
cpc
Nhập môn đệ tử
 
Tham gia ngày: Mar 2006
Bài gửi: 6
:
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 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 29-07-2006, 01:32 PM   #7
cpc
Nhập môn đệ tử
 
Tham gia ngày: Mar 2006
Bài gửi: 6
:
à viết bằng 8051 nhá!mình không có pic.Hi vọng được giúp đỡ!
cpc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-11-2008, 02:44 PM   #8
trungduc
Đệ tử 2 túi
 
Tham gia ngày: Oct 2008
Bài gửi: 44
:
Steper motor

Trích:
Nguyên văn bởi cpc View Post
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
trungduc vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-11-2009, 08:23 PM   #9
hangocminh1989
Đệ tử 6 túi
 
Tham gia ngày: Apr 2009
Bài gửi: 132
:
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
hangocminh1989 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-04-2010, 08:45 AM   #10
nhatson.elec
Đệ tử 4 túi
 
Tham gia ngày: Nov 2008
Bài gửi: 84
:
độ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
nhatson.elec vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-04-2010, 12:23 AM   #11
robotden
Đệ tử 5 túi
 
robotden's Avatar
 
Tham gia ngày: May 2007
Bài gửi: 102
:
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
__________________
Thật bó tay!
robotden vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-04-2010, 12:14 AM   #12
haruoi
Đệ tử 2 túi
 
haruoi's Avatar
 
Tham gia ngày: Apr 2010
Bài gửi: 29
:
Trích:
Nguyên văn bởi cpc View Post
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 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-04-2010, 12:16 AM   #13
haruoi
Đệ tử 2 túi
 
haruoi's Avatar
 
Tham gia ngày: Apr 2010
Bài gửi: 29
:
Hix, trả lời xong. Để ý lại bài thì đã từ năm 06.
haruoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến

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


Múi giờ GMT. Hiện tại là 12:01 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam