[아두이노] 역전압 스파이크의 해결사, 플라이백 다이오드 완벽 가이드

이미지
전기 회로를 설계하다 보면 모터나 릴레이처럼 코일(인덕터) 이 포함된 부품을 자주 사용하게 됩니다. 그런데 전원을 끄는 순간, 트랜지스터가 손상되거나 MCU가 리셋되는 현상 이 발생할 수 있습니다. 이 현상의 원인은 바로 역전압 스파이크(Back EMF) 입니다. 오늘은 이 문제를 다이오드 하나로 해결하는 원리 를 이해해보겠습니다. 1. 근본적인 원인: 인덕터의 ‘전류 유지 성질’ DC 모터 내부에는 구리선이 감긴 코일(인덕터)이 존재합니다. 이 인덕터는 전류를 유지하려는 성질 을 가지고 있습니다. ✔ 에너지 저장 전류가 흐르면 코일 주변에 자기장이 형성되며 에너지가 저장됩니다. 에너지(E) = 0.5 × 인덕턴스(L) × 전류(I)의 제곱 즉, 전류가 클수록 저장되는 에너지는 빠르게 증가합니다. ✔ 전류 유지 전원을 차단하면 전류는 즉시 0이 되어야 할 것 같지만, 인덕터는 저장된 에너지를 이용해 기존 방향으로 계속 전류를 흐르게 하려 합니다. 2. 왜 전압 극성이 반대로 바뀔까? 많이 헷갈리는 부분입니다. 전류는 그대로 흐르려 하는데, 왜 전압은 반대로 뒤집힐까요? ✔ 핵심 개념: 인덕터는 순간적으로 발전기처럼 동작한다 전원이 연결된 상태 → 전원이 전류를 밀어줌 전원이 끊어진 상태 → 인덕터가 전류를 밀어냄 즉, 전원이 사라지면 인덕터가 직접 전압을 만들어냅니다. ✔ 중요한 포인트 전류를 계속 흐르게 하려면, 출구 쪽 전압이 입구보다 더 높아야 합니다. 그래서 인덕터는 전압을 강제로 만들어내며, 이 과정에서 기존과 반대 극성의 전압 이 형성됩니다. 3. 보호 회로가 없을 때 발생하는 문제 플라이백 다이오드가 없다면 매우 위험한 상황이 됩니다. ✔ 전압 폭주 인덕터는 전류를 유지하기 위해 전압을 크게 증가시킵니다. 이 전압은 수백 볼트에서 수천 볼트까지 올라갈 수 있습니다. ✔ 전기적 충격 (Water Hammer 현상) 수도 배관을 갑자기 잠글 때 충격이 발생하는 것처럼, 전기 회로에서도 유사한 충격이 발생합니다. ✔ 실제 피해 스위치에서 스파크(불꽃) ...

[아두이노] 트랜지스터(BJT)를 이용한 DC 모터 제어와 회로 설계의 이해

이미지
아두이노와 같은 MCU로 DC 모터를 제어할 때, BJT 트랜지스터는 핵심적인 역할을 합니다. 이 글에서는 원리부터 실무 설계까지 깔끔하게 정리합니다. 1. BJT의 핵심 원리 BJT의 본질은 다음 한 줄로 정리됩니다. Ic = hFE × Ib Ic: 컬렉터 전류 Ib: 베이스 전류 hFE: 전류 증폭률 (보통 50~200) 👉 의미: "작은 베이스 전류로 큰 컬렉터 전류를 제어한다" 2. 모터 OFF/ON 동작 베이스 전류 없음 → Ic = 0 → 모터 OFF 베이스 전류 있음 → Ic 흐름 → 모터 ON 즉, 전자 스위치 3. PWM 속도 제어 핵심 PWM은 이렇게 이해하면 안 깨진다: 평균전압 = 최대전압 × 듀티비 예: 5V × 50% = 2.5V 효과 👉 모터는 관성 때문에 평균값으로 반응 4. 역전압(백 EMF) 핵심 수식 모터는 코일이라서 다음이 발생: V = L × (dI/dt) 👉 의미: 전류가 급격히 변하면 큰 전압이 튀어나옴 그래서 반드시 다이오드 필요 5. 베이스 저항이 왜 필요한가 아두이노 핀은 전류를 무한히 못 준다. 예시 계산: Ib = (5V - 0.7V) / R 👉 R = 1kΩ일 때 Ib ≈ (5 - 0.7) / 1000 Ib ≈ 4.3mA 👉 안전한 수준 6. BJT의 구조적 한계 (1) 공통 접지 필요 아두이노 GND = 모터 GND (2) 노이즈 역류 모터 → GND → MCU (3) 전류 기반이라 비효율 큰 전류 = 큰 발열 7. 실무 해결 전략 ✔ 포토커플러 전기 대신 빛으로 신호 전달 → 완전 절연 ✔ MOSFET 전압으로 제어 → 발열 ↓ 효율 ↑ 8. 실무 권장 구조 [아두이노] → [포토커플러] → [MOSFET] → [모터] 핵심 요약 Ic = hFE × Ib V = L × (dI/dt) 평균전압 = V × 듀티비 👉 이 3개만 이해하면 80% 끝 결론 BJT는 "입문용 + 개념 이해용"으로는 최고지만, 실무에서는 반드시 다음으로 넘어가야 한다: 👉 MOSFET ...

[아두이노] 왜 이제는 MOSFET을 쓰는가: BJT를 넘어서는 DC 모터 제어의 현실적인 선택

아두이노로 DC 모터를 제어하다 보면 누구나 한 번쯤 느끼는 순간이 있습니다. “왜 이렇게 계산할 게 많지?” 베이스 전류 계산 hFE 가정 포화 조건 확인 발열 문제 이 모든 고민의 끝에서 자연스럽게 나오는 결론이 하나 있습니다. 👉 “MOSFET 쓰면 안 되나?” 결론부터 말하면: 👉 웬만한 경우, MOSFET이 더 좋은 선택이다 이 글에서는 그 이유를 원리 + 설계 관점 + 실무 기준 으로 정리합니다. 1. BJT vs MOSFET: 구조부터 다르다 ✔ BJT (전류 제어 소자) 베이스 전류 필요 입력 = 전류 출력 = 전류 👉 즉, 전류로 전류를 제어 ✔ MOSFET (전압 제어 소자) 게이트 전류 거의 0 입력 = 전압 출력 = 전류 👉 즉, 전압으로 전류를 제어 2. 가장 큰 차이: “아두이노 입장에서의 부담” ✔ BJT 베이스 전류 필요 (수 mA ~ 10mA) 핀에 지속적인 부하 발생 ✔ MOSFET 게이트 전류 거의 0 초기 충전 순간만 전류 흐름 👉 아두이노가 훨씬 편해짐 3. 발열 차이: 효율의 핵심 ✔ BJT (포화 상태) 전력 손실: P = Vce(sat) × Ic 예: Vce ≈ 0.3V Ic = 0.5A 👉 P = 0.15W → 열 발생 ✔ MOSFET 전력 손실: P = I² × Rds(on) 예: Rds(on) = 0.05Ω I = 0.5A 👉 P = 0.0125W 👉 발열이 10배 이상 차이 4. PWM 제어에서의 차이 ✔ BJT 스위칭 속도 느림 손실 증가 고주파 PWM에 불리 ✔ MOSFET 스위칭 빠름 손실 적음 PWM에 최적화 5. 설계 난이도 비교 항목 BJT MOSFET 계산 복잡 단순 입력 전류 필요 거의 없음 효율 낮음 높음 발열 큼 작음 초보자 난이도 높음 오히려 쉬움 6. MOSFET 사용할 때 진짜 중요한 2가지 여기서부터가 실무 포인트다. ✔ (1) 로직 레벨 MOSFET 사용 아두이노는 5V 출력이다. 👉 일반 MOSFET은 10V 기준 그래서 반드시: 👉 Logic-Level MOSFE...

[아두이노] DC 모터 제어의 본질: “왜 이 부품이어야 하는가”

이미지
아두이노로 DC 모터를 제어하는 순간, 단순한 코딩이 아니라 전력 제어 시스템 설계 로 넘어갑니다. 많은 입문 자료는 “이렇게 연결하세요”에서 끝나지만, 실무에서는 항상 한 가지 질문이 따라옵니다. 👉 “왜 이 사양이어야 하지?” 이 글에서는 부품 역할 + 수치 설계 + 데이터시트 해석 관점 까지 포함해 DC 모터 제어 회로를 엔지니어 수준으로 정리합니다. 1. 왜 아두이노에 모터를 직접 연결하면 안 될까? 아두이노 디지털 핀의 한계: 출력 전류: 약 20mA 모터 요구 전류: 수백 mA ~ 수 A 즉, 👉 전류가 절대적으로 부족 👉 역전압(Back EMF)로 보드 손상 위험 그래서 반드시 필요합니다: 외부 전원 스위칭 소자 (트랜지스터 / MOSFET) 보호 회로 2. 전체 구조 한 눈에 보기 [Arduino] → [Base 저항] → [트랜지스터] → [모터] → [외부 전원] ↑ [플라이백 다이오드] 이 구조의 핵심은 단 하나입니다: 👉 “작은 신호로 큰 전류를 제어한다”   3. Q1: 트랜지스터 — 스위치의 품질이 시스템을 결정한다 ✔ 역할 아두이노 신호 → 전력 스위칭 ✔ 핵심 설계 포인트 (1) Stall Current 기준으로 설계 모터는 멈출 때 가장 위험합니다. 평상시: 100mA 스톨 시: 1A 이상 👉 반드시 최대 전류 기준으로 설계 (2) 포화 영역(Saturation) 확보 트랜지스터는 “켜졌다”가 아니라 👉 완전히 켜져야 한다 전력 손실: P = Vce(sat) × Ic 예: Vce ≈ 0.3V Ic = 0.5A 👉 P = 0.15W → 발열 발생 ✔ 추천 선택 기준 상황 추천 소형 모터 PN2222 중전류 TIP120 고효율 MOSFET (IRLZ44N) 4. R1: 베이스 저항 — “적당히”가 아니라 “계산해야 하는 값” 많은 글에서 1kΩ을 그냥 씁니다. 👉 틀린 건 아니지만, 정확하지도 않습...

[아두이노] DC 모터 제어 입문: 왜 다이오드와 절연이 필수일까?

자동화 시스템에서 가장 기본적이면서도 강력한 액추에이터, DC 모터 . 하지만 아두이노 같은 마이크로컨트롤러(MCU)로 모터를 제어할 때는 단순히 선을 연결하는 것만으로는 부족합니다. 👉 핵심은 **“제어”가 아니라 “보호”까지 포함된 설계”**입니다. 오늘은 브러시드 DC 모터의 작동 원리부터, 실무에서 반드시 지켜야 할 하드웨어 보호 전략 까지 한 번에 정리해보겠습니다. 1. 브러시드 DC 모터의 구조와 한계 우리가 흔히 사용하는 저가형 DC 모터는 다음과 같은 구조를 가지고 있습니다. 고정 자석 (Stator) 회전 코일 (Rotor) 브러시 (Brush) + 정류자 (Commutator) ✔ 작동 원리 코일에 전류가 흐르면 자기장이 형성되고, 이 자기장이 고정 자석과 상호작용하면서 회전력이 발생합니다. 그리고 중요한 포인트: 👉 브러시가 반 바퀴마다 전류 방향을 바꿔준다 이 덕분에 모터는 계속 한 방향으로 회전할 수 있습니다. ✔ 장점 구조가 단순 → 가격이 저렴 전압만 조절하면 속도 제어 가능 PWM 제어와 궁합이 좋음 ✔ 단점 브러시 마모 → 수명 제한 스파크 발생 → 노이즈 발생 고속에서 효율 저하 2. 모터는 ‘발전기’이기도 하다: 역기전력(Back EMF) 여기서 가장 중요한 개념이 등장합니다. 👉 모터 = 발전기 ✔ 발전기처럼 동작하는 이유 모터 샤프트를 손으로 돌려보면 실제로 전압이 발생합니다. 즉, 기계적 에너지가 전기 에너지로 변환됩니다. ✔ 역기전력(Back EMF)이란? 모터를 끄는 순간을 생각해봅시다. 모터는 관성 때문에 계속 회전하려고 함 이때 코일이 움직이며 전압을 생성 그 전압이 회로 쪽으로 역류 👉 이것이 바로 역기전력(Back EMF) 입니다. ✔ 왜 위험한가? 순간적으로 수십~수백 V 스파이크 발생 가능 MCU 핀, 트랜지스터, 드라이버 IC 파괴 시스템 오작동 (리셋, 노이즈) 👉 즉, “꺼지는 순간이 가장 위험하다” 3. 안전 설계의 핵심: 절연 + 다이오드 실무에서는 아래 두 가지를 필수 설계 요소 로 봅니...

[아두이노] 가변저항 튜너 + 저항 형태의 온도센서와 보정 필요성에 대한 이해

이미지
아두이노와 NTC 서미스터를 이용해 생육 챔버나 스마트팜용 온도계를 만들 때, 단순히 전압을 읽어 map() 함수로 변환하면 반드시 실패합니다. 우리의 목표는 온도->전압 함수의 정확한 역함수(전압->온도)를 구하는 것입니다. 정밀한 제어를 위해서는 다음 3단계 공정이 필요합니다: 하드웨어(가변저항) → 수학(로그) → 보정(투 포인트) 이 과정을 👉 "세상에 하나뿐인 나만의 정밀 자(Scale)를 만드는 과정" 으로 비유해 보겠습니다. 1️⃣ 가변저항: 눈금을 진하고 촘촘하게 (Resolution 확보) 가변저항을 조절하는 것은 👉 내가 보고 싶은 온도 구간에서 데이터 밀도를 높이는 작업 입니다. ✔️ 엔지니어링 포인트 서미스터는 저항이 변하는 소자이므로 전압 분배 회로를 사용합니다. Vout = Vcc × (R_thermistor / (R_fixed + R_thermistor)) 이때, R_fixed (가변저항)을 조절하면 특정 온도 구간에서 전압 변화 폭이 달라집니다 👉 핵심 전략: 관심 온도 (예: 25°C)에서 ADC 값이 "중간값(≈512)" 근처가 되도록 조정 이렇게 하면: 1°C당 더 많은 ADC 값을 사용하게 됨 해상도(Resolution) 최대화 ✔️ 비유 자 위의 눈금이 흐릿하면 측정 자체가 불가능합니다. 가변저항 조정은 👉 희미한 눈금을 진하고 촘촘하게 다시 그리는 작업 이 단계에서 우리는 👉 좋은 "생데이터"를 확보 합니다. 2️⃣ 로그 보정: 휘어진 막대기를 반듯하게 (Linearization) 데이터를 촘촘하게 모았다고 끝이 아닙니다. 서미스터는 본질적으로 비선형 소자 입니다. 👉 온도 vs 저항 관계: R ∝ e^(1/T) 즉, 온도가 올라갈수록 저항은 지수적으로 감소 전압은 곡선 형태로 변화 ✔️ 문제 저온 영역 → 변화 큼 고온 영역 → 변화 작음 👉 결과: 같은 1°C라도 구간마다 민감도가 다름 ✔️ 해결 방법: 로그(Log) 변환 대표 공식: St...

[아두이노] 서미스터 온도 측정 완벽 워크플로우 (저항형 센서 감도 조절 및 캘리브레이션)

“비선형 데이터를 직선으로 펴고, 기울기와 절편까지 맞춘다” 아두이노로 온도를 측정할 때 가장 흔히 겪는 문제는 단순합니다. 값이 둔감하다 (변화가 잘 안 보인다) 값이 비선형이다 (온도와 비례하지 않는다) 값이 부정확하다 (실제 온도와 다르다) 이 문제를 해결하는 가장 정석적인 방법이 바로 다음 3단계입니다: ① 하드웨어 튜닝 → ② 수학적 선형화 → ③ 캘리브레이션 이 글에서는 이 과정을 “엔지니어링 워크플로우” 관점에서 정리합니다. 1. 하드웨어 단계: 가변저항으로 “감도” 확보 핵심 개념 서미스터는 온도에 따라 저항이 변하지만, 우리가 측정하는 것은 “전압”입니다. 그래서 반드시 전압 분배 회로 를 구성해야 합니다. 회로 구조 5V ── 가변저항(Rf) ── A0 ── 서미스터(Rs) ── GND 여기서 중요한 포인트는: 가변저항을 이용해 “측정 구간”을 중앙에 맞춘다 왜 이게 중요할까? ADC(analogRead)는 0~1023 범위를 사용합니다. 하지만 잘못 설정하면: 800~820만 왔다 갔다 → ❌ 해상도 낭비 100~120만 사용 → ❌ 감도 낮음 최적화 방법 👉 목표: 측정하려는 온도 범위의 중앙값에서 ADC ≈ 512 예: 측정 범위: 25~30°C 기준 온도: 27°C 목표: analogRead ≈ 512 (약 2.5V) 조정 방법 실제 온도를 27°C로 맞춘다 가변저항을 돌린다 analogRead 값이 512 근처가 되도록 맞춘다 결과 위쪽/아래쪽 변화 모두 감지 가능 Headroom 확보 측정 해상도 최대화 ⚠️ 매우 중요한 주의사항 한 번 맞춘 후 절대 건드리지 마세요 이 값이 바뀌면 이후 모든 계산이 틀어집니다. 2. 소프트웨어 단계: 로그 함수로 “선형화” 문제의 본질 서미스터는 이렇게 동작합니다: 온도 ↑ → 저항 ↓ (비선형, 지수형) 즉, 온도 vs 저항 그래프는 곡선이다 해결 방법: 로그 변환 로그를 취하면: 곡선 → 직선에 가까워짐 이를 정밀하게 모델링한 공식이 바로: Steinhart-Hart 방정식 1/T = ...