关于LSM6DSL的遇到的未解决问题
大家好我又来了,各位大神 就这之前的板子 我读取LSM6DSL的6轴数据。然后就发现一个我的加速度数据能读出来 但是我的角速度数据死活读不出来,然后我换成开发板度我买的模块。(代码没改)然后我发现就刚开始一瞬间有而且我用手扶着模块角速度就有数据了。
刚开始以为灵敏度问题 然而我拿着线晃动模块角速度也没有数据 只有加速度的 我懵逼了。这是什么鬼。我手扶着就有。
但是自己打的板怎么都没有数据。 后来我度去温度数据 发现也没问题 。
在后来我读取STATUS_REG寄存器 发现我不扶着的时候是0x04;啥这不是加速度和角速度都没有吗? 我扶着的时候是0x07;这才是我想要的啊。。。 没办法了 我弄这个很久了 就是不行 不知道啥情况。
较少有时候还会出现由于没有数据传输跑死的情况、
下面是我的初始化代码: 以及原理图:
在论坛里搜索“LSM6DSL(加速度 陀螺仪)驱动例程ver”下载这两个驱动试试 lsm6dsl_acc_gyro_ctrl6_g 对应的寄存器地址是多少? 对应#define LSM6DSL_ACC_GYRO_WHO_AM_I_REG 0X0F
#define LSM6DSL_ACC_GYRO_CTRL1_XL 0X10
#define LSM6DSL_ACC_GYRO_CTRL2_G 0X11
#define LSM6DSL_ACC_GYRO_CTRL3_C 0X12
#define LSM6DSL_ACC_GYRO_CTRL4_C 0X13
#define LSM6DSL_ACC_GYRO_CTRL5_C 0X14
#define LSM6DSL_ACC_GYRO_CTRL6_G 0X15
#define LSM6DSL_ACC_GYRO_CTRL7_G 0X16
#define LSM6DSL_ACC_GYRO_CTRL8_XL 0X17
#define LSM6DSL_ACC_GYRO_CTRL9_XL 0X18
#define LSM6DSL_ACC_GYRO_CTRL10_C 0X19
#define LSM6DSL_ACC_GYRO_MASTER_CONFIG 0X1A
#define LSM6DSL_ACC_GYRO_WAKE_UP_SRC 0X1B
#define LSM6DSL_ACC_GYRO_TAP_SRC 0X1C
#define LSM6DSL_ACC_GYRO_D6D_SRC 0X1D
#define LSM6DSL_ACC_GYRO_STATUS_REG 0X1E 比起更换驱动我更想知道问题出在那里 。而且驱动好难改啊 删除都删死我了:Cry::Cry::Cry: zf1995 发表于 2018-4-13 15:03
比起更换驱动我更想知道问题出在那里 。而且驱动好难改啊 删除都删死我了
你可以参考一下官方驱动里都配置了哪些寄存器、对应的值是多少,对比一下 littleshrimp 发表于 2018-4-13 15:11
你可以参考一下官方驱动里都配置了哪些寄存器、对应的值是多少,对比一下
恩 好的 谢谢官方的驱动不是分开的嘛 得自己调用来配置 我也对比了下 我自己配置应该没问题 不然扶着不会出数据,但是不知道为啥要扶着才能有数据 而且自己画的板子是直接没用 只有加速度的有数据
zf1995 发表于 2018-4-13 15:15
恩 好的 谢谢官方的驱动不是分开的嘛 得自己调用来配置 我也对比了下 我自己配置应该没问题 不然扶着不 ...
我用我的BlueCoin Starter kit开发板做了测试,开发板上的传感器是LSM6DSM配置和LSM6DSL一样
陀螺仪只需要将0x40写入ctrl2_g就可以正常工作,我在初始化时对传感器做了软复位
//读取who am i
uint8_t who_am_i;
HAL_I2C_Mem_Read(&hi2c1,0xD4,0x0f,I2C_MEMADD_SIZE_8BIT,&who_am_i,1,0x100);
while(who_am_i != 0x6a);
//复位 CTRL3_C->SW_RESET(BIT0)
uint8_t swreset = 1 << 0;
HAL_I2C_Mem_Write(&hi2c1,0xD4,0x12,I2C_MEMADD_SIZE_8BIT,&swreset,1,0x100);
//写CTRL2_G
uint8_t ctrl2_g = 0x40;//CTRL2_G-> ODR_G2(BIT6) = 1 104 Hz 250 dps
HAL_I2C_Mem_Write(&hi2c1,0xD4,0x11,I2C_MEMADD_SIZE_8BIT,&ctrl2_g,1,0x100);
while(1)
{
//读取STATUS_REG
HAL_I2C_Mem_Read(&hi2c1,0xD4,0x1e,I2C_MEMADD_SIZE_8BIT,&status,1,0x100);
if(status & 0x02)
{
//读取OUTX_L_G=22h~OUTZ_H_G=27h
HAL_I2C_Mem_Read(&hi2c1,0xD4,0x22,I2C_MEMADD_SIZE_8BIT,buf,6,0x100);
x = ( ( ( ( int16_t )buf ) << 8 ) + ( int16_t )buf );
y = ( ( ( ( int16_t )buf ) << 8 ) + ( int16_t )buf );
z = ( ( ( ( int16_t )buf ) << 8 ) + ( int16_t )buf );
}
}
本帖最后由 zf1995 于 2018-4-13 17:28 编辑
littleshrimp 发表于 2018-4-13 16:51
我用我的BlueCoin Starter kit开发板做了测试,开发板上的传感器是LSM6DSM配置和LSM6DSL一样
陀螺仪只需 ...
额 我试了下加复位 也是不行 还是一样的。没办法我就换成了LSM6DS3读取数据发现角速度存在偏移 这个是怎么回事? zf1995 发表于 2018-4-13 17:27
额 我试了下加复位 也是不行 还是一样的。没办法我就换成了LSM6DS3读取数据发现角速度存在偏移 这个是怎 ...
额我 查了下需要校准。 就是这样的情况 littleshrimp 发表于 2018-4-13 16:51
我用我的BlueCoin Starter kit开发板做了测试,开发板上的传感器是LSM6DSM配置和LSM6DSL一样
陀螺仪只需 ...
对了虾哥 你看下是不是我原理图有问题啊 zf1995 发表于 2018-4-13 18:44
对了虾哥 你看下是不是我原理图有问题啊
从现象看软件问题的可能性更大,你试试单步调试慢速读取数据,必要时检查一下i2c写入和读取代码 我今天试了下 单步除了第一次有数据 其他都没有和全速是一样的现象。 今天我吧S3的模块取下来焊在我的板子上 能读出数据排除了我硬件问题 我将SL的焊接在S3的模块上发现现象是一样的 排除了是模块的问题。 哎看来还是软件问题 但是原因就不知道了 zf1995 发表于 2018-4-14 15:07
我今天试了下 单步除了第一次有数据 其他都没有和全速是一样的现象。 今天我吧S3的模块取下来焊在我的板子 ...
试试按照我的测试代码先复位 再对ctrl2_g写0x40 然后读取状态和数据
还不行把你的i2c读写函数拿出来看下 littleshrimp 发表于 2018-4-16 22:22
试试按照我的测试代码先复位 再对ctrl2_g写0x40 然后读取状态和数据
还不行把你的i2c读写函数拿出来看下
谢谢虾哥 我解决了这个问题啊 是因为LSM6DSL_ACC_GYRO_CTRL6_G(0x15)中的TRIG_EN我配置为了1导致角速度不能出现数据。但是遇见新的问题了以前能够唤醒的代码现在不能唤醒了 然后检查中断引脚发现没产生中断了 哎解决一个坑又来一个。我再弄弄。 zf1995 发表于 2018-4-17 14:05
谢谢虾哥 我解决了这个问题啊 是因为LSM6DSL_ACC_GYRO_CTRL6_G(0x15)中的TRIG_EN我配置为了1导致角速度 ...
你先参考一下官方例程 我这几天在外边 等回去帮你看看 littleshrimp 发表于 2018-4-17 14:35
你先参考一下官方例程 我这几天在外边 等回去帮你看看
好的 我的中断也解决了 但是低功耗有问题 睡眠了还有570多ua的电流 正常应该在12uA左右的 我再看看 zf1995 发表于 2018-4-17 15:25
好的 我的中断也解决了 但是低功耗有问题 睡眠了还有570多ua的电流 正常应该在12uA左右的 我再看看
试试只把器件的CS和I2C上拉,上电不操作测一下电流(保证彻底掉电) 我试过 那样功耗是对的还有就是我吧配置LSM6DSL的代码屏蔽了,功耗也是对的。
现在的现象就像角速度没掉电一样且处于高性能模式有555uA的电流加上MCU的就对上了570uA的电流了。
而且正常工作是电流也不对 有700多uA我选用的采样频率是104Hz 配置为低功耗模式 但是功耗却是高性能是的功耗0.65mA加上我的muc的100多uA。按照应用手册上的功耗来说应该是360uA+100多uA应该在500uA的电流左右。是不是配置成低功耗是有什么特殊的步骤啊?应用手册的第30页的3.9节倒是说了 但是没看懂。。。