|
如题,LSM6DS3TR-C使用MotionFX固件算出的欧拉角周期性异常跳动,跳动几十度或者100多度,随机的,但是俯仰角、横滚角跳动后又很快恢复正常,而倾斜角无法恢复正常(倾斜角应用中不使用,即使跳动不影响) 我的mcu是stm32f407vgt6,根据网上大神提供的例程,使用iic周期性采集数据并计算出欧拉角,但是发现芯片在完全静止的情况下,会周期性异常跳动。 根据网上介绍的说是ipKnobs->LMode = 1;会在静止的时候进行零偏校准导致的,但是我把LMode=0或2后也还是会发现异常跳动, |
全球论坛无法登录
STM32F429使用FMC接口扩展SDRAM
用STM32F407做U盘拖拽升级,目前BootLoader和实现U盘,后面就不知道怎么操作了。
LIS3DHTR在读取xyz三轴加速度值时发现高8位一直都是00,请问这是什么情况导致?
STM32上电后会多次进入所有打开的定时器回调函数中,如何避免这样的情况?
STM32F427VIT6这款芯片所支持的摄像头模组的列表有不?
STM32F407 FLASH写入超过最大空间依旧能成功。
简单聊聊STM32的SPI外设
有没有好用的日志系统推荐
LSM6DS33TR咨询
微信公众号
手机版
我使用cubemx得到最新的库文件,MotionFX_CM4F_wc16_ot.a
初始化函数
Main Example --------------------------------------------------------------/ void lsm6ds3tr_c_read_data_polling(void) { / Initialize mems driver interface */
my_dev_ctx.write_reg = platform_write; my_dev_ctx.read_reg = platform_read; my_dev_ctx.handle = ts; / Init test platform / // platform_init(); / Wait sensor boot time / platform_delay(BOOT_TIME); / Check device ID /
u8 t_err_count1 = 0; while(1) { whoamI = 0;
// whoamI = Read_Byte_i2c_2(); lsm6ds3tr_c_device_id_get(&my_dev_ctx, &whoamI);
}
t_err_count1 = 0;
params.WorkState_Real2.bit.Mpu_power_on_state = 1; / Restore default configuration / lsm6ds3tr_c_reset_set(&my_dev_ctx, PROPERTY_ENABLE);
while(1) { rst = 1; lsm6ds3tr_c_reset_get(&my_dev_ctx, &rst);
}
/ Set full scale / lsm6ds3tr_c_xl_full_scale_set(&my_dev_ctx, LSM6DS3TR_C_4g); lsm6ds3tr_c_gy_full_scale_set(&my_dev_ctx, LSM6DS3TR_C_2000dps);
/ Enable Block Data Update / lsm6ds3tr_c_block_data_update_set(&my_dev_ctx, PROPERTY_ENABLE);
/ Configure filtering chain(No aux interface) /
lsm6ds3tr_c_xl_power_mode_set(&my_dev_ctx, LSM6DS3TR_C_XL_HIGH_PERFORMANCE);
/ Set Output Data Rate / lsm6ds3tr_c_xl_data_rate_set(&my_dev_ctx, LSM6DS3TR_C_XL_ODR_52Hz); lsm6ds3tr_c_gy_data_rate_set(&my_dev_ctx, LSM6DS3TR_C_GY_ODR_52Hz);
if 1
/* 设置FIFO水印为模式的倍数
/ 将FIFO模式设置为流模式 / //FIFO_CTRL5(0x0A)->STREAM_MODE lsm6ds3tr_c_fifo_mode_set(&my_dev_ctx, LSM6DS3TR_C_STREAM_MODE);
/ 启用时间戳并将其添加到FIFO / //CTRL10_C (19h)->TIMER_EN lsm6ds3tr_c_timestamp_set(&my_dev_ctx, PROPERTY_ENABLE); //CTRL10_C (19h)->PEDO_EN lsm6ds3tr_c_pedo_sens_set(&my_dev_ctx, PROPERTY_ENABLE); // 根据需求配置步数计数
/ 将时间戳分辨率设置为25 μs (WAKE_UP_DUR寄存器中的TIMER_HR位) / //WAKE_UP_DUR (5Ch)->TIMER_HR lsm6ds3tr_c_timestamp_res_set(&my_dev_ctx, LSM6DS3TR_C_LSB_25us);
//设置第3数据集(Dataset 3)的降采样因子 lsm6ds3tr_c_fifo_dataset_3_batch_set(&my_dev_ctx, LSM6DS3TR_C_FIFO_DS3_NO_DEC); //设置第4数据集(Dataset 4)的降采样因子 //FIFO_CTRL4 (09h)->DEC_DS4_FIFO[2:0] lsm6ds3tr_c_fifo_dataset_4_batch_set(&my_dev_ctx, LSM6DS3TR_C_FIFO_DS4_NO_DEC);
// 启用时间戳写入FIFO第四数据集 //FIFO_CTRL2 (07h)->TIMER_PEDO_FIFO_EN lsm6ds3tr_c_fifo_pedo_and_timestamp_batch_set(&my_dev_ctx, PROPERTY_ENABLE);
/ 设置FIFO传感器的降采样因子 / lsm6ds3tr_c_fifo_xl_batch_set(&my_dev_ctx, LSM6DS3TR_C_FIFO_XL_NO_DEC); lsm6ds3tr_c_fifo_gy_batch_set(&my_dev_ctx, LSM6DS3TR_C_FIFO_GY_NO_DEC);
/ 设置FIFO的输出数据速率 / //FIFO_CTRL5 (0Ah) lsm6ds3tr_c_fifo_data_rate_set(&my_dev_ctx, LSM6DS3TR_C_FIFO_416Hz); //———————————————— //版权声明:本文为CSDN博主「记帖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 //原文链接:https://blog.csdn.net/qq_24312945/article/details/140112859
lsm6ds3tr_c_init();
endif
params.WorkState_Real2.bit.Mpu_dmp_power_on_state = 1;
d_mpu6050_self_success_flag1 = 1;
d_Init_MPU6050_ok_flag1 = 1;
d_is_stop_read_mp6500_data_flag1 = 0; //
}
大概间隔15ms去轮训采集和计算