Tutorial #2: 회로도 그리기 및 Microcontroller + Accelerometer 연결하기

기운찬곰·2025년 8월 21일

회로 및 PCB 설계

목록 보기
2/9
post-thumbnail

📕 Tutorial #2: Drawing Schematic and Connecting Microcontroller + Accelerometer ( EasyEDA ) 영상을 참고하여 정리 및 실습한 글입니다. - 참고

Adding connectors for RGB LED

이 부분은 굳이 필요는 없는 부분입니다. 필요에 따라 추가하면 됩니다. 설명을 하자면, 각 LED를 분리할 수 있도록 만들고 싶습니다. 2개의 커넥터와 1개의 커넥터를 사용할 거에요.

LED 주위에 커넥터를 추가할 것입니다. 어떤 커넥터를 사용할 지 알고 있습니다. "PM127V-11-04P-H34" 를 검색하세요.

"1.27mm/1*2P" 도 2개 추가해주세요.

외부에서 이 커텍터를 통해 각 LED 색상의 디버깅(테스트)할 수 있습니다.


Connecting LED to a Microcontroller

이제 마이크로컨트롤러 데이터 시트를 살펴봅시다. LED의 밝기를 제어하는 간단한 방법을 알고 싶습니다. 어떻게 PWM 제어를 할까요? 먼저 어떤 핀이 PWM을 지원하는지 알아내야 합니다.

24.3에 보면 PWM 설명이 나옵니다. "The standard PWM function described in this section is available and identical for CCP modules ECCP1, ECCP2, CCP3 and CCP4." 해석해보면, ECCP1, ECCP2, CCP3, CCP4는 각각 독립된 PWM 출력이 가능한 하드웨어 블록이며, 이들 모두에서 같은 방식으로 PWM을 설정할 수 있다고 합니다.

"The standard PWM mode generates a Pulse-Width modulation (PWM) signal on the CCPx pin with up to 10 bits of resolution.": 표준 PWM 모드는 CCPx 핀에서 PWM 신호를 생성하며, 이 신호의 해상도는 최대 10비트까지 지원됩니다. 즉, 0 ~ 1023 사이의 값으로 LED 밝기 등을 정밀하게 조절 가능합니다.

이제 PIN 할당 테이블을 살펴봅시다.

RC6이 CCP4를 지원하며, RC5가 CCP1, RC3가 CCP2를 지원합니다. 따라서 우리는 rc3, rc5, rc6을 사용하면 됩니다.

이제 연결을 할 건데 아래처럼 서로 거리가 너무 멀 수 있습니다. 이 때 배선도구 중에 "Net Label"을 사용하면 됩니다. (⚠️ 주의. "Text" 아님). 서로 동일한 Net Label을 설정하면 서로 연결된 것과 동일한 효과를 갖습니다.


Connection Accelerometer

이제 Accelerometer 를 연결해봅시다. 먼저 GND 부터 연결해줍니다.

그리고 나서 데이터시트를 살펴봅시다. 파워 핀은 어떻게 연결할까요? 전압은요? 확인해보니 1.7~3.6V 정도 전압이면 됩니다.

핀에 대해 더 자세히 알아보기 위해 Pin Description을 확인해봅니다.

  • IO_VDD: 디지털 통신 버스를 위한 전원 입력 핀입니다. 이 핀은 선택적으로 0.1μF 세라믹 커패시터를 이용해 GND에 디커플링할 수 있습니다.
  • VDD: 일반 전원 입력 핀입니다. 이 핀은 0.1μF 세라믹 커패시터로 GND에 디커플링해야 합니다.

정리해보면, VDD는 일반적인 전원 입력 핀인거고, IO_VDD는 디지털 통신 회로 (I²C, SPI 등)의 입출력 버스를 위한 전원이라고 보면 됩니다.

🤔 왜 따로 있을까요? 어떤 IC들은 입출력 전압(IO_VDD)과 내부 로직 전압(VDD)이 다른 전압 레벨로 동작할 수 있도록 분리되어 있습니다. 예를 들어, VDD=3.3V, IO_VDD=1.8V (통신 호환성을 위해 낮게 설정)일 수 있죠.

"커패시터로 디커플링해야 한다": 이 말은 전원 노이즈 제거를 위해 0.1μF 세라믹 커패시터를 GND에 병렬 연결하라는 의미입니다.

그러면 100nF 커패시터를 찾아봅시다. 오... 삼성 제품이 있네요? 설명을 자세히 보면 10% 오차, 16V 허용 전압이 나와있습니다. 사용하는데 문제가 없겠네요.

데이터시트를 보면 예시 회로도가 있습니다.

이를 토대로 다음과 같이 회로를 구성했습니다.

만약 이런 종류의 민감하고 싼 칩을 사용한다면, 큰 커패시터를 하나 더 사용하는게 좋다고 하네요. 기존에 사용했던 10uF을 복붙해서 추가로 연결해줍니다.

다른 핀들도 살펴보겠습니다.

ADDR는 I2C 주소 설정 핀입니다. 이 핀은 IO_VDD 또는 GND에 연결되어야 하며, 이를 통해 I2C 디바이스 주소가 결정됩니다. 즉, GND로 연결해도 됩니다. 하나만 쓸 거면 GND에 그냥 연결해도 전혀 문제 없습니다. 두 개 이상 쓸 거면 하나는 GND, 다른 하나는 IO_VDD에 연결하면 돼요.

예를 들어, GND에 연결하면 I2C 주소가 고정으로 0x1C가 되는 것이고, IO_VDD에 연결하면 0x1D로 설정되는 식이에요. 주소가 2개를 가지고 선택할 수 있게 만드는 거지요. 같은 센서를 I2C 버스에 여러 개 붙이고 싶을 때 구분이 필요할 때 사용 됩니다. 우리는 그런것까지 필요 없으니 그냥 GND 연결해주면 됩니다.


Connecting I2C Accelerometer to MCU

다음 핀으로 넘어가 봅시다. SDA: I2C Serial Data 핀이 있네요.

마이크로컨트롤러 데이터시트 중에 핀 정보를 살펴봅시다. SDA1, SCL1 이라고 적힌 부분을 보면 되겠네요.

"20-PIN ALLOCATION TABLE (PIC16F/LF1829)" 검색.

RB4, RB6 핀을 사용하면 되겠군요. 연결해봅시다. 거리가 있으니까 넷 라벨을 이용해봅시다.

I2C 인터페이스를 사용할 때, 외부 풀업 저항을 연결할 필요가 있을 겁니다. SCL(클럭)과 SDA(데이터) 라인은 오픈 드레인(Open-drain)이기 때문에, 풀업 저항이 없으면 통신이 동작하지 않아요.

그러면 어떤 저항값을 사용할 것인가?

  • 낮은 저항 (예: 1kΩ~2.2kΩ): 더 빠른 상승시간 → 고속 통신에 적합, 전력 소모 ↑
  • 높은 저항 (예: 10kΩ 이상): 상승시간 느림 → 저속 통신에는 OK, 전력 소모 ↓

Accelerometer 데이터시트를 한번 살펴봅시다. "For I2C communication, this assumes a minimum 1.5kΩ pull-up resistor on SCL and SDA pins." 이렇게 적힌 부분을 찾을 수 있습니다. 아하 최소 1.5k 옴 저항은 사용해야 되는 군요.

우리는 그보다 약간(?) 높은 10k 옴의 저항을 사용하겠습니다. 이미 우리 회로도에 10k가 사용되므로 그렇습니다. 많이 사용되는 부품을 사용하는 편이 아무래도 더 심플하게 만들기도 하고요. 가격 측면에서 효율적입니다.

다음으로 넘어가서 Accelerometer 에서 RES 라는 핀이 있네요.

설명을 보니, "Reserved. Connect to GND. Optionally, can be connected to IO_VDD or VDD. Do not leave floating." (이 핀은 아직 특별한 기능이 없는 "예약된" 핀입니다. GND 연결하세요. 선택적으로 IO_VDD나 VDD에 연결해도 됩니다. 플로팅 상태로 두지 마세요.).

따라서 RES 핀은 GND 상태로 연결해주면됩니다.


Connecting Interrupt to MCU

다음으로 INT 라는 핀이 있습니다. "Physical Interrupt pin (Push-Pull). Leave floating if not used." 이 핀은 물리적인 인터럽트 핀입니다. Push-Pull 출력 방식입니다. 사용하지 않는다면 연결하지 않아도 됩니다. Floating으로 둬도 괜찮다는 뜻입니다.

🎯 참고로, Push-Pull 은 출력 방식 중 하나로, High일 땐 VDD에 연결, Low일 땐 GND에 연결되는 능동적인 출력 방식입니다.

우리는 마이크로컨트롤러에서 이 핀을 사용할 겁니다. 이를 통해 움직임을 감지할 수 있도록 할 겁니다. 마이크로컨트롤러 핀 설명을 살펴봅시다. interrupt 라고 적혀있는 부분에 IOC, INT 라고 되어있는 핀은 사용 가능합니다.

  • IOC(Interrupt-On-Change, 변화 감지 인터럽트): 핀의 입력 상태가 변경될 때(Low → High 또는 High → Low) 발생하는 인터럽트를 말함. 주로 버튼 입력이나 외부 신호 감지 등에 사용. 간단한 이벤트 감지용. 하드웨어 비용 적음.
  • INT(External Interrupt): 전용 외부 인터럽트 핀(INTx)에 의해 발생하는 인터럽트를 말한다. 보통 엣지(Edge)를 감지한다. 상승/하강 엣지 중 선택 가능. 더 빠르고 정확한 반응이 필요한 상황에 사용됨. 우선순위 설정 가능.

그러면 어떤 핀을 사용할까요? 여기서는 RA2 핀을 제안합니다. INT/IOC 모두 지원하니까요.

회로도에서 인터럽트 연결을 해주겠습니다.

자, 이제 Accelerometer 연결은 끝났습니다. 이제 다음으로 넘어갑시다.


Add support for MCU Debugging

PIC 마이크로컨트롤러는 어떻게 디버깅하고 플래싱할 수 있을까요? "debugger for pic16"라고 검색해보세요. "MPLAB® PICkit™ 5 In-Circuit Debugger"(이전 버전 4) 이란 제품을 볼 수 있습니다.

PICkit 은 Microchip 공식 디버깅/프로그래밍 도구입니다. 지원 범위 넓고 속도 빠릅니다. 다만 가격이 좀 비쌉니다. 공식 가격이 $76.49 (약 10만원 중반), 한국 내 유통, 혹은 해외 직구 가격은 10~20만원 정도입니다.

💻 참고. MPLAB® PICkit™ 4 Quick Start Guide

마이크로컨트롤러와 PICkit 을 아래와 같이 연결해서 사용하면 됩니다.

💻 참고. MPLAB® PICkit™ 4 In-Circuit Debugger User's Guide

🤔 음... 근데 가격이 너무 비싸네요. 다른 대안은 없을까요? 찾아보니까 저렴한 옵션이 있습니다.

PICkit 3/4/5 (공식 프로그래머) - 가장 추천
또는 ICD 3/4 (디버깅 기능 포함) 또는 SNAP (저렴한 옵션)

PG164100 (MPLAB SNAP DEBUGGER) 가장 저렴함. 구매처: 디바이스 마트 (대략 18,000원)

오...! 훨씬 저렴합니다. 일단 이걸 사용해보도록 하겠습니다. 주문부터 시켜놓고 이어서 진행합니다.

데이터 시트를 살펴보니 핀 맵은 동일한거 같습니다. 문제 없겠네요.

" Programming Connector - The connector is an 8-pin SIL connector (0.100" spacing) that connects to the target device" 이것은 표준 헤더입니다. 그러면 우리는 마이크로컨트롤러 6개핀 헤더를 추가해볼 수 있습니다. "HDR-TH_6P_P2.54-H-M"

6개 헤더 핀은 아래와 같이 연결해주면 됩니다.

핀 1과 2 사이에 50k옴 저항이 풀업 형식으로 연결시킵니다. 물론 50k 옴을 사용할 수 있지만, 불필요하다면 10k 옴도 사용 가능합니다. 그렇게 크리티컬하지 않거든요.

그리고 나서 신호 선에다가 net label을 사용해주면 알아보기 쉬울 겁니다.


Connecting a Button to MCU

이제 버튼을 마이크로컨트롤러에 연결할 차례입니다. IOC 핀 중에 RA, RB 둘 다 사용 가능합니다. 여기서는 RB7을 사용합니다. 심플하게 먼저 연결시켜봅니다.

자, 이제 버튼에 관해서 3가지를 얘기해보려고 합니다.

첫번째, 왜 우리는 인터럽트 지원 핀에 버튼을 연결했는가? 더 심플하고 더 효율적이기 때문입니다. 인터럽트를 사용하지 않는다면, 신호를 계속 유지하면서 체크하고 있어야 합니다. 인터럽트를 사용하면 이벤트가 발생했을 때 셋트할 수 있습니다.

두번째, 디바운싱에 대해서 입니다. 지금 구조는 매우 간단한데, 왜냐하면 최종 제품에 이 버튼을 사용하지 않을 계획이기 때문입니다. 이것은 단순히 디버깅을 위한것 입니다. 만약 버튼을 진짜 시제품에 사용한다면 디바운싱 처리가 필요합니다.

세번째, 저항에 대해서 입니다. 지금은 저항이 없습니다. 플로팅 상태가 됩니다. 그래도 괜찮습니다. 마이크로컨트롤러 내부에 풀업 저항이 있기 때문이죠. 그래서 우리는 외부 저항이 필요없습니다. 대신 나중에 사용할 때 풀업 활성화 해줘야 합니다. 잊지 마십쇼.


Connecting MCU power

마이크로컨트롤러 VDD, VSS 핀을 연결해줍니다. VDD는 디커플링 커패시터를 달아줍니다.

레퍼런스 회로도를 참고하면서 더블 체크를 하는 것은 좋은 습관입니다. 구글에서 "pic16 evaluation board" 로 검색해보세요.

PIC16 Evaluation Board(평가 보드)는 Microchip의 PIC16 시리즈 마이크로컨트롤러(MCU)를 테스트하고 개발하기 위한 개발용 하드웨어 플랫폼입니다. 이미 만들어진 보드를 참고해서 어떻게 설계되어있는지 살펴보면 좋습니다.

그리고 나서 최종적으로 텍스트 표현을 해주면 좋겠죠? 이해하기 쉽도록 말이죠.


Adding I2C header

이제 어떤걸 하면 좋을까요? Accelerometer 디버그는 어떻게 할까요? 마이크로컨트롤러로 적절한 신호선으로 보내서 처리할까요? 아니면 별도 I2C 헤더가 있으면 좋을까요?

우리는 헤더를 추가할 것입니다. 예를 들어, 버튼 신호가 연결되면 우리는 헤더에 연결해서 처리할 수 있습니다.

헤더 핀을 만들어주면, 디버깅용 / 외부 I2C 마스터 연결용으로 사용할 수 있습니다. (예: PC와 연결해서 센서값 읽기 테스트 가능)


Annotating Schematic

지금 보면 부품 별칭이 H2, H5,... U2 뭐 이런식으로 되어있습니다. 한번 제대로 다시 정의를 하고 넘어가도록 하겠습니다.

"Edit > Annotate" Re-annotate all 하면 "?" 로 바뀝니다. 그리고 나서 별칭을 정해줍니다. 마이크로컨트롤러 U1, Accelerometer는 U2, LM1117은 U3으로 설정할 겁니다.

좀 중요한 U1, U2, U3, H1, H2,... LED1, LED2 이런것들은 직접 정의를 해주고, 나머지를 알아서 주석 설정이 되도록 아래와 같이 설정 해줍니다.


Mark unconnected pins

마지막으로 연결되지 않은 핀은 연결 없음 플래그를 달아주겠습니다.


Importing Shematic to PCB

드디어 회로도를 완성했습니다. 첫 회로도라면 아마 감격스럽지 않을까 생각합니다. 유튜브 영상이나 블로그를 보면 남이 만든 회로도를 좀처럼 이해하지 못하고 커다란 장벽이 있다고 느꼈는데 조금은 친숙해진 느낌이 듭니다.

결국 회로라는 건 크게 보면 어렵지만 부분적으로 보면 자주 사용되는 패턴이 있는 거 같습니다. 디커플링 커패스터도 그 중 하나고요. 이렇게 하나하나 공부하다보면 어느새 스킬이 늘겠지요?

현재 회로도에서 "Design > Convert Schematic to PCB" 선택해보면 짠~

다음 시간에는 본격적인 PCB 를 진행할 거에요. 부품을 배치하고, 선을 연결하는 과정이지요.

profile
또 하나의 자아

0개의 댓글