1. Xin chào Khách ! Ban quản trị sẽ tiến hành nâng cấp diễn đàn từ ngày 11/8/2017 Mọi truy cập có thể bị dán đoạn, mong bạn thông cảm!
    Dismiss Notice

Hướng dẫn Điều khiển động cơ bước với IC driver a4988

Thảo luận trong 'Họ AVR'

Đang xem chủ đề này ( Thành viên: 0, Khách: 2)

Moderators: mta_cdt
  1. xaxa9ztb

    xaxa9ztb Kỹ sư Staff Member

    Tham gia ngày:
    14/11/13
    Bài viết:
    202
    Đã được thích:
    193
    Điểm thành tích:
    43
    Giới tính:
    Nam
    Mình vừa làm cái mạch điều khiển động cơ bước với IC driver a4988 nên muốn chia sẻ với mọi người
    1. Các loại động cơ bước thông dụng và Các cách điều khiển động cơ bước.
    • Động cơ bước có nhiều loại như động cơ biến trở từ, động cơ đơn cực, động cơ lưỡng cực.
    • Về step thì có loại là 0.36 độ/ 1step là nhỏ nhất mình từng biết, loại 0.72/1step là loại nhỏ nhất mình từng có. Và thông dụng nhất là loại 1.8 độ/ 1 step. Tức là 200 step sẽ được 1 vòng
    • Trên thị trường chúng ta hay gặp nhất là động cơ đơn cực và lưỡng cực. Khi đi mua thì hay gặp động cơ 4 dây, 5 dây, 6 dây, 8 dây. Trong đó 4 dây là 6 dây là gặp thường xuyên nhất. Dưới đây là sơ đồ dây của hãng Oriental
    Screenshot_2.
    • Động cơ bước có nhiều cách điều khiển. Có thể điều khiển các dây trực tiếp qua 4 cổng qua MCU thông qua driver đệm công suất. cách này hơi phức tạp một chút, cần phải hiểu rõ bên trong động cơ và thường chỉ điều khiển được full bước
    • Cách thông dụng nhất là dùng các IC chuyên dụng điều khiển động cơ bước. Các IC hay gặp nhất là TB6560, TB6600, L297, A4988, DRV8825, MA860H... Việc lựa chọn dùng loại driver nào phụ thuộc vào loại động cơ và công suất động cơ định điều khiển. Ví dụ như A4988, DRV8825 dùng để điều khiển các loại động cơ nhỏ có công suất bé ví dụ như trong máy photo hoặc máy in 3d, TB6560 hoặc TB6600 thì lại dùng để điều khiển các loại động cơ lớn hơn một chút ví dụ như trong các loại máy cnc mini. Các loại động cơ to thì người ta hay dùng MA860H hoặc các driver khủng hơn nữa
    • Nhìn chung cách giao tiếp với các module Driver này tương đối giống nhau. Chúng đều có 3 port cơ bản là DIR ( để điểu khiển hướng quay động cơ), EN ( để điều khiển bật tắt động cơ), CLK ( xuất xung để dịch chuyển từng step). Một số loại module như tb6560 tb6600 hoặc MA860H thì mỗi port đều có 2 pin. Ví dụ như EN+ EN- CW+ CW- CLK+ CLK-. vì thế người dùng có thể tùy chọn điều khiển theo mức 0 hoặc mức 1. Mình thường kéo 3 chân xuống thấp và điều khiển bằng 3 chân còn lại
    • Điều quan trọng nhất là các module này là chúng có thể điều khiển được vi bước như 1/16 step, 1/8 step, 1/2 step và full step. nếu full step thì bạn cần 200 step để quay hết 1 vòng đối với loại 1.8 độ 1step. Còn nếu dùng chế độ vi bước 1/16 step thì một xung động cơ chỉ dịch chuyển 1,8/16 độ. Tức là bạn phải cần 200*16=3200 xung để quay hết một vòng. điều này làm tăng độ phân giải và tăng độ chính xác cho step
    • Cách kết nối: với động cơ 4 dây thì bạn tìm các dây xem dây nào là kênh A- A+ B- B+ và nối vào driver. với động cơ 5 dây 6 dây hoặc 8 dây thì bạn cắt bỏ hết những dây chung đi và chỉ sử dụng 4 dây ở 2 đầu cuộn dây để điều khiển
    2. Giới thiệu module Driver A4988
    • Mình biết đến IC này qua việc tìm hiểu máy in 3d. Khá ngạc nhiên là hầu hết các máy in 3d đều dùng con IC này điều khiển vì máy in 3d tải trọng nhỏ
    • Đến khi được cầm con này trên tay thì lại khá ngạc nhiên nữa vì nó quá nhỏ, nhỏ hơn 10 lần so với tb6560 hoặc 20 lần so với MA860H :D Nó chỉ to hơn móng tay một chút xíu :)
    Screenshot_4.
    • Tính năng:
    Điều khiển đơn giản
    Điều khiển được động cơ hoạt động với điện áp lên tới 35V dòng lên tới 2A
    Có 5 chế độ: full bước, 1/2 bước, 1/4 bước, 1/8 bước, 1/16 bước
    Điểu chỉnh dòng ra bằng triết áp (bé xíu) nằm bên trên Current Limit = VREF × 2.5
    Tự động Shutdown thì quá nóng
    ....​
    • Sơ đồ kết nối
    Screenshot_5.
    • Lựa chọn chế độ full hay 1/2 hay 1/4.. sẽ được thông qua 3 pin MS1 MS2 MS3. Mình thường nối thẳng 3 pin này với công tắc bit 3p để dễ thiết lập từ trên phần cứng. Lưu ý là nếu thả nổi 3 pin này tức là mode full step.
    Screenshot_6.
    • Bật tắt động cơ thì thông qua pin ENABLE, mức LOW là bật module, mức HIGH là tắt module
    • Điều khiển chiều quay của động cơ thông qua pin DIR
    • Điều khiển bước của động cơ thông qua pin STEP, mỗi xung là tương ứng với 1 bước ( hoặc vi bước)
    • Hai chân Sleep với Reset nối với nhau luôn . (Tại sao thì xem datasheet đính kèm)
    3. Điều khiển động cơ bước qua A4988 bằng AVR
    Sơ đồ nguyên lý: Mạch của mình dùng at8 có thêm lcd và keypad
    Screenshot_8. Screenshot_9. Screenshot_7.
    Code: ở đây mình viết một file .h, bạn có thể add vào project của mình
    Mã:
    /*
    /*
     * StepMotor.h
     *
     * Created: 17/11/2014 2:57:30 SA
     *  Author: ThanhTung
     */ 
    
    
    #ifndef STEPMOTOR_H_
    #define STEPMOTOR_H_
    #define F_CPU 8000000UL
    #include <avr/io.h>
    #include <util/delay.h>
    #define EN PC0
    #define STEP PC1
    #define DIR PB5
    #define ENSTEP_PORT PORTC
    #define ENSTEP_DDR  DDRC
    #define DIR_PORT PORTB
    #define DIR_DDR DDRB
    void Init_motor()
    {
        ENSTEP_DDR |= ((1<<EN)|(1<<STEP));
        DIR_DDR |= (1<<DIR);
        ENSTEP_PORT |=(1<<EN); //stop motor
    }
    /*
    angle: goc quay
    dir: 1 hoac 0
    mode: 1 hoac 2 hoac 4 hoac 8 hoac 16
    */
    void Motor(uint16_t angle, uint8_t dir, uint8_t mode)
    {
        uint16_t step;
        uint16_t time;
        time = (int) 16/mode;
        step = (int) (angle*mode)/1.8;
        /*start*/
        ENSTEP_PORT &=~(1<<EN);  //EN =0
        /*direction*/
        if (dir==1)
        {
            DIR_PORT |=(1<<DIR);
        }
        else if(dir==0)
        {
            DIR_PORT &= ~(1<<DIR);
        }
        /*pulse Step*/
        for (uint16_t i = 0; i<step;i++)
        {
            //TODO:: Please write your application code
            ENSTEP_PORT|=(1<<STEP);
            for (uint16_t j = 0;j<time;j++) {_delay_us(100);}
            ENSTEP_PORT &= ~ (1<<STEP);
            for (uint16_t j = 0;j<time;j++) {_delay_us(100);}
        }
        /*stop*/
        ENSTEP_DDR |=(1<<EN);
        ENSTEP_PORT |= (1<<EN);
       
    }
    
    
    
    
    
    #endif /* STEPMOTOR_H_ */
    
    Có thể dùng file này cho module TB6560.
    Kết nối như sau. EN+ CLK- CW- nối xuống đất. Điều khiển bằng 3 pin EN- CLK+ CW+.
    Thay đổi một chút ở code là khi bật module thì chân EN- phải là HIGH và ngược lại với khi tắt module

    PCB
    Screenshot_10.
    Mạch Thật:
    Screenshot_11.

    Tài liệu đính kèm:
    1. Tài liệu về động cơ bước
    2. Datasheet của A4988
    3. File altium của mạch trên
    4. file EAGLE của module a4988

    P/s: Mua động cơ ở đâu?
    Xin trả lời các bạn là mua ở chợ trời. Khá là rẻ. khoảng 40k là mua đc con cỡ NEMA14 NEMA17 rồi.
    hôm trước mình còn hên mua được cái step có hộp giảm tốc với giá 100k trong khi đó giá used của amazon là 120$ :D
     

    Các file đính kèm:

    minhnhí28, lengocchung, Sad Prince6 others thích bài này.
  2. vantoananh20

    vantoananh20 Học sinh phổ thông

    Tham gia ngày:
    18/3/13
    Bài viết:
    3
    Đã được thích:
    1
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Nghề nghiệp:
    sinh vien
    Nơi ở:
    hai huong
    anh cho em hỏi mua A4988 ơ đâu vậy
     
  3. xaxa9ztb

    xaxa9ztb Kỹ sư Staff Member

    Tham gia ngày:
    14/11/13
    Bài viết:
    202
    Đã được thích:
    193
    Điểm thành tích:
    43
    Giới tính:
    Nam
    Minh Hà có bán đấy bạn
     
  4. leducphuc

    leducphuc Học sinh phổ thông

    Tham gia ngày:
    3/10/13
    Bài viết:
    4
    Đã được thích:
    1
    Điểm thành tích:
    3
    Giới tính:
    Nam
    cho em hỏi cái này đk động cơ bước có V=4.7V được k? Tại em thấy Vmotor từ 8 đến 35.
     
  5. kiruspkt

    kiruspkt Sinh viên đại học

    Tham gia ngày:
    26/9/13
    Bài viết:
    70
    Đã được thích:
    43
    Điểm thành tích:
    18
    Giới tính:
    Nam
    step-moto. driver step moto.
    Các bác cho em hỏi tí: Với cái động cơ bước như thế này và dùng mạch driver thế này sao động cơ không chạy nhỉ.
    Nguồn cấp 12v 3a.
    Code thì em viết đơn giản thôi ( code CCS )
    void main()
    {........................
    while(true){
    a1=1; delay_ms(30); a1=0;
    b1=1; delay_ms(30); b1=0;
    a2=1; delay_ms(30); a2=0;
    b2=1; delay_ms(30); b2=0;}}
     
  6. habaoanh

    habaoanh Học sinh phổ thông

    Tham gia ngày:
    20/10/13
    Bài viết:
    7
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nữ
    Em co driver 6 day 1.5A ,dung module nay duoc k thot
     
  7. hungk47tnut

    hungk47tnut Học sinh trung cấp

    Tham gia ngày:
    11/3/15
    Bài viết:
    30
    Đã được thích:
    3
    Điểm thành tích:
    8
    a ơi.động cơ bước 6 dây thì điều khiển thế nào vậy ạ? ở kia e thấy động cơ có 4 dây thôi ạ
     
  8. xaxa9ztb

    xaxa9ztb Kỹ sư Staff Member

    Tham gia ngày:
    14/11/13
    Bài viết:
    202
    Đã được thích:
    193
    Điểm thành tích:
    43
    Giới tính:
    Nam
    6 dây thì bỏ 2 dây chung đi.
    bạn để ý loại số 2 trên hình ở #1
     
  9. DoanhDoanh

    DoanhDoanh Học sinh trung cấp

    Tham gia ngày:
    10/1/14
    Bài viết:
    60
    Đã được thích:
    16
    Điểm thành tích:
    8
    Giới tính:
    Nam
    Không có full code nhỉ?
     
  10. vandepnguyen

    vandepnguyen Học sinh phổ thông

    Tham gia ngày:
    17/12/15
    Bài viết:
    2
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
     
Moderators: mta_cdt

Chia sẻ trang này