Pixhawk原生固件PX4之驱动ID

来源:互联网 发布:茶叶推广方案 知乎 编辑:程序博客网 时间:2024/05/16 11:43

欢迎交流~ 个人 Gitter 交流平台,点击直达:Gitter


驱动ID

PX4使用驱动ID将独立传感器贯穿于整个系统。这些ID存储于配置参数中,用于匹配传感器校正值,以及决定哪些传感器被记录到log中。

传感器的顺序(例如一个是/dev/mag0,另一个是/dev/mag1)于优先级是不挂钩的,优先级实际是在发布uORB topic时确定的。

举个例子

有关系统上三个磁力计的示例,使用飞行日志(.px4log)转存变量。三个参数(devtype、adress、bus)对传感器ID进行编码,MAG_PRIME识别哪个磁力计被选为主传感器。每一个MAGx_ID是一个24bit数值,左面手工填零补充。

CAL_MAG0_ID = 73225.0CAL_MAG1_ID = 66826.0CAL_MAG2_ID = 263178.0CAL_MAG_PRIME = 73225.0

大家先不妨对下面的24位ID进行解码。

通过I2C连接的外部HMC5883,总线1,地址0x1E:在log中以IMU.MagX显示。

# device ID 73225 in 24-bit binary:00000001  00011110  00001 001# decodes to:HMC5883   0x1E    bus 1 I2C

通过SPI连接的内部HMC5883,总线1,选择slot5。在log中以IMU1.MagX显示。

# device ID 66826 in 24-bit binary:00000001  00000101  00001 010# decodes to:HMC5883   dev 5   bus 1 SPI

以及通过SPI总线连接的内部MPU9250磁力计,总线1,从设备选择slot4。在log中以IMU2.MagX显示。

# device ID 263178 in 24-bit binary:00000100  00000100  00001 010#decodes to:MPU9250   dev 4   bus 1 SPI

设备ID编码

根据此格式,设备ID是一个24位的数字。注意,第一字段是上述解码示例中的最低有效位。

struct DeviceStructure {  enum DeviceBusType bus_type : 3;  uint8_t bus: 5;    // which instance of the bus type  uint8_t address;   // address on the bus (eg. I2C address)  uint8_t devtype;   // device class specific device type};

这里bus_type 按以下方式解码:

enum DeviceBusType {  DeviceBusType_UNKNOWN = 0,  DeviceBusType_I2C     = 1,  DeviceBusType_SPI     = 2,  DeviceBusType_UAVCAN  = 3,};

devtype 按以下方式解码:

Firmware/src/drivers/drv_sensor.h

#define DRV_MAG_DEVTYPE_HMC5883  0x01#define DRV_MAG_DEVTYPE_LSM303D  0x02#define DRV_MAG_DEVTYPE_ACCELSIM 0x03#define DRV_MAG_DEVTYPE_MPU9250  0x04#define DRV_ACC_DEVTYPE_LSM303D  0x11#define DRV_ACC_DEVTYPE_BMA180   0x12#define DRV_ACC_DEVTYPE_MPU6000  0x13#define DRV_ACC_DEVTYPE_ACCELSIM 0x14#define DRV_ACC_DEVTYPE_GYROSIM  0x15#define DRV_ACC_DEVTYPE_MPU9250  0x16#define DRV_GYR_DEVTYPE_MPU6000  0x21#define DRV_GYR_DEVTYPE_L3GD20   0x22#define DRV_GYR_DEVTYPE_GYROSIM  0x23#define DRV_GYR_DEVTYPE_MPU9250  0x24#define DRV_RNG_DEVTYPE_MB12XX   0x31#define DRV_RNG_DEVTYPE_LL40LS   0x32

设备ID解码示例

driverid

结合此图,上面的24位ID编码,不言自明。


                                          By Fantasy

0 0
原创粉丝点击