资源简介

利用AVR单片机读取mpu6050的加速度计的加速度值和陀螺仪的角度值。用加速度值求出X和Y轴上的倾斜角;用陀螺仪的角度值积分出旋转角度。然后融合两者的数据,最后滤波以获得更好的效果。

资源截图

代码片段和文件信息

#include 	
#include 
#include    
#include 
#include “mpu6050.h“
#include “uart0.h“

#define coff 11
#define Gyr_Gain 0.0076   
#define K 0.715
#define dt 0.005

int shud[1800];
unsigned int counter=0;
unsigned char flag = 0;

int ax_offset=0ay_offset=0az_offset=0;
int gx_offset=0gy_offset=0gz_offset=0;
float x_theta=0.0y_theta=0.0z_theta=0.0;
float old_value_x=0.0old_value_y=0.0old_value_z=0.0;


void timer0_init(void)
{
 MCUCR = 0x00;
 
 TCCR0 = 0x00; //stop
 ASSR  = 0x00; //set async mode
 TCNT0 = 0xc7; //set count  D9
 OCR0  = 0x27;
 TCCR0 = 0x07; //start timer
 
 TIMSK |= BIT(0); //timer interrupt sources
}

//**************************************
//在1602上显示10位数据
//**************************************
void Display10BitData(int value)
{  
    unsigned char i;
unsigned char dis[6]; //显示数字(-511至512)的字符数组
int_to_ascii(dis value);
for(i=0;i<6;i++)
{
      uart0_send(dis[i]);
    }
uart0_send(‘ ‘);
}

void mpu_check(void)
{
  unsigned char i=0;
  double ax_offset1=0ay_offset1=0az_offset1=0;
  double gx_offset1=0gy_offset1=0gz_offset1=0;

  for(i=0;i<250;i++)
  {
    /*ax_offset1 += ACCEL_XOUT;
    ay_offset1 += ACCEL_YOUT;
    az_offset1 += ACCEL_ZOUT;*/

gx_offset1 += GYRO_XOUT;
gy_offset1 += GYRO_XOUT;
gz_offset1 += GYRO_XOUT;
  }
  //ax_offset1 /= 250;ay_offset1 /= 250;az_offset1 /= 250;
  gx_offset1 /= 250;gy_offset1 /= 250;gz_offset1 /= 250;
  
  ax_offset = (int)ax_offset1;gx_offset = (int)gx_offset1;
  ay_offset = (int)ay_offset1;gy_offset = (int)gy_offset1;
  az_offset = (int)az_offset1;gz_offset = (int)gz_offset1;
  old_value_x = GYRO_XOUT - gx_offset;
  old_value_y = GYRO_YOUT - gy_offset;
  old_value_z = GYRO_ZOUT - gz_offset; 
}
//*********************************************************
//主程序
//*********************************************************

int main()

    signed char value=0;
unsigned int j=0;
unsigned char i=0;
signed int sum = 0;
    DDRA = 0XFF;
PORTA = 0X00;
    uart0_init(); 
    timer0_init();
delay_ms(200);
    while(0 == InitMPU6050())
    {
        uart0_send(‘E‘);
    }
    delay_ms(150);
mpu_check();
PORTA = 0XFF;
    SREG |= BIT(7);
    while(1)
    { 
  if(flag == 0xff)
  {
    SREG &= ~BIT(7);
    PORTA = 0X00; 
    for(counter=0;counter<1800;counter=counter+2)
{
           Display10BitData(shud[counter]);
   Display10BitData(shud[counter+1]);
   uart0_send(0x0d); 
           uart0_send(0x0a);//换行,回车 
}
flag = 0x00;while(1);
  }
  
    }
}


#pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
void timer0_ovf_isr(void)

  unsigned char i=0;
  int sum_x=0sum_y=0;
  static unsigned char count=0;
  float X_a=0.0Y_a=0.0Z_a=0.0;
  float pre_value_x=0.0pre_value_y=0.0pre_value_z=0.0;
  float acc_angle_x=0.0acc_angle_y=0.0acc_angle_z=0.0;
  float gyr_x=0.0gyr_y=0.0gyr_z=0.0;
  float buf_x[

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-08-23 01:09  mpu6050\
     目录           0  2013-08-23 01:09  mpu6050\code\
     目录           0  2013-08-23 01:09  mpu6050\code\IIC\
     文件        2886  2013-08-21 15:52  mpu6050\code\IIC\sccb.c
     文件         921  2013-08-21 16:02  mpu6050\code\IIC\sccb.h
     文件        5273  2013-08-22 22:46  mpu6050\code\main.c
     文件           1  2013-08-16 13:50  mpu6050\code\mat.c
     目录           0  2013-08-23 01:09  mpu6050\code\mpu6065_sensor\
     文件        2720  2013-08-21 18:04  mpu6050\code\mpu6065_sensor\mpu6050.c
     文件        2369  2013-08-20 21:46  mpu6050\code\mpu6065_sensor\mpu6050.h
     目录           0  2013-08-23 01:09  mpu6050\code\uart0\
     文件        1415  2013-08-16 12:47  mpu6050\code\uart0\uart0.c
     文件         179  2013-07-22 12:40  mpu6050\code\uart0\uart0.h
     目录           0  2013-08-23 01:09  mpu6050\project\
     目录           0  2013-08-23 01:09  mpu6050\project\BACKUP\
     文件        5275  2013-08-22 22:40  mpu6050\project\BACKUP\main._c
     文件           1  2013-08-15 16:09  mpu6050\project\BACKUP\main.c.130815160902
     文件           0  2013-08-15 16:10  mpu6050\project\BACKUP\main.c.130815161054
     文件        6548  2013-08-15 16:11  mpu6050\project\BACKUP\main.c.130815161102
     文件        1282  2013-08-15 16:32  mpu6050\project\BACKUP\main.c.130815163224
     文件        1245  2013-08-15 16:35  mpu6050\project\BACKUP\main.c.130815163520
     文件        1219  2013-08-15 16:35  mpu6050\project\BACKUP\main.c.130815163546
     文件        1267  2013-08-15 16:36  mpu6050\project\BACKUP\main.c.130815163622
     文件        1287  2013-08-15 16:36  mpu6050\project\BACKUP\main.c.130815163648
     文件        1267  2013-08-15 16:37  mpu6050\project\BACKUP\main.c.130815163702
     文件        1268  2013-08-15 16:37  mpu6050\project\BACKUP\main.c.130815163718
     文件        1281  2013-08-15 16:52  mpu6050\project\BACKUP\main.c.130815165236
     文件        1300  2013-08-15 16:58  mpu6050\project\BACKUP\main.c.130815165822
     文件        1321  2013-08-15 17:18  mpu6050\project\BACKUP\main.c.130815171822
     文件        1294  2013-08-15 18:03  mpu6050\project\BACKUP\main.c.130815180322
     文件        1342  2013-08-15 19:34  mpu6050\project\BACKUP\main.c.130815193428
............此处省略515个文件信息

评论

共有 条评论