
MCP23017을 기반으로 한 더 간단하고 경제적인 16채널 GPIO expander입니다. 취미 제작자, 프로토타이핑 및 교육용 프로젝트에 적합합니다. 최대 8개의 모듈을 연결하여 I²C를 통해 128개의 GPIO를 제어할 수 있습니다.
이는 제 산업용 버전에 대한 비용 효율적인 대안으로, optocoupler와 ULN2803A driver 같은 고가 부품을 제거했습니다. 보드는 100×40mm로 작고 JLCPCB의 $2 특별 혜택에 맞으며, 배선이 더 쉽도록 더 큰 5mm terminal block을 사용합니다.
STEP 1. 준비물

주요 IC:
- MCP23017 (I²C I/O Expander)
전원:
- MB2S (Bridge rectifier)
- 78L05 (Voltage regulator)
- DC Jack connector
- Screw terminal (2-pin)
PCB 및 조립:
- 2-layer PCB (100×40mm)
- SMD components (resistors, capacitors, LEDs)
- 5mm terminal blocks (WJ2EDGK-5.08-12P-14-00A)
- jumpers용 3-pin headers
- I²C connectors (4-pin, 2.54mm)
선택 사항:
- Arduino UNO (for testing)
- I²C cables
- Soldering tools (hot plate, iron, tweezers)
STEP 2. 회로도 설계

전원 입력부부터 시작하여 Altium에서 회로를 설계합니다. 역극성 보호를 위해 bridge rectifier (MB2S)를 사용한 다음, 78L05 linear regulator를 사용하여 전압을 5V로 낮춥니다.
MCP23017은 I²C bus에 연결됩니다. 16개의 GPIO pin은 terminal block에 직접 연결되므로, 이 기본 버전에는 optocoupler나 ULN2803A driver가 필요하지 않습니다.
주소 선택에는 A0, A1, A2 pin에 연결된 세 개의 jumper를 사용합니다. 세 개의 LED가 binary address (0-7)를 표시합니다. LED에는 1kΩ resistor를, I²C line에는 4.7kΩ pull-up resistor를 추가합니다.
산업용 버전과 달라진 주요 사항:
- ULN2803A, optocoupler, 7-segment display, BCD driver, slide switch 제거
- 78L05 regulator, jumper 및 binary LED로 대체
- 부품 15개 감소 = 더 간단하고 저렴합니다!
STEP 3. PCB 레이아웃


100×40mm 크기의 2-layer PCB를 배치합니다. 이는 JLCPCB의 100×100mm $2 특별 혜택에 완벽하게 맞습니다.
레이아웃 개선 사항:
- 전원 입력: 왼쪽 위 모서리 (screw terminal + DC jack)
- I²C IN: 왼쪽 아래 모서리
- I²C OUT: 오른쪽 아래 모서리 (산업용 버전의 daisy-chain 문제 해결)
- GPIO terminal: 상단 및 하단 가장자리를 따라 배치
- Address jumper 및 LED: 쉽게 접근할 수 있도록 함께 그룹화
trace를 짧게 유지하고 bottom layer에 ground pour를 사용합니다. decoupling capacitor (100nF)는 MCP23017 VDD pin 근처에 배치합니다.
Gerber 파일을 내보내고 제조를 위해 JLCPCB에 업로드합니다.
STEP 4. 조립




SMD 조립(열판 / 리플로):
- 스텐실을 PCB에 맞춰 정렬하고 솔더 페이스트를 고르게 도포합니다.
- 가장 작은 부품(0603 저항기와 커패시터)부터 SMD 부품을 배치합니다.
- MCP23017 IC를 마지막에 배치하고 핀 1의 방향에 주의합니다.
- 최고 온도 245°C로 열판에서 리플로합니다.
- 현미경으로 검사하여 솔더 브리지나 냉땜이 있는지 확인합니다.
스루홀 조립:
- 5mm 터미널 블록, DC 잭 및 4핀 헤더를 삽입합니다.
- 온도 조절 인두로 각 핀을 납땜합니다.
- 점퍼와 나머지 스루홀 부품을 삽입합니다.
- 남는 리드를 잘라내고 이소프로필 알코올로 기판을 세척합니다.
참고: 5mm 터미널 블록은 산업용 버전에 사용된 3.5mm 제품보다 배선하기가 훨씬 쉽습니다. 초보자에게 안성맞춤입니다!
STEP 5. 테스트 및 체이닝



주소 설정:
- 세 개의 점퍼(A0, A1, A2)를 사용하여 I²C 주소를 설정합니다.
- 점퍼 ON = 논리 0, 점퍼 OFF = 논리 1
- 주소 = (A0 × 1) + (A1 × 2) + (A2 × 4)
- 이진 LED에서 주소를 확인합니다.
기본 테스트:
- I²C 포트를 Arduino(SDA, SCL, VCC, GND)에 연결합니다.
- GitHub 저장소에서 테스트 스케치를 업로드합니다.
- LED가 연결된 테스트 보드를 터미널 블록에 연결합니다.
- 출력은 GPIO 1부터 GPIO 16까지 순환해야 합니다.
체이닝 테스트:
- 각 모듈에 고유한 주소를 설정합니다(예: 1과 3).
- 첫 번째 모듈의 I2C_OUT을 두 번째 모듈의 I2C_IN에 연결합니다.
- 두 주소를 모두 제어하도록 Arduino 코드를 업데이트합니다.
- 출력은 GPIO 1부터 GPIO 32까지 순환해야 합니다.
파일 다운로드
- GitHub 저장소: https://github.com/BEEMB/Basic-GPIO-Expander-MCP23017
- Gerber 파일: https://github.com/BEEMB/Basic-GPIO-Expander-MCP23017/tree/main/Hardware/GERBER
- 회로도: https://github.com/BEEMB/Basic-GPIO-Expander-MCP23017/blob/main/Hardware/Schematic/Schematic.pdf
- Arduino 테스트 코드: https://github.com/BEEMB/Basic-GPIO-Expander-MCP23017/tree/main/Software
원문: https://www.instructables.com/Basic-GPIO-Expander-MCP23017/