마이크로 서보 9G 모터 핀 번호 (라즈베리파이4B 서보 모터 제어 방법)
마이크로 서보 9G 모터 핀 번호 및 라즈베리파이4B에서 서보 모터 제어 방법 설명
우리는 라즈베리파이와 아두이노를 교육용으로 널리 사용하고 있습니다. 교육용 키트에 주로 사용되는 마이크로 서보 9G 모터에 대해서 설명합니다.
마이크로 9G 서보 모터란?
모터의 종류는 상당히 다양합니다. DC 모터, 스텝 모터, BLDC 모터, 서보 모터 등 다양한 모터들이 있습니다.
오늘은 서보 모터 중에서도 라즈베리파이나 아두이노에서 교육용으로 널리 사용중인 마이크로 9G 서보 모터에 대해서 설명드리겠습니다.
마이크로 9G 서보 모터는 회전 반영이 0도 ~ 180도의 모터입니다. PWM 신호를 통해서 모터의 각도를 제어할 수 있습니다.
하지만 저가의 교육용 서보 모터라서 원하는 각도로 정밀하게 제어가 불가하고, 토크 또한 약해서 작은 부하에도 동작하지 못하는 단점이 있습니다.
서보 모터 핀번호
핀 번호 | 색 깔 | 설 명 | 비 고 |
---|---|---|---|
1 | 주황색 | PWM | 모터 제어를 위한 PWM 신호 |
2 | 빨간색 | VCC | 5V |
3 | 갈색 | GND |
위의 사진에 보이는 마이크로 서보 9G 모터는 5V로 동작합니다. 이 때문에 2번 핀과 3번 핀에 5V를 인가합니다.
1번 핀에 PWM을 이용하여 서보 모터의 각도를 제어할 수 있습니다.
PWM 제어 가능한 핀번호
VCC와 GND는 라즈베리파이의 어디에 연결해야 하는지 전혀 고민없이 연결하면 됩니다.
반면, PWM 신호의 경우는 어느 핀에 연결해야 하는지 살펴볼 필요가 있습니다.
그 이유는 Alt Function
으로 PWM을 지원하는 핀을
선택해야 하기 때문입니다.
정답지부터 말씀드리자면 PWM 제어가 가능한 핀 번호는
GPIO 12
, GPIO 13
,
GPIO 18
, GPIO 19
총 4개입니다.
자세한 핀맵은 아래 테이블을 참고하시기 바랍니다.
GPIO | Pull | ALT0 | ALT1 | ALT2 | ALT3 | ALT4 | ALT5 |
---|---|---|---|---|---|---|---|
0 | High | SDA0 | SA5 | PCLK | SPI3 CE0 N | TXD2 | SDA6 |
1 | High | SCL0 | SA4 | DE | SPI3 MISO | RXD2 | SCL6 |
2 | High | SDA1 | SA3 | LCD VSYNC | SPI3 MOSI | CTS2 | SDA3 |
3 | High | SCL1 | SA2 | LCD HSYNC | SPI3 SCLK | RTS2 | SCL3 |
4 | High | GPCLK0 | SA1 | DPI D0 | SPI4 CE0 N | TXD3 | SDA3 |
5 | High | GPCLK1 | SA0 | DPI D1 | SPI4 MISO | RXD3 | SCL3 |
6 | High | GPCLK2 | SOE N | DPI D2 | SPI4 MOSI | CTS3 | SDA4 |
7 | High | SPI0 CE1 N | SWE N | DPI D3 | SPI4 SCLK | RTS3 | SCL4 |
8 | High | SPI0 CE0 N | SD0 | DPI D4 | - | TXD4 | SDA4 |
9 | Low | SPI0 MISO | SD1 | DPI D5 | - | RXD4 | SCL4 |
10 | Low | SPI0 MOSI | SD2 | DPI D6 | - | CTS4 | SDA5 |
11 | Low | SPI0 SCLK | SD3 | DPI D7 | - | RTS4 | SCL5 |
12 | Low | PWM0 | SD4 | DPI D8 | SPI5 CE0 N | TXD5 | SDA5 |
13 | Low | PWM1 | SD5 | DPI D9 | SPI5 MISO | RXD5 | SCL5 |
14 | Low | TXD0 | SD6 | DPI D10 | SPI5 MOSI | CTS5 | TXD1 |
15 | Low | RXD0 | SD7 | DPI D11 | SPI5 SCLK | RTS5 | RXD1 |
16 | Low | FL0 | SD8 | DPI D12 | CTS0 | SPI1 CE2 N | CTS1 |
17 | Low | FL1 | SD9 | DPI D13 | RTS0 | SPI1 CE1 N | RTS1 |
18 | Low | PCM CLK | SD10 | DPI D14 | SPI6 CE0 N | SPI1 CE0 N | PWM0 |
19 | Low | PCM FS | SD11 | DPI D15 | SPI6 MISO | SPI1 MISO | PWM1 |
20 | Low | PCM DIN | SD12 | DPI D16 | SPI6 MOSI | SPI1 MOSI | GPCLK0 |
21 | Low | PCM DOUT | SD13 | DPI D17 | SPI6 SCLK | SPI1 SCLK | GPCLK1 |
22 | Low | SD0 CLK | SD14 | DPI D18 | SD1 CLK | ARM TRST | SDA6 |
23 | Low | SD0 CMD | SD15 | DPI D19 | SD1 CMD | ARM RTCK | SCL6 |
24 | Low | SD0 DAT0 | SD16 | DPI D20 | SD1 DAT0 | ARM TDO | SPI3 CE1 N |
25 | Low | SD0 DAT1 | SD17 | DPI D21 | SD1 DAT1 | ARM TCK | SPI4 CE1 N |
26 | Low | SD0 DAT2 | TE0 | DPI D22 | SD1 DAT2 | ARM TDI | SPI5 CE1 N |
27 | Low | SD0 DAT3 | TE1 | DPI D23 | SD1 DAT3 | ARM TMS | SPI6 CE1 N |
서보 모터 제어 예제
아래는 파이썬을 이용한 서보 모터 제어 예제입니다.
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
pin_num = None
def serbo_init(serbo_pin_num = 18):
global pin_num
GPIO.setmode(GPIO.BCM)
pin_num = serbo_pin_num
GPIO.setup(pin_num, GPIO.OUT)
def set_degree(degree):
phz = GPIO.PWM(pin_num, 100)
phz.start(5)
duty = degree / 10.0 + 2.5
phz.ChangeDutyCycle(duty)
time.sleep(0.5)
def main():
while True:
degree = float( input("제어할 각도 :") )
set_degree(degree)
GPIO.cleanup()
if __name__ == '__main__':
serbo_init()
main()
결론
라즈베리파이 및 아두이노에서 교육용으로 널리 사용중인 마이크로 서보 9G 모터에 대한 간략한 설명 및 제어 예제에 대한 설명을 모두 마칩니다.