2021-10-26 08:36:15 索炜达电子 1155
项目编号:E1763
文件大小:18M
源码说明:带中文注释
开发环境:C编译器
简要概述:
arduino驱动MPU6050陀螺仪,含源码和上位机测试程序
各嵌入式平台的源码都有:
指令校准法
磁场校准方法:
1、将模块安装到设备中固定,并放置水平
2、分别将三轴磁场偏移值设置为0.发送指令如下:
a) 0xff 0xaa 0x0b 0x00 0x00
b) 0xff 0xaa 0x0c 0x00 0x00
c) 0xff 0xaa 0x0d 0x00 0x00
注意每条指令需间隔100ms
3、 开始统计三轴磁场强度的最大值和最小值,分别计为
HxMax,HxMin,HyMax,HyMin,HzMax,Hzmin。
校准的方式有两种,一种是平面校准,一种是三维校准。平面校准适用于模块在平面内工作,俯仰和滚转为小角度变化的情况,这种可以用平面校准法。如果俯仰角和滚转角变化较大,则需要用三维校准法。
平面校准法:
将模块放平,绕Z轴缓慢旋转360°,同时统计三轴磁场的最大值与最小值,直至最大值与最小值不在发生变化。
三维校准法:
先绕X缓慢旋转360°,再绕Y轴缓慢旋转360°,再绕Z轴缓慢旋转360°,最后再随意旋转几圈,同时统计三轴磁场的最大值与最小值,直至最大值与最小值不在发生变化。
4、 计算磁场偏移值,偏移值为最大值与最小值相加的一半。
HxOffset = (HxMax+HxMin)/2;
HyOffset = (HyMax+HyMin)/2;
HzOffset = (HzMax+HzMin)/2;
5、 将偏移值写入模块的寄存器,分别发送指令如下:
a) 0xff 0xaa 0x0b HxOffsetL HxOffsetH
b) 0xff 0xaa 0x0c HyOffsetL HyOffsetH
c) 0xff 0xaa 0x0d HzOffsetL HzOffsetH
注意每条指令需间隔100ms。其中HxOffsetL为第4步中算出的x轴误差的低字节,HxOffsetH为第4步中算出的x轴误差的高字节,HyOffsetL, HyOffsetH, HzOffsetL, HzOffsetH同理。
6、 保存当前配置。发送指令0xff 0xaa 0x00 0x00 0x00;
加速度校准方法:
2、 分别将加速度三轴的偏移值设置为0。发送指令如下:
a) 0xff 0xaa 0x05 0x00 0x00
b) 0xff 0xaa 0x06 0x00 0x00
c) 0xff 0xaa 0x07 0x00 0x00
注意每条指令需间隔100ms
3、 将模块放置水平。
4、 读取当前加速度的数值,为了计算准确,可多次读取后取平均。记下当前的三轴加速度值,分别为ax0,ay0,az0.
5、 计算加速度的常值偏差。模块水平放置的时候,模块的三轴加速度输出应该为【0g,0g,1g】,转换为传感器的输出值就是【0,0,2048】。那么三轴加速度的误差值为:e =【ax0,ay0,az0-2048】。
6、 将三轴的加速度偏移值写入寄存器,分别发送指令如下:
a) 0xff 0xaa 0x05 exL exH
b) 0xff 0xaa 0x06 eyL eyH
c) 0xff 0xaa 0x07 ezL ezH
注意每条指令需间隔100ms。其中exL为第4步中算出的x轴误差的低字节,exH为第4步中算出的x轴误差的高字节,eyL,eyH,ezL,ezH同理。
7、 保存当前配置。发送指令0xff 0xaa 0x00 0x00 0x00;
读取寄存器方法:
1. 往READADDR(0x27)寄存器里写入需要读取的地址,比如要读取0x05寄存器,那么给模块发送指令:0xff 0xaa 0x27 0x05 0x00
2. 模块收到指令以后,将返回数据包0x55 0x5f D1L D1H D2L D2H D3L D3H D4L D4H SUM
其中D1是刚才写入的寄存器的内容,D2、D3、D4分别是D1后面的寄存器的内容。比如刚才写入READADDR的内容是0x05,那么D1就是AXOFFSET(0x05),D2就是AYOFFSET(0x06),D3就是AZOFFSET(0x07),D4就是GXOFFSET(0x08)。
附表:
寄存器序号:
#define SAVE 0x00
#define CALSW 0x01
#define RSW 0x02
#define RRATE 0x03
#define BAUD 0x04
#define AXOFFSET 0x05
#define AYOFFSET 0x06
#define AZOFFSET 0x07
#define GXOFFSET 0x08
#define GYOFFSET 0x09
#define GZOFFSET 0x0a
#define HXOFFSET 0x0b
#define HYOFFSET 0x0c
#define HZOFFSET 0x0d
#define D0MODE 0x0e
#define D1MODE 0x0f
#define D2MODE 0x10
#define D3MODE 0x11
#define D0PWMH 0x12
#define D1PWMH 0x13
#define D2PWMH 0x14
#define D3PWMH 0x15
#define D0PWMT 0x16
#define D1PWMT 0x17
#define D2PWMT 0x18
#define D3PWMT 0x19
#define IICADDR 0x1a
#define LEDOFF 0x1b
#define MAGRANGX 0x1c
#define MAGRANGY 0x1d
#define MAGRANGZ 0x1e
#define BANDWIDTH 0x1f
#define GYRORANGE 0x20
#define ACCRANGE 0x21
#define SLEEP 0x22
#define ORIENT 0x23
#define AXIS6 0x24
#define FILTK 0x25
#define GPSBAUD 0x26
#define READADDR 0x27
#define MOVETHR 0x28
#define MOVESTA 0x29
#define ACCFILT 0x2A
#define GYROFILT 0x2b
#define MAGFILT 0x2c
#define RSV6 0x2d
#define RSV7 0x2e
#define RSV8 0x2f
#define YYMM 0x30
#define DDHH 0x31
#define MMSS 0x32
#define MS 0x33
#define AX 0x34
#define AY 0x35
#define AZ 0x36
#define GX 0x37
#define GY 0x38
#define GZ 0x39
#define HX 0x3a
#define HY 0x3b
#define HZ 0x3c
#define Roll 0x3d
#define Pitch 0x3e
#define Yaw 0x3f
#define TEMP 0x40
#define D0Status 0x41
#define D1Status 0x42
#define D2Status 0x43
#define D3Status 0x44
#define PressureL 0x45
#define PressureH 0x46
#define HeightL 0x47
#define HeightH 0x48
#define LonL 0x49
#define LonH 0x4a
#define LatL 0x4b
#define LatH 0x4c
#define GPSHeight 0x4d
#define GPSYAW 0x4e
#define GPSVL 0x4f
#define GPSVH 0x50
#define q0 0x51
#define q1 0x52
#define q2 0x53
#define q3 0x54
#define SVNUM 0x55
#define PDOP 0x56
#define HDOP 0x57
#define VDOP 0x58
#define DELAYT 0x59
#define XMIN 0x5a
#define XMAX 0x5b
#define GXMIN 0x5c
#define GXMAX 0x5d
#define YMIN 0x5e
#define YMAX 0x5f
#define GYMIN 0x60
#define GYMAX 0x61
#define ALARMLEVEL 0x62
#define GYRONOCAL 0x63
目录│文件列表:
└ 串口MPU6050卡尔曼滤波6轴9轴资料汇总
│ miniIMU.apk
│ PID资料.zip
├ MPU6050资料V5
│ └ MPU6050资料V5
│ │ MPU6050使用说明书V5.pdf
│ ├ Datasheet
│ │ │ MPU-6050寄存器映射.pdf
│ │ └ MPU6050.PDF
│ ├ PCB库
│ │ │ 串口MPU6050原理库.lib
│ │ └ 串口MPU6050封装库.lib
│ ├ 上位机
│ │ │ Config.ini
│ │ │ Data.txt
│ │ │ DataPlot.m
│ │ │ MiniIMU.exe
│ │ │ 使用说明.txt
│ │ ├ en
│ │ │ └ MiniIMU.resources.dll
│ │ └ zh-CHS
│ │ └ MiniIMU.resources.dll
│ └ 示例程序
│ │ 51例程.rar
│ │ Arduino版.zip
│ │ PC版(VS2010).zip
│ │ STM32版.zip
│ └ 核心代码
│ │ main.c
│ └ usart.c
├ 上位机
│ └ 4.3.14.rar
├ 指令校准
│ └ 指令校准法.docx
└ 论坛资料
└ JY61P、901说明书
└ JY901使用说明书V4.0.pdf.baiduyun.downloading