Kỹ thuật điều khiển động cơ bước tổng hợp

IC driver a4988

IC driver a4988

Các hệ truyền động rời rạc thường được thực hiện nhờ động cơ chấp hành đặc biệt gọi là động cơ bước. Động cơ bước là một loại động cơ điện có nguyên lý và ứng dụng khác biệt với đa số các loại động cơ điện thông thường.

Chúng thực chất là một động cơ đồng bộ dùng để biến đổi các tín hiệu điều khiển dưới dạng các xung điện rời rạc kế tiếp nhau thành các chuyển động góc quay hoặc các chuyển động của Rotor và có khả năng cố định Rotor vào những vị trí cần thiết.

Như hình 1 minh họa: bên trong động cơ bước có 4 cuộn dây Stator được sắp xếp theo cặp đối xứng qua tâm. Rotor là nam châm vĩnh cửu có nhiều răng. Động cơ bước hoạt động trên cơ sở lý thuyết điện - từ trường : các cực cùng dấu đẩy nhau và các cực khác dấu hút nhau. Chiều quay được xác định bởi từ trường của Stator, mà từ trường này là do dòng điện chạy qua lõi cuộn dây gây nên. Khi hướng của dòng thay đổi thì cực từ trường cũng thay đổi theo, gây nên chuyển động ngược lại của động cơ (đảo chiều).

Hình 1 : Bên trong động cơ bước

Động cơ bước làm việc được là nhờ các bộ chuyển mạch điện tử đưa các tín hiệu điều khiển vào Stator theo một thứ tự nhất định và một tần số nhất định. Tổng số góc quay của Rotor tương ứng với số lần chuyển mạch, cũng như chiều quay và tốc độ quay của Rotor phụ thuộc vào thứ tự chuyển đổi và tần số chuyển đổi.

Nếu xét trên phương diện dòng điện, khi một xung điện áp đặt vào cuộn dây Stator (phần ứng) của động cơ bước, thì Rotor (phần cảm) của động cơ sẽ quay đi một góc nhất định, góc ấy là một bước quay của động cơ. Ở đây ta có thể định nghĩa về góc bước (Step Angle) là độ quay nhỏ nhất của một bước do nhà sản xuất quy định.

Khi các xung điện áp đặt vào các cuộn dây phần ứng thay đổi liên tục thì Rotor sẽ quay liên tục (thực chất chuyển động đó vẫn theo các bước rời rạc).


 

Hình 2 :Cấu tạo của động cơ bước

Theo một phương diện khác, có thể coi động cơ bước là linh kiện (hay thiết bị) số (Digital Device) mà ở đó các thông tin được số hoá đã thiết lập sẽ được chuyển thành chuyển động quay theo từng bước. Động cơ bước sẽ thực hiện trung thành các lệnh đã số hoá mà máy tính yêu cầu.

 

 

Hình 3 :Một xung tương ứng với một bước của rôto (1 xung – 1 bước)


 

Hình 4 :Mô tả tương quan giữa quá trình điện và quá trình cơ của động cơ bước

2.Nguyên lý làm việc chung của động cơ bước

    Khác với động cơ đồng bộ thông thường, Rotor của động cơ bước không có cuộn dây khởi động mà nó được khởi động bằng phương pháp tần số, Rotor của động cơ bước có thể được kích thích (Rotor tích cực) hoặc không được kích thích (Rotor thụ động).

    Xung điện áp cấp cho cuộn dây Stator có thể là xung 1 cực hoặc 2 cực:

    Chuyển mạch điện tử có thể cung cấp điện áp điều khiển cho các cuộn dây Stator theo từng cuộn riêng lẻ, hoặc theo từng nhóm các cuộn dây. Trị số cũng như chiều của lực điện từ tổng F phụ thuộc vào vị trí của các lực điện từ thành phần. Do đó vị trí Rotor của động cơ bước trong không gian, hoàn toàn phụ thuộc vào phương pháp cung cấp điện cho các cuộn dây:



     

    Hình 5 :Sơ đồ nguyên lý động cơ bước m pha với Roto 2 cực và các lực điện từ khi điều khiển bằng xung 1 cực

    Hình 5 vẽ sơ đồ nguyên lý động cơ bước m pha với Rotor có 2 cực (2p=2) và không được kích thích. Nếu các cuộn dây của động cơ bước được cấp điện cho từng cuộn dây riêng lẻ theo thứ tự 1, 2, 3, … m, bởi xung 1 cực, thì Rotor của động cơ bước có m vị trí ổn định trùng với trục của các cuộn dây (hình 5a).

    Để tăng cường lực điện từ tổng của Stator do đó tăng từ thông và moment đồng bộ, ta cấp điện đồng thời cho hai, ba hoặc nhiều cuộn dây. Lúc đó Rotor của động cơ bước sẽ có vị trí cân bằng (ổn định) trùng với vector lực điện từ tổng F. Đồng thời lực điện từ tổng F cũng có giá trị lớn hơn lực điện từ thành phần của các cuộn dây Stator (hình 5b, 5c).

    Hình b vẽ lực điện từ tổng F khi cung cấp điện đồng thời cho một số chẵn cuộn dây (2 cuộn dây). Lực điện từ tổng F có trị số lớn hơn và nằm ở vị trí chính giữa hai trục của hai cuộn dây.

    Hình 5c vẽ lực điện từ tổng F khi cung cấp điện đồng thời cho một số lẻ cuộn dây (3 cuộn dây). Lực điện từ tổng F nằm trùng với trục của một cuộn dây và cũng có trị số lớn hơn.

     

    Tóm lại, trong cả hai trường hợp cấp điện cho một số chẵn cuộn dây và cấp điện cho một số lẻ cuộn dây, Rotor của động cơ bước sẽ có m vị trí cân bằng. Góc xê dịch giữa hai vị trí liên tiếp của Rotor bằng 2π/m.

    Nếu cấp điện theo thứ tự một số chẵn cuộn dây, rồi một số lẻ cuộn dây (ví dụ, kết hợp giữa hình 5b và 5c), hay nghĩa là số lượng cuộn dây được điều khiển luôn luôn thay đổi từ chẵn sang lẻ và ngược lại, thì số vị trí cân bằng của Rotor sẽ tăng lên gấp đôi là 2m, độ lớn của một bước sẽ giảm đi một nửa bằng 2π/m . Trường hợp này được gọi là điều khiển không đối xứng, hay điều khiển nửa bước (half step).

    Nếu số lượng cuộn dây được điều khiển luôn luôn không đổi (một số chẵn cuộn dây hoặc một số lẻ cuộn dây, ví dụ hình 5b hoặc hình 5c) thì Rotor có m vị trí cân bằng và được gọi là điều khiển đối xứng, hay điều khiển cả bước (full step).

     
    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 tham khảo: file .h, bạn có thể add vào project của mình

    /*
    /*
     * 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:

    ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC 28BYJ-48-5VDC BẲNG MOULDE L298 V3 

    Xin giới thiệu đến một chức năng khác nữa của modul điều khiển động cơ L298, đó là sử dụng để điều khiển động cơ bước.
    I.ĐỘNG CƠ BƯỚC.


    Động cơ bước sử dụng trong bài toán là động cơ bước 4 pha, 5 dây điều khiển. 4 trong 5 dây này được kết nối với 4 cuộn dây trong động cơ và 1 dây là dây nguồn chung cho cả 4 cuộn dây. Mỗi bước của động cơ quét 1 góc 5.625 độ, vậy để quay 1 vòng động cơ phải thực hiện 64 bước.

    Do đấu chung nguồn nên khi đặt mức điện áp 0V (mức logic 0) thì sẽ có dòng chạy qua các cuộn dây và ngược lại khi đặt mức điện áp 5V (mức logic 1) thì không có dòng qua các cuộn dây.
    Khi cấp 1 xung điện áp lên 1 cuộn dây stato (phần ứng) thì roto (phần cảm) của động cơ sẽ quay đi 1 góc nhất định, góc ấy là 1 bước quay của động cơ. Vậy để điều khiển động cơ quay liên tục thì chúng ta chỉ việc cấp xung lần lượt cho các cuộn dây. Có 2 cách điều khiển động cơ bước là:
    -Điều khiển FULL BƯỚC.
    -Điều khiển NỬA BƯỚC.

    1.ĐIỀU KHIỂN FULL BƯỚC.
    Điều khiển FULL bước có nghĩa là mỗi lần cấp điện áp cho các cuộn dây, động cơ sẽ quay đủ 1 bước (5.625 độ), thứ tự cấp xung điều khiển như sau (thứ tự từ trái sang phải: cuộn 1 -> cuộn 2 -> cuộn 3 -> cuộn 4):
    Bước 1: 0110
    Bước 2: 1100
    Bước 3: 1001
    Bước 4: 0011

    2.ĐIỀU KHIỂN NỬA BƯỚC.
    Để điều khiển động cơ quay nửa bước, thứ tự các xung cấp vào các cuộn dây như sau (thứ tự từ trái sang phải:cuộn 1 ->...-> cuộn 4 cuộn 1 ->...-> cuộn 4)):
    Bước 1: 0110 1110
    Bước 2: 1100 1101
    Bước 3: 1001 1011
    Bước 4: 0011 0111
    Khi điều khiển nửa bước, động cơ sẽ chạy mượt hơn so với khi chạy FULL bước.
    II: GIỚI THIỆU VỀ MODUL ĐIỀU KHIỂN ĐỘNG CƠ L298
    1. Thông Số Kỹ Thuật
    - Vs: +5 V-35 V
    - I: 2A - Kích thước: 55mm * 49mm * 33mm (với các trụ cột cố định và chiều cao của tản nhiệt)
    - Trọng lượng: 33g




    2. Sơ Đồ Nguyên Lý



    [​IMG]
    III: ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC VỚI MODUL L298 DÙNG ATMEGA8 
    1:Sơ đồ nguyên lý.
    [​IMG]

    2. Chương trinh điều khiển.
    Các bạn có thể tham khảo file đính kèm.
    Note:
    Dùng cho cả động cơ 28BYJ-48-12VDC

     

    MẠCH ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC A3967

    Mạch Điều Khiển Động Cơ Bước A3967​ dùng để điều khiển motor step một cách đơn giản, tương thích với bất cứ tín hiệu có thể xuất ra tín hiệu xung số từ 0 đến 5V (hoặc xung 0 đến 3.3V nếu hàn jumper SJ2 lại).

    mạch step driver A3967 sử dụng nguồn từ 7V đến 20V, nguồn cấp cho step motor bất kỳ mức nào. Trên board có tích hợp ic ổn áp ở trên board có thể chọn mức nguồn 5V hoặc 3.3V. Vi bước được chọn  bằng MS1 và MS2 để điều chỉnh độ phan giải của vi bước.

    Thông số kỹ thuật

    • A3967 có thể điều chỉnh vi bước
    • MS1 và MS2 ngắt 2 chân này ra để cài đặt vi bước 1, 1/2, 1/4, hoặc 1/8 mặc định là 1/8.
    • tương thích với động cơ bước 4,6,8 dây với mọi mức điện áp.
    • có thể điều chỉnh dòng từ 150mA/pha đến 750mA/pha.
    • Nguồn cung cấp từ 7V đến 20V, Nguồn cấp cao hơn lực kéo càng mạnh hơn.

    Sơ đồ nối dây

    Code mẫu:

    //////////////////////////////////////////////////////////////////
    //©2011 bildr
    //Released under the MIT License - Please reuse change and share
    //Using the easy stepper with your arduino
    //use rotate and/or rotateDeg to controll stepper motor
    //speed is any number from .01 -> 1 with 1 being fastest - 
    //Slower Speed == Stronger movement
    /////////////////////////////////////////////////////////////////
     
     
    #define DIR_PIN 2
    #define STEP_PIN 3
     
    void setup() { 
      pinMode(DIR_PIN, OUTPUT); 
      pinMode(STEP_PIN, OUTPUT); 
     
    void loop(){ 
     
      //rotate a specific number of degrees 
      rotateDeg(360, 1); 
      delay(1000);
     
      rotateDeg(-360, .1);  //reverse
      delay(1000); 
     
     
      //rotate a specific number of microsteps (8 microsteps per step)
      //a 200 step stepper would take 1600 micro steps for one full revolution
      rotate(1600, .5); 
      delay(1000); 
     
      rotate(-1600, .25); //reverse
      delay(1000); 
    }
     
     
     
    void rotate(int steps, float speed){ 
      //rotate a specific number of microsteps (8 microsteps per step) - (negitive for reverse movement)
      //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
      int dir = (steps > 0)? HIGH:LOW;
      steps = abs(steps);
     
      digitalWrite(DIR_PIN,dir); 
     
      float usDelay = (1/speed) * 70;
     
      for(int i=0; i < steps; i++){ 
        digitalWrite(STEP_PIN, HIGH); 
        delayMicroseconds(usDelay); 
     
        digitalWrite(STEP_PIN, LOW); 
        delayMicroseconds(usDelay); 
      } 
     
    void rotateDeg(float deg, float speed){ 
      //rotate a specific number of degrees (negitive for reverse movement)
      //speed is any number from .01 -> 1 with 1 being fastest - Slower is stronger
      int dir = (deg > 0)? HIGH:LOW;
      digitalWrite(DIR_PIN,dir); 
     
      int steps = abs(deg)*(1/0.225);
      float usDelay = (1/speed) * 70;
     
      for(int i=0; i < steps; i++){ 
        digitalWrite(STEP_PIN, HIGH); 
        delayMicroseconds(usDelay); 
     
        digitalWrite(STEP_PIN, LOW); 
        delayMicroseconds(usDelay); 
      } 

    Tham khảo thêm: File