산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

A4988 드라이버와 Arduino로 스테퍼 모터를 제어하는 ​​방법

<메인 클래스="사이트 메인" id="메인">

이 Arduino 튜토리얼에서는 A4988 스테퍼 드라이버를 사용하여 스테퍼 모터를 제어하는 ​​방법을 배웁니다. 다음 동영상을 보거나 아래에 작성된 튜토리얼을 읽을 수 있습니다.

개요

A4988은 쉬운 작동을 위해 내장된 변환기가 있는 바이폴라 스테퍼 ​​모터를 제어하기 위한 마이크로스테핑 드라이버입니다. 이것은 컨트롤러에서 단 2개의 핀으로 스테퍼 모터를 제어할 수 있음을 의미합니다. 하나는 회전 방향을 제어하고 다른 하나는 단계를 제어하기 위한 것입니다.

<그림 클래스="aligncenter">

Driver는 풀스텝, 하프스텝, 쿼터스텝, 8스텝, 16스텝의 5가지 스텝 분해능을 제공합니다. 또한 전류 출력, 과열 과열 차단 및 교차 전류 보호를 조정하기 위한 전위차계가 있습니다.

논리 전압은 3~5.5V이고 추가 냉각이 제대로 제공되는 경우 위상당 최대 전류는 2A이거나 방열판이나 냉각이 없는 위상당 연속 전류는 1A입니다.

<그림 클래스="aligncenter">

A4988 스테퍼 드라이버 핀아웃

이제 드라이버의 핀아웃을 자세히 살펴보고 스테퍼 모터 및 컨트롤러와 연결해 보겠습니다. 따라서 드라이버에 전원을 공급하기 위해 버튼 오른쪽에 있는 2개의 핀, 3~5.5V의 전원 공급 장치에 연결하는 데 필요한 VDD 및 접지 핀, 그리고 우리의 경우 컨트롤러인 Arduino로 시작합니다. 5V를 공급할 보드입니다.  다음 4개의 핀은 모터를 연결하기 위한 것입니다. 1A 및 1B 핀은 모터의 한 코일에 연결되고 2A 및 2B 핀은 모터의 다른 코일에 연결됩니다. 모터에 전원을 공급하기 위해 다음 2개의 핀인 접지 및 VMOT를 사용하여 8~35V의 전원 공급 장치에 연결해야 하며 드라이버 보드를 전압 스파이크로부터 보호하기 위해 최소 47μF의 디커플링 커패시터를 사용해야 합니다.

다음 2개의 핀인 Step과 Direction은 실제로 모터 움직임을 제어하는 ​​데 사용하는 핀입니다. 방향 핀은 모터의 회전 방향을 제어하며 이를 마이크로컨트롤러의 디지털 핀 중 하나에 연결해야 합니다. 이 경우에는 Arduino 보드의 핀 번호 4에 연결해야 합니다.

스텝 핀을 사용하여 모터의 마이크로스텝을 제어하고 이 핀에 전송된 각 펄스로 모터가 한 단계 이동합니다. 따라서 A4988 드라이버의 내장 변환기가 모든 것을 처리하기 때문에 복잡한 프로그래밍, 위상 시퀀스 테이블, 주파수 제어 라인 등이 필요하지 않습니다. 여기서 우리는 또한 이 2개의 핀이 내부적으로 어떤 전압으로도 풀링되지 않는다는 점을 언급해야 하므로 프로그램에서 이 핀을 부동 상태로 두어서는 안 됩니다.

다음은 SLEEP 핀이고 로직 로우는 모터를 사용하지 않을 때 전력 소비를 최소화하기 위해 보드를 슬립 모드로 전환합니다.

다음으로 RESET 핀은 변환기를 미리 정의된 홈 상태로 설정합니다. 이 홈 상태 또는 홈 마이크로스텝 위치는 A4988 데이터시트의 이 그림에서 볼 수 있습니다. 따라서 이것은 모터가 시작되는 초기 위치이며 마이크로 스텝 분해능에 따라 다릅니다. 이 핀에 대한 입력 상태가 로직 로우이면 모든 STEP 입력이 무시됩니다. Reset 핀은 플로팅 핀이므로 프로그램에서 제어할 의도가 없다면 이를 SLEEP 핀에 연결하여 하이로 가져와 보드를 활성화해야 합니다.

<그림 클래스="aligncenter">

다음 3개의 핀(MS1, MS2 및 MS3)은 위의 진리표에 따라 5단계 분해능 중 하나를 선택하기 위한 것입니다. 이 핀에는 내부 풀다운 저항이 있으므로 연결을 끊은 상태로 두면 보드가 전체 단계 모드에서 작동합니다.

마지막으로 ENABLE 핀은 FET 출력을 켜거나 끄는 데 사용됩니다. 따라서 로직 하이는 출력을 비활성화 상태로 유지합니다.

이 Arduino 자습서에 필요한 구성 요소

구성요소는 아래 사이트에서 얻을 수 있습니다.

회로도

다음은 전체 회로도입니다. 전체 단계 모드에서 드라이브를 사용할 것이므로 3개의 MS 핀을 분리한 상태로 두고 드라이브의 방향 및 단계 핀을 Arduino 보드의 핀 번호 3과 4와 접지 및 5V에 연결하기만 하면 됩니다. 보드에 전원을 공급하기 위한 핀. 또한 디커플링을 위해 100µF 커패시터를 사용하고 모터에 전원을 공급하기 위해 12V, 1.5A 어댑터를 사용할 것입니다. 저는 NEMA 17 바이폴라 스테퍼 ​​모터를 사용하고 와이어 A와 C는 핀 1A와 1B에 연결하고 B와 D 와이어는 2A와 2B 핀에 연결합니다.

A4988 전류 제한

모터를 연결하기 전에 전류가 모터의 전류 제한 내에 있도록 드라이버의 전류 제한을 조정해야 합니다. 보드의 전위차계를 사용하여 기준 전압을 조정하고 다음 방정식을 고려하여 이를 수행할 수 있습니다.

<그림 클래스="aligncenter">

그러나 A4988 드라이버 보드의 제조업체가 다르기 때문에 이 방정식이 항상 정확한 것은 아닙니다. 다음은 제 경우의 데모입니다. 전위차계를 조정하고 0.6V 기준 전압을 측정했습니다. 따라서 전류 제한은 1.2A와 동일한 0.6*2 값이어야 합니다.

<그림 클래스="aligncenter">

이제 풀 스텝 모드에서 드라이버를 사용하고 있고 이 모드에서 A4988 데이터시트에 따르면 권선 전류는 전류 제한의 70%에만 도달할 수 있으므로 1.2A*0.7은 0.84A와 같습니다. 이것을 확인하기 위해 나는 연속 로직을 스텝 핀으로 보내는 간단한 코드를 업로드하고(전류를 더 잘 알 수 있도록) 미터를 모터의 한 권선과 직렬로 연결하고 전원을 켰습니다. 내가 얻은 것은 0.5A로 내 경우에는 방정식이 정확하지 않다는 것을 의미합니다.

<그림 클래스="aligncenter">

Arduino 및 A4988 코드

다음은 예제 코드입니다. 먼저 단계 및 방향 핀을 정의해야 합니다. 우리의 경우 아두이노 보드의 3번과 4번 핀이고 stepPin과 dirPin이라는 이름이 지정되며 설정 섹션에서 출력으로 정의해야 합니다.

/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */

// defines pins numbers
const int stepPin = 3; 
const int dirPin = 4; 
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT); 
  pinMode(dirPin,OUTPUT);
}
void loop() {
  digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction
  // Makes 200 pulses for making one full cycle rotation
  for(int x = 0; x < 200; x++) {
    digitalWrite(stepPin,HIGH); 
    delayMicroseconds(500); 
    digitalWrite(stepPin,LOW); 
    delayMicroseconds(500); 
  }
  delay(1000); // One second delay
  
  digitalWrite(dirPin,LOW); //Changes the rotations direction
  // Makes 400 pulses for making two full cycle rotation
  for(int x = 0; x < 400; x++) {
    digitalWrite(stepPin,HIGH);
    delayMicroseconds(500);
    digitalWrite(stepPin,LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}
Code language: Arduino (arduino)

루프 섹션에서 먼저 모터가 특정 방향으로 이동할 수 있도록 하는 방향 핀을 하이 상태로 설정합니다. 이제 이것을 for 루프를 사용하여 모터가 한 번의 전체 사이클 회전을 만들도록 할 것입니다. 드라이버가 전체 단계 모드로 설정되어 있고 스테퍼 모터의 단계 각도가 1.8도 또는 200단계이므로 1개의 전체 사이클 회전을 만들기 위해 단계 핀에 200개의 펄스를 보내야 합니다. 따라서 for 루프에는 200번의 반복이 있고 매번 펄스를 만들기 위해 스텝 핀을 높음으로 설정한 다음 낮음 상태로 설정합니다. 각 digitalWrite 사이에 모터 속도가 의존하는 약간의 지연을 추가해야 합니다.

이 전체 주기 회전 후에 1초 지연을 만든 다음 dirPin을 낮은 상태로 설정하여 회전 방향을 변경하고 이제 400회 반복의 이 루프로 2회의 전체 주기 회전을 수행합니다. 마지막에 1초 더 지연됩니다. 이제 코드를 업로드하고 작동 방식을 살펴보겠습니다.

이 튜토리얼을 위해 전위차계를 사용하여 모터의 속도를 제어하는 ​​예제를 하나 더 만들었습니다. 다음은 해당 예제의 소스 코드입니다.

/*     Simple Stepper Motor Control Exaple Code
 *      
 *  by Dejan Nedelkovski, www.HowToMechatronics.com
 *  
 */
 
// Defines pins numbers
const int stepPin = 3;
const int dirPin = 4; 

int customDelay,customDelayMapped; // Defines variables
 
void setup() {
  // Sets the two pins as Outputs
  pinMode(stepPin,OUTPUT);
  pinMode(dirPin,OUTPUT);
 
  digitalWrite(dirPin,HIGH); //Enables the motor to move in a particular direction
}
void loop() {
  
  customDelayMapped = speedUp(); // Gets custom delay values from the custom speedUp function
  // Makes pules with custom delay, depending on the Potentiometer, from which the speed of the motor depends
  digitalWrite(stepPin, HIGH);
  delayMicroseconds(customDelayMapped);
  digitalWrite(stepPin, LOW);
  delayMicroseconds(customDelayMapped);
}
// Function for reading the Potentiometer
int speedUp() {
  int customDelay = analogRead(A0); // Reads the potentiometer
  int newCustom = map(customDelay, 0, 1023, 300,4000); // Convrests the read values of the potentiometer from 0 to 1023 into desireded delay values (300 to 4000)
  return newCustom;  
}Code language: Arduino (arduino)

제조공정

  1. Arduino로 코인 억셉터 제어
  2. Bluetooth가 탑재된 Arduino로 LED 제어!
  3. Arduino Nano:조이스틱으로 2개의 스테퍼 모터 제어
  4. Arduino 및 MPU6050으로 서보 모터 제어
  5. DHT11로 Blynk에서 온도와 습도를 읽는 방법
  6. Arduino로 음악을 만드는 방법
  7. Arduino Uno 및 Bluetooth로 차량 제어
  8. Arduino에서 Modbus를 사용하는 방법
  9. 조이스틱으로 28BYJ-48 스테퍼 모터 제어 구동
  10. Arduino 및 Python을 사용하는 AI 보조 로봇