PCA9685 사용하기
PCA9685
pca 9685 입니다.
PWM 16개 채널을 가지고 있으며 12-bit 칩입니다.
저는 SBC(ODROID-C4)를 가지고 사용했습니다.
사용방법은 크게 2가지가 있는데,
커널 드라이버를 사용하거나, Adafruit의 파이썬 패키지를 사용하면 됩니다.
여기서는 파이썬 패키지를 사용하는 방법을 정리하겠습니다.
사용 준비
개발 환경은 다음과 같습니다.
board: ODROID-C4
OS: ubuntu20.04 LTS
kernel: 4.9.y
servo: MG996R
# ODROID-C4 gpio 40 pin header
+-----+-----+---------+------+---+--- C4 ---+---+------+---------+-----+-----+
| I/O | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | I/O |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3V | | | 1 || 2 | | | 5V | | |
| 493 | 8 | SDA.2 | ALT1 | 1 | 3 || 4 | | | 5V | | |
| 494 | 9 | SCL.2 | ALT1 | 1 | 5 || 6 | | | 0V | | |
| 481 | 7 | IO.481 | IN | 1 | 7 || 8 | 1 | ALT1 | TxD1 | 15 | 488 |
| | | 0V | | | 9 || 10 | 1 | ALT1 | RxD1 | 16 | 489 |
| 479 | 0 | IO.479 | IN | 1 | 11 || 12 | 1 | IN | IO.492 | 1 | 492 |
| 480 | 2 | IO.480 | IN | 1 | 13 || 14 | | | 0V | | |
| 483 | 3 | IO.483 | IN | 1 | 15 || 16 | 1 | IN | IO.476 | 4 | 476 |
| | | 3.3V | | | 17 || 18 | 1 | IN | IO.477 | 5 | 477 |
| 484 | 12 | MOSI | ALT4 | 1 | 19 || 20 | | | 0V | | |
| 485 | 13 | MISO | ALT4 | 1 | 21 || 22 | 1 | IN | IO.478 | 6 | 478 |
| 487 | 14 | SLCK | ALT4 | 1 | 23 || 24 | 1 | OUT | SS | 10 | 486 |
| | | 0V | | | 25 || 26 | 0 | IN | IO. 23 | 11 | 433 |
| 474 | 30 | SDA.3 | ALT2 | 1 | 27 || 28 | 1 | ALT2 | SCL.3 | 31 | 475 |
| 490 | 21 | IO.490 | IN | 1 | 29 || 30 | | | 0V | | |
| 491 | 22 | IO.491 | IN | 1 | 31 || 32 | 0 | IN | IO. 24 | 26 | 434 |
| 482 | 23 | IO.482 | IN | 0 | 33 || 34 | | | 0V | | |
| 495 | 24 | IO.495 | IN | 0 | 35 || 36 | 1 | OUT | IO. 22 | 27 | 432 |
| | 25 | AIN.2 | | | 37 || 38 | | | 1V8 | 28 | |
| | | 0V | | | 39 || 40 | | | AIN.0 | 29 | |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| I/O | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | I/O |
+-----+-----+---------+------+---+--- C4 ---+---+------+---------+-----+-----+
C4 부팅 후 보드에서 다음 과정들을 진행합니다.
회로 구성
i2c 장치를 찾고 i2c-0에 pca9685를 붙일 예정입니다.
(i2c 장치 찾기)
$ ls /dev/i2c*
/dev/i2c-0
pca9685 | gpio 40 pin |
---|---|
Vcc | 1 |
SDA | 3 |
SCL | 5 |
GND | 9 |
/dev/i2c-0 장치가 없는 경우 여기를 확인하세요.
(장치연결 확인)
$ sudo apt update
$ sudo apt-get install i2c-tools
$ i2cdetect -y 0
모터는 위에 pca9685 사진에서 왼쪽부터 0 ~ 15 채널입니다.
신호선, 파워선, 접지선 맞춰서 연결하면 됩니다.
pca9685 외부 입력은 6V/3A를 사용했습니다.
소프트웨어
파이썬 패키지 설치 이전에 필요한 패키지를 먼저 설치합니다.
$ sudo apt update
$ sudo apt-get install build-essential python3 python3-dev python3-venv
pca9685전용 pip패키지를 설치합니다.
가상환경을 따로 세팅할 경우, 가상환경을 만들어 줍니다.
$ python3 -m venv .venv/pca9685
$ source .venv/pca9685/bin/activate
$ sudo python3 -m pip install --upgrade pip
$ sudo python3 -m pip install adafruit-circuitpython-pca9685 \
adafruit-python-shell click wheel \
Adafruit-Blinka \
adafruit-circuitpython-register \
adafruit-circuitpython-busdevice
끔찍한 요구사항이 하나 있는데 설치해줍니다.
$ cd ~
$ wget https://raw.githubusercontent.com/adafruit/Raspberry-Pi-Installer-Scripts/master/libgpiod.py
$ sudo python3 libgpiod.py # 라즈베리파이가 아니면 오류가 엄청 나오는데 무시
$ git clone https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/
$ cd libgpiod
$ git checkout v1.4.2 -b v1.4.2
$ sudo ./autogen.sh --enable-tools=yes --prefix=/usr/local/ --enable-bindings-python CFLAGS="-I/$include_path"
$ sudo make
$ sudo ldconfig
$ sudo cp bindings/python/.libs/gpiod.* /usr/local/lib/python3.?/dist-packages/
설치가 다 끝났으면 예제 코드를 다운로드 및 실행합니다.
사용할 서보모터는 MG996R 입니다.
모터 주파수는 50Hz, 가용 듀티비는 약 5~10%정도 이므로 코드를 일부 수정해야합니다.
$ cd ~
$ git clone https://github.com/adafruit/Adafruit_CircuitPython_PCA9685.git
$ cd Adafruit_CircuitPython_PCA9685
$ vi examples/pca9685_simpletest.py
from board import SCL, SDA
import busio
...
pca.frequency = 50
pca.channel[0].duty_cycle = 0x1FFF
...
수정 후 실행합니다.
$ sudo python3 examples/pca9685_simpletest.py
Leave a comment