Thứ Năm, 29 tháng 11, 2018

Giao tiếp động cơ bước

Giới thiệu

Động cơ bước

Động cơ bước là một động cơ không chổi than DC chia góc quay 360 ° hoàn toàn thành số bước bằng nhau.
  • Động cơ được xoay bằng cách áp dụng một chuỗi tín hiệu điều khiển nhất định. Tốc độ quay có thể thay đổi bằng cách thay đổi tốc độ tín hiệu điều khiển được áp dụng.
  • Động cơ bước khác nhau với các góc bước khác nhau và xếp hạng mô-men xoắn có sẵn trên thị trường.
  • Một vi điều khiển có thể được sử dụng để áp dụng các tín hiệu điều khiển khác nhau cho động cơ để làm cho nó xoay theo nhu cầu của một ứng dụng.

Giao diện động cơ bước với PIC18F4550

Giao diện động cơ bước với PIC
Giao diện động cơ bước với PIC18F4550
  • Ở đây chúng ta sẽ giao diện 6 dây Unipolar Stepper Motor với bộ điều khiển PIC18F4550.
  • Chỉ cần bốn dây để điều khiển động cơ bước.
  • Hai dây phổ biến của động cơ bước kết nối với nguồn cung cấp 5V.
  • Trình điều khiển ULN2003 được sử dụng để điều khiển động cơ bước.
  • Lưu ý rằng để biết cuộn dây quanh co và vòi trung tâm của chúng dẫn đến đo điện trở giữa các dây dẫn. Từ trung tâm dẫn, chúng ta sẽ nhận được một nửa giá trị kháng của cuộn dây đó.

Thí dụ

Hãy lập trình PIC18F4550 để xoay động cơ bước 360 ° theo chiều kim đồng hồ theo chuỗi bước nửa và 360 ° ngược chiều kim đồng hồ theo trình tự bước đầy đủ.

Chương trình

/* 
 * Stepper Motor Control using PIC
 */

#include <pic18f4550.h>
#include "Configuration_header_file.h"

void MSdelay(unsigned int val)
{
     unsigned int i,j;
        for(i=0;i<val;i++)
            for(j=0;j<165;j++);
}

void main(void)
{
 int period;
    
     OSCCON = 0x72;  /* Use Internal Oscillator 8MHz */
 TRISD = 0x00;  /* Make PORTD as output */
 period = 100;  /* Set period in between two steps */
 while (1)
 {
  /* Rotate Stepper Motor clockwise with Half step sequence */
  for(int i=0;i<12;i++)
  {
   LATD = 0x09;
   MSdelay(period);
   LATD = 0x08;
   MSdelay(period);
   LATD = 0x0C;
   MSdelay(period);
   LATD = 0x04;
   MSdelay(period);
   LATD = 0x06;
   MSdelay(period);
   LATD = 0x02;
   MSdelay(period);
   LATD = 0x03;
   MSdelay(period);
   LATD = 0x01;
   MSdelay(period);
  }
  LATD = 0x09;     /* Last step to initial position */ 
  MSdelay(period);
  MSdelay(1000);

  /* Rotate Stepper Motor Anticlockwise with Full step sequence */
  for(int i=0;i<12;i++)
  {
   LATD = 0x09;
   MSdelay(period);
   LATD = 0x03;
   MSdelay(period);
   LATD = 0x06;
   MSdelay(period);
   LATD = 0x0C;
   MSdelay(period);
  }
  LATD = 0x09;
  MSdelay(period);
  MSdelay(1000);
 }
}
Code

Không có nhận xét nào:

Đăng nhận xét