회로설계 멘토 삼코치
@samcoach
수강생
5,042
수강평
482
강의 평점
5.0
이력 사항
現) 반도체 대기업 (CHIP 회로설계 4년차)
아날로그 IP / 디지털 시나리오 설계
A급 특허 출원
글로벌 외국 기업 엔지니어 기술 대응
前) 스타트업 인큐베이팅 업체 (MCU Firm-ware 설계)
前) 대기업 가전제품 업체 (All-in-one 정수기 생산 기술)
前) 중견기업 의료기기 업체 (CIS, DDI ASIC 설계)
CHIP 설계 취업/이직 충분히 도전할 수 있습니다.
저와 함께 CHIP 설계 취업/이직에 가까워지세요!
"반도체 아날로그/디지털 회로설계를 꿈꾸시나요?
대기업 S전자 현직자의 눈으로 기초부터 도와드립니다!"
반갑습니다! S전자에서 시스템반도체를 설계하고 있는 삼코치 입니다 :)
저는 스타트업에서부터 회로설계 직무에 도전하면서 많은 시행착오를 겪어왔습니다.
PCB 설계, F/W 설계, FPGA 설계, CHIP 설계를 구먹구구 식으로 경험했죠.
그런데 한 가지 아쉬움이 있었습니다.
'왜 회로설계 분야는 체계화된 실습 기회와 취업에 대한 정보가 적을까?'
반도체 공정, 프로그래밍 등의 분야는 콘텐츠가 많았지만, 회로설계는 정보가 적다보니 그저 '숨겨진 세상'이었습니다.
이 글을 읽는 회로설계 취준생분들 또한 저와 같은 답답한 심정을 느껴보셨을 겁니다.
그래서 현직자와 면담도 해보고, 교수님께 물어보고, IDEC 강의를 수강해보기도 하죠.
하지만 알들말듯 여전히 잘 모르는 경우가 대부분 입니다.
그.래.서! 제가 직접 취업까지 연결되는 체계화된 강의를 제작해 버렸습니다!
저는 [아날로그 회로-> 디지털 시스템 -> MCU 펌웨어 -> 드라이버 설계 -> 소프트웨어]를 모두 경험하면서,
'Top-down / Bottom-up'스킬을 통해 제품과 회로를 완벽히 설명해낼 수 있게 되었습니다.
그리고 인프런에서 실무적인 회로를 다루면서 '아날로그/디지털 회로'에 대해 저만의 직관적 해석 방법부터 Trade-off를 따지는 방법까지 모두 풀어드리려 합니다.
저와 함께 기초를 닦고, 실무 역량을 쌓아 자신만의 Chip 설계 Story를 만들어 가봅시다!
강의
클립
전체 3한 권으로 끝내는 SVA(System Verilog Assertion) 실무 핸드북
12개의 챕터 中 1챕터를 무료 공개합니다.→ 1챕터 다운받기(Click!)💻 취업 준비 + 현업에서 필요할 때마다 꺼내 쓰세요.왜 Assertion인가? RTL 검증의 현실반도체 회로설계를 공부하신 분들은 많습니다.SystemVerilog로 테스트벤치 작성, Ran
회로설계 멘토 삼코치
10월 15일

로드맵
전체 1수강평
- PCB HW설계 실무 : STM32를 활용한 Mixed-signal 보드 설계 프로젝트
- PCB HW설계 실무 : STM32를 활용한 Mixed-signal 보드 설계 프로젝트
- 회로설계 입문자를 위한 디지털, 아날로그 설계와 실무 Project
- PCB HW설계 실무 : STM32를 활용한 Mixed-signal 보드 설계 프로젝트
- PCB HW설계 실무 : STM32를 활용한 Mixed-signal 보드 설계 프로젝트
게시글
질문&답변
JTAG 통신 질문
안녕하세요, 답변 남겨드립니다.질문 주신 부분은 회로도에서 붙인 Global Label의 의미와, MCU가 실제로 지원하는 JTAG/SWD 전용 핀을 분리해서 보시면 훨씬 깔끔하게 이해됩니다. 제가 강의에서 PB12, PB13, PB14, PB0에 Global Label을 붙인 것은 그 핀들이 원래 JTAG 전용 핀이라서 선택한 것이 아니라, F103과 F407 사이에서 특정 신호를 연결해 설명하기 위한 예시로 사용한 것입니다. 즉, Global Label은 같은 이름의 net을 서로 연결해 주는 회로도 표기이고, 그 이름을 TCLK나 TMS처럼 붙였다고 해서 해당 GPIO가 자동으로 JTAG 전용 기능을 가지는 것은 아닙니다.STM32F103에서 실제 디버그 포트로 사용하는 SWJ 계열 핀은 정해져 있습니다. 그래서 “정식 JTAG 또는 SWD 디버깅 포트”를 설계하는 상황이라면, 그 핀들은 임의로 PB12, PB13, PB14, PB0처럼 바꿔서 사용할 수 없습니다. 반대로 제가 강의에서 보여드린 부분처럼 MCU 간에 일반 신호를 주고받기 위한 용도라면, 반드시 특정 포트를 고집해야 하는 것은 아니고, 현재 설계에서 충돌이 없는 spare GPIO를 선택하시면 됩니다. 다만 여기서도 정말 아무 핀이나 고르면 되는 것은 아니고, 부트 설정에 걸린 핀이나 크리스털, 디버그 전용 핀, 이미 다른 주변장치와 강하게 엮인 핀은 피해서 잡는 것이 실무적으로 맞습니다.질문하신 “왜 하필 PB12, PB13, PB14, PB0인가”에 대해서는, 그 핀들만이 가능한 필연적인 이유가 있었다기보다 강의 흐름상 설명하기 편하고, 해당 예제 회로에서 사용 충돌이 적은 GPIO라서 선택한 것으로 이해하시면 됩니다. 실제 프로젝트에서는 보드 전체 pin assignment를 보고 남는 GPIO를 고르게 되고, 이때는 기능 충돌, 향후 펌웨어 확장 가능성, 라우팅 난이도, 주변 노이즈 영향까지 같이 봐야 합니다. mixed-signal 보드에서는 이런 선택이 생각보다 중요해서, 디지털 제어선 하나를 어디에 두느냐에 따라 ADC 근처로 불필요한 스위칭 노이즈가 들어오기도 합니다.그리고 JTAG 포트가 원래 TCK, TMS, TDI, TDO, TRST까지 5개 신호를 쓴다고 알고 계신 부분은 맞습니다. 다만 STM32 계열 보드 실무에서는 full JTAG 5선을 항상 다 쓰는 경우보다, SWD 방식으로 단순화해서 SWDIO, SWCLK, 그리고 필요하면 NRST 정도만 빼는 경우가 훨씬 많습니다. 그래서 강의에서 3개의 Global Label만 사용한 이유도, “표준 JTAG 5선 전체를 구현한다”는 의도라기보다, 필요한 신호만 연결하는 구조를 보여드리기 위한 맥락으로 보시면 됩니다. 즉, 그 장면을 full JTAG 표준 예제로 이해하시면 조금 헷갈릴 수 있고, 실제로는 두 MCU 사이 연결 또는 최소한의 디버그/제어 신호 연결 관점에서 받아들이시는 편이 맞습니다.여기서 중요한 판단 기준은 딱 하나입니다. 정말 외부 디버거를 붙여 MCU를 디버깅하려는 목적이면 MCU에 정해진 디버그 핀을 따라야 하고, 단순히 MCU와 MCU 사이에서 특정 제어 신호를 넘기려는 목적이면 일반 GPIO에 원하는 net label을 붙여 연결해도 됩니다. 강의에서 보신 PB12, PB13, PB14, PB0은 후자에 가까운 예시라고 이해하시면 자연스럽습니다. 이름이 TCLK, TMS, TRST처럼 보이더라도, 그것이 곧바로 “이 핀들이 JTAG 전용 핀이다”라는 의미는 아니라는 점만 정확히 잡아두시면 이후에 회로를 보실 때 훨씬 덜 헷갈리실 거예요.
- 0
- 1
- 17
질문&답변
LTSpice log값에서 gm 안나옴. (해결하였습니다)
안녕하세요, 해결하셨군요!해당 내용은 강의 FAQ에도 작성되어있으니 한번 더 확인해보셔도 좋을것 같습니다!문의 감사합니다!
- 0
- 2
- 13
질문&답변
bgr 설계시 opamp
안녕하세요, 답변 남겨드립니다.네, opamp를 먼저 standalone으로 설계한 뒤 symbol화해서 BGR top에 넣는 방식은 현업에서도 가장 일반적으로 씁니다. 오히려 그렇게 해야 opamp 단품 성능과 BGR loop 안에서의 시스템 성능을 분리해서 볼 수 있어서 디버깅이 훨씬 빨라져요. 커리큘럼 자체도 BGR 설계와 AMP 설계를 분리해서 다루고 있어서, opamp를 별도 블록으로 보고 계층적으로 조립해보는 접근은 자연스럽습니다.다만 여기서 많이 실수하는 지점이 하나 있어요. “동작하는 opamp”와 “BGR 안에서 제대로 쓰이는 opamp”는 다릅니다. BGR 내부 입력 common-mode는 보통 Vbe 근처라서 0.6 V ~ 0.9 V 근방에 걸리는 경우가 많고, 출력은 mirror gate나 bias node를 충분히 밀고 당겨야 해서 swing 여유가 생각보다 빡빡합니다. 그래서 standalone opamp가 AC gain 70 dB 이상, PM 60 deg 이상으로 예쁘게 나와도, BGR 안에 넣으면 입력 CM range 부족이나 출력 swing 부족 때문에 저온 SS corner에서 아예 수렴이 꼬이거나 startup 실패가 납니다. 설계 순서는 opamp 단품 검증 후 symbol화까지는 맞는데, 그 다음에는 반드시 BGR 내부 노드 기준으로 다시 DC operating point, loop stability, startup, line regulation, PSRR까지 재검증해야 합니다.offset은 보통 생각보다 훨씬 직접적으로 Vref 오차로 들어옵니다. 아주 단순하게 보면 opamp가 원래 강제로 맞춰야 할 두 노드를 0 V 차이가 아니라 Vos만큼 차이 나게 만드는 셈이어서, PTAT current가 Iptat = (DeltaVbe + Vos)/R처럼 바뀝니다. 그러면 Vref는 대략 Vref = Vbe + K*(DeltaVbe + Vos) 형태가 되고, 결국 DeltaVref ~= K*Vos로 보시면 감이 빨라요. 예를 들어 BGR의 PTAT scaling factor K가 8~12 수준이면 opamp input-referred offset이 1 mV만 있어도 Vref 오차가 8~12 mV까지 바로 들어올 수 있습니다. 1.2 V reference 기준으로 보면 약 0.67%~1.0%라서, trim 없는 구조에서는 절대 가볍게 볼 수준이 아니에요.그래서 BGR용 opamp는 “일반 purpose opamp”처럼 만들기보다 “low-offset error amplifier”에 가깝게 잡는 편이 맞습니다. 실무에서는 open-loop gain보다 먼저 offset, input pair matching, CM range, output swing, startup interaction을 봅니다. gain은 60 dB 이상이면 기본은 되지만, precision 쪽으로 가면 70~80 dB 이상을 선호하는 경우가 많고, offset은 pre-layout에서 0.5 mV 이하로 눌러놓고 Monte Carlo mismatch까지 봐서 3sigma 기준 몇 mV가 Vref에 반영되는지 확인합니다. 특히 Vos temp drift가 5 uV/degC만 되어도 K=10이면 Vref drift contribution이 50 uV/degC가 되니까, 1.2 V 기준 약 42 ppm/degC가 추가됩니다. 온도계수 20 ppm/degC대 목표를 잡는 구조라면 이게 치명적일 수 있어요.offset 보완은 보통 순서가 있습니다. 처음부터 chopper나 auto-zero를 떠올리기보다, 먼저 input pair와 active load의 mismatch를 줄이는 쪽이 훨씬 현실적입니다. 입력쌍 면적을 4배 키우면 랜덤 mismatch sigma는 대략 1/2 수준으로 줄어드는 방향이라서, 면적 몇 천 um^2 늘리는 대가로 수 mV 오차를 잡는 경우가 많아요. 여기에 L을 조금 늘려 1/f noise와 mismatch를 동시에 완화하고, 좌우 배선 저항과 contact 수를 맞춰 systematic offset까지 줄여야 합니다. BGR은 회로도만 대칭이라고 끝나는 게 아니라, 라우팅 기생과 IR drop이 한쪽에만 1~2 ohm 생겨도 미세한 전류 불균형이 offset처럼 보일 수 있어서 layout 영향이 꽤 큽니다.그 다음 카드가 trim입니다. 양산까지 생각하면 이게 제일 현실적이에요. resistor ratio trim이나 PTAT/CTAT current trim을 넣어서 초기 정확도를 보정하는 방식이 보편적입니다. 예를 들어 untrimmed 오차가 ±15 mV 정도 예상되면 trim range를 ±20 mV 정도 확보하고, 6 bit trim이면 step이 대략 40 mV/64 = 0.625 mV 수준이라서 꽤 쓸 만합니다. 반대로 trim 없이 회로만으로 0.1%급 정확도를 만들겠다고 하면, 공정 mismatch와 패키지 스트레스까지 고려했을 때 개발 일정이 급격히 늘어나는 경우가 많아요. 실무에서는 성능과 일정이 충돌하면, low-offset 설계 + modest trim으로 가는 판단을 자주 합니다.chopper나 auto-zero는 분명 offset 저감 효과가 좋지만, BGR에서는 늘 정답은 아닙니다. clock이 추가되면서 ripple, spur, charge injection, startup interaction이 생기고, always-on bias block에 디지털 클록을 넣는 순간 노이즈 경로가 하나 더 열립니다. 저전력 PMIC나 일반 SoC housekeeping BGR에서는 오히려 구조 단순화와 trim이 더 나은 선택인 경우가 많아요. 정말 초정밀 reference가 필요해서 initial accuracy와 low-frequency drift를 아주 강하게 눌러야 할 때만 검토하는 편이 안전합니다.개인적으로는 opamp를 BGR에 넣을 때 먼저 “offset 민감도”를 숫자로 뽑아보시는 걸 권합니다. 시뮬레이션에서 opamp 입력 한쪽에 작은 dc source를 직렬로 넣고 Vos = -2 mV, -1 mV, 0, +1 mV, +2 mV로 sweep해 보세요. 여기서 dVref/dVos가 몇 V/V인지 바로 나옵니다. 이 값이 9 V/V인지 15 V/V인지에 따라 설계 방향이 완전히 달라집니다. 10 V/V 이상이면 low-offset layout과 trim 없이 밀어붙이기 어렵고, 3~5 V/V 수준이면 구조적으로 offset에 덜 민감한 편이라 훨씬 편해집니다. 이걸 먼저 알아야 opamp offset spec을 200 uV로 잡을지 1 mV로 잡을지 감이 생겨요.그리고 BGR용 opamp는 안정도도 일반 증폭기와 보는 포인트가 조금 다릅니다. BGR loop 안에는 저항, BJT 또는 parasitic PNP, current mirror, startup branch가 다 얽혀 있어서, 단품 opamp PM이 70 deg여도 top-level loop PM이 40 deg 아래로 떨어지는 경우가 있습니다. 특히 post-layout에서 high-impedance bias node에 100 fF ~ 500 fF만 더 얹혀도 pole 위치가 크게 움직입니다. 그래서 symbol화 후에는 opamp를 믿지 말고, BGR top에서 loop break 걸어서 다시 gain/phase를 보는 게 맞아요.한 줄로 정리하면, opamp를 설계해서 symbol로 넣는 건 맞는 방향이고, offset 보완은 “저오프셋 구조 + matching 강화 + layout 대칭 + trim” 순서로 푸는 게 가장 실무적입니다. chopper는 마지막 카드에 가깝고, 먼저 해야 할 일은 BGR 구조에서 DeltaVref ~= K*Vos가 몇 배인지 뽑아보는 것입니다. 그 숫자 하나만 잡혀도 지금 opamp를 계속 써도 되는지, 입력쌍을 키워야 하는지, trim을 넣어야 하는지가 바로 보일 거예요.
- 0
- 2
- 7
질문&답변
AI 실무활용가이드 PDF 비밀번호
안녕하세요, 답변 남겨드립니다.해당 비밀번호는 해당 챕터를 클릭하시면 왼쪽 화면에 있습니다.이 답변에서 말씀을 드리게 되면 비밀번호가 노출되기 때문에위와 같이 직접 확인 부탁드리는 점 양해 부탁드립니다. 문의 감사합니다!
- 0
- 1
- 28
질문&답변
GND 오류
안녕하세요, 혹시 회로도 상세히 볼 수 있을까요?원인이 다양하다보니 직접 회로도를 보고 디버깅 해봐야할거같습니다!
- 0
- 2
- 37
질문&답변
프로젝트 주제
안녕하세요, 답변 남겨드립니다.지금 시점에서 모터 드라이버 모듈을 개인 프로젝트 주제로 잡는 판단은 방향 자체는 꽤 괜찮습니다. 다만 질문자님이 말씀하신 것처럼 HW를 처음 접하는 단계라면, 처음부터 “모터를 제대로 돌리는 보드”를 목표로 잡기보다 “STM32 기반 mixed-signal 보드에서 전원, 제어, 측정, 보호를 모두 한 번 경험하는 프로젝트”로 정의를 바꾸는 쪽이 훨씬 현실적이에요. 이번 강의 커리큘럼도 과제2가 IC Device Study와 Block Diagram 작성으로 이어지고, 이후에 Motor Driver, ADC, DAC, LDO, Layout까지 연결되도록 짜여 있어서, 단순 부품 연결이 아니라 시스템 단위로 사고해보라는 흐름이 분명합니다. 그래서 모터 드라이버를 하더라도 “완성품”이 아니라 “학습용 시스템 보드”로 범위를 잘라내는 것이 핵심입니다.처음 HW 프로젝트에서 가장 많이 생기는 문제는 회로를 못 그려서가 아니라 범위를 잘못 잡아서 중간에 무너지는 경우입니다. 예를 들어 BLDC FOC 제어까지 욕심내면 MCU 타이머 설정, 게이트 드라이빙, 전류 센싱, dead time, EMI, 발열, 전원 안정성, 펌웨어 디버깅까지 한 번에 터집니다. 이건 신입도 혼자 처음부터 끝까지 잡기엔 부담이 큰 편이에요. 반대로 brushed DC motor 1채널 또는 stepper 저전력 구동 정도로 낮추면 12V 입력, 평균 부하전류 0.5A ~ 1.5A, 피크전류 2A ~ 3A 수준에서 설계 연습이 가능하고, 4-layer 보드 기준으로도 전원선 폭, bulk capacitor, flyback 대응, shunt current sensing 같은 핵심을 전부 경험할 수 있습니다. 실무에서도 처음 보드를 평가할 때 “얼마나 화려한 기능을 넣었나”보다 “전원 tree가 안정적인가, 디버깅 포인트가 있는가, 보호회로가 있는가, 측정 가능한 구조인가”를 더 높게 봐요.질문자님 상황이라면 저는 모터 드라이버 프로젝트를 완전히 말리지는 않겠지만, 주제를 이렇게 다듬는 걸 추천드리고 싶네요. “STM32 기반 저전압 brushed DC motor control and sensing board” 정도가 가장 적당합니다. 입력은 12V 또는 24V 중 하나로 단순화하고, MCU는 STM32F103/F407 계열 중 강의 흐름에 맞는 쪽으로 잡고, 모터 구동은 H-bridge 또는 1채널 half-bridge로 축소하고, ADC로 전류나 전압을 읽고, UART 또는 CAN 대신 처음에는 UART debug까지만 두는 식이 좋아요. 여기에 DAC나 PWM+RC 필터를 써서 기준 전압을 만들고, 비교 실험으로 current limit threshold를 바꿔보면 mixed-signal 감각도 꽤 살아납니다. 이 정도면 회로도, 부품 선정, power budget, block diagram, layout, bring-up까지 모두 이어지면서도 일정이 감당 가능한 수준입니다. 보통 학생 프로젝트 기준으로 6주 ~ 10주 안에 회로도 1차, PCB 1차, 제작, bring-up 1차까지 보는 그림이 나옵니다.조금 더 안전하게 가고 싶다면 모터를 직접 구동하는 대신 “모터 드라이버 평가 보드 + 센싱 프론트엔드” 형태도 좋습니다. 예를 들어 STM32가 PWM을 만들고, 외부 motor driver IC가 실제 스위칭을 담당하고, 보드는 shunt resistor와 current sense amplifier, ADC 입력, fault pin monitoring, 온도 NTC 입력까지 포함하는 방식이죠. 이 접근이 좋은 이유는 고전류 파워 스테이지를 전부 discrete MOSFET으로 구현하는 것보다 실패 확률이 확실히 낮기 때문입니다. 처음 설계에서 discrete MOSFET H-bridge를 바로 가면 gate ringing, shoot-through, dV/dt noise 때문에 디버깅 시간이 2배에서 3배까지 늘어날 수 있어요. 반면 통합 드라이버 IC를 쓰면 보호기능이 내장된 경우가 많아서 과전류, UVLO, thermal shutdown 같은 리스크를 자연스럽게 학습할 수 있습니다. 취업 포트폴리오 관점에서도 “내가 MOSFET을 직접 설계했다”보다 “driver IC 선정 이유, 전류 측정 정확도, EMI 대응, 레이아웃 리턴패스 설계”를 설명하는 쪽이 더 실무자답게 들립니다.개인적으로는 지금 단계에서 추천 우선순위를 잡자면, 첫 번째는 STM32 기반 brushed DC motor control board, 두 번째는 STM32 + ADC/DAC + sensor acquisition board, 세 번째가 저전력 stepper motor controller입니다. 첫 번째 주제는 강의의 Motor Driver, ADC, DAC, LDO, Return Path 학습 포인트를 거의 그대로 흡수할 수 있어서 가장 효율이 좋아요. 두 번째는 모터 대신 센서를 넣는 방식이라 EMI와 발열 부담이 줄고 bring-up 성공률이 높습니다. 예를 들어 12-bit ADC, DAC 출력 0V ~ 3.3V, I2C sensor, UART debug, LDO noise consideration 정도를 묶으면 mixed-signal 보드의 정석적인 포트폴리오가 됩니다. 세 번째는 교육적으로는 좋지만 코일 전류 제어와 시퀀싱 이해가 추가되어 펌웨어 비중이 커질 수 있습니다. 처음 HW 프로젝트에서는 하드웨어와 펌웨어가 동시에 어려워지면 둘 다 어정쩡해질 수 있어서, 저는 첫 번째나 두 번째가 더 낫다고 봐요.모터 드라이버를 실제로 선택한다면 성패를 가르는 포인트는 기능보다 보호와 측정입니다. 전원 입력단에 reverse polarity 또는 최소한 fuse/TVS 검토가 있어야 하고, bulk capacitor는 모터 stall 상황에서 전압 dip를 얼마나 버틸지 보고 잡아야 합니다. 예를 들어 12V 입력에서 모터가 기동 순간 2A 이상 먹는다면 입력 근처에 47uF ~ 220uF 전해 또는 polymer와 0.1uF, 1uF, 10uF 세라믹 조합을 두고, 드라이버 IC 바로 근처에 고주파 decoupling을 붙이는 식으로 가야 합니다. 션트 저항도 0.05ohm ~ 0.1ohm 사이에서 잡으면 1A에서 50mV ~ 100mV가 나오는데, 이 전압은 ADC 직결보다 current sense amplifier를 거치는 게 훨씬 안전합니다. 여기서 gain 20V/V를 쓰면 1A일 때 1V ~ 2V 수준으로 읽히니 3.3V ADC에 다루기 좋아지죠. 이런 식으로 수치가 들어가야 설계가 프로젝트가 아니라 엔지니어링으로 바뀝니다.레이아웃 측면에서도 모터 프로젝트는 오히려 배울 게 많습니다. 다만 mixed-signal 보드에서는 “아날로그 GND와 디지털 GND를 무조건 분리해야 한다”는 식으로 접근하면 오히려 실패할 수 있어요. 강의에서도 Return path와 Analog/Digital GND study가 과제로 나오는 이유가 여기 있습니다. 중요한 건 물리적으로 찢어놓는 게 아니라, 스위칭 전류 루프와 민감한 센싱 리턴 경로가 서로 겹치지 않도록 배치하는 겁니다. 모터 드라이버, 입력 커패시터, 전원 커넥터는 한 덩어리의 고전류 loop로 최대한 짧게 만들고, ADC 기준전압이나 센스 라인은 그 루프 바깥에서 조용하게 끌고 와야 해요. 4-layer면 Top signal, Inner1 GND plane, Inner2 power or mixed low-speed routing, Bottom signal 정도로 가는 게 초심자에겐 무난합니다. 이 구조만 제대로 잡아도 EMI와 측정 노이즈가 30% 이상 차이 나는 경우가 많습니다.질문자님이 학생이라면 프로젝트 주제 선정에서 회사들이 뭘 보고 싶어 하는지도 같이 생각하면 좋겠습니다. 실무자는 “모터를 돌려봤습니다”보다 “요구사항을 정의하고, block diagram을 만들고, power budget을 산정하고, 부품 선정 근거를 정리하고, 회로도와 레이아웃에서 리스크를 관리했다”는 흐름을 높게 평가해요. 이번 강의의 PCB HW 설계 프로젝트도 Requirement Sheet 분석, MCU/PHY/ADC/Motor Driver 선택, Power Budget, Schematic, Layout 순서로 이어져 있는데, 이 순서를 자기 프로젝트 문서에 그대로 녹이면 포트폴리오 완성도가 확 올라갑니다.그래서 제 추천은 이렇게 정리됩니다. 모터 드라이버 주제는 충분히 도전 가능하지만, “로봇·자동차용 고난도 제어 보드”로 가지 말고 “STM32 기반 저전력 모터 제어 및 센싱 학습 보드”로 축소해서 들어가시는 게 맞아요. 범위를 이 정도로 제한하면 HW 초심자라도 부품 선정부터 bring-up까지 경험을 남길 수 있고, 면접에서 설명할 거리도 훨씬 많아집니다. 반대로 처음부터 BLDC 3상, 고전류, CAN 통신, 폐루프 제어까지 한 번에 넣으면 성공 확률보다 중도 포기 확률이 더 높아져요. 실무에서도 첫 보드는 기능 100점보다 디버깅 가능한 70점 보드를 더 가치 있게 봅니다. 이런 감각을 지금부터 가져가시면 프로젝트 하나를 해도 훨씬 단단하게 남을 것 같아요.
- 0
- 1
- 44
질문&답변
45강 UART, TTL 질문
안녕하세요, 답변 남겨드립니다.질문하신 부분은 강의의 STM32 Mixed-signal 보드 프로젝트 안에서 UART to TTL Converter schematic을 다루는 44강, 45강 맥락으로 보면 이해가 훨씬 잘 됩니다. 이 구간은 USB 커넥터를 “전원 입력”으로 볼지, 아니면 “USB-UART 데이터 인터페이스”로 볼지를 나누는 연습에 가깝습니다.보드에 이미 3.3V나 5V 전원 rail이 살아 있다면, USB 2.0 MINI B의 VBUS를 굳이 CH340C 전원으로 다시 넣지 않아도 됩니다. 이때 USB 커넥터는 전원을 먹이는 부품이 아니라 D+, D-, GND를 통해 PC와 통신만 연결하는 포트가 됩니다. WCH의 USB 인터페이스 IC 소개에도 이 계열이 내장 3.3V LDO를 포함하고 3.3V 또는 5V 공급을 지원하는 구조로 설명되어 있어서, 외부 전원 기반의 self-powered 구성 자체는 충분히 자연스럽습니다.원리는 “전원 공급”과 “USB 존재 인식”이 완전히 같은 경로가 아니라는 데 있습니다. USB 장치는 연결되면 D+ 또는 D- 라인에 풀업을 걸어서 자기 존재를 알리는데, USB 2.0 full-speed 쪽은 보통 D+에 1.5kΩ pull-up to 3.3V를 사용합니다. 호스트는 이 상태를 보고 장치가 붙었다고 판단한 뒤 reset과 enumeration을 진행합니다. 그래서 CH340C가 이미 보드 전원으로 켜져 있으면, 케이블을 꽂았을 때 호스트는 D+/D- 상태를 보고 장치를 인식할 수 있는 거예요. USB 문서에서도 upstream port에서 VBUS로 전원을 받는 UFP-powered 장치와 외부 전원으로 동작하는 externally powered 또는 self-powered 장치를 구분해서 설명합니다.질문하신 “CH340C에 연결되어 있기 때문인가요?”라는 감각은 방향이 맞습니다. 다만 정확히 말하면 “CH340C라서 무조건 VBUS가 필요 없다”가 아니라, “CH340C가 포함된 USB-UART 블록이 보드의 별도 전원으로 이미 살아 있는 self-powered 구조라서 VBUS를 전원원으로 쓰지 않아도 된다”가 더 정확합니다. 반대로 보드에 별도 3.3V/5V가 없다면 그때는 USB VBUS를 연결해서 CH340C와 주변 회로를 살려야 합니다. 이 차이를 놓치면 회로도에서는 멀쩡해 보여도 실제 bring-up에서 왜 어떤 보드는 USB만 꽂아도 뜨고, 어떤 보드는 메인 전원을 먼저 넣어야 뜨는지가 헷갈리게 됩니다.실무에서는 여기서 한 번 더 체크합니다. self-powered USB 장치는 VBUS 유효 여부를 완전히 무시하는 방식보다, 최소한 감지하거나 역급전이 없도록 정리하는 쪽이 더 안전합니다. USB 쪽 문서도 self-powered peripheral upstream port가 invalid VBUS를 고려해야 한다고 다루고 있고, 외부 전원이 살아 있는 장치가 USB 쪽으로 back-power를 만들면 hot-plug 안정성이나 규격 적합성에서 문제가 생길 수 있습니다. Mixed-signal 보드에서는 이런 부분이 ESD 이후 재인식 불안정이나 PC 포트와의 상성 문제로 드러나는 경우가 제법 있습니다.한 문장으로 묶으면, USB 2.0 MINI B에 전원을 연결하지 않아도 되는 이유는 “USB가 이 회로에서 데이터 포트 역할만 하고, CH340C 블록은 이미 보드의 별도 전원으로 동작하기 때문”입니다. 그래서 회로를 읽을 때는 USB 커넥터만 보지 말고, CH340C의 VCC가 어느 rail에 물려 있는지부터 먼저 보는 습관을 들이시면 훨씬 덜 헷갈리실 거예요.
- 0
- 1
- 54
질문&답변
quartus timing constraint slack관련 질문
안녕하세요, 답변 남겨드립니다.음 일단 제가 디버깅을 직접 못하는 상황이라서 추측되는 가능성에 대해서 설명드려볼게요.지금 상황은 오히려 정상에 가깝습니다. 같은 sv 파일과 sdc를 써도 Quartus에서 negative slack이 반드시 재현되지는 않습니다. 강의 흐름 자체도 먼저 SDC 작성과 합성을 보고, 그 다음 단계에서 Fast/Slow corner와 slack, Fmax, false path를 따로 확인하도록 이어져 있어서, 실습 5-1에서 바로 violation이 안 보이는 경우가 충분히 나올 수 있어요. 커리큘럼상으로도 5-1은 SDC 작성과 합성, 5-2는 slack과 Fmax 확인 및 STA 심화로 분리되어 있습니다.왜 이런 차이가 생기냐면, 실제로는 device 선택, speed grade, Quartus 버전, fitter seed, synthesis 최적화 결과, 그리고 가장 크게는 clock period 설정값 차이 때문에 경로 지연이 달라지기 때문입니다. 아주 작은 RTL에서는 툴이 논리를 잘 줄여버려서, 강의 화면에서는 겨우 임계경로였던 부분이 본인 환경에서는 1 ns 이상 여유가 남는 경우도 흔합니다. 실무에서도 slack = required time - arrival time 이고, setup 관점에서는 대략 slack_setup = Tclk - (Tcq + Tcomb + Tsetup + skew + uncertainty) 형태로 보는데, 여기서 Tclk를 조금만 빡빡하게 잡아도 바로 음수로 넘어갑니다.학습 목적이라면 가장 안전한 방법은 RTL을 크게 망가뜨리지 말고 SDC에서 clock period를 단계적으로 줄여보는 것입니다. 예를 들어 지금 sdc에 create_clock -period 20.000 같은 식으로 되어 있다면 10.000 ns, 5.000 ns, 3.333 ns, 2.500 ns 순서로 줄여보세요. 100 MHz 조건에서는 통과하던 회로가 200 MHz, 300 MHz로 올라가면 어느 순간 setup slack이 0 ns 아래로 내려갑니다. 이 방식이 좋은 이유는 기능은 그대로 두고 timing만 의도적으로 빡빡하게 만들어서, 나중에 timing closure를 연습하기에 가장 깔끔하기 때문입니다.실제로는 Fmax를 먼저 보는 게 감이 잘 옵니다. 예를 들어 현재 설계의 Fmax가 185 MHz 정도라면, clock period를 5.4 ns보다 작게 주는 순간 setup violation이 생길 가능성이 높습니다. 계산으로 쓰면 Ttarget 한 번 더 짚고 가면, false path나 multicycle path가 들어가 있으면 원래 느린 경로가 timing 체크 대상에서 빠져서 negative slack이 안 보일 수 있습니다. 실습 단계에서는 false path를 최소화한 상태에서 먼저 pure setup violation을 보는 편이 훨씬 공부가 잘 됩니다. 이 부분도 커리큘럼에서 SDC 작성 실무와 false path 설정, 그리고 이후 slack/Fmax 확인으로 이어지게 배치된 이유가 여기에 있어요.정말로 “해결하는 과정”까지 연습하고 싶다면, 일부러 violation을 만든 뒤 해결은 두 갈래로 접근하시면 됩니다. 첫 번째는 제약을 완화하는 방식입니다. 예를 들어 4.0 ns에서 slack = -0.8 ns가 나왔다면 5.0 ns로 완화해서 통과시키는 것이고, 이건 사실상 사양을 낮추는 셈이라 실무에서는 마지막 카드에 가깝습니다. 두 번째는 RTL을 개선하는 방식인데, 이게 진짜 timing closure 연습에 가깝습니다. AXI-Lite 같은 블록이라면 주소 decode, read data mux, register map selection, write strobes 처리 쪽이 임계경로가 되기 쉬우니, 조건문 깊이를 줄이거나, 큰 조합논리를 2단으로 쪼개거나, 중간에 register를 하나 더 넣는 식으로 Tcomb를 20~50% 줄여보는 연습이 효과적입니다. 파이프라인을 1 stage 추가하면 latency는 1 cycle 늘지만, setup margin이 1 ns 이상 좋아지는 경우가 꽤 많아요.다만 여기서 유지보수 관점도 같이 보셔야 합니다. timing만 맞추겠다고 AXI-Lite 응답 경로에 레지스터를 무턱대고 넣으면 read/write handshake 타이밍이 바뀌어서 testbench가 깨질 수 있습니다. 특히 ARVALID/ARREADY 이후 RVALID 생성 시점, AW/W 채널 정렬 방식, BVALID 응답 타이밍은 프로토콜 기대치와 연결되기 때문에, 성능 개선 전에 기능 시뮬레이션을 다시 돌려야 합니다. 현업에서는 timing 1건 잡겠다고 protocol bug 1건 새로 만드는 일이 더 치명적이라서, QoR만 보지 않고 기능 회귀까지 같이 묶어 봅니다.가장 추천드리는 실습 순서는 이렇습니다. 현재 프로젝트를 하나 복사해서 원본은 보존하시고, 복사본에서 create_clock period만 줄여가며 최초로 slack 혹시 바로 써보실 수 있게 아주 단순한 예를 하나 드리면, sdc에서 create_clock -name clk -period 10.000 [get_ports clk] 라고 되어 있다면 5.000으로 먼저 바꿔 보시고, 여전히 통과하면 3.000까지 낮춰 보세요. 보통 소형 교육용 RTL은 10 ns에서는 너무 느슨하고, 3~5 ns 구간에서 경계가 드러나는 경우가 많습니다. 그 상태에서 report_timing summary와 Fmax summary를 같이 보시면 setup violation 연습이 훨씬 선명해집니다.정리해서 말씀드리면, negative slack이 안 나오는 건 파일을 잘못 쓴 게 아니라 현재 환경에서 설계가 constraint를 만족했기 때문일 가능성이 높습니다. 강의 커리큘럼도 SDC 작성과 slack 분석, timing closure를 순차적으로 다루는 구조라서 자연스러운 흐름이고요. 먼저 clock period를 단계적으로 줄여서 violation을 의도적으로 만든 뒤, 그 다음에 조합논리 깊이 축소나 파이프라이닝으로 복구하는 방식으로 가시면 원하시는 “slack 해결까지의 전체 흐름”을 가장 제대로 체험하실 수 있습니다.
- 0
- 2
- 50
질문&답변
발열에 의한 LDO의 드롭아웃 전압 상승
안녕하세요, 답변 남겨드립니다.질문하신 핵심은 “드롭아웃 전압이 올라간다”는 표현이 정확히 무엇을 뜻하느냐, 그리고 그것이 실제로는 Vout 저하로 어떻게 나타나느냐입니다. 결론부터 말씀드리면, LDO의 드롭아웃 전압은 이상적으로 고정된 상수가 아니라, 내부 패스 소자의 특성, 출력전류, 접합온도(Tj), 공정 편차에 따라 달라지는 값입니다. 따라서 발열이 커지면 같은 출력전류 조건에서도 LDO가 정상 레귤레이션을 유지하기 위해 더 큰 Vin - Vout 마진을 필요로 하게 되고, 이 의미에서 “드롭아웃 전압이 상승한다”고 표현합니다.먼저 드롭아웃 전압의 정의를 정확히 잡고 가면 이해가 쉬워집니다. 일반적으로 드롭아웃 전압 Vdrop은 다음과 같이 생각하시면 됩니다.Vdrop = Vin - Vout다만 아무 때나 이 차이를 뜻하는 것이 아니라, “LDO가 더 이상 목표 출력전압을 유지하지 못하기 직전 또는 막 유지 가능한 최소 입력-출력 차이”를 의미합니다. 즉, 어떤 LDO가 3.3V를 출력한다고 할 때, 정상 동작 구간에서는 Vin이 충분히 높아서 내부 제어 루프가 Vout = 3.3V를 유지합니다. 그런데 Vin이 점점 낮아져서 내부 패스 소자가 완전히 열려도 더 이상 필요한 전류를 공급하지 못하는 지점이 오면, 그때부터는 Vout이 떨어지기 시작합니다. 바로 그 경계에서 필요한 최소 마진이 드롭아웃 전압입니다.질문에서 말씀하신 “이론적으로 Vout은 Vref와 동일해야 하고, Vin도 고정되어 있으니 드롭아웃은 항상 일정해야 하지 않느냐”는 생각은 아주 자연스러운 접근입니다. 다만 실제 LDO는 이상적인 전압원이나 이상적인 증폭기가 아니라, 내부에 에러 앰프와 패스 트랜지스터가 있는 폐루프 시스템입니다. Vout이 Vref와 같아지는 것은 어디까지나 “내부 패스 소자가 아직 충분한 여유를 갖고 제어 가능한 범위 안에 있을 때”만 성립합니다. 이 여유가 바로 헤드룸(headroom)이고, 드롭아웃 전압은 그 최소 헤드룸입니다. 발열이 생기면 이 최소 헤드룸 자체가 커질 수 있으므로, Vin이 고정이어도 원래는 충분하던 Vin - Vout 차이가 나중에는 부족해질 수 있습니다.왜 온도가 올라가면 드롭아웃 전압이 커지느냐를 물리적으로 설명드리면, 많은 LDO는 내부 패스 소자로 PMOS 또는 PNP/NPN 기반의 바이폴라 소자를 사용합니다. 강의 문맥에서 Rds_on 증가를 언급하신 것으로 보아 PMOS 패스 소자를 가정한 설명이었을 가능성이 큽니다. PMOS 기반 LDO에서는 패스 소자가 일종의 가변 저항처럼 동작하는 구간이 있고, 이때 대략적으로 다음처럼 볼 수 있습니다.Vdrop ≈ Iload * Rds_on여기서 Iload는 출력전류이고, Rds_on은 패스 MOSFET의 온저항입니다. MOSFET의 이동도(mu)는 온도가 올라갈수록 감소하는 경향이 있어서, 보통 접합온도가 상승하면 Rds_on이 증가합니다. 그러면 같은 전류를 흘리기 위해 더 큰 전압 강하가 필요해집니다. 예를 들어 500 mA를 공급하는 상황에서 저온에서는 Rds_on이 0.20 ohm이라면Vdrop = 0.5 A * 0.20 ohm = 0.10 V정도일 수 있습니다. 그런데 온도 상승으로 Rds_on이 0.30 ohm까지 증가하면Vdrop = 0.5 A * 0.30 ohm = 0.15 V가 됩니다. 즉, 같은 500 mA를 공급하는데도 필요한 최소 Vin - Vout가 100 mV에서 150 mV로 증가하는 것입니다. 이것이 바로 “발열에 의해 드롭아웃 전압이 올라간다”는 뜻입니다.실제 PCB에서 이것이 어떻게 보이느냐를 질문하셨는데, 네, 실제로는 “Vout이 Vref보다 더 떨어지는 현상”으로 나타날 수 있습니다. 다만 더 정확히 표현하면, 정상 레귤레이션 구간에서는 여전히 에러 앰프가 제어를 해서 Vout을 목표값 근처로 유지하려고 합니다. 그러나 입력전압 여유가 충분하지 않거나, 부하전류가 크거나, 칩 온도가 올라가서 내부 패스 소자의 구동 능력이 감소하면 어느 시점부터 제어 루프가 한계에 도달합니다. 이때는 패스 소자를 이미 최대한 열어 놓았는데도 필요한 전류를 못 밀어주기 때문에 Vout이 서서히 떨어집니다. 즉, Vout이 Vref로 결정되는 구간에서 벗어나 “패스 소자 한계”에 의해 결정되는 구간으로 들어가는 것입니다.수치 예시를 들어보겠습니다. 3.3V LDO를 사용하고 있고, 입력전압 Vin = 3.45V로 고정되어 있다고 가정하겠습니다. 그러면 현재 헤드룸은Vin - Vout = 3.45 - 3.30 = 0.15 V즉 150 mV입니다. 저온에서는 이 LDO가 500 mA 부하에서 120 mV 드롭아웃이면 충분히 3.3V를 유지할 수 있습니다. 그런데 칩 온도가 올라가고 내부 PMOS의 Rds_on이 증가해서 같은 500 mA에서 드롭아웃이 180 mV까지 커졌다고 해보겠습니다. 이제 필요한 최소 헤드룸은 180 mV인데 실제로는 150 mV밖에 없으니, 더 이상 3.3V를 유지할 수 없습니다. 그러면 출력은 대략Vout ≈ Vin - Vdrop = 3.45 - 0.18 = 3.27 V수준으로 내려갈 수 있습니다. 이 경우 사용자는 “원래 3.3V가 나와야 하는데 발열 후 3.27V로 떨어졌다”고 관측하게 됩니다. 즉, 질문하신 이해가 맞습니다. 실제 PCB 상에서는 발열로 인해 Vout이 목표값보다 더 낮아지는 형태로 나타날 수 있습니다.여기서 중요한 점은 “Vin이 고정되어 있다”는 사실만으로는 안심할 수 없다는 것입니다. 왜냐하면 LDO가 요구하는 최소 헤드룸 자체가 온도와 전류에 따라 변하기 때문입니다. 많은 데이터시트에서 dropout voltage를 하나의 숫자로만 보는 경우가 많은데, 실제로는 조건이 붙어 있습니다. 예를 들어 “Iout = 100 mA, Tj = 25 C” 또는 “Iout = 500 mA, over temperature” 같은 식입니다. 현업에서는 이 숫자를 절대 상수로 보면 안 되고, 부하전류와 온도까지 고려한 worst-case로 해석해야 합니다.질문하신 문장을 조금 더 정밀하게 바꾸면 다음과 같은 뜻이 됩니다. “열이 올라가면 LDO 내부 패스 소자의 도통 특성이 나빠져서, 동일한 출력전류를 공급하기 위해 더 큰 입력-출력 전압차가 필요해진다. 만약 시스템이 그 추가 마진을 제공하지 못하면, 출력전압은 설정값보다 낮아진다.” 이것이 전기적 의미로 가장 정확합니다.또 하나 실무적으로 구분해야 할 것은, 발열이 단순히 드롭아웃만 악화시키는 것이 아니라 기준전압 오차, 루프 이득 감소, 전류 제한 특성 변화, 열 보호 진입 가능성까지 함께 유발할 수 있다는 점입니다. 예를 들어 LDO 손실전력은 대략 다음과 같습니다.Ploss = (Vin - Vout) Iout + Iq Vin보통은 첫 항이 지배적입니다. 예를 들어 5.0V에서 3.3V를 600 mA로 만들면Ploss ≈ (5.0 - 3.3) * 0.6 = 1.02 W입니다. 1W 수준이면 작은 패키지에서는 접합온도가 상당히 빠르게 상승할 수 있습니다. 만약 보드 열저항 조건이 좋지 않아 theta_JA = 60 C/W 수준이면, 단순 계산으로도DeltaT ≈ Ploss theta_JA = 1.02 60 = 61.2 C정도 접합온도 상승이 가능합니다. 주변온도 50 C 환경이라면 접합온도는 110 C를 넘길 수 있습니다. 이 정도 영역에서는 데이터시트 상의 25 C 조건과 전혀 다른 드롭아웃, 전압 정확도, 보호동작 특성이 나타날 수 있습니다. 그래서 PCB에서 패드 확대, thermal via 추가, copper plane 확장, heat spreading 설계가 중요해지는 것입니다. 단순히 “온도를 낮춘다”는 수준이 아니라, LDO가 정상 레귤레이션 가능한 영역을 더 넓게 확보하는 효과가 있습니다.질문 서두에서 언급하신 “패드, 히트싱크, 구리 면적을 적절히 배치해 온도 상승을 15~20% 낮춘다”는 실무 표현도 같은 맥락입니다. 예를 들어 어떤 설계에서 접합온도 상승이 원래 50 C였는데, PCB 방열 설계 개선 후 40 C로 줄었다고 해보겠습니다. 온도 상승이 20% 감소한 셈입니다. 그러면 패스 MOS의 Rds_on 증가폭도 줄고, 결과적으로 dropout margin이 덜 악화됩니다. 특히 입력전압 여유가 빡빡한 시스템, 예를 들어 3.6V rail에서 3.3V LDO를 쓰거나 배터리 전압이 점차 떨어지는 휴대기기에서는 이 차이가 매우 크게 작용합니다. 여유가 200 mV밖에 없는 시스템에서는 드롭아웃이 50~80 mV만 더 늘어나도 바로 regulation failure로 이어질 수 있기 때문입니다.반대로 입력전압 여유가 아주 큰 경우에는 발열이 있어도 사용자가 바로 Vout 저하를 체감하지 못할 수도 있습니다. 예를 들어 12V에서 3.3V를 만드는 선형 레귤레이터라면 헤드룸은 매우 크기 때문에 드롭아웃 증가 자체가 직접적인 Vout collapse 원인이 되지는 않을 수 있습니다. 그러나 이 경우에는 오히려 발열 자체가 더 큰 문제가 됩니다. 왜냐하면 손실전력이Ploss = (12 - 3.3) * Iout으로 매우 커지기 때문입니다. 예를 들어 200 mA만 흘려도 1.74W입니다. 이 경우는 드롭아웃보다는 열 보호, 장기 신뢰성, 패키지 스트레스가 주요 이슈가 됩니다. 즉, 드롭아웃 문제는 “입출력 전압차가 작은 low-headroom 조건”에서 특히 민감하고, 발열 문제는 “입출력 전압차가 큰 high-dissipation 조건”에서 더 심각하게 드러납니다. 실무에서는 이 둘을 동시에 봐야 합니다.현업 관점에서 회로 리뷰를 한다면 보통 이렇게 확인합니다. 먼저 데이터시트에서 dropout voltage vs load current 그래프와 dropout voltage vs temperature 특성을 봅니다. 그다음 실제 최대 부하전류, 최저 입력전압, 최고 주변온도, PCB thermal condition을 반영해서 worst-case headroom을 계산합니다. 예를 들어 배터리 저전압이 3.55V까지 떨어지고, 목표 출력이 3.3V, 최대 전류가 300 mA라면 시스템 headroom은 250 mV입니다. 이때 데이터시트 worst-case dropout이 125 C 근방에서 220 mV이고, 배선/커넥터/폴리퓨즈/EMI 필터에서 30~50 mV 추가 강하가 예상되면 사실상 margin이 거의 없습니다. 이런 설계는 양산 후 고온 환경에서 Vout 저하, MCU brownout, ADC 정확도 저하로 이어질 가능성이 있습니다. 이럴 때 PCB 열분산 개선은 단순한 “보드 품질 향상”이 아니라, 전원 무결성 확보 수단입니다.따라서 질문에 대한 가장 직접적인 답은 이렇습니다. “드롭아웃 전압이 올라간다”는 것은 LDO가 설정된 출력을 유지하기 위해 필요한 최소 Vin - Vout가 증가한다는 뜻입니다. 발열이 생기면 내부 패스 소자의 저항 또는 유효 구동 능력이 악화되어 같은 부하전류에서도 더 큰 전압 강하가 필요해집니다. Vin이 충분히 높으면 여전히 Vout은 유지되지만, Vin 여유가 부족한 상황에서는 실제 PCB 상에서 Vout이 목표값보다 낮아지는 현상이 발생할 수 있습니다. 즉, 질문하신 해석은 맞고, 다만 그것은 “Vref 자체가 변해서라기보다, Vref를 만족시키도록 제어할 수 있는 내부 패스 소자의 여유가 사라지기 때문”이라고 이해하시면 가장 정확합니다.마지막으로 문장을 한 줄로 정리하면, “발열은 LDO의 내부 패스 소자를 약하게 만들어 같은 전류를 공급하려면 더 큰 헤드룸을 요구하게 하고, 그 결과 헤드룸이 부족한 실제 보드에서는 Vout이 설정값보다 떨어질 수 있다”입니다.
- 0
- 2
- 53
질문&답변
BGR 과제 관련 BJT model 질문 드립니다.
안녕하세요, 답변 남겨드립니다.우선 LTspice가 업데이트되면서 버전차이에 의한 문제도 있어서 아래와 같이 가이드 드리니 확인 부탁드립니다. 지금 증상은 LTspice에서 “참조를 했느냐 안 했느냐”의 문제가 아니라, 같은 이름의 BJT 모델을 두 군데 이상에서 보고 있어서 생기는 전형적인 model collision입니다. 로그에 나온 “This model has multiple definitions”가 핵심이고, 회로 안의 Q 소자들이 전부 model name으로 NPN을 쓰고 있는데 netlist 안에 NPN이라는 이름이 둘 이상 존재한다는 뜻입니다. 보통은 사용자가 붙여 넣은 .model NPN NPN(...) 한 번, .include tsmc018.lib 안의 정의 한 번, 또는 LTspice 기본 generic NPN과 이름이 겹칠 때 이런 일이 납니다.LTspice에서 BJT “참조”는 별도의 체크 동작이 있는 것이 아니라, Q 심볼의 Value에 적힌 모델명과 .model 또는 .include/.lib로 불러온 모델명이 정확히 일치하면 연결되는 구조입니다. 그래서 지금은 NPN, PNP처럼 너무 일반적인 이름을 쓰는 것이 문제의 출발점입니다. 실무에서는 이런 경우 거의 무조건 이름을 바꿉니다. 예를 들어 .model BGR_NPN NPN(...), .model BGR_PNP PNP(...)처럼 고유 이름으로 바꾸고, 회로 안의 Q13, Q14, Q15 같은 BJT들의 Value도 전부 BGR_NPN으로 통일하면 충돌이 사라집니다. .OPTIONS ALLOW_AMBIGUOUS_MODELS는 에러를 잠깐 덮는 용도로는 쓸 수 있어도, 실제 설계 검증에서는 거의 권하지 않습니다. include 순서나 LTspice 버전이 바뀌면 다른 모델이 잡혀 결과가 달라질 수 있어서 재현성이 무너집니다. Bias 회로는 이런 애매한 상태가 가장 위험합니다. 한 번은 1.2 V가 나오고 다른 PC에서는 1.47 V가 나오는 식으로 바로 문제가 드러납니다.왜 모델 쪽을 건드리면 1.47095 V가 나오고, 강의에서는 1.2 V 근처가 나와야 하느냐는 식으로 보면 훨씬 이해가 쉽습니다. 이 구조는 본질적으로 I_PTAT = ΔVBE / R4, VREF ≈ VBE + (R5 / R4) * ΔVBE 형태입니다. 화면 값 기준으로 R4 = 20k, R5 = 267010이고 BJT 면적비가 8:1이라면 실온 300 K에서 ΔVBE ≈ Vt * ln(8) ≈ 25.85mV * 2.079 ≈ 53.8mV 정도입니다. 그러면 PTAT 항은 (267010 / 20000) * 53.8mV ≈ 0.718V가 됩니다. 따라서 VREF가 1.47095 V라면 실제 BJT의 VBE는 1.47095 - 0.718 ≈ 0.753V라는 뜻인데, 이 값은 강의에 나온 커스텀 BJT 카드보다는 LTspice generic NPN에 가까운 숫자입니다. 반대로 강의처럼 1.22 V 안팎이 나오려면 같은 전류에서 VBE가 0.50~0.53 V 정도여야 하고, 질문에 올리신 .model NPN NPN (Is=6.734f ...) 같은 카드라면 몇 uA 수준에서 그 정도 VBE가 충분히 나올 수 있습니다. 즉 지금 1.47 V가 나온다는 사실 자체가 “회로 토폴로지가 틀렸다”기보다 “의도한 BJT 모델이 안 물리고 generic NPN 쪽으로 돌아갔다”는 쪽에 훨씬 가깝습니다.실무에서는 이런 상황에서 먼저 netlist를 열어 .model NPN이 몇 번 나오는지 직접 찾습니다. 그리고 각 Q 소자의 Value가 정확히 무엇인지 확인합니다. tsmc018.lib가 MOS만 담고 있고 BJT는 안 담고 있을 수도 있고, 반대로 BJT까지 같이 담고 있을 수도 있습니다. 또 파일 구조가 .lib tt, .lib ff 같은 section형태라면 .include보다 .lib 파일명 섹션명으로 불러야 맞는 경우도 있습니다. 다만 지금 로그의 본질은 corner 호출 방식보다도 모델명 중복입니다. 우선순위는 라이브러리 형식보다 이름 충돌 제거입니다.한 가지 더 보셔야 하는 부분은, BGR은 생각보다 BJT 모델 민감도가 큽니다. 특히 DC 동작점에서는 Is와 ideality factor 쪽이 VBE를 크게 움직입니다. VBE가 200 mV만 바뀌어도 VREF는 거의 그만큼 이동합니다. 반면 저항 비율 오차 1%는 여기서는 대략 0.718V * 1% = 7.2mV 정도 영향입니다. 그래서 지금처럼 1.47 V와 1.2 V가 갈리는 것은 저항 숫자 오차나 수치해석 오차로 설명할 수 있는 범위가 아니고, 거의 확실하게 모델 선택 문제로 보시면 됩니다.M9, M10의 body를 왜 VSS가 아니라 source에 붙였는지도 같은 맥락에서 이해하시면 됩니다. 이 두 NMOS의 source가 VSS에 딱 붙어 있는 구조가 아니라, BJT 위쪽 노드 때문에 보통 0.5~0.8 V 정도 떠 있게 됩니다. 이 상태에서 bulk를 VSS에 고정하면 VSB가 생기고, body effect 때문에 문턱전압이 올라갑니다. 식으로 쓰면 Vth = Vth0 + gamma * (sqrt(2*phiF + VSB) - sqrt(2*phiF))입니다. 예를 들어 gamma = 0.5 V^0.5, 2*phiF = 0.7V, VSB = 0.7V라고 두면 ΔVth가 대략 0.17 V 정도 올라갑니다. Bias 회로에서 NMOS overdrive가 0.15~0.20 V 수준이면, 문턱이 0.17 V 올라가는 것은 작은 보정이 아니라 동작점 자체를 바꿔버리는 수준입니다. Id가 대략 (VGS - Vth)^2에 비례하므로 current mirror 오차가 30%를 넘는 경우도 실제로 자주 나옵니다. 그래서 교육용 회로나 손계산 중심의 해석에서는 M9, M10의 body를 source에 묶어서 body effect를 없애고, bias loop를 단순하고 예측 가능하게 보이도록 그리는 경우가 많습니다.다만 여기서 현업에서 더 중요하게 보는 포인트가 있습니다. LTspice에서 body를 source에 묶었다고 해서, 실제 CMOS 공정에서도 그 연결이 항상 가능한 것은 아닙니다. 일반적인 p-substrate 공정에서는 NMOS bulk가 공통 substrate라서 사실상 VSS에 고정됩니다. 개별 NMOS bulk를 source에 묶으려면 triple-well이나 deep N-well 같은 격리 옵션이 있어야 합니다. Analog IP에서는 이런 옵션이 있는 공정도 많지만, 없는 공정도 적지 않습니다. 그래서 회로도에서 body-source short를 보고 “이렇게 하면 더 좋아진다”로 끝내면 안 되고, 실제 PDK에서 그 device가 분리 bulk를 허용하는지부터 확인해야 합니다. 허용하지 않는다면 bulk를 VSS에 둔 상태로 다시 W/L, bias current, resistor ratio, 최소 VDD, startup margin을 재조정해야 합니다. 교육용 회로가 시뮬레이션에서는 잘 맞는데 실제 레이아웃 이후 성능이 꺾이는 대표적인 이유가 이런 bulk 가정 차이입니다.지금 회로를 가장 안전하게 정리하는 방법은, MOS용 라이브러리는 그대로 두되 BJT 모델명만 고유하게 바꾸는 것입니다. 예를 들어 .model BGR_NPN NPN(...), .model BGR_PNP PNP(...)로 정의하고, 회로 안의 모든 NPN/PNP Value도 그 이름으로 바꾸면 됩니다. 그리고 netlist에서 같은 이름의 .model이 한 번만 살아 있는지 확인하시면 됩니다. 그렇게 맞춘 다음 .op를 다시 보면, R4 양단 전압이 약 53~55 mV, R4 전류가 약 2.7 uA, R5 전압강하가 약 0.72 V, Q15의 VBE가 약 0.50~0.53 V 쪽으로 나오는지부터 보시면 됩니다. 이 네 숫자만 맞아도 강의 의도대로 모델이 제대로 들어갔는지 거의 바로 판별됩니다.
- 0
- 2
- 44





