首页 > 编程知识 正文

mur1660ct怎么测量好坏,ifm传感器设置方法中文

时间:2023-05-05 17:32:30 阅读:39381 作者:4128

博世BMI160介绍

Bosch Sensortec推出的最新BMI160惯性测量单元,将最先进的16位3轴重力加速度计和超低功耗3轴陀螺仪集成在一个封装中。 采用14针LGA封装,尺寸为2.53.00.8mm3。 加速度计和陀螺仪在全速模式下工作时,功耗通常低至950安,不超过市场同类产品功耗的50%。

BMI160的数据表下载连接如下。

点击此处进入下载页面

BMI160数据流框图和地址

从BMI160的数据表中可以看到的数据流框图如下。

从上面的框图中可以看到,BMI160提供外部和双向数据传输的方式有两种: SPI和I2C。 那么,让我们来看看通过I2C与外部进行通信的方式吧。 当BMI160通过I2C与外部进行通信时,由于BMI160作为I2C从设备悬挂在主芯片(主)的I2C总线上,因此主芯片在配置相应的I2C驱动器时必须知道BMI160的从设备地址。

BMI160的从站地址因硬件设计而异。 详细情况可以通过Datasheet确认。 截图如下。

从上述说明可以看出,当SDO将脚连接到“GND”时,BMI160的I2C地址为0x68。 SDO连接“VDDIO”时,BMI160的I2C地址为0x69。

BMI160寄存器表

BMI160的注册表位于Datasheet的第45页上。 这里重点介绍一些常用的比较重要的寄存器。

1 .芯片ID

地址:0x00。 寄存器名称: CHIP_ID。 默认值:0xD1。 此寄存器是只读的,不能写入。

2.BMI160操作模式寄存器

地址:0x03。 寄存器名称: PMU_STATUS。 默认值:0x00。 此寄存器是只读的,不能写入。 该寄存器的值共有8字节,保留了最高位的2位。 此外,还为acc_pmu_status、gyr_pmu_status和mag_pmu_status的状态值即两个位分别配置值。

截图:

各状态值表示的实际意义的屏幕截图如下。

3 .控制寄存器

地址:0x7e。 寄存器名称: CMD。 默认值:0x00。 这个寄存器既可以读也可以写。

通过在该地址中写入不同的值来控制加速度和陀螺仪的动作模式。

0x11 :通过写入该指令值,可以将加速度模块切换为通常动作模式。

0x15 :通过写入该指令值,可以将陀螺仪模块切换为通常动作模式。

4 .加速度(加速器)寄存器

通过读取该寄存器的数据,可以得到加速度的3轴的原始数据。 各轴的寄存器地址和数据格式如下图所示。

5 .陀螺角速度(Gyroscope )寄存器

通过读取该寄存器的数据,可以得到陀螺仪角速度的3轴的原始数据。 各轴的寄存器地址和数据格式如下图所示。

6 .加速度和陀螺仪范围配置寄存器

)1)加速度范围配置寄存器的地址为0x41,该寄存器地址的数据格式表如下。

从上图可以看出,加速度范围配置只占bit 0-3这一较低的4位。 与不同值对应的范围值如下表所示。

)2)陀螺仪范围配置寄存器的地址为0x43,该寄存器地址的数据格式表如下。

由上图可见,陀螺量程配置只占后3位,即bit 0-2。 与不同值对应的范围值如下表所示。

注意:加速度范围设定寄存器的默认值为0x03,即默认范围为2g; 陀螺仪范围配置寄存器的默认值为0x00,即默认角速度范围为2000/s。 建议使用默认配置的量程。

六轴

数据获取

1.三轴加速度数据获取实例参考代码

//加速度三轴数据获取源码 void getAccelerometerValue(void){signed short acc_x,acc_y,acc_z;unsigned short x,y,z; //向命令寄存器写入0x11,使加速度处于正常工作模式 i2c_write_one_byte(0x7e,0x11); //切换工作模式之后,延时100ms Delay_Ms(100); /加速度 X轴/// x =( i2c_read_one_byte(0x12) &0xff); x = x|(( i2c_read_one_byte(0x13) &0xff)<<8); acc_x = (signed short)x; //当量程为±2g时,转换为g/s的加速度换算公式 acc_x = (signed short)(acc_x*9.8)/(0x8000/2); /加速度 Y轴/// y =( i2c_read_one_byte(0x14) &0xff) ; y = y|(( i2c_read_one_byte(0x15) &0xff)<<8); acc_y = (signed short)y; //当量程为±2g时,转换为g/s的加速度换算公式 acc_y = (signed short)(acc_y*9.8)/(0x8000/2); /加速度 Z轴/// z =( i2c_read_one_byte(0x16) &0xff) ; z = z|(( i2c_read_one_byte(0x17) &0xff)<<8); acc_z = (signed short)z; //当量程为±2g时,转换为g/s的加速度换算公式 acc_z = (signed short)(acc_z*9.8)/(0x8000/2); }


2.三轴陀螺仪数据获取实例参考代码

//陀螺仪角速度三轴数据获取 void getGyroscopeValue(void){signed short gyr_x,gyr_y,gyr_z;unsigned short x,y,z;//向命令寄存器写入0x15,使陀螺仪处于正常工作模式 i2c_write_one_byte(0x7e,0x15); //切换工作模式之后,延时100ms Delay_Ms(100); /陀螺仪角速度 X轴/// x =( i2c_read_one_byte(0x0c) &0xff) ; x = x|(( i2c_read_one_byte(0x0d) &0xff)<<8); gyr_x = (signed short)x; // range为±2000°/s时,转换为角速度°/s的公式 gyr_x = (gyr_x*2000)/0x8000; /陀螺仪角速度 Y轴/// y =( i2c_read_one_byte(0x0e) &0xff) ; y = y|(( i2c_read_one_byte(0x0f) &0xff)<<8); gyr_y = (signed short)y; // range为±2000°/s时,转换为角速度°/s的公式 gyr_y = (gyr_y*2000)/0x8000; /陀螺仪角速度 Z轴/// z =( i2c_read_one_byte(0x10) &0xff) ; z = z|(( i2c_read_one_byte(0x11) &0xff)<<8); gyr_z = (signed short)z; // range为±2000°/s时,转换为角速度°/s的公式 gyr_z = (gyr_z*2000)/0x8000; }
上述源码中,有三个函数:“i2c_write_one_byte”,“Delay_Ms”和“i2c_read_one_byte”,这三个函数的具体实现跟主控芯片有关,需要大家根据自己的主控芯片来自行封装实现,另外涉及到I2C的时候一般开始需要先初始化,初始化过程需要的从设备地址在前面已经讲过了,具体初始化函数的封装也需要大家自行根据主控芯片的介绍来实现。


上述提供的源码中,“i2c_read_one_byte”接口封装的返回值是“unsigned char”类型的。下面,我们来看看上述源码中加速度和陀螺仪角速度换算的原理:

1.加速度换算原理

换算实现代码如下:

/加速度 X轴/// x =( i2c_read_one_byte(0x12) &0xff); x = x|(( i2c_read_one_byte(0x13) &0xff)<<8); acc_x = (signed short)x; //当量程为±2g时,转换为g/s的加速度换算公式 acc_x = (signed short)(acc_x*9.8)/(0x8000/2);

加速度每个轴占两个字节,所以从传感器中读取的值需要按照高低位进行拼接,并且因为加速度每个轴都是有方向的,也就是说加速度每个轴的值应该是有正负之分的,因此拼接之后的值强制类型转化为“signed short”。转换之后,我们需要将转换的值换算成加速度的单位。换算公式如下:


acc_x = (signed short)(acc_x*9.8)/(0x8000/2);


9.8是重力加速度的标准值;因为默认量程是 ±2g,最大和最小值相差 4g,而上述公式,我们取的是量程的一半,也就是2g;因为“acc_x”对应的“signed short”的范围是“-32768 ~ +32767”,最大到最小值一共是 65536个值,相当于65536个刻度,同样取一半的话就是0x8000。上述公式通过对应转换之后将采样读取的值乘以 g,这样采样获取值的范围0x8000就需要除以2。


2.陀螺仪角速度换算原理

换算实现代码如下:

/陀螺仪角速度 X轴/// x =( i2c_read_one_byte(0x0c) &0xff) ; x = x|(( i2c_read_one_byte(0x0d) &0xff)<<8); gyr_x = (signed short)x; // range为±2000°/s时,转换为角速度°/s的公式 gyr_x = (gyr_x*2000)/0x8000; 陀螺仪角速度每个轴也是占用2个字节,所以从传感器中读取的值需要按照高低位进行拼接,并且因为陀螺仪角速度每个轴都是有方向的,也就是说陀螺仪角速度每个轴的值也应该是有正负之分的,因此拼接之后的值强制类型转化为“signed short”。转换之后,我们需要将转换的值换算成陀螺仪角速度的单位。换算公式如下:


gyr_x = (gyr_x*2000)/0x8000; 


因为默认量程是 ±2000°/s,最大和最小值相差 4000,而上述公式,我们取的是量程的一半,也就是2000;因为“gyr_x”对应的“signed short”的范围是“-32768 ~ +32767”,最大到最小值一共是 65536个值,相当于65536个刻度,同样取一半的话就是0x8000。所以对应换算之后就出现了上述公式。



注意事项

默认BMI160开机上电启动的时候处于挂起模式,这个时候加速度和陀螺仪都处于未工作状态,无法读取数据。如果想读取相应数据,需要通过向“0x7E”命令控制寄存器写入相应命令来切换工作状态,具体命令前面介绍过了。

 

每次读取加速度数据前,都需要调用“i2c_write_one_byte(0x7e,0x11);”使加速度模块进入正常工作模式;每次读取陀螺仪角速度前,当然也需要调用“i2c_write_one_byte(0x7e,0x15);”使陀螺仪模块进入正常工作模式。这样才能成功读取到数据。





版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。