본문 바로가기

AVR 8BIT/3축가속도센서를 이용한 그래프

3축 가속도 센서를 이용한 그래프!!

 
안녕하세요 숭덕이 박제현 입니다. 또 오랜만에 이렇게 글을 쓰게 되네요!!
요즘 제품하나씩 사서 테스트하기가 힘드네요!!! 물가가 워낙에 비싸다 보니 일단 오늘은 3축 가속도센서를 이용하여
X,Y,Z 값의 데이터만 받아야겠습니다. 이 센서는 이동하는 물체의 가속도나 충격의 세기를 측정하는 센서입니다.
응용분야는 가속도 센서 측정이 필요한 모든 분야에서 사용이 가능하며, 로봇의 움직임, 기울어짐 측정가능, 예를 들어 네비게이션의 센서로 많이 활용됩니다. 요즘은 의학쪽으로  GPS를 통해 순간의 기울어짐을 보고 공공기간에 알라는 시스템이 몇가지 나온것으로 알고 있습니다. 또한 3축 가속도 센서를 가지고 계측기를 만들기에는 오차가 있기떄문에 무리가 있는 듯 합니다.
                 MMA7260Q  




2011년 8월 16일 새벽 1시 37분에 글을 올립니다.


출력방식  아날로그 
제품군  가속도계 
 X, Y, Z 
가속범위  1.5g, 2g, 4g, 6g 
감도  800mV/g, 600mV/g, 300mV/g, 200mV/g 
전압공급  2.2V ~ 3.6V 


g-Select1 g-Select2 가속범위   감도
 HIGH  HIGH 0~6g   200mV/g
HIGH  LOW 0~4g   300mV/g
 LOW  HIGH 0~2g  600mV/g
 LOW LOW  0~1.5g  800mV/g



계산 방식
1024단계로 10비트 샘플링 AVR128기준으로 설명드리겠습니다.
 Resolution = (Vout / 3.3) * 1024




        AVR128에 ADC 포트가 F포트이기때문에 ADC 0, 1, 2번 포트를 사용했습니다.


     
데이터값이 어떻게 나오는지 변화를 확인하기 위해 CP2102칩을 이용하여 USART로
통신해서 받아보겠습니다.


     
 /SLP는 저항이 PULL-UP이 되어 있어 다른신호를 인가하지 않을 경우 Normal Operation Mode로동작하고 g-Select1,2는 LOW,LOW로 줌으로써 1.5g 와 800mV/g를 사용했습니다.
기본적으로는 풀다운이 되어 있습니다.












X,Y,Z 축마다의 그래프입니다.



       




#include <mega128.h>
#include <delay.h>
#include <stdio.h>
 
char  str[50];
int ADC_I;
float ADC_X,ADC_Y,ADC_Z; 
int i=0;
//
void TX0_CHAR(char Sdata){ while ((UCSR0A&0x20)==0); UDR0=Sdata; }
 
void main(void){
    char i;       
    DDRA=0x03;
    UCSR0B=0x08; UCSR0C=6; UBRR0H=0; UBRR0L=103;  
    #asm("sei")
    
    while(1){    
       
        delay_us(104); 
       
        ADMUX=0; ADCSRA=0xE7; ADC_I=ADCW;
        ADC_X=(float)ADC_I * 3.3 / 1023.0;
        i=0; while(str[i])TX0_CHAR(str[i++]); // TXD1
//
        delay_us(104);
        ADMUX=1; ADCSRA=0xE7; ADC_I=ADCW;
        ADC_Y=(float)ADC_I * 3.3 / 1023.0;
        i=0; while(str[i])TX0_CHAR(str[i++]); // TXD1  
        
        delay_us(104);    
        
        ADMUX=2; ADCSRA=0xE7; ADC_I=ADCW;
        ADC_Z=(float)ADC_I * 3.3 / 1023.0;
        i=0; while(str[i])TX0_CHAR(str[i++]); // TXD1  
        
   sprintf(str,"%3.1f,%3.1f,%3.1f \n", ADC_X,ADC_Y,ADC_Z);
    }
}