资源简介
利用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个文件信息
- 上一篇:opengl头文件glext.h
- 下一篇:微机原理 8259中断控制实验 实验报告
相关资源
- MPU6050(STM32 DMP).rar
- 移远MC20模块调试MPU6050
- TSoft超导重力仪数据处理
- f407_mpu6050.rar
- 点云数据处理算法
- stm32cubemx软件iic读取mpu6050dmp通过串口
- 基于51单片机的MPU6050程序
- 利用CE318太阳光度计数据处理反演AO
- STC8+MPU6050+BMP280飞控原理图
- stm32读取陀螺仪MPU6050发送数据到串口
- 正点原子MPU6050作计步器
- getdata graph digitizer v2.22
- stm32 完整IIC通讯代码,三轴加速度计
- 自平衡小车arduino+mpu6050+卡尔曼滤波
- 从零开始的 IMU 状态模型推导
- Qt_USB_I2C_MPU6050.rar
- mpu6050卡尔曼滤波器程序
- 误差理论与数据处理
- 自动计算mpu6050的偏移量MPU6050_calibra
- MPU6050 DMP官方手册中文翻译版
- ADIS16405芯片手册加程序 包含底层驱动
- 51单片机 MPU6050读取并通过串口输出
- 声速测量习题及数据处理
- 2018美赛C题前两问的 模型+数据处理
- DTI数据处理详细步骤TBSS
- 基于51单片机的计步手环
- DataTrans (SSR数据处理宏程序).zip
- mpu6050驱动基于mega16
- avr128 mpu6050测试并串口发送
- 数字三轴加速度计ADXL34551单片机例程
评论
共有 条评论