1. 배경지식

01. 초음파 센서 모듈(HC-SR04)

초음파 센서 HC-SR04

datasheet상에서 제공되는 HC-SR04의 정보는 다음과 같다.

HC-SR04 spec

가장 중요한 정보는 power supply가 +5V DC라는 점과 Trigger Input Pulse width의 값이 10us라는 것이다. 

  datasheet 상의 정보를 통해 초음파 센서는 총 50us 이상의 주기에서 10us의 Trigger input 신호를 주어야 하고, 그 값은 low이어야 한다. 그러므로 이번 실험에서 DC 전압을 pulse로 변환해주는 회로를 구성해야함을 알 수가 있다. 주기를 구하는 식은 실험 파트에서 더 자세하게 다룰 예정이다.

 

 datasheet에 첨부된 초음파 센서를 통해 거리를 구하는 식은 다음과 같다.

초음파 센서 거리 구하는 식

02. NE555 발진회로

이번 실험에서는 STMicroelectronic 社의 소자를 사용하였다. 소자의 핀 번호는 다음과 같다.

NE555 pin (top view)

NE555 소자를 이용한 발진회로로 초음파 센서에 필요한 pulse 신호를 생성할 것이다.

NE555 안정 멀티 바이브레이터

실험에서 사용할 안정 멀티 바이브레이터 회로는 위 사진과 같다. 이 회로는 기본적으로 High 신호를 출력하고 원하는 주기만큼 Low 신호를 출력시킨다. R1과 R2, 그리고 C1을 통해 주기와 trigger 신호를 조정할 수 있다. 계산식은 다음과 같다.

계산식

자세한 계산은 실험 파트에서 다루어볼 예정이다. (회로와 계산식은 datasheet에서 발췌한 내용이다.)

 

2. 실험

01. LM7805: 리니어 레귤레이터

리니어 레귤레이터는 안정적인 DC 전압을 인가해주기 위해 사용한다. LM78XX 시리즈는 XX에 들어가는 크기 만큼의 + Voltage를 출력한다. 그러므로 LM7805는 +5 Voltage를 출력하는 소자이다.

 

01-1 Pspice 시뮬레이션

cursor 결과

자이로 센서때는 리니어 레귤레이터를 통해 안정된 전압을 출력하되, 출력되는 전압보다 낮은 3.3V를 필요로 했다. 그러므로 캐패시터 외에 Resistor를 연결해서 그 값을 조정해주었다면, 이번에는 리니어 레귤레이터 출력 값 자체가 필요한 경우이므로 datasheet에 있는 회로대로 Cin = 0.33uF, Cout = 0.1uF, Vdc = 10V를 사용하였다. Cursor를 통해 5V값과 근사한 4.9968V가 방출됨을 알 수가 있었다.

 

01-2 Breadboard 회로 구성

LM7805 소자 다리

Datasheet에서 발췌한 소자 다리는 위 사진과 같다. 이 점을 유의하여 회로를 구성하였다.

리니어 레귤레이터

실험에서도 캐패시터는 datasheet 내용대로 0.33uF과 0.1uF을 사용하였다. 인가된 전압은 10V이다.

DMM 측정값

5V가 정상적으로 출력됨을 알 수가 있다.

 

02. NE555 발진회로

02-1 Pspice 시뮬레이션

Cursor 측정값

Pspice 시뮬레이션 당시에는 최소 50us 주기에 10us의 low 신호가 인가되어야 함을 알지 못했다. 그래서 10us high 신호에 50% duty ratio로 설정하고 설계하였다. 계산식은 다음과 같다.

시뮬레이션에서 사용된 계산값

그러므로 R1 = 5.8kΩ, R2 = 9kΩ, C1 = 1nF, C2 = 0.1uF을 사용하였다.

 

02-2 Breadboard 회로 구성

피스파이스 구성 당시에는 잘못된 정보를 이용하여 주기를 설정하였기 때문에 필요한 소자들을 새롭게 계산하였다. 주기 T = 1ms, C1 = 1nF, C2 = 0.1uF으로 고정하고 10us씩 low 신호를 주는 발진회로를 구성하였다. 

R1, R2 계산식

R1과 R2에 해당되는 동일한 저항이 없었으므로 R1은 1.3M, R2는 15k를 사용하였다.

실제 회로에서 사용된 저항

소자의 핀은 다음과 같다.

NE555 PIN (top view)

Vcc는 리니어 레귤레이터의 output 값을 받아왔다. 오실로스코프를 이용해서 파형이 제대로 나오는지 확인하였다. 파형을 제대로 확인하기 위해서 output 부분에 1k옴 저항을 달아 확인하였다.

NE555 발진회로 오실로스코프 파형

왼쪽 파형을 보면 주기 약 1ms에 low 파형이 출력되고 있음을 확인할 수 있다. 출력되는 low 파형은 오른쪽 사진에서 보다싶이 10.80us의 주기임을 알 수 있다. 원하는 파형이 출력되고 있음을 확인할 수 있다.

 

03. 초음파 센서 전체 회로

03-1 회로 구성

초음파 센서 PIN

초음파 센서 전체 회로는 다음과 같다.

초음파 센서 전체 회로

이번에도 출력 파형을 깨끗하게 보기 위해 1k옴 저항을 달았다.

 

※주의

초음파 센서를 망가뜨리지 않기 위해서는

GND를 먼저 인가하고 전압을 인가하여야 한다.

 

초음파 센서 전체 회로 브레드보드

왼쪽은 모든 회로를 연결한 사진이고 오른쪽은 초음파 센서에 연결한 모습을 위에서 바라본 모습이다.

 

초음파 센서가 제대로 작동을 하고 있는지 확인하기 위해 물체를 일정한 거리로 배치하고 실제 거리와 실험을 통해 얻은 값이 얼마나 차이가 나는지 오차를 확인해보았다. (거리를 구하는 식은 배경지식 01 초음파센서에서 equation3를 사용하였다.)

5cm

 

10cm

 

15cm

10cm를 제외하고 대체적인 오차율이 15%대 이지만 모듈이 정상적으로 작동함을 확인할 수 있었다.

 

03-2 구동 영상

https://youtu.be/wBQM2zaWrf8

초음파 센서 구동영상


3. 고찰

처음에 오차율이 높은 것이 거리 때문이라고 생각했는데 15cm와 10cm 끼리 오차율이 크게 달랐다. 거리를 재는 물체의 표면이 고르지 않아서 오차가 발생한 것 같다.

 

참고문헌

(datasheet: https://www.alldatasheet.com/ )

'박다흰 > 전실1' 카테고리의 다른 글

[04주차] 자이로센서 (21.03.24_project 2)  (0) 2021.03.29

1. 배경지식

01. 자이로센서란?

 회전하는 물체의 각속도를 측정하는 센서. 즉, 단위 시간 당 각도의 변화량을 측정하는 센서이다. MEMS 자이로 센서는 코리올리 힘을 측정하여 전기신호로 변환하고 힘에 대한 각속도를 계산한다. 드론은 가속도계와 함께 자이로센서가 사용되는 대표적인 예라고 할 수 있다.

 

 01-1. 코리올리 힘

 코리올리 힘은 코리올리 효과 또는 전향력이라고도 하며 회전하는 계에서 느껴지는 관성력으로 1835년에 처음 설명해낸 프랑스 과학자 코리올리의 이름을 따 지어졌다.   

코리올리 힘

m은 질량, v는 물체의 계에서의 속도, Ω은 계가 돌고 있는 각속도를 나타낸다.

 이 각속도를 적분해주면, 자이로센서에서 Pitch, Roll, Yaw각을 얻을 수 있다. 하지만 해당 과정에서 드리프트(적분 오차값)가 생기게 된다. 때문에 센서가 가만히 있어도 값이 무한으로 발산하는 일이 생길 수도 있다. 이번 실험에서 드리프트를 보정하는 방법 또한 고민해볼 참이다.

02. Datasheet

 실험에서 사용한 자이로센서는 뉴티씨(NEWTC)사의 2축 GYRO(각속도) 센서(Invensense사 IDG-650/IXZ-650)을 이용한 AM-GYRO V02이다. 출력 신호에 Low Pass Filter(약 2kHz)를 구현하였고 3.3V 전원만 인가하면 추가적인 회로 없이 각속도가 출력이 가능하다. (사진: datasheet 발췌)

자이로 센서 rotation view
자이로 센서 핀 설명

감도는 0.5mV/°/s 이고 감도의 풀 스케일은 ±2000°/s이다.

Xrate 및 Yrate/Zrate 출력 전압 범위는 기준전압(1.35V±1000mV)이다.

 

03. Pitch, Roll, Yaw

 

Roll Pitch Yaw

비행물체를 대신해 원기둥을 이용해 표현을 해보았다. 종축을 x축, 횡축을 y축, 수직축을 z축이라 했을 때, x축을 중심으로 회전하는 것을 Roll, y축을 중심으로 회전하는 것을 Pitch, z축을 중심으로 회전하는 것을 Yaw라고 한다.

단면으로 보는 것이 쉽다. Pitch는 누워있는 원기둥을 옆면에서 본 것이고 Yaw는 위에서 본 것으로 생각하면 된다. 이번 실험에서 사용하는 자이로센서는 횡축이 x축이므로 x축으로 Pitch 각을 z축으로 Yaw각을 구할 것이다.

 

2. 실험

01. LM317: 리니어 레귤레이터

먼저 실험에 들어가기 앞서서, 자이로센서에 3.3V 전압을 주기 위해 리니어 레귤레이터를 구성할 것이다. 소자는 LM317을 사용할 것이다.

 

01-1 Pspice 시뮬레이션

Vout 공식

레귤레이터는 출력전압이 고정되어 있으므로 원하는 출력 전압을 얻기 위해서는 외부에서 연결해주는 R 값들을 조정해주어야 한다. 실험에서 원하는 Vout 값은 3.3V이므로 R1은 1kΩ, R2는 1.577k으로 회로를 구성하였다. Iadj는 매우 작은 값이기 때문에 0으로 간주하고 계산했다.

cursor 결과

캐패시터는 10uF와 1uF를 사용하였다. 시뮬레이션 결과 예상했던 대로 3.3V 값에 근사한 3.2960V가 측정되었다.

 

01-2 Breadboard 회로 구성

LM317 소자 다리

 Datasheet에서 발췌한 LM317 소자 핀은 위와 같다. 이 점을 유의하고 브레드보드에 회로를 구성하였다.

리니어 레귤레이터

 시뮬레이션에서 R1은 1k, R2는 1.577k를 사용하였다. 그래서 실제 회로를 구성할 때에는 그와 유사한 1k, 1.6k을 사용하였다. 아래 사진은 실험에 사용되었던 Register 값을 DMM으로 측정한 값이다.

회로를 구성할 때에는 캐패시터와 레지스터 그리고 전압원들을 input, output, Iadj에 맞게 꽂아주고 캐패시터, R2 모두 GND를 물려주면 된다. 최종적으로 3.3V를 얻고 싶으므로 최소 5V 이상의 전압을 인가해주어야 한다. 나는 이 실험에서 5V의 전압을 인가하였다.

최종적으로 Vout 값이 시뮬레이션과 유사한 3.3287V의 값이 나옴을 확인할 수 있었다.

02. 자이로 센서

02-1. Breadboard 구성

 리니어 레귤레이터에서 GND와 Vout을 자이로 센서의 GND와 Vcc에 연결했다. Xrate는 ai0, Y/Zrate는 ai1과 연결하였고 DAQ의 GND 또한 앞서 연결했던 GND와 연결하였다.

 

02-2 LabVIEW

 자이로센서에서 Xrate, Y/Zrate 값은 각속도이므로 우리가 원하는 Pitch 각과 Yaw각을 구하기 위해서는 Voltage로 표현된 이 각속도들을 적분해주어야 한다. 하지만 이 과정에서 드리프트가 발생하고 이 드리프트로 인해 값이 발산해버리는 일이 발생한다. 이번 랩뷰에서는 이 각속도들을 적분하고 그 과정에서 생기는 드리프트를 없애는 방안도 고민해볼 생각이다.

블록 다이어그램
프론트 패널

 결론부터 이야기하자면 랩뷰는 성공이었다. 결과물은 위와 같다. 이제부터 차근차근 하나씩 설명하려 한다.

X값과 Z값 dt

 X값과 Z값은 DAQ로 각각 받았다. 그 안에서 voltage, offset을 함께 받는다. 시퀀스를 이용해 순차적으로 값을 받았다. 시퀀스 내부에 틱카운트를 설치해서 t1과 t2를 만들었다. 그리고 그 둘 시퀀스 사이에 시간 지연을 넣어줌으로써 t1과 t2사이에 간격을 만들어 주었다. 그러므로 (t2 - t1) / 50 = dt의 식이 나올 수 있었다.

Pitch각과 Yaw값 계산

X값과 Z값 모두 shift register를 이용해 10개의 값을 받고 그 값들의 평균을 구하여 사용하였다. 오차를 줄이기 위함이다. average 값에 offset 값을 빼주어 더욱 정교한 값을 얻어낼 수 있다. 그 값에 sensitivity를 나누어주면 비로소 Angular velocity가 된다. 그 값에 dt를 곱하여 순간 Pitch각과 Yaw각을 얻어낼 수 있다. 기본적으로 Pitch각과 Yaw각의 연산과정은 동일하다. Sensitivity는 Datasheet에 명시되어 있는 내용이므로 0.0005를 넣었다. 위에서 자이로센서는 각속도를 측정하는 센서이고 그 값들을 적분하여야 해당 각들을 구할 수가 있다고 언급했던 바가 있다. 하지만 LabVIEW상에서 직접적으로 적분하는 요소가 없으므로 각속도에 dt를 지속적으로 곱하여 적분을 구현하였다.

Angular velocity 구하는 식(Z도 동일)
드리프트 보정

드리프트를 보정하기 위해 구성한 랩뷰이다. Pitch 혹은 Yaw의 리셋이 들어가면 0이 나오고 리셋을 하지 않으면 그대로 Pitch/Yaw각이 들어가 순간 각들과 쌓여 그 값을 그대로 Pitch, Yaw로 그대로 보여주는 프로그램이다. 즉, 적분오차가 생기는 값을 0으로 reset함으로써 드리프트를 보정하는 방식이다. Pitch각과 Yaw각은 그래프 차트와 게이지와 연결시킴으로서 그 변화를 시각화하였다.

 

02-3 구동영상

youtu.be/HQtPyMNchiY

자이로센서 구동 영상

03. 고찰

 영상에서 보면 알 수 있듯이 Pitch와 Yaw각은 정상적으로 출력이 되었다. 랩뷰상에서 구현하고자 했던 내용이 제대로 구성된 것이다. 한가지 흠은 드리프트 보정 내용에 결함이 있다는 것이다. 이론상으로는 구현한 드리프트 보정은 문제점이 없다. 하지만 실제 랩뷰를 돌려보았을 때, Yaw에만 문제점이 나타났다. Yaw각을 돌리다가 잠시 멈추면 그 각도 그대로 고정되어야 하는데, 게이지가 자꾸 0으로 돌아갔다. Pitch도 동일하게 구성하였는데 Yaw만 게이지가 돌아가는 것이 이해가 되지 않았다. 혹시 센서에 문제가 있나 싶어서 Vref도 확인해보았지만 센서 자체에 문제가 있어보이지는 않았다. 드리프트까지 제대로 구현한 듯 싶었는데 결과에서는 그 값이 나오지 않아 아쉬웠다.

 

참고문헌

AM-GYRO_V02_Manual

LM317 Datasheet

위키백과

(datasheet: https://www.alldatasheet.com/ )

'박다흰 > 전실1' 카테고리의 다른 글

[11주차] 초음파 센서 (21.05.12_project 3)  (0) 2021.06.29

+ Recent posts