2022년 8월 13일 토요일

T 기술기고문

img

기울기 센서를 활용한 시각장애인용 수평계 설계

글: 사이먼 브램블(Simon Bramble) 스태프 FAE / 아나로그디바이스(Analog Devices, Inc.)

요약
이 글에서는 시각장애인용 수평계 설계 방법에 대해 설명한다. 이 설계는 ADXL312 가속도계를 사용하여 수평면과 수직면에서의 중력을 측정하고, 가속도계가 정확히 수평 또는 수직일 때 버저를 울린다.
 
이 설계는 수평을 맞추기 위한 기울기 센서로 사용할 수도 있다. 예컨대 자동차 트레일러의 경우, 자키 휠에서 좀 떨어진 곳에 이 수평계를 탑재할 수 있으며, 자동차 안정성 시스템이나 드론에도 사용할 수 있다.

머리말
아마르 라티프(Amar Latif)는 ‘셀러브리티 마스터쉐프(Celebrity MasterChef)’라는 프로그램에 출연한 이후, 영국 요리 업계에 돌풍을 일으켰다. 그는 훌륭한 요리사이며, 여행사를 운영하는 대표이자 동기부여 강연자이고, 남미의 거의 모든 지역을 여행한 여행가이고, TV 유명인사이기도 하다. 이 사람의 능력은 끝이 없어 보인다.
 
안타깝게도 그는 95% 시각장애를 가졌다. 기술이 진화하면서 사람들은 최신 기술을 따라가기 위해 애쓰고 있는데, 시각장애인들에게는 이러한 신기술 따라잡기가 훨씬 더 힘든 싸움이 된다. 대부분의 진보한 기술들은 사람들이 더 많은 시간을 화면 앞에서 보내도록 만들지만, 시각장애인들에게 과도한 화면 노출이란 “할 수만 있다면”이라는 아쉬움일 뿐이다.
 
기술이 시각장애인들의 삶의 질을 높이는 데 사용될 수 있다면 그보다 더 가치 있는 일은 없을 것이다. 등록된 시각장애인의 18%만이 전맹이고, 나머지 대다수 시각장애인들은 세세하게 구분하는 것까지는 못하더라도 약간의 시력은 가지고 있다. 시각장애인용 수평계라는 아이디어는 여기에서 착안한 것이다.

설계 개요
이 기울기 센서 설계는 ADXL312를 기반으로 한다. ADXL312는 저전류 가속도계로서, x, y, z 축에서 최대 ±1.5g를 측정할 수 있으며 SPI 버스를 통해서 데이터를 판독한다. 이 제품은 5mm x 5mm 패키지로 제공되며, 대기 모드일 때 0.1mA를 소모한다. 10비트 분해능으로 측정하므로, 각 축에서 ±2.9mg까지 변화량을 감지할 수 있다. 각 축에 중력 데이터를 ±511까지 2의 보수값(complement value)으로 저장한다. 이것을 마이크로컨트롤러가 읽어서 1줄짜리 16글자 LCD 화면에 표시한다. 그림 1은 ADXL312의 감지 축을 보여준다.
 

그림 1: ADXL312 감지 
 
이 부품의 최대 측정값은 1.5g이므로, 1g의 중력이면 최대치의 2/3이다. 따라서 ADXL312가 정확하게 수평이면, z축 레지스터는 최대치의 2/3이고 x축과 y축은 0이다. 마찬가지로 ADXL312가 정확하게 수직이면, x축 판독값은 최대치의 2/3이고 y축과 z축은 0이다. ADXL312가 어느 축으로든 기울어지기 시작하면 기울기 각도의 사인(sine)에 따라서 그 축의 최대 판독값은 감소하기 시작하고 다른 축 상의 판독값은 증가하기 시작한다.

ADXL312 내부 구조
ADXL312는 실리콘 웨이퍼 상에 폴리실리콘 표면 미세가공 구조로 이루어진 MEMS이다. 폴리실리콘 스프링이 웨이퍼 표면 상에 이 구조를 떠받치고 가속력에 대한 저항을 제공한다.
 
고정된 실리콘 핑거가 움직이는 질량체(proof mass) 상의 핑거와 엇갈려서 차동 커패시터를 형성하는데, 이 커패시터의 특성은 측정이 가능하다. 가속도가 빔을 편향시키고 차동 커패시터의 평형을 깨트림으로써 센서 출력을 발생한다. 이 출력의 크기는 가속도에 비례한다. 그림 2는 이 구조를 보여준다.
 

그림 2: ADXL312 내부 작동 구조
 
ADXL312는 I2C나 SPI를 지원하며, x, y, z 데이터를 6개의 내부 8비트 레지스터에 저장한다. 이 밖에 32레벨 FIFO, 2개의 다기능 인터럽트, 오프셋 레지스터, 기계적 셀프 테스트, 그리고 자동 슬립 모드 등을 지원한다.

수평계 설계
그림 3은 이 기울기 센서의 전체 회로도를 나타낸 것이다.
 
ADXL312는 최대 공급 전압이 3.6V인 데 반해, LCD 디스플레이와 버저는 5V를 필요로 한다. 따라서 이 회로에 대한 메인 입력은 5V이고, 이것을 3.3V 150mA 선형 레귤레이터(ADP121)를 사용하여 변환해서 ADXL312, 마이크로컨트롤러, E2 메모리 구동을 위한 전원을 공급한다.
 
마이크로컨트롤러의 포트 B, 핀 2(CAL 핀)를 10kΩ 저항을 사용해서 하이(high)로 풀링한다. 점퍼를 사용해서 접지로 연결할 수도 있다. 기동을 하면 마이크로컨트롤러가 CAL 핀의 상태를 확인하는데, 만약 이 핀이 점퍼에 의해서 로우(low)로 풀링 되었으면 x, y, z 레지스터를 읽고 0에서 이 판독값을 차감하고, 이 결과값을 ADXL312의 오프셋 레지스터로 로드함과 동시에 외부 E2 메모리 25AA040에 저장한다. ADXL312는 오프셋 레지스터로부터 읽은 판독값을 이후의 측정에 자동으로(프로세서의 도움 없이) 더하며, 이를 통해 보정된 오프셋을 제거한다.
 
점퍼가 제거되면 CAL 핀을 하이로 풀링하고 캘리브레이션 루틴을 우회한다. E2 메모리로부터 곧바로 오프셋 판독값을 읽고 ADXL312의 오프셋 레지스터로 로드한다. 따라서 제조 시에 CAL 핀을 로우로 유지한 채 캘리브레이션 지그에 수평계를 탑재하고, 이 디바이스를 캘리브레이션하고, 오프셋 값을 E2 메모리로 저장한다. 캘리브레이션을 마쳤으면 점퍼를 제거하고 다시 파워업하고 E2 메모리의 정보를 확인하고 캘리브레이션 된 오프셋 판독값을 ADXL312의 오프셋 레지스터로 로드한다.
 
그런 다음, 소프트웨어가 각 축에 대한 8회의 판독을 수행하여 결과값을 애버리징 한 다음, 16글자 LCD 디스플레이에 표시한다. 이 디스플레이는 매 100ms마다 업데이트된다.
 

그림 3: 시각장애인용 수평계 회로도
 
그림 4는 각 센서의 판독값이 0에 가까울 때 최대의 감도를 달성한다는 것을 보여준다. 이 때가 사인파의 기울기가 가장 가파를 때이므로, 기울기의 변화에 대한 중력 판독값의 최대 변화량을 나타낸다.
 

그림 4: 중력과 각도의 사인파 변화
 
다행히도, 이 수평계는 각 센서가 정확히 수평이고 센서 판독값이 0에 가까울 때의 기울기만 측정하면 된다.
 
소프트웨어는 x축과 z축을 한 번에 캘리브레이션 하도록 프로그램 됐다. 이 디바이스를 수평 플랫폼 위에 올려놓고 기울기 센서의 x축을 손쉽게 캘리브레이션 할 수 있다. 하지만 이때 z축으로는 1g의 힘이 가해진다. 따라서 1g일 때 최대치 수와 비교해서 z 판독값과 오프셋 레지스터로 어떠한 오차가 로드되었는지를 고려해야 한다. 수평면과 수직면 둘 다 캘리브레이션 함으로써 기울기 센서 각각의 축에 대한 캘리브레이션 정확도를 더욱 높일 수 있으나, 이렇게 하려면 2단계 캘리브레이션이 필요하고 소프트웨어를 변경해야 한다.
 
표 1은 2의 보수 데이터를 보여준다. 양수는 통상적인 이진법을 따르며, 음수는 최상위 비트(MSB)를 부호 비트로 사용한다. 따라서 양수는 MSB가 0이고, 음수는 MSB가 1이다.
 
[ 1] 2 보수 데이터
십진법 이진법
+511 01 1111 1111
+1 00 0000 0001
0 00 0000 0000
-1 11 1111 1111
-511 10 0000 0001
 
양수의 2의 보수는 모든 비트를 반전시키고 1을 더해서 구할 수 있다. 그러므로 카운트가 0에서 -1로 바뀌면 코드가 00 0000 0000에서 11 1111 1111로 바뀐다.
 
소프트웨어가 x와 z 레지스터를 읽고, 어느 레지스터든 값이 0 또는 1023(11 1111 1111)이면 포트 B, 비트 5를 하이로 설정한다. 그러면 트랜지스터 Q1을 턴온 하고 5V 버저가 울린다. 기울기 센서가 정확하게 수평이면 x축이 0 또는 1023이고, 정확하게 수직이면 z축이 0 또는 1023이다. 두 레지스터가 0 또는 1023이 아니어야 버저가 울리지 않는다.

정확도와 추가 개발
한 축만 가지고 살펴보면, 최대 1g의 판독값을 얻게 될 때는 이 축을 따라 중력이 작용할 때이고, 이 디바이스가 90° 기울어지면 이 판독값은 0g로 감소한다(그림 5).
 

그림 5: 중력 판독값을 사용한 기울기 각도 계산
 
그러므로 다음과 같은 공식에 따라서 중력이 가해진다: 


이 공식에서 Ø는 수평을 기준으로 측정된 기울기 각도이다. 2.9mg의 분해능이면 0.17°의 각도에 해당된다. 표준 버블 수평계의 정확도를 수치로 판단하기는 어렵다. 버블의 정확한 위치를 잡기 어렵기 때문이다. 하지만 1.2미터 수평계가 약 3.2mm(부품이 탑재되지 않은 두 PCB의 폭) 움직였을 때 버블이 중심을 벗어나는 것을 시험을 통해서 확인했다. 이는 약 0.15°의 각도에 해당된다. 따라서 분해능을 거의 저하시키지 않으면서 버블 수평계를 전자식 기울기 센서로 대체할 수 있다는 것을 알 수 있다.
 
좀더 높은 정확도를 필요로 할 때는 ADXL313이 1g 스케일로 11비트 분해능을 제공한다. 인터페이스와 레지스터 세트가 ADXL312와 거의 비슷하므로 소프트웨어를 많이 변경할 필요가 없다. ADXL355는 훨씬 더 낮은 잡음과 높은 분해능을 제공한다.
 
ADXL312는 잡음 밀도가 340mg/√Hz이고, 대역폭이 낮을수록 잡음은 더 우수하다. 이 디바이스의 대역폭은 3.125Hz ~ 1600Hz 사이에서 프로그램 가능하고, 디폴트 설정은 50Hz이다. 대역폭을 낮추면 잡음을 향상시킬 수는 있으나, 디스플레이의 업데이트 레이트가 떨어진다. 이 설계는 대역폭을 6.25Hz로 설정했다. 따라서 rms 잡음은 850mg이다. 판독을 훨씬 더 많이 실시해서 이것을 애버리징 하는 방법으로도 잡음을 낮출 수 있다.
 
더 나아가면, LCD 리드아웃으로 각도를 표시하도록 개발할 수도 있다. 하지만 이렇게 하려면 C 라이브러리로 수학 함수를 사용해야 하고 소프트웨어에 사인과 코사인을 포함시켜야 한다. 이 함수들은 저성능 마이크로컨트롤러에서 과도하게 많은 코드 공간을 차지한다. 테일러 급수 전개를 사용해서 사인 함수를 근사화 하는 방법을 사용하면 차지하는 코드 공간을 훨씬 줄일 수 있다.

맺음말
ADXL312는 저성능 마이크로컨트롤러로 손쉽게 인터페이스 할 수 있는 경제적인 전자식 기울기 측정 시스템을 제공한다. 이 글에서 설명한 설계는 전자식 인터페이스로 통상적 버블 수평계에 맞먹는 정확도를 달성하는 것으로 확인되었다. 따라서 트레일러 수평 시스템, 안정성 제어 시스템, 드론 같이 기울기를 측정해야 하는 시스템 설계에 사용할 수 있다.
 
뿐만 아니라 좀더 가치 있는 활용 사례로서, 시각장애인들의 독립성을 높이는 용도로도 사용될 수 있다. 이 글에서는 하드웨어, 소프트웨어, 비휘발성 메모리, 오디오와 시각적 출력을 비롯한 전체적인 시스템 설계를 소개했다.

저자 소개
사이먼 브램블(Simon Bramble)은 1991년에 런던에 있는 브루넬 대학에서 전기전자공학을 전공했으며, 아날로그와 전원 분야가 전문이다. 경력의 대부분을 아날로그 분야에서 종사했으며 리니어 테크놀로지(Linear Technology, 현재 아나로그디바이스)에서 재직했다. 문의: simon.bramble@analog.com