关键词不能为空

当前您在: 主页 > 英语 >

GY—86很牛X的一个模块

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-01 18:04
tags:

-

2021年2月1日发(作者:esp是什么意思)


在我们的之前的博文中,我们讲过一模块


arduIMU 9DOF


的使用,现在


稍稍升级下,今天来个


10D OF


的!!



光从包含传感器的种类上 看,其实他们的区别不是很大,只是


10DOF


上包含了


9DOF


上没有的气压传感器


BMP085< /p>


,只是


10DOF


模块上不再有


MCU



-


一纯


粹的传感器集模块!



下面就开始介绍



一、模块简介



模块板上集成了四种传 感器,分别是加速度传感器


ADXL345


、磁场强度传感器< /p>


HMC5883L


、三轴陀螺仪


ITG3 205


,气压传感器


BMP085


,给 您带来


10


维的测


量空间,

< p>
它们彼此串联在一起,


这样在工作时能够补偿彼此的缺陷,


同时在使用


算法滤波时也给您提供了一个清晰的方向。


如果应用在机器人、


无人驾驶机、



动 汽车、


图像稳定系统中它将会是强有力的控制器,


这将不仅会大 大简化您的设


计,而且在控制效果方面也很令人满意!



还是先来看看模块长啥样吧




模块较小,结构紧凑!



二、模块的一些特征



1


、模块结构紧凑、尺寸小!



2


、预留了两个安装孔,方便安装


< /p>


3


、集成了加速度传感器


ADXL345


4


、集成了磁场强度传感器


HMC58 83L


5


、集成了三轴陀螺仪


ITG3205


6


、集成了气压传感器


BMP085


7



3.3V


供电



8



I 2C


接口通信



三、板载传感器的简单介绍


^_^


ADXL345



是一款小而薄的超低功耗

3


轴加速度计,分辨率高


(13



)



测量范围达±

16g


。数字输出数据为


16


位 二进制补码格式,可通过


SPI(3


线或


4


线


)



I 2C


数字接口访问。


ADXL345


非 常适合移动设备应用,


它可以在倾斜检测应用中测量静态重力加速度,

< br>还可以测量运动或冲击


导致的动态加速度,


其高分辨率< /p>


(3.9mg/LSB)



能够测量不到


1.0


°的倾


斜角度变化。

< p>


HMC5883L



是 一款带数字接口的弱磁传感器芯片,


主要应用于低成本罗


盘和磁 场检测领域,包括最先进的高分辨率


HMC118X


系列磁阻传 感器,


并附带霍尼韦尔专利的集成电路包括放大器、


自动消磁转 换器、偏差校


准、能使罗盘精度控制在







12


位模数转换器,简易的


I2C



线接口。采用霍尼韦尔各向异性磁阻(


AMR


)技术;



ITG3205< /p>



输出为数字量,三个整合之


16-bi t


的模数转换器


(ADCs)



提供陀螺仪同步取样,且不需额外的多任务器


(multiplexe r)



一个用户


可选择的内部的数字低 通滤波器,


并可编程改变其带宽,并带有快速模


式(

< p>
400KHZ


)的


I2C


接口。此外,它还嵌入了温度传感器和精度为


2%


的内部晶振。



BMP085


高精度、低功耗的气压传感器,在一些先进的移动设备中都


有应用。它的测量范围< /p>


300 - 1100hPa


,并且其绝对精度

< br>2.5hPa


,噪声干


扰仅有


0 .03hPa


。它的尺寸很小,采用


LCC

封装,通过


I2C


接口能很好


的与 移动设备中微控制器连接。



四、


模块使用指南



具体的引脚功能,模块板上都有丝印!!!


< br>下面是它与


Arduino


主控板的连接原理图




由于采用的是


I2 C


接口,他们之间的连接也很简单。。。。


< br>说到


I2C


接口,我们不得不注意了:

< br>I2C


器件地址的问题!!!



下面是该模块对应个传感器的


I2C


地址(这在程序设计中将会 用到)



ADXL345: 0x53


ITG3205




0x68


BMP085




0x77


HMC5883L: 0x1E



话不多说,


现在都跃跃欲试 了,


好像知道它会给我们带来怎样的体验!


< br>


五、模块演示



演示前的准备



1


Arduino


控制器



×


1



2



USB


数据线



×


1



3



10DOF


模块


×


1



按照上面的原理图先接好演示电路




先准备好测试代码



#include //


包含


I2C


库文件;



#include / /


包含


HMC5883L


的库文件;< /p>



HMC5883L compass; //


定义类变量;



int error = 0; //


记录电子罗盘可能出现的错误;



#define BMP085_ADDRESS 0x77 //BMP085



I2C


地址;



const unsigned char OSS = 0; //


过采样设置;



int ac1,ac2,ac3;


unsigned int ac4,ac5,ac6;


int b1,b2,mb,mc,md;


long b5,pressure;


short temperature;


#define ACC 0x53 //ADXL345


的< /p>


I2C


地址;



#define A_TO_READ (6)



#define GYRO 0x68 //ITG3205



I2C


地址(当


ADO


连接到


GND


,具体可参考原理图);



#define G_SMPLRT_DIV 0x15


#define G_DLPF_FS 0x16


#define G_INT_CFG 0x17


#define G_PWR_MGM 0x3E


#define G_TO_READ 8 //


每轴


2


字节;



intg_offx = 120; //


偏移量校正



intg_offy = 20;


intg_offz = 93;


inthx, hy, hz, turetemp; //


定义


ITG320 5


输出变量;



void initAcc() {


//


启动


ADXL345;


writeTo(ACC, 0x2D, 1<<3);



writeTo(ACC, 0x31, 0x0B);


writeTo(ACC, 0x2C, 0x09);


//


设置


ADXL345


的量程为


+-2g




writeTo(GYRO, G_PWR_MGM, 0x00); //ITG3205 set


writeTo(GYRO, G_SMPLRT_DIV, 0x07);


writeTo(GYRO, G_DLPF_FS, 0x1E); // +/- 2000 dgrs/sec, 1KHz


writeTo(GYRO, G_INT_CFG, 0x00);


}


void initHMC() //HMC5883L


初始化设置;



{


n(


compass = HMC5883L();


n(


error = le(1.3);


if(error != 0)


n(orText(error));


n(


error = surementMode(Measurement_Continuous);


if(error != 0)


n(orText(error));


}


void bmp085Calibration() //BMP085


初始化设置;



{


ac1 = bmp085ReadInt(0xAA);


ac2 = bmp085ReadInt(0xAC);


ac3 = bmp085ReadInt(0xAE);


ac4 = bmp085ReadInt(0xB0);


ac5 = bmp085ReadInt(0xB2);


ac6 = bmp085ReadInt(0xB4);


b1 = bmp085ReadInt(0xB6);


b2 = bmp085ReadInt(0xB8);


mb = bmp085ReadInt(0xBA);


mc = bmp085ReadInt(0xBC);


md = bmp085ReadInt(0xBE);


}


void getAccelerometerData(int * result)


{


intregAddress = 0x32; //ADXL345


数据寄存器的首地址;



byte buff[A_TO_READ];


readFrom(ACC, regAddress, A_TO_READ, buff); //



ADXL345


读取三轴加速度值;



result[0] = (((int)buff[1]) << 8) | buff[0];



result[1] = (((int)buff[3])<< 8) | buff[2];


result[2] = (((int)buff[5]) << 8) | buff[4];


}


void getGyroscopeData(int * result)


{


intregAddress = 0x1B; //ITG3205


数据寄存器的首地址;



int temp, x, y, z;


byte buff[G_TO_READ];


readFrom(GYRO, regAddress, G_TO_READ, buff); //



ITG3205


读取陀螺仪值;



result[0] = ((buff[2] << 8) | buff[3]) + g_offx;


result[1] = ((buff[4] << 8) | buff[5]) + g_offy;


result[2] = ((buff[6] << 8) | buff[7]) + g_offz;


result[3] = (buff[0] << 8) | buff[1]; //


温度值



}


void setup()


{


(9600);


();

-


-


-


-


-


-


-


-



本文更新与2021-02-01 18:04,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/594306.html

GY—86很牛X的一个模块的相关文章