mirror of
https://gitee.com/dlmu-cone/bf_original_balance_chassis
synced 2026-07-24 03:27:45 +08:00
新增了教程和注释以及文档,增加了一键编译并打开ozone调试的脚本
This commit is contained in:
@@ -379,6 +379,7 @@ void BMI088CalibrateIMU(BMI088Instance *_bmi088)
|
||||
fabsf(_bmi088->gyro_offset[2]) > 0.01f); // 满足条件说明标定环境不好
|
||||
}
|
||||
|
||||
// 离线标定
|
||||
if (_bmi088->cali_mode == BMI088_LOAD_PRE_CALI_MODE) // 如果标定失败也会进来,直接使用离线数据
|
||||
{
|
||||
// 读取标定数据
|
||||
@@ -408,6 +409,7 @@ BMI088Instance *BMI088Register(BMI088_Init_Config_s *config)
|
||||
config->spi_gyro_config.id =
|
||||
config->heat_pwm_config.id = bmi088_instance;
|
||||
|
||||
// @todo:
|
||||
// 目前只实现了!!!阻塞读取模式!!!.如果需要使用IT模式,则需要修改这里的代码,为spi和gpio注册callback(默认为NULL)
|
||||
// 还需要设置SPI的传输模式为DMA模式或IT模式(默认为blocking)
|
||||
// 可以通过conditional compilation或者runtime参数判断
|
||||
|
||||
@@ -29,8 +29,8 @@ typedef struct
|
||||
float acc[3]; // 加速度计数据,xyz
|
||||
float temperature; // 温度
|
||||
|
||||
// uint32_t timestamp; // 时间戳
|
||||
// uint32_t count;
|
||||
// float timestamp; // 时间戳,单位为ms,用于计算两次采样的时间间隔,同时给视觉提供timeline
|
||||
// uint32_t count; // 第count次采样,用于对齐时间戳
|
||||
} BMI088_Data_t;
|
||||
#pragma pack() // 恢复默认对齐,需要传输的结构体务必开启1字节对齐
|
||||
|
||||
@@ -107,7 +107,8 @@ BMI088Instance *BMI088Register(BMI088_Init_Config_s *config);
|
||||
BMI088_Data_t BMI088Acquire(BMI088Instance *bmi088);
|
||||
|
||||
/**
|
||||
* @brief 标定传感器
|
||||
* @brief 标定传感器.BMI088在初始化的时候会调用此函数. 提供接口方便标定离线数据
|
||||
* @attention @todo 注意,当操作系统开始运行后,此函数会和INS_Task冲突.目前不允许在运行时调用此函数,后续加入标志位判断以提供运行时重新的标定功能
|
||||
*
|
||||
* @param _bmi088 待标定的实例
|
||||
*/
|
||||
|
||||
@@ -47,6 +47,7 @@ write写入:
|
||||
温度数据不需要和accel和gyro同步,它不参与姿态解算,可以不用管.
|
||||
|
||||
当加速度数据和陀螺仪数据都准备完成之后,唤醒姿态解算任务INs_taSk,进行一次解算.唤醒可以通过软件开启EXTI中断,在中断中调用实时系统的vTaskNotifyFromISR()完成,也可以将任务ready标志位置位,当运行到对应位置时检查标志位判断是否要进行任务.时间间隔不是大问题,inS_TAsK中有dwt用于计算两次任务执行的间隔,它将会自动处理好bias的大小
|
||||
`__HAL_GPIO_EXTI_GENERATE_SWIT()` `HAL_EXTI_GENERATE_SWI()`
|
||||
|
||||
`__HAL_GPIO_EXTI_GENERATE_SWIT()` `HAL_EXTI_GENERATE_SWI()` 可以触发软件中断
|
||||
|
||||
of course,两者的数据更新实际上可以异步进行,这里为了方便起见当两者数据都准备好以后再行融合
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#ifndef BMI088REG_H
|
||||
#define BMI088REG_H
|
||||
|
||||
/*------- BMI088寄存器地址和内容-------*/
|
||||
/*------- BMI088寄存器地址及其存放的内容-------*/
|
||||
|
||||
#define BMI088_ACC_CHIP_ID 0x00 // the register is " Who am I "
|
||||
#define BMI088_ACC_CHIP_ID_VALUE 0x1E
|
||||
@@ -125,7 +125,7 @@
|
||||
#define BMI088_GYRO_125 (0x4 << BMI088_GYRO_RANGE_SHFITS)
|
||||
|
||||
#define BMI088_GYRO_BANDWIDTH 0x10
|
||||
// the first num means Output data rate, the second num means bandwidth
|
||||
// the first num means Output data rate, the second num means bandwidth
|
||||
#define BMI088_GYRO_BANDWIDTH_MUST_Set 0x80
|
||||
#define BMI088_GYRO_2000_532_HZ 0x00
|
||||
#define BMI088_GYRO_2000_230_HZ 0x01
|
||||
|
||||
Reference in New Issue
Block a user