|
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 |
28-02-2006, 06:28 PM | #2 |
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 độ.
|
01-03-2006, 03:29 PM | #3 |
Đệ tử 6 túi
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. |
26-04-2006, 11:48 AM | #4 |
Đệ 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 |
25-07-2006, 07:57 PM | #5 |
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 độ!
|
29-07-2006, 01:30 PM | #6 |
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 độ.
|
29-07-2006, 01:32 PM | #7 |
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 đỡ!
|
04-11-2008, 02:44 PM | #8 | |
Đệ tử 2 túi
Tham gia ngày: Oct 2008
Bài gửi: 44
: |
Steper motor
Trích:
thi thu tu la : 2-5-3-4 quay vong. chuc may man |
|
04-11-2009, 08:23 PM | #9 |
Đệ 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
|
23-04-2010, 08:45 AM | #10 |
Đệ 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
|
25-04-2010, 12:23 AM | #11 |
Đệ tử 5 túi
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! |
30-04-2010, 12:14 AM | #12 | |
Đệ tử 2 túi
Tham gia ngày: Apr 2010
Bài gửi: 29
: |
Trích:
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. |
|
30-04-2010, 12:16 AM | #13 |
Đệ tử 2 túi
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.
|
|
|
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 |