[Embedded] 개요

JUJU·2024년 9월 5일

✏️ 임베디드 시스템이란?

임베디드 시스템은 특정 목적에 맞게 설계되고 최적화된 시스템을 말한다. 일반적으로 임베디드 시스템은 제한된 자원 내에서 특정 기능을 수행하도록 설계된 하드웨어와 소프트웨어의 결합이다.


■ 임베디드 시스템의 구성 요소

  • 하드웨어: 센서, 액추에이터, 프로세서, 메모리, 통신 모듈 등으로 이루어져 있다.
  • 소프트웨어: 시스템 제어를 위한 운영체제와 응용 프로그램으로 구성된다.

■ 교차 개발 환경 (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에 의해 계산된 값)
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 모터

✏️ 초음파 센서

초음파 센서는 소리를 발사하고 반사 신호와의 시간 차이를 이용해 거리를 측정한다. 동작 방식은 다음과 같다:
1. Trigger Pin: Low에서 High로 올리면 초음파 센서가 동작을 시작한다.
2. Echo Pin: 초음파가 반사되면 Echo Pin이 High로 변하고, 일정 시간 후 Low로 떨어진다.
3. 이 시간 간격이 바로 거리 계산에 사용된다.
4. Arduino의 pulseIn(pin, value) 함수로 핀에서 High 상태가 유지되는 시간을 측정할 수 있다.

pulseIn(pin, value)  // 예시: pin = 9, value = HIGH



✏️ Serial LCD

Serial LCD는 직렬 통신(Serial Communication)을 사용하여 데이터를 주고받을 수 있다. 연결 방식은 다음과 같다:

LCDArduino board
+5v
-GND
RxTx
Tx(연결하지 않음)
  • Serial LCD는 $로 시작하는 명령어를 해석하며, 예를 들어 $GO 1 1 \r\n은 1행 1열에 커서를 이동시키는 명령어이다.



✏️ 가변저항

가변저항을 이용해 LED의 밝기를 조절할 수 있다. 가변저항의 출력 전압은 0V ~ 5V 사이에서 변화하며, 이를 Arduino가 아날로그 신호로 읽는다.

  1. 가변저항 연결: 가운데 핀을 아날로그 핀(A2)에 연결하고, LED는 저항(470옴)을 거쳐 GND에 연결한다.

  2. 아날로그-디지털 컨버터(ADC): Arduino에 내장된 ADC가 입력 전압을 10비트(0~1023)의 디지털 값으로 변환해준다.

    • 예: 5V를 입력하면 최대값 1023, 0V는 0에 해당.
    • 1 증가당 약 4.8mV 차이가 발생한다.
  3. PWM(Pulse Width Modulation): LED 밝기를 조절하려면 PWM 신호를 사용해 0~255 범위로 변환해야 하므로, 아날로그 값을 4로 나눠야 한다.

profile
백엔드 개발자

0개의 댓글