본문 바로가기
BreakingExample

[BE01] myGyro300SPI에서 각속도와 온도 읽어 UART로 전송하기

by irmus 2009. 12. 23.
BreakingExample은
본 블로그에서 설명한 여러가지 내용들에 대한 예를 코드와 회로도를 통해 확인하는 코너

지금까지 다섯개의 포스팅을 통해 살펴본 myGyro300SPI에 대한 기본 내용을 예제 코드를 통해 살펴보자.
  1. 2009/08/24 - VDD5V와 Vdrive는 어떻게 다른가?
  2. 2009/08/25 - SPI 통신 - 간략버전
  3. 2009/08/25 - SPI 통신 - myCortex 프로세서 보드
  4. 2009/08/26 - myGyro300SPI의 명령
  5. 2009/12/20 - myGyro300SPI에서 결과값 읽기




실험 준비물
MCU 보드는 myCortex 시리즈 중 아무것이라도 상관없다. 소스코드는 100% 호환된다. 소스코드를 컴파일하고 MCU 보드에 펌웨어를 퓨징하는 것과 같은 기본적인 기능은 사용자가이드 문서를 통해 익혀두자. BreakingExample에서 커버하지 않는 내용이다.
전원은 myUSB2UART를 통해 5V를 공급받으므로 별도의 전원 공급 장치는 필요치 않다.






회로도
myCortex-LM8962용 : myCortex-LM308/608/808용 :
 위 두개의 회로도 중 자신이 사용하는 MCU 보드에 맞는 것을 골라 다운로드하고 회로도에 맞게 보드를 구성한다. myCortex-LMx08 같은 경우에는 빵판에 꾸며볼 수 있을 정도다. myUSB2UART에서 5V 전원을 공급받으므로 myCortex 보드의 전원 선택 점퍼는 EXT5V 쪽으로 설정해야 한다.






소스코드







동작 설명
위 회로도와 펌웨어로 실험 환경을 구성하고 동작시키면 MCU에서 100Hz로 gyro 각속도와 온도 값을 읽어 UART로 전송한다. 아래는 ComPortMaster로 살펴본 데이타.

myUSB2UART를 통해 UART로 전송된 데이타를 PC의 ComPortMaster에서 읽을 수 있다.


ComPortMaster의 Capture 기능을 이용해 전송받은 데이타를 파일로 저장하고, 이를 microsoft excel에서 읽어 그래프를 그려볼 수 있다. 아래는 간단하게 움직이면서 저장한 데이타를 엑셀에서 그래프로 그린 것이다.

위쪽 그래프가 각속도 출력이고, 아래쪽이 온도 출력이다.

X 축은 샘플 갯수를 의미한다. 100Hz로 샘플링 하고 있으니 대략 4.3초 동안 실험한 데이타이다. 자세히 보면 몇가지를 알 수 있다.
  1. 온도 변화는 거의 없다(짧은 시간이니 당연하겠지만)
  2. 각속도 출력은 약 -90 정도의 offset을 가지고 있다.
  3. 각속도 출력이 상당히 느리게 움직인다.
마지막 항목을 좀 더 설명하자면 myGyro300SPI에 내장된 low-pass filter때문에 나타나는 현상이다. myGyro300SPI에는 기본적으로 0.87Hz의 cut-off frequency를 가지는 low-pass filter가 내장되어 있다. 이 필터의 cut-off frequency를 변경하는 방법은 myGyro300SPI 사용자가이드 문서를 참고하자.
LPF의 영향에 관한 간단한 예를 보기 위해 myGyro300SPI에 내장된 BP1을 제거해보았다. 이렇게하면 cut-off frequency는 대략 40Hz 정도가 된다. 100Hz로 sampling하고 있으니 anti-aliasing 용도로도 딱이다. 여튼 BP1을 인두로 제거하고 똑같은 실험을 하면 아래 그림과 같은 결과를 얻을 수 있다.

cut-off frequency = 40Hz

각속도 값이 좀 더 민첩하게 움직이는 것을 확인할 수 있다. 물론 동시에 전에 없던 노이즈도 보인다. 또한가지 특이한 것은 이전 실험 결과에서는 최대값이 250도 안됐었지만 이번 실험에서는 1200을 넘어서는 것을 볼 수 있다. 이건 이전 실험의 시스템 다이나믹스가 0.87Hz의 low-pass filter보다 훨씬 더 빨랐기 때문에 센서가 정상적인 출력값을 읽지 못했다는 것을 의미한다. 결국 두번째 실험이 좀 더 현실에 가까운 결과를 보여주고 있다.

두 실험에서 얻은 각속도 데이타를 한장의 그래프로 그려보면 그 차이를 보다 명확하게 볼 수 있다.

0.87Hz와 40Hz LPF의 차이


사실 두번째 실험 데이타 역시 약간의 문제가 있는 데이타이다. 실험할때 너무 빨리 움직여서 측정값이 센서의 측정범위인 300도/sec를 넘어서 나왔다. +-300도/sec는 ADC 값으로 읽었을 때 -1230~1230 범위로 나오게 된다. 센서의 데이타쉬트에서 명시하고 있는 센싱 범위를 넘어선 값이 나오면 이 값은 신뢰해서는 안된다.

myGyro300SPI에 내장된 low-pass filter를 대수롭지 않게 생각하는 경향이 있는데, 당장 위 그래프만 비교해 봐도 아주 위험한 생각임을 알 수 있다. 자신이 디자인하고 있는 시스템의 다이나믹스와 sampling frequency까지 충분히 고려해서 low-pass filter의 cut-off frequency를 결정하고, 적절한 R, C 소자를 이용해 필터를 구현해야 한다. myGyro300SPI의 BP1과 R1 값을 조정해 low-pass filter를 구성하는 방법은 myGyro300SPI 사용자가이드 문서를 참조하자.