스테퍼 모터는 브러시리스 DC 모터로 작은 각도로 회전 할 수 있으며 이러한 각도를 스텝이라고합니다. 일반적으로 스테퍼 모터는 200 스텝을 사용하여 360도 회전을 완료합니다. 즉, 스텝 당 1.8도 회전합니다. 스테퍼 모터는 로봇, 안테나, 하드 드라이브 등과 같이 정밀한 회전 운동이 필요한 많은 장치에 사용됩니다. 스테퍼 모터는 적절한 지침을 제공하여 특정 각도로 회전 할 수 있습니다. 주로 두 가지 유형의 스테퍼 모터, Unipolar 및 Bipolar를 사용할 수 있습니다. Unipolar는 작동, 제어 및 구하기가 더 쉽습니다. 이 튜토리얼에서는 스테퍼 모터와 STM32F103C8 (파란색 알약) 보드를 연결합니다.
필요한 재료
- STM32F103C8 (푸른 알약)
- 스테퍼 모터 (28BYJ-48)
- ULN2003 IC
- 전위차계 10k
- 브레드 보드
- 점퍼 와이어
스테퍼 모터 (28BYJ-48)
28BYJ-48은 5V 전원이 필요한 Unipolar Stepper 모터입니다. 모터는 4 개의 코일 단극 배열을 가지고 있으며 각 코일은 + 5V 등급이므로 Arduino, Raspberry Pi, STM32와 같은 마이크로 컨트롤러로 비교적 쉽게 제어 할 수 있습니다. 고전류를 소비하고 마이크로 컨트롤러를 손상시킬 수 있습니다.
주목해야 할 또 다른 중요한 데이터는 보폭 각도: 5.625 ° / 64입니다. 즉, 8 단계 시퀀스로 작동 할 때 모터가 각 단계마다 5.625도 이동하고 한 번의 완전한 회전을 완료하는 데 64 단계 (5.625 * 64 = 360)가 필요합니다. 기타 사양은 아래 데이터 시트에 제공됩니다.
다른 마이크로 컨트롤러와 스테퍼 모터와의 인터페이스도 확인하십시오.
- Arduino Uno와 스테퍼 모터 인터페이스
- Raspberry Pi를 사용한 스테퍼 모터 제어
- 8051 마이크로 컨트롤러와 인터페이싱하는 스테퍼 모터
- 스테퍼 모터와 PIC 마이크로 컨트롤러의 인터페이스
스테퍼 모터는 마이크로 컨트롤러 없이도 제어 할 수 있습니다. 스테퍼 모터 드라이버 회로를 참조하십시오.
ULN2003 모터 드라이버 IC
마이크로 컨트롤러로부터받은 펄스에 따라 모터를 구동하는 데 사용됩니다. 아래는 ULN2003의 그림 다이어그램입니다.
핀 (IN1 ~ IN7)은 입력 핀이고 (OUT 1 ~ OUT 7)은 해당 출력 핀입니다. COM에는 출력 장치에 필요한 양의 소스 전압이 제공됩니다. 스테퍼 모터에 대한 추가 연결은 아래 회로도 섹션에 나와 있습니다.
회로도 및 연결
아래는 위의 회로도에 대한 연결 설명입니다.
STM32F103C8 (블루 알약)
아래 다이어그램에서 볼 수 있듯이 PWM 핀은 웨이브 형식 (~)으로 표시되며 스테퍼 모터로의 펄스 출력에 사용할 수있는 15 개의 핀이 있습니다. 핀 4 개만 필요하며 (PA0 toPA3)를 사용합니다.
ULN2003 모터 드라이버 IC가있는 STM32F103C8
핀 (PA0 ~ PA3)은 ULN2003 IC의 입력 핀 (IN1-IN4)과 연결된 출력 핀으로 간주됩니다.
STM32F103C8의 핀 |
ULN2003 IC의 핀 |
PA0 |
IN1 |
PA1 |
IN2 |
PA2 |
IN3 |
PA3 |
IN4 |
5V |
COM |
GND |
GND |
스테퍼 모터가있는 ULN2003 IC (28BYJ-48)
ULN2003 IC의 출력 핀 (OUT1-OUT4)은 스테퍼 모터 핀 (주황색, 노란색, 분홍색 및 파란색)에 연결됩니다.
ULN2003 IC의 핀 |
스테퍼 모터의 핀 |
OUT1 |
주황색 |
OUT2 |
노랑 |
OUT3 |
분홍 |
OUT4 |
푸른 |
COM |
빨간 |
전위차계가있는 STM32F103C8
스테퍼 모터의 속도를 설정하기 위해 전위차계가 사용됩니다.
전위차계 |
STM32F103C8 |
왼쪽 (입력) |
3.3 |
CENTRE (출력) |
PA4 |
오른쪽 (GND) |
GND |
STM32F103C8이있는 회전 스테퍼 모터
다음은 스테퍼 모터를 작동하는 몇 가지 단계입니다.
- 전위차계를 변경하여 스테퍼 모터의 속도를 설정합니다.
- 그런 다음 ARDUINO IDE (도구-> 직렬 모니터) 또는 CTRL + SHIFT + M에있는 SERIAL MONITER를 통해 시계 방향 (+ 값) 또는 반 시계 방향 (-값)으로 회전 단계를 수동으로 입력합니다.
- 직렬 모니터에 제공된 입력 값에 따라 스테퍼 모터에서 특정 단계의 회전이 발생합니다.
예를 들어
직렬 모니터에서 제공되는 가치 |
회전 |
2048 |
(360) CLK 와이즈 |
1024 |
(180) CLK 와이즈 |
512 |
(90) CLK 와이즈 |
-2048 |
(-360) 반 CLK 현명한 |
-1024 |
(-180) ANTI CLK WISE |
-512 |
(-90) ANTI CLK WISE |
스테퍼 모터 용 프로그래밍 STM32
이전 튜토리얼과 마찬가지로 FTDI 프로그래머를 사용하지 않고 USB 포트를 통해 Arduino IDE로 STM32F103C8을 프로그래밍했습니다. Arduino IDE로 STM32 프로그래밍에 대해 배우려면 링크를 따르십시오. Arduino처럼 프로그래밍을 진행할 수 있습니다. 프로젝트가 끝나면 완전한 코드 가 제공됩니다.
먼저 스테퍼 라이브러리 파일 #include 를 포함해야합니다.
#포함
그런 다음 아니오를 정의합니다. 회전시 완료해야 할 단계의 수는 전체 단계 (4 단계 시퀀스)를 사용하므로 32를 사용 하므로 (360/32 = 11.25도). 따라서 한 단계 동안 샤프트는 보폭 각도 인 11.25도 이동합니다. 4 단계 순서에서는 한 번의 완전한 회전에 4 단계가 필요합니다.
#define 단계 32
보폭 각도가 8 단계 (360 / 64 = 5.625) 인 하프 스텝 모드를 사용할 수도 있습니다.
회 전당 걸음 수 = 360 / STEP ANGLE
속도를 설정할 때 전위차계에 연결된 PA4에서 아날로그 값을 가져와야합니다. 그래서 우리는 그것을 위해 핀을 선언해야합니다
const int 속도 m = PA4
그런 다음 아날로그 값을 정수형 변수에 저장하여 디지털 값으로 변환 한 후 속도 설정을위한 ADC 값을 매핑해야하므로 아래 문을 사용합니다. 여기에서 STM32와 함께 ADC를 사용하는 방법에 대해 자세히 알아보십시오.
int adc = analogRead (speedm); int 결과 = map (adc , 0, 4096, 1, 1023);
속도를 설정하려면 stepper.setSpeed (result); 속도 범위는 (1-1023)입니다.
모터에 연결된 핀을 설정하려면 아래와 같은 인스턴스를 생성해야합니다. 대부분이이 패턴에서 실수를하므로이 단계에서주의하십시오. 그들은 잘못된 패턴을 제공하고 그 때문에 코일에 에너지를 공급할 수 없습니다.
스테퍼 스테퍼 (STEPS, PA0, PA2, PA1, PA3);
아래 문은 직렬 모니터에서 단계 값을 가져 오는 데 사용됩니다. 예를 들어 한 번의 전체 회전 (32 * 64 = 2048)에 대해 2048 개의 값이 필요합니다. 즉 64는 기어비이고 32는 한 번의 회전에 대해 절반 단계 시퀀스입니다.
rotate = Serial.parseInt ();
아래 코드는 인스턴스를 호출하고 모터를 구동하는 데 사용되며, 회전 값이 1이면 스테퍼 함수를 한 번 호출하고 한 번 이동합니다.
stepper.step (회전);
데모 비디오가 포함 된 완전한 코드는 다음과 같습니다. 또한 다양한 다른 마이크로 컨트롤러와 인터페이스하여 여기에서 모든 스테퍼 모터 관련 프로젝트를 확인하십시오.