STM32CubeMX使用(五)之IIC及数字加速度计LIS2DW12、IIC遇到的问题、其他用到的IMU
目录一、概述二、PinoutConfiguration2.1 选择端口三、LIS2DW12四、IIC遇到的问题IIC无ACK五、其他IMU5.1 LSM6DSM5.1.1 资料获取关于IMU的一些基本概念5.1.2 初始化设置IIC通信地址检测通信正常开启加速度/陀螺仪设置量程5.1.3 获取测量值5.1.4 唤醒和阈值5.2 ICM-406075.3 ICM-40627一、概述本文记录下IIC的使用过程主要是后续使用能有个参考。CubeMX芯片 STM32G0B1RCT6实际焊接STM32G0B1RET6二、PinoutConfiguration2.1 选择端口好吧老大希望使用软件IIC。so关闭IIC外设两个管脚设置开漏输出。关于IIC的时序非常推荐的一篇博客IIC原理超详细讲解—值得一看。软件IIC已有非常多的资料我使用了野火F103开发板的例程只不过例程操作EEPROM而我这里是操作LIS2DW12对应调整一下就好。三、LIS2DW12ST官方提供了LIS2DW12的驱动库和一些使用例程点击跳转根据自己的传感器型号选择进入可以看到LIS2DW12传感器里有driver和examples两个文件夹进入第一个driver d8457a1进入examples文件夹这里是各种例程。四、IIC遇到的问题在模拟IIC时序过程中需要读取SDA电平不必设置成输入状态一直为输出即可。管脚切记设置成开漏状态否则高电平拉不起来。IIC无ACK【IIC通信】Chap.1I2CIIC通信原理、IIC读写时序详解总线上的数据格式无数据空闲SCL1SDA1开始位Start当SCL1时SDA由1向0跳变停止位Stop当SCL1时SDA由0向1跳变数据位当SCL由0向1跳变时由发送方控制SDA此时SDA为有效数据不可随意改变SDA当SCL保持为0时SDA上的数据可随意改变地址位定义同数据位但只由Master发给Slave应答位ACK当发送方传送完8位时发送方释放SDA由接收方控制SDA且SDA0否应答位NACK当发送方传送完8位时发送方释放SDA由接收方控制SDA且SDA1。 当数据为单字节传送时格式为开始位 8位地址位含1位读写位 应答 8位数据 应答 停止位。 当数据为一串字节传送时格式为开始位 8位地址位含1位读写位 应答 8位数据 应答 8位数据 应答 …… 8位数据 应答 停止位。【IIC通信】Chap.2 I2CIIC协议的特点为什么IIC需要开漏输出、上拉电阻IIC原理超详细讲解—值得一看IIC接收不到从设备ack问题IIC通信异常I2C SDA SCL被拉低问题分析IIC接口----解挂死I2C 挂死原因分析及解决方案五、其他IMU本节主要是记录下用到的IMU方便以后查找。5.1 LSM6DSM5.1.1 资料获取在ST官网点击进入中直接搜索LSM6DSM搜索结果如下选择 LSM6DSM跳转后选择文档就可以找到芯片手册和应用手册等资料github上ST官方给出的源文件添加链接描述。只有寄存器的.c.h关于IMU的一些基本概念姿态角解算MPU6050 加速度计加陀螺仪从ADC值到 dps通过I2C接口读出来的转换结果ADC值并不是以度每秒为单位。一般按以下公式进行转 换Anglerate ADCrate /灵敏度 以量程为±1000º/s为例说明如何转换。假设读取x轴的ADC值为200,从上表中得知在 ±1000º/s下的灵敏度为32.8LSB/(º/s) 。根据上面的公式 Anglerate 200/32.8 6.09756º/s 这就是说,MPU6050检测到模块正在以约6度每秒的速度绕X轴(或者叫在YZ平面上)旋转.ADC值并不都是正的,请注意,当出现负数时,意味着该设备从现有的正方向相反的方向旋转.陀螺仪参数中 °/sec/LSB 和 LSB/°/sec 是什么关系两个单位互为倒数关系LSB为最小有效位LSB/gcount/g,V/g,V/°几种方式之间的说明及转换公式圆点博士陀螺仪和加速度计MPU6050的单位换算方法G-sensor概述及常用芯片整理ODROutput Data Rate表示G-sensor的输出数据的刷新频率。ODR越高输出数据更新越快功耗越高。G-sensor的ODR往往都是可以配置的。5.1.2 初始化设置初始化IIC后还有两部分IIC通信地址使用IIC通信6.4.1 I2C operation一节中有说明由SDO/SAO决定检测通信正常WHO_AM_I (0Fh)通过不同的型号这里可能是不同的。比如《lsm6dsr.pdf》中是6B《lsm6ds3_datasheet.pdf》中是69开启加速度/陀螺仪设置量程CTRL1_XL (10h)设置加速度模式、量程ORDoutput data rate寄存器设置为0x60,XL_HM_MODE 没有影响都是416Hz (high performance)XL_HM_MODE的含义具体见CTRL6_C (15h)选择±2gCTRL2_G (11h)设置陀螺仪模式、量程5.1.3 获取测量值《AN4987__LSM6DSM_ 始终开启的3D 加速度计和3D 陀螺仪.pdf》中4.2 使用状态寄存器OUTX_L_G (22h)OUTX_L_XL (28h)添加链接描述参考头文件即可。负数没有求原值5.1.4 唤醒和阈值《AN4987__LSM6DSM_ 始终开启的3D 加速度计和3D 陀螺仪.pdf》中5.3 唤醒中断TAP_CFG (58h)开启中断WAKE_UP_DURMD1_CFG5.2 ICM-40607下载链接点击进入5.3 ICM-40627官网下载手册点击进入