1. 마이크로컨트롤러 개요
-
마이크로컨트롤러(MCU; Micro Controller Unit)
- 하나의 칩에 CPU(MPU), 메모리, 주변기기 제어 회로를 집약하여 독자적으로 동작 가능한 칩 하나로 된 컴퓨터
- 주로 임베디드 시스템(제한된 용도의 전용 시스템)에 사용
-
MPU(CPU) vs MCU
- MPU: 고성능 연산 중심, 외부 메모리/주변장치 필요 (예: 인텔 i7)
- MCU: 제어 중심, 단일 칩 솔루션, 저사양/저전력 (예: ATmega, PIC)
-
장단점
- 장점: 소형화, 경량화, 저비용, 신뢰성 향상, 융통성(프로그램 변경 가능)
- 단점: 낮은 처리 능력, 범용성 부족
-
종류: 8051(Intel), PIC(Microchip), AVR(Atmel - 아두이노 사용), ARM(고성능 32/64비트) 등
2. 마이크로컨트롤러의 구조 (ATmega128 기준)
MCU는 크게 Core(CPU), 메모리, 클럭, 전원관리, 그리고 다양한 주변장치(Peripherals)로 구성된다.
2.1. CPU(Core)
- 특징
- 주로 RISC(Reduced Instruction Set Computer) 구조를 사용하여 실행 속도가 빠르다.
| RISC 구조 | CISC | RISC |
|---|---|---|
| 프로그램 크기 | 작음 | 큼 |
| 명령어당 클록 수 | 가변 | 고정 |
-
하버드 구조(Harvard Architecture)
- 프로그램 메모리와 데이터 메모리 공간(및 버스)이 분리되어 병목 현상을 줄인다.
-
레지스터
- 범용 레지스터
- 연산 데이터 저장
- 특수 레지스터(I/O Register)
- MCU의 특정 기능(GPIO, 타이머 등)을 제어하고 상태를 확인하는 데 사용된다.
- (개발자가 직접 제어해야 함)
- 범용 레지스터
2.2. 메모리(Memory)
- 플래시 메모리(Flash): 프로그램 코드 저장 (비휘발성)
- SRAM: 변수 및 연산 데이터 저장 (휘발성, 고속)
- EEPROM: 설정 값 등 영구 보관이 필요한 데이터 저장 (비휘발성)
2.3. 클럭 및 전원 관리
-
클럭(Clock)
- 시스템 동작의 기준
- 외부 결정(Crystal/Oscillator) 또는 내부 RC 회로를 사용한다.
-
슬립 모드(Sleep Mode)
- 배터리 소모를 줄이기 위해 사용하지 않는 모듈의 클럭을 차단하는 기능
- (Idle, Power-down 등)
-
리셋(Reset)
- 입출력 레지스터는 초기화되고, 프로그램은 시작 번지가 저장되어있는 리셋 벡터에서 새롭게 시작
-
리셋의 종류
- Power-on: MCU의 공급전압이 파워온 리셋 임계전압 이하일 때 리셋
- 외부: 리셋핀에 일정 시간 이상의 신호가 입력되면 리셋
- 워치독(Watchdog): 프로그램이 무한 루프 등 오류에 빠졌을 때 시스템을 강제로 리셋시켜 복구하는 기능 (지정된 시간이 될 때 까지 사용자가 쓰기 작업을 하지 않으면 리셋 발생)
- 브라운아웃(Brown-out): 공급전압(VCC)이 일정 수준 이하로 떨어질 때 오동작 방지를 위해 리셋
- JTAG: JTAG 시스템 사용
3. 주요 주변장치 모듈
3.1. GPIO
-
GPIO(General Purpose Input Output; 범용 입출력 포트)
- 디지털 신호(0/1)를 입출력하는 핀이다.
- MCU와 다양한 디지털 입출력장치를 연결하는 통로
- 복수 개의 입출력 핀 사용 → 8개(비트) 단위로 하나의 GPIO 포트를 구성
-
cf. GPIO의 기능
- 핀의 용도 결정: 미사용/입력/출력 설정
- 풀업 저항의 사용 여부
- 핀 입력 데이터 읽기: 입력된 데이터가 저장
- 출력 데이터 쓰기: 출력되는 데이터를 저장
-
제어 레지스터(ATmega 기준)
- DDRx(Data Direction Register): 데이터 방향 설정 (입력/출력 결정)
- PORTx(Port INput pins register): 출력 데이터 설정 (High/Low) 및 내부 풀업 저항 설정
- PINx: 입력 데이터 읽기
-
주요 개념
- 풀업/풀다운 저항(플로팅 방지)
- 채터링/디바운싱(스위치 노이즈 제거)
- 바운스(채터링): 스위치 조작 시 기계적인 진동 때문에 잠시 원하지 않는 on/off 반복이 나타나는 현상
- 디바운스(디바운싱): 소프트웨어나 하드웨어에 의한 방법으로 바운스 현상을 제거하는 방법
3.2. 타이머/카운터(Timer/Counter)
-
CPU와 무관하게 클럭 펄스를 세는 장치이다.
-
동작 모드
- 타이머: 내부 시스템 클럭을 계수 (시간 측정, 지연 생성)
- 카운터: 외부 핀으로 들어오는 펄스를 계수 (사건 횟수 측정)
3.3. PWM
-
PWM(Pulse Width Modulation, 펄스 폭 변조)
- 디지털 신호의 듀티비(Duty Cycle, On/Off 비율)를 조절하여 아날로그와 유사한 효과를 내는 기술
- LED 밝기 조절, 모터 속도 제어 등에 필수적으로 사용된다.
-
cf. PWM 용어
- 주기
- 하나의 PWM 파형이 반복되는 시간 (On 시간+Off 시간)
- On 시간: PWM의 주기에서 출력이 On으로 출력되는 시간
- Off 시간: PWM의 주기에서 출력이 Off로 출력되는 시간
- 듀티비
- 디지털값인 듀티비를 조절하여, 아날로그값인 평균전압을 가변할 수 있음
- 단위: %
- 주기
3.4. 인터럽트
- 인터럽트(Interrupt)
- 외부/내부 사건 발생 시 하던 일을 멈추고 즉시 해당 사건(ISR)을 처리한 후 복귀하는 방식
- 장점: 지속적으로 상태를 감시하는 폴링(Polling) 방식에 비해 시스템 효율이 월등히 높다.
- 종류: 외부 핀 인터럽트, 타이머 인터럽트, 통신 인터럽트 등
3.5. ADC(아날로그-디지털 변환기) & 비교기
-
ADC
- 센서 등의 아날로그 전압 값을 디지털 값(n비트)으로 변환한다. (분해능과 변환 속도가 중요)
-
cf. ADC의 주요 성능
- 분해 능력: 몇 비트의 디지털 값으로 변경할 것인지의 여부
- 변환 속도: 변환하는 데 걸리는 시간
- 직선성: 디지털로 변경할 때, 모든 범위에서 얼마나 정확하게 표현되는지의 여부
-
cf. ADC의 입력 방법
- 단일 입력, 차동 입력
-
아날로그 비교기
- 두 전압을 비교하여 크다/작다(0/1)를 판별한다.
- ADC 없이 간단하게 아날로그값을 비교할 때 사용한다.
4. 통신 모듈
MCU는 외부 장치와 데이터를 주고받기 위해 직렬 통신(Serial Communication)을 주로 사용한다.
4.1. USART - 비동기식
-
USART(Universal Synchronous Asynchronous Receiver and Transmitter)
- 범용 동기 비동기 수신기와 송신기
- Rx(수신), Tx(송신), GND 3선으로 통신하며, 별도의 클럭 선이 없다. (Baud rate 약속 필요)
-
UART
- RS-232: PC 직렬 포트 표준, ±12V 전압 사용 (장거리용 드라이버 IC 필요)
- RS-422: 차동 신호(Differential) 사용으로 노이즈에 강하고 장거리 전송 가능
- RS-485: 차동 신호 사용, 멀티 드롭(1:N) 통신 지원, 산업용으로 많이 사용
4.2. I2C(TWI) - 동기식
- I^2C(Two Wire Interface)
- 2개의 선(SDA, SCL)만 사용하는 동기식 통신
- 주소(Address)를 사용하여 최대 128개의 슬레이브와 연결 가능
- 선이 적어 회로가 간단하지만 SPI보다 속도는 느리다.
4.3. SPI - 동기식
- SPI(Serial Peripheral Interface)
- 고속 동기식 통신(클럭 선 존재)
- 4개의 선 사용 (SCK, MOSI, MISO, SS)
- 마스터-슬레이브 방식, 1:1 연결에 적합하며 속도가 빠르다.