资源简介
利用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+hmc5883L.rar
- 智联网结构化信息拼图处理方法及其
- 云南建行数据处理中心案例
- 陀螺仪MPU6050驱动
- 基于FISH语言的开采沉陷模拟数据处理
- GPS技术在大采深采区建筑物变形监测
- 深入理解大数据 大数据处理与编程实
- 华为杯数学建模C题数据处理
- STM32F1单片机MPU6050加速度计陀螺仪驱动
- 井中微震监测数据处理方法研究与应
- 两轮平衡车源程序,方能仪器,自平
- 基于stm32的六轴传感器驱动工程文件
- MPU6050数据发送到匿名上位机2.4版本的
- 《误差理论与数据处理(第6版)》费
- Spark大数据处理:技术、应用与性能优
- 电子水准仪格式转换与数据处理程序
- STM32 MPU6050 载人平衡车资料
- mpu6050\\mpu9150\\ms5611电路图可直接使用
- MPU6050DMP自检和零偏校准
- mpu6050中文手册
- fMRI数据处理的数学原理
- STM32F103_FREERTOS_MPU6050DMP_USART_Timer输入捕
- Lidar数据处理教程
- Spark大数据处理:技术、应用与性能优
- 基于stm32的四旋翼飞控程序
- STM32 MPU6050 dmp读取四元数程序
- 点云测量数据处理
- stm32 mpu6050 DMP 成功
- NI_DAQ数据处理驱动包labview,点击安装
- 基于STM32F103C8T6及NRF24L01的摔倒检测+
评论
共有 条评论