이 블로그는 임베디드 컴퓨터를 이용한 장치(시스템) 개발과 원격제어에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Microchip 사의 ATmega128를 사용한 보드와 Arduino Mega 보드(ATmega2560), Raspberry Pi, Raspberry Pi Pico, WiFi 모듈을 사용 합니다.

software-abst-FSM

Software Abstraction
  소프트웨어 추상화

    Software Abstraction은 복잡한 시스템을 잘 정의(추상화)된 기본 모듈을 사용 하여 구성 한다. 그 결과 개발 기간이 단축되고, 미리 개발된 많은 Building Block을 사용 하여, 이해하기 쉽고, 보수 유지가 용이 하고, 최적화가 용이한 소프트웨어 시스템을 설계할 수 있다.





  • Software Abstraction의 대표적인 예
    • Finite-State Machine(FSM)
      • Moore FSM
        • Output은 오직 현재의 State에 의하여만 결정 된다.
        • Input은 State Transition에 만 영향을 준다.
      • Mealy FSM
        • 현재의 상태와 Input에 의하여 Output이 결정된다.
    • Proportion Integral Derivative (PDI) Digital Controller
    • Fuzzy Logic Digital Controller
    • Neural Network
    • Linear System of Differential Equation
    • 여기서는 Embedded Microcomputer System을 이용한 장치제어 프로그래밍에 자주 이용 되는 Finite-State Machine(FSM)에 대하여만 설명 한다.


  • Traffic Light Controller(Moore FSM)의 구현 예
    • 문제를 간단히 하기 위하여 남쪽에서 북쪽으로 가는 차량과 서쪽에서 동쪽으로 가는 것만 허용 하는 네거리의 교통 신호 통제 시스템을 구현 한다.

    • Traffic Light Control system의 구성도

    • 교통 신호 제어 장치는 다음과 같이 동작 하는 것으로 설정 한다.
    • 신호등은 아래와 같이 동작 하도록 설계 한다.

      • 양방향 모두 차가 없는 경우 현재의 Green 상태 유지
      • Green에서 Red로 변경 시 5초간 황색 신호 유지
      • Green 신호는 최소 30초간 유지
      • 만약 차가 한 방향에서만 오는 경우 그 방향의 Green 신호 를 계속 유지
      • 양 방향에서 차가 오는 경우 교대로(북쪽 -> 동쪽 -> 북쪽 -> 동쪽 - - -) 차량을 통과 시킨다.
    • 차량 감지를 위하여 2개의 센서 입력 신호(PD0, PD1)를 사용 한다.
    • 차량 감지 센서 신호는 PORTD의 PD1과 PD0를 사용 하여 입력 되고, 차량 상태에 따른 입력 신호는 아래와 같다.

      • PD0: 동쪽 방향 차량 상태 신호(0: 차량 없음, 1: 차량 있음)
      • PD1: 북쪽 방향 차량 상태 신호(0: 차량 없음, 1: 차량 있음)
        • 0 0: 북,동쪽 모두 차량이 없음
        • 0 1: 동쪽 길에만 차량 있음
        • 1 0: 북쪽 길에만 차량 있음
        • 1 1: 양쪽 길에 모두 차량 있음
    • Traffic Light Controller의 State와 해당 State에서의 출력은 아래와 같다.
      • PORTF를 출력 PORT로 이용 하고, 신호등 제어 Bit는 PF5: East Red, PF4: East Yellow, PF3 : East Green, PF2: North Red, PF1: North Yellow, PF0 : North Green로 설정 하였다. 아래 Table 참고 요.

        State name 신호등 출력 신호 동작 설명
        goN 100001 동쪽 신호 Red ,북쪽 신호 Green
        wateN 100010 동쪽 신호 Red , 북쪽 신호 Yellow
        goE 001100 동쪽 신호 Green, 북쪽 신호 Red
        wateE 010100 동쪽 신호 Yellow, 북쪽 신호 Red

    • Traffic light controller의 FSM state diagram

    • Traffic light controller의 FSM state Table
    • Traffic light controller 프로그래밍 과정
      • Operation Sequence 의 결정
        • Timer와 I/O Port 의 초기화
        • 초기 상태 설정
        • FSM 제어기 구현
          • 현재 상태에 따른 신호 상태를 출력
          • 현재 상태에 따른 Delay 실현
          • 입력 Sensor로부터 입력
          • 현재 상태와 입력에 따라 다음 상태로 천이
      • Data Structure 정의
        • Finite State Machine의 상태와 동작을 정의 하기 위한 구조체 설계
      • 각 상태에서 실행 할 함수 기능 정의

    • Traffic Light Controller 프로그램(AvrStudio 4 개발 환경) 예: cho_FSM_traffic_control.zip
    • 소프트웨어 추상화 프로그램 실험을 위한 회로 구성 예

    • 실험을 위한 회로 구성
      • PC와 AVR 사이에 UART 통신선을 연결한다.
        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Atmega128의 TXD0(PE1)를 연결한다.
        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Atmega128의 RXD0(PE0)를 연결한다.
        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Atmega128의 GND를 연결한다.
        • 주: 컴퓨터에 Serial Port가 없는 경우 "USB --> UART(RS232) 변환 모듈"를 사용(USB Port를 Serial Port로 변환)하여 연결한다. 개발보드에 따라서는 "USB --> UART(RS232) 변환 모듈"을 내장하고 있는 경우가 많기 때문에 본인이 사용하는 개발보드에서 확인 하여야 한다.

      • Push button switch 연결
        • PD0와 GND 사이에 Push Button Switch를 연결 한다.(내부 Pull-up 저항을 사용)
        • PD1와 GND 사이에 Push Button Switch를 연결 한다.(내부 Pull-up 저항을 사용)
        • PORTF에 저항(330Ω)과 LED Array(8Bits)를 연결한다.
        • 참고자료: 8Bit-LED-array-module 제작 예

    • 실험 방법
      • cho_FSM_traffic_control.zip or ms7_FSM_traffic_control.zip 파일을 Download하여 압축을 해제하고 Project를 Build 한다.
      • cho_FSM_traffic_control.hex or ms7_FSM_traffic_control.hex를 개발 보드에 Upload 한다.
      • 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
      • 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate(19200) 등을 설정)을 한다.
      • 실험:
        • 개발 보드의 Reset SW를 누르면 모니터에 "Traffic control(FSM) testing" 메세지가 출력된다.
        • 위 Traffic light controller의 FSM state diagram을 참고로 Traffic senser 신호(PD0, PD1)를 입력한다.
          • PD0(East Senser) : Switch PD0를 누르면 동쪽 방향 차량이 있는 것으로 인식 한다.
          • PD1(North Senser): Switch PD1를 누르면 북쪽 방향 차량이 있는 것으로 인식 한다.
        • FSM state diagram을 참고하여 LED에 표시되는 현재 신호등의 상태와 현재 상태(모니터에 출력됨)를 확인한다.
  • Vending machine(Moore FSM)의 구현 예
    • 문제를 간단히 하기 위하여 500원과 1000원 짜리 동전만 사용 하는 것으로 하고, 판매 하는 캔은 1500원 짜리 한 종류만 판매 하는 것으로 한다.

    • Vending machine의 구성도
    • Vending machine는 다음과 같이 동작 하는 것으로 설정 한다.
      • 500원, 1000원 동전을 사용 한다.
      • 한번에 동전 하나씩 투입 한다.
      • 투입된 금액이 1500원 이면 캔을 배출 한다.
      • 투입된 금액이 2000원 이면 500원 동전을 배출 하고 캔을 배출 한다.
      • 투입된 금액이 1500원 이상인 상태에서 동전을 투입하면 투입된 동전을 배출 한다.
    • 동전 입력 감지를 위하여 2개의 센서 입력 신호(PD1, PD0)를 사용 한다.
    • 동전 센서 신호는 PORTD의 PD1과 PD0를 사용 한다.

      • PD0: 500원 동전 센서(0: 동전 감지 안됨, 1: 동전 감지 됨)
      • PD1: 1000원 동전 센서(0: 동전 감지 안됨, 1: 동전 감지 됨)
        • 0 0: 동전 입력 없음
        • 0 1: 500원 동전 투입됨
        • 1 0: 1000원 동전 투입됨
        • 1 1: 2개의 동전이 동시에 투입되는 경우는 없는 것으로 함.
    • Vending machine의 State와 해당 State에서 출력은 아래와 같다.
      • PORTF를 출력 PORT로 이용 하고, 출력 제어 Bit는 PF5: 500원 거스름 돈 출력 신호, PF6: 현재 1500원 이상 입력된 상태에서 새로운 동전이 투입된 경우 입력 동전을 배출 하는 출력 신호, PF7: 캔 출력 신호로 설정 하였다.

      • 투입된 금액이 1500원인 경우: 캔을 배출 한다.
      • 투입된 금액이 2000원인 경우: 거스름 돈 500원을 하고 캔을 배출 한다.
      • 투입된 금액이 1500원 이상인 상태에서 Coin이 투입 된 경우: Main() 함수에서 입력된 Coin를 별도 처리 없이 Drop 시키는 것으로 한다.

    • Vending machine의 FSM state diagram

    • Vending machine의 FSM state Table
    • Vending machine(Moore FSM) 프로그래밍 과정
      • Operation Sequence 의 결정
        • Timer와 I/O Port 의 초기화
        • 초기 상태 설정
        • FSM 제어기 구현
          • 현재 상태에 따른 동작을 수행(상태에 따라 잔돈 혹은 캔을 출력) 한다.
          • 현재 상태에 따른 Delay 실현
          • 입력 Sensor로부터 입력
          • 현재 상태와 입력에 따라 다음 상태로 천이
      • Data Structure 정의
        • Finite State Machine(Moore FSM)의 상태와 동작을 정의 하기 위한 구조체 설계
      • 각 상태에서 실행 할 함수 기능 정의

  • Robot Controller(Mealy FSM)의 구현 예
    • Robot Controller는 3종류의 상태(Standing, Sitting, Sleeping)를 갖고, 4종류의 입력(OK, Tired, Curious, Anxious)을 갖는 것으로 한다.

    • Robot Controller(Mealy FSM)의 구성도
      • PF0-PF1: 현재 Sate를 2진수로 LED에 표시 한다.
      • PF2-PF3: 현재 입력을 2진수로 LED에 표시 한다.
      • PF4-PF7: 현재 실행한 동작을 LED에 표시 한다.

    • Robot Controller(Mealy FSM)는 다음과 같이 동작 하는 것으로 설정 한다.
      • OK 신호가 입력된 경우(현재 상태가 만족스러운 경우) 별도의 동작 없이 현재 상태를 유지 한다.
      • Tired 신호가 입력된 경우(현재 상태가 피곤 경우) 현재 상태 보다 편안한 상태로 전환 한다. 현재 상태 가장 편안한 상태인 Sleeping 상태인 경우에는 현재 상태를 유지 한다.
      • Curious 신호가 입력된 경우(현재 상태를 살펴보고 있는 경우) 현재 상태 Standing이나 Sitting 상태인 경우는 현재 상태를 유지하고,현재 상태가 Sleeping 상태인 경우에는 Sitting 상태로 전환 한다.
      • Anxious 신호가 입력된 경우(현재 위험을 감지 한 경우) 현재 상태 보다 긴장된 상태로 전환 한다. 현재 상태 가장 긴장된 상태인 Standing 상태인 경우에는 현재 상태를 유지 한다.
    • 입력은 Keypad를 사용 한다.
      • OK(0): 현재 상태로 기분 좋음.
      • Tired(1): 피곤하기 때문에 현재 보다 편한 상태를 원함.
      • Curious(2): 주변에 대하여 관심을 보이는 상태, 이 상태에서는 않거나 서있는 상태에 있어야 한다.
      • Anxious(3): 위험을 감지함. 현재보다 긴장된 상태로 돌입하여야 함.
    • Robot Controller의 State와 해당 State에서 입력에 따른(Mealy FSM) 출력은 아래와 같다.
      • Mealy FSM은 현재 상태와 입력에 따라 출력이 결정 된다.

      • 현재 Standing인 경우
        • OK, Curious, Anxious이 입력 되면 현재 상태(Standing)를 유지 한다.
        • Tired 가 입력 되면 Sitting 상태로 전환 한다.
      • 현재 Sitting인 경우
        • OK, Curious이 입력 되면 현재 상태(Standing)를 유지 한다.
        • Tired 가 입력 되면 Sleeping 상태로 전환 한다.
        • Anxious이 입력 되면 Standing 상태로 전환 한다.
      • 현재 Sleeping인 경우
        • OK, Tired이 입력 되면 현재 상태(Sleeping)를 유지 한다.
        • Anxious, Curious 가 입력 되면 Sitting 상태로 전환 한다.

    • Robot Controller(Mealy FSM)의 FSM state diagram

    • Robot Controller(Mealy FSM)의 FSM state Table
    • Robot Controller(Mealy FSM) 프로그래밍 과정
      • Operation Sequence 의 결정
        • Timer와 I/O Port 의 초기화
        • 초기 상태 설정
        • FSM 제어기 구현
          • 현재 상태와 입력에 따라 로봇 제어 신호를 출력 한다.
          • 현재 상태에 따른 Delay 실현
          • 입력 Sensor로부터 입력
          • 현재 상태와 입력에 따라 다음 상태로 천이
      • Data Structure 정의
        • Finite State Machine(Mealy FSM)의 상태와 동작을 정의 하기 위한 구조체 설계
      • 각 상태에서 실행 할 함수 기능 정의