BreakingExample은
본 블로그에서 설명한 여러가지 내용들에 대한 예를 코드와 회로도를 통해 확인하는 코너
지금까지 다섯개의 포스팅을 통해 살펴본 myGyro300SPI에 대한 기본 내용을 예제 코드를 통해 살펴보자.
- 2009/08/24 - VDD5V와 Vdrive는 어떻게 다른가?
- 2009/08/25 - SPI 통신 - 간략버전
- 2009/08/25 - SPI 통신 - myCortex 프로세서 보드
- 2009/08/26 - myGyro300SPI의 명령
- 2009/12/20 - myGyro300SPI에서 결과값 읽기
실험 준비물
- myGyro300SPI 1개
- myCortex-LM8962 혹은 myCortex-LM308/608/808 아무거나 1개
- myUSB2UART 1개
전원은 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에서 읽어 그래프를 그려볼 수 있다. 아래는 간단하게 움직이면서 저장한 데이타를 엑셀에서 그래프로 그린 것이다.
위쪽 그래프가 각속도 출력이고, 아래쪽이 온도 출력이다.
- 온도 변화는 거의 없다(짧은 시간이니 당연하겠지만)
- 각속도 출력은 약 -90 정도의 offset을 가지고 있다.
- 각속도 출력이 상당히 느리게 움직인다.
LPF의 영향에 관한 간단한 예를 보기 위해 myGyro300SPI에 내장된 BP1을 제거해보았다. 이렇게하면 cut-off frequency는 대략 40Hz 정도가 된다. 100Hz로 sampling하고 있으니 anti-aliasing 용도로도 딱이다. 여튼 BP1을 인두로 제거하고 똑같은 실험을 하면 아래 그림과 같은 결과를 얻을 수 있다.
cut-off frequency = 40Hz
두 실험에서 얻은 각속도 데이타를 한장의 그래프로 그려보면 그 차이를 보다 명확하게 볼 수 있다.
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 사용자가이드 문서를 참조하자.