inflearn logo
강의

講義

知識共有

PCB HW設計実務:STM32を活用したMixed-signalボード設計プロジェクト

STM32F103 Schematic 설계 관련 질문

解決済みの質問

9

ArcStro

投稿した質問数 3

0

삼코치님, 안녕하세요

'31. STM32F103 Schematic - Power 설계' 강의를 수강하면서 궁금한 점이 있습니다.


Q1. STM32F103의 데이터 시트에는 VDD와 VSS 사이에 100nF 커패시터 5개를 연결하라고 나와있습니다. 강의에서는 대신에 0.1uF 커패시터 1개를 사용하셨는데 어떤 이유가 있는지 궁금합니다.


Q2. 혹시 100nF 커패시터를 5개 사용하는 경우와 500nF 커패시터 1개를 사용하는 경우를 비교했을 때 응답 특성에 유의미한 차이가 발생하는지 궁금합니다.


Q3. Pull-down 저항과 Pull-up 저항을 선정하는 기준이 서로 다른 지 궁금합니다.


Q4. STM32F103의 데이터 시트에는 8MHz 오실레이터 회로를 구성할 때 5pF~25pF 사이의 커패시터를 사용한다고 나와있습니다. 강의에서는 30pF 커패시터를 사용하셨는데 어떤 이유가 있는지 궁금합니다.

MCU stm32 hardware artwork kicad orcad

回答 1

0

samcoach

안녕하세요, 답변 남겨드립니다.

질문 주신 내용은 강의의 STM32F103 Load Cap, VDD, Power 설계 파트에서 반드시 짚고 넘어가야 하는 부분입니다. 특히 디커플링 커패시터는 단순히 총용량만 맞추는 부품이 아니고, 크리스털 커패시터는 8MHz라는 주파수만 보고 정하는 부품이 아니라는 관점으로 이해하시면 좋겠습니다.

디커플링 커패시터부터 말씀드리면 0.1uF와 100nF는 같은 용량입니다. 다만 데이터시트의 100nF 5개를 0.1uF 1개로 대체할 수 있다는 의미는 아닙니다. 5개를 요구하는 이유는 총용량 500nF를 확보하기 위해서가 아니라, 각각의 VDD-VSS 전원 핀 쌍 바로 옆에서 고주파 스위칭 전류를 공급하기 위해서입니다. ST의 STM32F103 데이터시트는 5 x 100nF와 1 x 4.7uF 구성을 제시하고 있고, 별도의 하드웨어 설계 가이드에서도 VDD 핀마다 100nF 한 개와 최소 4.7uF, 일반적으로 10uF의 벌크 커패시터를 배치하도록 안내합니다.

강의에서 0.1uF 한 개만 표시한 것은 전원 연결 개념을 단순화한 실습 표현이었지만, 실제 PCB 제작 기준으로는 부족합니다. 이 부분은 제가 회로도에서 각 VDD 핀마다 명확히 표시했어야 합니다. 실보드에서는 각 VDD-VSS 쌍마다 100nF를 배치하고, 커패시터와 전원 핀 사이 배선은 가능하면 1~3mm 이내로 짧게 구성하는 쪽을 권장합니다. 여기에 MCU 전체 전원 입력 근처에 4.7~10uF를 추가하고, VDDA에는 100nF와 1uF를 별도로 배치하는 구성이 안전합니다. ST 역시 디커플링 커패시터를 해당 전원 핀에 최대한 가깝게 배치하도록 요구하고 있습니다.

100nF 5개와 500nF 1개는 이상적인 회로에서만 Ctotal = 500nF로 동일합니다. 실제 커패시터 임피던스는 Z ≈ ESR + jωESL + 1/(jωC)로 봐야 하며, 고주파에서는 용량보다 패키지와 배선의 ESL, 즉 기생 인덕턴스가 더 큰 영향을 줍니다. 100nF 5개를 각 전원 핀에 분산하면 전류 루프가 짧아지고 각 핀에서 발생한 순간 전류를 바로 공급할 수 있지만, 500nF 한 개를 MCU 한쪽에 배치하면 반대편 전원 핀까지 전류가 긴 패턴과 비아를 지나가야 합니다. 예를 들어 전원 루프 인덕턴스가 1nH이고 전류 변화율이 di/dt = 50mA/ns라면 V = L x di/dt에 따라 약 50mV가 발생하지만, 루프가 길어져 5nH가 되면 약 250mV까지 증가할 수 있습니다. MCU가 72MHz로 동작하더라도 전원망은 72MHz만 대응하는 것이 아니라 수 ns 수준의 내부 스위칭 에지에서 발생하는 수십~수백MHz 성분까지 대응해야 합니다.

따라서 500nF 또는 0.47uF 한 개를 추가하는 것은 가능하지만, 각 VDD 핀의 100nF를 제거하는 방식으로 사용해서는 안 됩니다. 실무에서는 100nF를 핀별로 배치하고, 필요하면 0.47~1uF를 MCU 근처에 추가하며, 4.7~10uF를 전원 블록의 벌크 용량으로 두는 식으로 주파수 대역을 분담합니다. 같은 100nF 여러 개를 무조건 한곳에 몰아놓는 것보다 전원 핀별로 분산하는 것이 더 중요합니다.

Pull-up과 Pull-down 저항은 계산 기준 자체는 동일하고, 보장하려는 기본 논리 상태가 반대일 뿐입니다. Pull-up은 외부 누설전류가 핀을 Low 방향으로 끌어내려도 VIH,min 이상을 유지해야 하므로 Rpullup <= (VDD - VIH,min)/Ileak,total로 검토하고, Pull-down은 외부 누설전류가 핀을 High 방향으로 올려도 VIL,max 이하를 유지해야 하므로 Rpulldown <= VIL,max/Ileak,total로 검토합니다. 여기에 입력 커패시턴스와 배선 커패시턴스에 의한 RC 지연, 외부 회로가 반대 상태로 구동할 때의 소비전류 I = VDD/R, 전원 인가 및 리셋 구간의 안전 상태를 함께 봐야 합니다.

예를 들어 3.3V에서 10kΩ을 사용하면 반대 상태로 구동될 때 약 330uA가 흐르고, 47kΩ이면 약 70uA가 흐릅니다. 소비전력만 보면 47~100kΩ이 유리하지만, BOOT0, Enable, Reset처럼 노이즈에 의해 상태가 바뀌면 시스템이 부팅되지 않는 핀은 4.7~10kΩ 정도로 강하게 잡는 편이 안전합니다. STM32F103의 내부 Pull-up과 Pull-down은 약 30~50kΩ 범위이므로 일반 GPIO 기본 상태에는 사용할 수 있지만, 긴 케이블이나 외부 커넥터가 연결되는 신호, 모터 드라이버 주변처럼 EMI가 강한 환경에서는 외부 10kΩ 전후 저항을 두는 편이 양산 재현성이 좋습니다. ST의 STM32F10xxx 예제 역시 Boot와 JTAG 관련 저항에 10kΩ을 사용하고 있습니다.

I2C Pull-up은 조금 다르게 보셔야 합니다. I2C는 단순한 기본 상태 고정이 아니라 Open-drain 신호의 상승시간을 저항과 버스 커패시턴스가 결정하므로, 일반적인 GPIO Pull-up처럼 10~100kΩ 범위에서 임의로 선정하면 안 됩니다. 버스 커패시턴스가 커지거나 통신속도가 400kHz 이상으로 올라가면 2.2~4.7kΩ 정도가 자주 사용되며, 최종값은 상승시간과 디바이스의 Low 출력전류 조건으로 검증해야 합니다.

8MHz 크리스털의 30pF에 대해서는 8MHz라는 주파수만으로 값을 결정하면 안 됩니다. 크리스털 제조사가 지정한 Load Capacitance인 CL과 MCU 핀 및 PCB의 기생용량 Cs를 기준으로 CL = C1 x C2/(C1 + C2) + Cs를 계산해야 합니다. C1 = C2 = C라면 C = 2 x (CL - Cs)가 됩니다. 예를 들어 크리스털의 CL이 18pF이고 PCB 및 핀의 기생용량을 3pF로 잡으면 C = 2 x (18pF - 3pF) = 30pF가 되므로 30pF 사용이 계산상 성립합니다. 반대로 CL이 12pF인 크리스털이라면 같은 조건에서 C = 18pF가 적절하므로 30pF는 과도한 값이 됩니다.

STM32F103 데이터시트의 5~25pF는 일반적인 권장 범위이며, 특정 크리스털에 대해 계산된 절대값은 아닙니다. ST의 STM32F10xxx 8MHz 레퍼런스 회로는 20pF 두 개를 예시로 사용하지만, 역시 실제 값은 크리스털 특성에 따라 달라진다고 명시합니다. 강의에서 사용한 30pF는 CL이 약 18pF이고 기생용량을 약 3pF로 가정하면 설명 가능한 값이지만, 크리스털 Part Number와 CL 조건을 함께 제시하지 않았다면 설계 근거가 충분히 전달되지 않은 것입니다. 실제 BOM을 작성할 때는 반드시 선택한 크리스털 데이터시트의 CL, ESR, C0, Drive Level을 확인하고 값을 다시 계산해야 합니다.

부하 커패시터가 지나치게 크면 발진 주파수만 이동하는 것이 아니라 발진 시작시간이 길어지고 Gain Margin이 감소하여 저온, 저전압 또는 느린 전원 상승 조건에서 간헐적으로 발진하지 않을 수 있습니다. ST는 Gain Margin을 최소 5 이상으로 검토하도록 권고합니다. 실무에서는 계산값을 기준으로 18pF, 22pF, 27pF, 30pF 정도의 C0G 또는 NP0 커패시터를 교체할 수 있도록 동일 Footprint를 두고, 최소·최대 전압과 온도 조건에서 30~100회의 Cold-start를 반복해 발진 여부와 시작시간을 확인합니다. 30pF를 그대로 사용하는 것보다 해당 8MHz 크리스털의 CL을 먼저 확인하는 것이 정확한 설계 순서입니다.

과제 3. Power budget 관련 질문

0

12

2

디버거 관련하여 질문있습니다.

0

15

2

Biasing 저항

0

31

2

CH340 전원 연결

0

33

1

MOSFET pull down 저항의 필요성

0

43

2

21번 INT pin 풀업 저항

0

72

2

전력 산출하는데 이해가 안가요?

0

56

2

수강연장

0

61

2

강의수강 만료일 연장 신청

0

54

2

강의 질문

0

96

2

RJ45 library 누락

0

74

2

강의 만료 확인 요청

0

71

2

JTAG 통신 질문

0

77

1

GND 오류

0

80

2

프로젝트 주제

0

83

1

45강 UART, TTL 질문

0

87

1

발열에 의한 LDO의 드롭아웃 전압 상승

0

110

2

I2C 통신 방식

0

144

2

라우팅 질문

0

94

2

kicad 라이브러리 추가 방법

0

385

2

VIa에 GND 항목이 없습니다.

0

104

2

디버거를 디버깅하려면

0

115

2

강의 연장

0

117

2

via 관련 질문드립니다.

0

77

1