DC 모터 제어 마스터하기: PID 제어와 PWM 출력을 이용한 속도·방향 제어 전문 가이드
부품 및 소모품
| 부품 | 수량 | 비고 |
| 아두이노 듀 (Arduino Due) | 1 | 다른 아두이노 보드도 사용 가능 |
| Makeblock Me TFT LCD | 1 | 선택 사항, 다른 디스플레이 또는 미사용 가능 |
| 저항 4.75kΩ | 4 | 구현에 따라 값 변경 가능 |
| 회전 포텐셔미터 (일반) | 4 | 3개는 PID 계수 조절용으로 선택 사항 |
| 범용 PNP 트랜지스터 | 4 | 구현에 따라 변경 가능 (NPN BC337이 더 권장됨) |
| DC 모터 (일반) | 1 | |
| 슬라이드 스위치 | 1 | 방향 선택용 |
| 포토일렉트릭 속도 센서 HC-020K | 1 | |
| 브레드보드 (일반) | 1 | |
| 점퍼 와이어 (일반) | 1 | |
앱 및 온라인 서비스
프로젝트 소개
개요
대부분의 프로젝트에서 모터 속도와 방향을 동시에 제어하려 하지만, 단순히 PWM 신호를 모터에 직접 보내는 방식은 마찰과 관성 때문에 원하는 속도를 정확히 맞추기 어렵습니다. 이를 해결하기 위해 PID 제어를 사용합니다.
PID 컨트롤러란?
자동차 운전을 예로 들면: 정지에서 출발할 땐 가속 페달을 깊게 밟고, 일정 속도에선 약간만 조절하며, 가속이 너무 빠르면 페달을 놓습니다. PID 컨트롤러도 똑같이 작동합니다.
- 비례(P): 현재 오차 신호에 비례해 출력 결정
- 적분(I): 시간 경과에 따른 오차 누적을 합산해 정상 상태 오차 제거
- 미분(D): 오차 변화율을 감지해 과도 응답 억제
아두이노 PID 함수 구현
float controllerPID(float _E, float _Eprev, float _dT, float _Kp, float _Ki, float _Kd) {
float P = _Kp * _E;
float I = _Kp * 0.5 * _Ki * (_E + _Eprev) * _dT;
float D = _Kp * _Kd * (_E - _Eprev) / _dT;
return P + I + D;
}
DC 모터 구동 회로
아두이노 출력 핀으로 모터를 직접 구동할 수 없어 트랜지스터를 사용합니다. 모터는 전류로 구동되므로 트랜지스터의 콜렉터-이미터 경로로 모터 전류를 흘립니다. 트랜지스터 선택 시:
- 베이스-이미터 온 전압 (VBEon)
- DC 전류 이득 (hFE) – 모터 전류 근처에서 측정
- 최대 연속 콜렉터 전류 (ICmax) – 모터 전류보다 커야 함
베이스 저항 계산: R = (VT - VBEon) * hFE / IM
예: 모터 70mA, BC307A (hFE≈140, VBEon=0.62V, ICmax=100mA), 아두이노 듀 3.3V 출력 → 약 5.36kΩ (4.9kΩ 사용)
방향 전환 및 중요 사항
H-브리지 구성으로 4개 트랜지스터를 사용해 전류 방향을 바꿉니다. 방향 전환 시 모터가 완전히 정지할 때까지 기다리는 루틴을 추가해 돌입 전류로 인한 손상을 방지합니다.
속도 측정 (HC-020K)
슬롯 20개 디스크 사용. 펄스 주파수 읽어 RPM 계산: RPM = 60 × 주파수 / 20
int readFrequency(int pin, float speed) {
// speed: 초당 읽기 횟수 (0~10), 1초/speed 동안 펄스 카운트
// 반환: 측정된 주파수 (Hz)
}
그래픽 표시 (Makeblock Me TFT LCD)
데카르트 좌표계 그리기, 플롯 영역 초기화, 선 그리기 함수 구현. 시리얼 통신으로 디스플레이 제어.
마무리
PID 제어로 무부하 DC 모터의 최저 속도를 정격의 5%까지 낮출 수 있습니다. 그래픽 기능 포함/미포함 두 가지 코드 버전 제공.
수정 (2018.02.25): NPN 트랜지스터 사용 시 극성 주의 (PNP: E+ C-, NPN: C+ E-)
코드
그래픽 기능 포함 버전
전체 코드는 첨부 파일 참조. 주요 함수: CommandToTFT, Cartesian_Setup, Cartesian_ClearPlotAreas, Cartesian_Line, readFrequency, controllerPID, setup, loop
그래픽 기능 제외 버전
핵심 제어 로직만 포함된 간소화 버전 제공.
회로도
PID 컨트롤러를 이용한 DC 모터 속도 제어 및 방향 전환 시 고려사항을 설명하는 프로토타입 회로도 제공.