전자 분야에서 서보 모터는 정확성과 취급이 용이하기 때문에 로봇 공학 프로젝트에서 주로 사용됩니다. 서보 모터는 크기가 더 작고 매우 효과적이며 에너지 효율적입니다. 높은 토크를 제공하며 모터 사양에 따라 무게를 들어올 리거나 밀기 위해 사용할 수 있습니다. 이 튜토리얼에서는 Servo Motor에 대해 배우고 Servo와 STM32F103C8 보드를 연결하는 방법을 배웁니다 . 전위차계는 또한 서보 모터의 샤프트 위치를 변경하기 위해 인터페이스되고 각도 값을 표시하는 LCD도 있습니다.
필요한 구성 요소
- STM32F103C8 (Blue Pill) 보드
- 서보 모터 (SG90)
- LCD (16x2)
- 전위차계
- 브레드 보드
- 점퍼 와이어
회로도 및 연결
SMT32F103C8 핀 세부 정보
에서는 STM32F103C8, 우리는 (10)가 ADC 핀 (PA0-PB1)를 여기에서 우리는 단 하나의 핀 (PA3)를 사용하는 () analogread를 포텐셔미터에 의해 모터의 샤프트 위치를 설정. 또한 STM32의 15 개 PWM 핀 (PA0, PA1, PA2, PA3, PA6, PA7, PA8, PA9, PA10, PB0, PB1, PB6, PB7, PB8, PB9) 중 하나는 서보에 펄스를 제공하는 데 사용됩니다. 모터의 PWM 핀 (보통 주황색).
아래의 자세한 기사를 읽으면 PWM 및 ADC에 대해 자세히 알아볼 수 있습니다.
- STM32F103C8에서 ADC를 사용하는 방법
- STM32F103C8의 펄스 폭 변조 (PWM)
STM32F103C8과 LCD 간의 연결
STM32F103C8 | LCD |
GND | VSS |
+ 5V | VDD |
전위차계 센터 PIN으로 | V0 |
PB0 | RS |
GND | RW |
PB1 | 이자형 |
PB10 | D4 |
PB11 | D5 |
PC13 | D6 |
PC14 | D7 |
+ 5V | ㅏ |
GND | 케이 |
서보 모터와 STM32F103C8 간의 연결
STM32F103C8 |
서보 기구 |
+ 5V |
빨간색 (+ 5V) |
PA0 |
ORANGE (PWM 핀) |
GND |
브라운 (GND) |
전위차계 연결
여기에 두 개의 전위차계를 사용했습니다.
1. 오른쪽의 전위차계는 LCD 대비를 변경하는 데 사용됩니다. 3 개의 핀이 있는데 왼쪽 핀은 + 5V, 오른쪽은 GND, 중앙 핀은 LCD의 V0에 연결됩니다.
2. 왼쪽의 전위차계는 아날로그 입력 전압을 제어하여 서보 모터의 축 위치를 변경하는데 사용되며, 왼쪽 핀은 3.3V 입력, 오른쪽은 GND, 중앙 출력은 STM32의 (PA3)에 연결됩니다.
서보 모터 용 STM32 프로그래밍
이전 튜토리얼과 마찬가지로 FTDI 프로그래머를 사용하지 않고 USB 포트를 통해 Arduino IDE로 STM32F103C8을 프로그래밍했습니다. Arduino처럼 프로그래밍을 진행할 수 있습니다. 프로젝트가 끝나면 완전한 코드가 아래에 제공됩니다.
먼저 서보 및 LCD 기능을위한 라이브러리 파일을 포함했습니다.
#포함
그런 다음 LCD 디스플레이 용 핀을 선언하고 초기화했습니다. 또한 PWM 및 전위차계에 대해 몇 가지 다른 변수를 선언했습니다.
const int rs = PB0, en = PB1, d4 = PB10, d5 = PB11, d6 = PC13, d7 = PC14; LiquidCrystal lcd (rs, en, d4, d5, d6, d7); int servoPin = PA0; int potPin = PA3;
여기에서는 데이터 유형이 Servo 인 가변 서보를 생성 하고 이전에 선언 된 PWM 핀에 연결했습니다.
서보 서보; servo.attach (servoPin);
그런 다음 아날로그 전압 (0-3.3)을 디지털 형식 (0-4095)으로 변환하는 ADC 핀이므로 핀 PA3에서 Analog 값을 읽습니다.
analogRead (potPin);
디지털 출력은 12 비트 분해능이므로 각도 (0-170) 범위의 값을 가져와야하며 최대 각도 170도에 따라 ADC (0-4096) 값을 나누어 24로 나눕니다 .
각도 = (읽기 / 24);
아래 문장은 서보 모터가 주어진 각도로 샤프트를 회전하도록합니다.
servo.write (각도);
완전한 코드는 아래에 제공되며 주석으로 잘 설명됩니다.