[Embedded] 개요
개요
✏️ 임베디드 시스템이란?
임베디드 시스템은 특정 목적에 맞게 설계되고 최적화된 시스템을 말한다. 일반적으로 임베디드 시스템은 제한된 자원 내에서 특정 기능을 수행하도록 설계된 하드웨어와 소프트웨어의 결합이다.
■ 임베디드 시스템의 구성 요소
- 하드웨어: 센서, 액추에이터, 프로세서, 메모리, 통신 모듈 등으로 이루어져 있다.
- 소프트웨어: 시스템 제어를 위한 운영체제와 응용 프로그램으로 구성된다.
■ 교차 개발 환경 (Cross-Development Environment)
임베디드 시스템 개발은 PC(host system)에서 진행되며, 타겟 시스템(target system)에 다운로드된다.
PC에서 작성된 코드는 타겟 시스템에 맞는 코드로 작성되어야 하며, 이 과정을 교차 개발 환경이라 한다.
- PC 코드: 일반적으로 x86 아키텍처(Pentium)용
- Target 시스템 코드: 예) ARM CPU용
✏️ System-On-Chip (SoC)
SoC는 CPU 코어와 주변 장치 회로를 하나의 칩에 통합한 것이다.
즉, PC의 마더보드를 하나의 칩에 구현한 것으로 볼 수 있다.
■ SoC 예시
- 삼성 Exynos
- Qualcomm Snapdragon
✏️ Processor Cores
■ X86
- Intel에서 제작
- 임베디드 시스템에서는 사용률이 낮음
■ ARM
- Advanced RISC Machine으로, 명령어 세트가 적음
- 임베디드 시스템에서 널리 사용됨
■ POWER
- IBM에서 제작
- Performance Optimization With Enhanced RISC를 의미
■ MIPS
- RISC CPU의 대표적인 아키텍처
- 워크스테이션에서 주로 사용됨
■ SuperH
- Hitachi에서 제작
■ 68000
- Motorola에서 제작
✏️ Arduino
■ Arduino 보드
- C 언어 기반의 프로그래밍 환경에서 작동
- setup(): 초기화 코드를 작성하며, 한 번만 실행됨
- loop(): 메인 코드를 작성하며, 반복해서 실행됨
■ Arduino 기본 사용법
- pinMode(pin, Input or Output): 핀을 입력 또는 출력 모드로 설정
- digitalWrite(pin, High or Low): 핀에 5V(High) 또는 0V(Low)를 출력
- digitalRead(pin): 핀의 입력 상태를 읽음
■ 저항과 LED 전류 계산
LED를 사용하면 반드시 저항을 추가해야 한다. 저항이 0이면, V = IR 법칙에 따라 전류가 무한대로 증가하여 회로가 손상될 수 있기 때문이다.
- LED의 적정 전류: 5~20mA (이상적으로 0.05A)
- 전압(V): 5V
- 저항(R): 100옴 (Ohm’s Law에 의해 계산된 값)
1
2
3
4
V = IR
R = V/I
= 5V / 0.05A
= 100Ω
■ Energy Source와 9번 핀
LED를 켤 때는 직접적으로 9번 핀에서 전류를 보내는 것보다는, 5V 에너지 소스에서 전류를 전달한 후, 9번 핀으로 나가는 방법이 더 안정적이다.
이때, 9번 핀에서 0V(LOW)를 출력하면 LED가 켜지며, 5V(HIGH)를 출력하면 꺼진다.
이는 Source Current보다는 Sink Current 방식을 사용하는 것이 안정적이라는 뜻이다.
■ PWM(Pulse Width Modulation)
9번 핀은 PWM(Pulse Width Modulation) 기능을 제공한다. 일반적으로 디지털 회로는 0V(LOW) 또는 5V(HIGH)만 출력할 수 있다. 하지만 PWM을 사용하면 2.5V, 3V 같은 아날로그 값을 흉내낼 수 있다.
- PWM은 빠르게 5V와 0V를 반복적으로 출력하여, 평균 전압을 조정하는 방식으로 동작한다.
- 예를 들어, 50% 듀티 사이클의 PWM 신호는 평균적으로 2.5V를 출력한다.
■ Button Debounce
버튼을 누르거나 뗄 때, 스위치 접촉 불량으로 인해 일시적으로 입력값이 불안정해질 수 있다. 이를 버튼 디바운스(Button Debounce)라고 한다.
- Debouncing 처리: 하드웨어적으로는 커패시터를 추가하거나, 소프트웨어적으로는 일정 시간 동안 버튼 입력을 무시하여 해결할 수 있다.
✏️ 모터와 트랜지스터
■ 모터의 종류
- DC 모터: 전기 에너지를 회전 에너지로 변환
- Servo 모터: 정밀 제어에 적합
- Stepping 모터: 마이크로 마우스, 정밀 제어에 사용
- Geared 모터: 기어가 결합된 모터로, 토크를 증대시킴
■ 트랜지스터
- 전류의 흐름을 제어(스위칭)하거나 증폭하는 역할을 하며, 모터의 제어에 사용됨
■ DC 모터 제어
- DC 모터 제어 칩(L294D)는 DC 모터의 정방향 및 역방향 회전을 제어할 수 있으며, 하나의 칩으로 두 개의 모터를 제어 가능하다.
- 핀 역할: 2번과 7번 핀은 방향만 제어하므로, 반드시 8번 핀에 5V가 공급되어야 모터가 작동한다.
모터: 전기 에너지를 회전 에너지로 변환
- AC 모터
- DC 모터
- BLDC 모터
- Servo 모터
- Stepping 모터 (중요) -> 마이크로 마우스, 정밀 제어에 사용
- Geared 모터
✏️ 초음파 센서
초음파 센서는 소리를 발사하고 반사 신호와의 시간 차이를 이용해 거리를 측정한다. 동작 방식은 다음과 같다:
- Trigger Pin: Low에서 High로 올리면 초음파 센서가 동작을 시작한다.
- Echo Pin: 초음파가 반사되면 Echo Pin이 High로 변하고, 일정 시간 후 Low로 떨어진다.
- 이 시간 간격이 바로 거리 계산에 사용된다.
- Arduino의
pulseIn(pin, value)함수로 핀에서 High 상태가 유지되는 시간을 측정할 수 있다.
1
pulseIn(pin, value) // 예시: pin = 9, value = HIGH
✏️ Serial LCD
Serial LCD는 직렬 통신(Serial Communication)을 사용하여 데이터를 주고받을 수 있다. 연결 방식은 다음과 같다:
| LCD | Arduino board |
|---|---|
| + | 5v |
| - | GND |
| Rx | Tx |
| Tx | (연결하지 않음) |
- Serial LCD는 $로 시작하는 명령어를 해석하며, 예를 들어 $GO 1 1 \r\n은 1행 1열에 커서를 이동시키는 명령어이다.
✏️ 가변저항
가변저항을 이용해 LED의 밝기를 조절할 수 있다. 가변저항의 출력 전압은 0V ~ 5V 사이에서 변화하며, 이를 Arduino가 아날로그 신호로 읽는다.
-
가변저항 연결: 가운데 핀을 아날로그 핀(A2)에 연결하고, LED는 저항(470옴)을 거쳐 GND에 연결한다.
- 아날로그-디지털 컨버터(ADC): Arduino에 내장된 ADC가 입력 전압을 10비트(0~1023)의 디지털 값으로 변환해준다.
- 예: 5V를 입력하면 최대값 1023, 0V는 0에 해당.
- 1 증가당 약 4.8mV 차이가 발생한다.
- PWM(Pulse Width Modulation): LED 밝기를 조절하려면 PWM 신호를 사용해 0~255 범위로 변환해야 하므로, 아날로그 값을 4로 나눠야 한다.
