통신프로토콜

MPS Flammable Gas Sensor 통신 프로토콜 (3.0 Version)

  • UART 설정

PARAMETER
TYP

Baud Rate (Fixed)

38400 bps

Data Bits

8

Parity

None

Stop Bits

1

Flow Control

None

  • MPS Sensor Data Format 방식 : IEEE 754 Format ( 부동소수점), Little Endian 형식(최하위 바이트(LSB)가 먼저 전송)

전체 요청(Request) Command

요청_커맨드_전체
요청_커맨드_전체
  • Payload는 사용에 있어서 전송되는 데이터 자체를 의미함(Header, Checksum, parity bit, 등 제외)

  • 요청(Request) Command Packet 구조

요청_커맨드_세부
요청_커맨드_세부
  • ex) 현재 센서 상태 요청 Command

요청_커맨드_예시
요청_커맨드_예시

응답(Reply) Command Packet 구조

응답_프로토콜
응답_프로토콜
  • ex) 현재 센서 상태 응답(정상일 경우만)

응답_커맨드
응답_커맨드
  • ex) 응답 Command 예시(정상일 경우만)

응답_커맨드
응답_커맨드
  • 센서 Status(상태)값이 변하면 Checksum값이 변함

Command rely Status 표

센서_상태_커맨드
센서_상태_커맨드
센서_상태_커맨드
센서_상태_커맨드
  • 가장 빈번하게 발생하는 Command reply Status :

  • 1. 0x26(센서 초기화): 센서 초기화 시간 최대 20초까지 나타남

  • 2. 0x35( 호흡 or 습도 급증): 센서를 사람의 호흡이나 습도가 급증하는 환경에 노출되면 센서 값이 정확하게 나오지 않을 수 있음

Checksum 알고리즘: 16bit CRC CCITT 알고리즘

  • Checksum이란 데이터의 오류를 검사하는데 사용되는 일련의 숫자와 문자

  • 다항식 0x1021 (x^(16)+x^(12)+x^5+x )

  • 시작 바이트 : 0Xffff

  • 전체 패킷(헤더 및 페이로드)에 대해 계산됨, 페이로드가 없으면 헤더만으로 계산

  • Checksum을 계산하기 전에 Checksum값은 0x00으로 초기화

  • 참고: Checksum 계산하는 사이트

  • Ex) 현재 상태 응답 Checksum 계산

CRC_계산_사이트_예시
CRC_계산_사이트_예시
  • Checksum 예제 코드

Sample code 다운로드

CRC Table Sample code

초기화 및 측정 Sequence

1. 센서 전원은 켠 후 센서가 부팅될 때까지 기다림(~3초)

2. 센서 상태 확인(0x41 Command) – 초기화 완료(0x00)

3. 센서 상태 확인이 완료되면 연속 측정 모드로 설정(0x61 Command ISO 규격 권장)

4. 첫번째 측정이 완료될 때까지 2초 기다림

동작_Sequence
동작_Sequence

센서 버전 확인

  • Command 버전 정보 요청

요청
요청
  • Command 버전 정보 응답 예제

버전 정보 응답 예제
버전 정보 응답 예제
  • Payload 설명: 총 64 bit, S/W Version [1:32], H/W Version [33:48], Protocol Version [49:64]

payload 설명
payload 설명
  • S/W Version: 3.1.0.1

  • H/W Version: 1.0

  • Protocol Version: 32.1

  • Nevadanano PC Serial program과 비교

serial_프로그램비교
serial_프로그램비교

감지 가스 확인

  • 감지 가스 요청

요청
요청
  • 감지 가스 응답 예제

가스감지응답예제
가스감지응답예제
  • 감지 가스 응답 Payload Packet 값: 0~255

가스 감지 표
감지 가스 응답 Payload 표

가스 농도 값 읽기

1. 센서 전원은 켠 후 센서가 부팅될 때까지 기다림(~3초)

2. 센서 상태 확인(0x41 Command) – 초기화 완료(0x00)

3. 연속 측정 모드로 설정(0x61 Command)

4. 가스 농도 값 요청(0x03 Command)

요청 Command
요청 Command ( 상태 확인, 측정 모드 설정, 가스 농도 요청)

가스 농도 값 읽기 응답 예시

응답_커맨드
응답_커맨드
  • Data Format 방식 : IEEE 754 Format ( 부동소수점), Little Endian 형식(최하위 바이트(LSB)가 먼저 전송)

  • 부동소수점: 컴퓨터에서 실수를 표현하는 방법 ( 2진수(0,1)로 표현)

IEEE_754_Main
IEEE_754_Main
  • 부호: 양수일 때 0, 음수일때 1

  • 지수부: 8비트, 지수를 나타냄

  • 가수부: 23비트, 가수를 나타냄

가스 농도값 부동 소수점 -> 실수 변환 예시

1. Variable Payload = 가스 농도 값 = 0x33, 0x33, 0x33, 0x42

2. Little endian -> 0x42, 0x33, 0x33, 0x33

3. 이진수로 변환 -> 0100 0010 0011 0011 0011 0011 0011 0011

4. 이진수 맨앞자리 0이므로 부호는+, 지수값은 10000100(2) = 132, 127을 기준으로 +5이므로 가수부에 2^5 을 곱해야됨

(즉 지수부에 2진수 값을 계산하여 bias인 127을 빼준 값(n)을 가수부에 2^5 을 곱하면 됨)

5. 1.01100110011001100110011(2) × 2^5 = 101100.110011001100110011(2) = 44.79999923706055

  • IEEE 754 부동소수점 변환 사이트

  • 가스 농도 읽기 code (Arduino uno)

  • ※ 아래의 Code는 Sensor의 간단한 통신 Test 목적으로 작성하였음

MPS Sensor 디버깅

Nevadanano 개발키트 이용

개발키트
개발키트
개발키트
개발키트

Nevadanano 개발키트

  • MPS 센서와 FTDI FT230x series USB-to-serial converter 를 이용하여 Nevadanano interface Program 실행

  • MPS 센서와 USB-to-serial converter를 이용하여 Serial Program으로 디버깅

Last updated