关于imu 与baro的关系:
见电路图. 软件里面baro是单独管理的。
conf/airframes/examples/microjet_lisa_m.xml中
配置baro位置:
配置imu位置:L16 <target name= "ap" board= "lisa_m_2.0" >L17 <configure name= "LISA_M_BARO" value= "BARO_MS5611_SPI" />
L34 <!-- Sensors -->L35 <subsystem name= "imu" type= "aspirin_v2.2" />
A.如果需要修改imu的接口需要了解imu的配置执行过程,在此总结一下
1.
在
paparazzi Center中定义
<!-- Sensors -->
<subsystem name="imu" type="aspirin_v2.2"/>
<subsystem name="imu" type="aspirin_v2.2"/>
.....
2. 由 ./sw/airborne/Makefile 包含 自动生成的
/usr/local/paparazzi/var/aircrafts/Microjet_LisaM/Makefile.ac
(# This file has been generated from /usr/local/paparazzi/conf/airframes/examples/microjet_lisa_m.xml by /usr/local/paparazzi/sw/tools/generators/gen_aircraft.out)
3. Makefile.ac 中 包含 subsystem makefile:
/usr/local/paparazzi/conf/firmwares/subsystems/shared/imu_aspirin_v2.2.makefile
定义了使用的SPI接口
IMU_ASPIRIN_2_CFLAGS += -DUSE_SPI_SLAVE3
4.imu_aspirin_v2.2.makefile 又包含
/usr/local/paparazzi/conf/firmwares/subsystems/shared/imu_aspirin_v2_common.makefile
定义了使用的SPI接口 并包含相关的操作文件 如
IMU_ASPIRIN_2_SRCS += $(SRC_SUBSYSTEMS)/imu/imu_aspirin_2_spi.c
提供具体的操作接口。
在规则中,通配符会被自动展开。但在变量的定义和函数引用时,通配符将失效。这种情况下如果需要通配符有效,就需要使用函数“wildcard”,它的用法是:$(wildcard PATTERN...) 。在Makefile中,它被展开为已经存在的、使用空格分开的、匹配此模式的所有文件列表。如果不存在任何符合此模式的文件,函数会忽略模式字符并返回空
最终的编译选项可以在paparazzi/var/aircrafts/Microjet_LisaM/ap_srcs.list 下查看 包含了所有的定义 比如 -DUSE_SPI2
B.paparazzi 关于baro的配置执行过程:气压计
1. ./sw/airborne/Makefile
L39: include $(AIRCRAFT_BUILD_DIR)/Makefile.ac
包含 自动生成的 /usr/local/paparazzi/var/aircrafts/Microjet_LisaM/Makefile.ac
2. Makefile.ac 中
L148: include $(PAPARAZZI_SRC)/conf/firmwares/fixedwing.makefile
包含 fixedwing.makefile
3.conf/firmwares/fixedwing.makefile
L26: include $(CFG_FIXEDWING)/autopilot.makefile
包含 conf/firmwares/subsystems/fixedwing/autopilot.makefile
4. ./conf/firmwares/subsystems/fixedwing/autopilot.makefile
L165: include $(CFG_SHARED)/baro_board.makefile
包含: conf/firmwares/subsystems/shared/baro_board.makefile
具体请查看文件的32行开始
# Lisa/M baro
else ifeq ($(BOARD), lisa_m)
# defaults to i2c baro bmp085 on the board
LISA_M_BARO ?= BARO_BOARD_BMP085
ifeq ($(LISA_M_BARO), BARO_MS5611_SPI)
BARO_BOARD_CFLAGS += -DBARO_BOARD=BARO_MS5611_SPI
include $(CFG_SHARED)/spi_master.makefile
BARO_BOARD_CFLAGS += -DUSE_SPI2 -DUSE_SPI_SLAVE3
BARO_BOARD_CFLAGS += -DBB_MS5611_SPI_DEV=spi2
BARO_BOARD_CFLAGS += -DBB_MS5611_SLAVE_IDX=SPI_SLAVE3
BARO_BOARD_SRCS += peripherals/ms5611.c
BARO_BOARD_SRCS += peripherals/ms5611_spi.c
BARO_BOARD_SRCS += boards/baro_board_ms5611_spi.c
else ifeq ($(LISA_M_BARO), BARO_MS5611_I2C)
BARO_BOARD_CFLAGS += -DBARO_BOARD=BARO_MS5611_I2C
BARO_BOARD_CFLAGS += -DUSE_I2C2
BARO_BOARD_CFLAGS += -DBB_MS5611_I2C_DEV=i2c2
BARO_BOARD_SRCS += peripherals/ms5611.c
BARO_BOARD_SRCS += peripherals/ms5611_i2c.c
BARO_BOARD_SRCS += boards/baro_board_ms5611_i2c.c
else ifeq ($(LISA_M_BARO), BARO_BOARD_BMP085)
BARO_BOARD_CFLAGS += -DBARO_BOARD=BARO_BOARD_BMP085
BARO_BOARD_CFLAGS += -DUSE_I2C2
BARO_BOARD_SRCS += peripherals/bmp085.c
BARO_BOARD_SRCS += $(SRC_BOARD)/baro_board.c
endif
这样 就可以根据具体的需要进行xml文件的配置了
我的自制 lisa-mv的板子 v:varition 使用的是10dof,
其实是 GY63 GY271 GY521 3个模块当然也可以使用GY86代替。
连接到i2c2上,方式和
Drotek 10DOF
一样。
配置文件和源文件差别如下:
diff --git a/conf/airframes/examples/microjet_lisa_m.xml b/conf/airframes/examples/microjet_lisa_m.xml
index aeee62d..59588d5 100644
--- a/conf/airframes/examples/microjet_lisa_m.xml
+++ b/conf/airframes/examples/microjet_lisa_m.xml
@@ -14,10 +14,13 @@
<subsystem name="fdm" type="jsbsim"/>
</target>
<target name="ap" board="lisa_m_2.0">
- <configure name="LISA_M_BARO" value="BARO_MS5611_SPI"/>
+ <!--configure name="LISA_M_BARO" value="BARO_MS5611_SPI"/-->
+ <configure name="USE_BARO_BOARD" value="FALSE"/></span>
<configure name="PERIODIC_FREQUENCY" value="120"/>
<configure name="AHRS_PROPAGATE_FREQUENCY" value="100"/>
<configure name="AHRS_CORRECT_FREQUENCY" value="100"/>
</target>
<configure name="USE_MAGNETOMETER" value="FALSE"/>
@@ -32,7 +35,9 @@
<subsystem name="telemetry" <span style="white-space:pre"> </span>type="transparent"/>
<!-- Sensors -->
- <subsystem name="imu" type="aspirin_v2.2"/>
+ <subsystem name="imu" type="drotek_10dof_v2">
+ <configure name="DROTEK_2_I2C_DEV" value="i2c2"/>
+ <configure name="DROTEK_2_MPU_I2C_ADDR" value="0xD0"/>
+ </subsystem></span>
<subsystem name="gps" type="ublox"/>
<subsystem name="ahrs" type="int_cmpl_quat"/>
@@ -46,7 +51,10 @@
<modules>
<load name="sys_mon.xml"/>
<load name="baro_sim.xml"/>
-
+ <load name="baro_ms5611_i2c.xml">
+ <define name="MS5611_I2C_DEV" value="i2c1"/>
+ <define name="USE_I2C1"/>
+ </load> </span>
<!-- extra navigation routines -->
<load name="nav_bungee_takeoff.xml"/>
<load name="nav_line.xml"/>
如果使用10dof 还得修改下面两个文件
配置地址:
diff --git a/conf/firmwares/subsystems/shared/imu_drotek_10dof_v2.makefile b/conf/firmwares/subsystems/shared/imu_drotek_10dof_v2.makefile
index 6bc352a..1df6fe9 100644
--- a/conf/firmwares/subsystems/shared/imu_drotek_10dof_v2.makefile
+++ b/conf/firmwares/subsystems/shared/imu_drotek_10dof_v2.makefile
@@ -64,6 +64,8 @@ ifndef DROTEK_2_I2C_DEV
$(error Error: DROTEK_2_I2C_DEV not configured!)
endif
endif
+# i2c address set
+IMU_DROTEK_2_CFLAGS += -DDROTEK_2_MPU_I2C_ADDR=$(DROTEK_2_MPU_I2C_ADDR)
# convert i2cx to upper/lower case
DROTEK_2_I2C_DEV_UPPER=$(shell echo $(DROTEK_2_I2C_DEV) | tr a-z A-Z)
如果AD0引脚拉高了,就不用改这里了,同时,microjet_lisa_m.xml文件的
+ <configure name="DROTEK_2_MPU_I2C_ADDR" value="0xD0"/>
也不要加了
diff --git a/sw/airborne/firmwares/fixedwing/main_ap.c b/sw/airborne/firmwares/fixedwing/main_ap.c
index 3af9b6d..77de70c 100644
--- a/sw/airborne/firmwares/fixedwing/main_ap.c
+++ b/sw/airborne/firmwares/fixedwing/main_ap.c
@@ -211,7 +211,9 @@ void init_ap( void ) {
#if USE_BARO_BOARD
baro_init();
#endif
-
+#ifdef MS5611_I2C_DEV
+ baro_ms5611_init();<span style="white-space:pre"> </span>/* I2C BARO dev (like 10DOF) used */</span>
+#endif
ins_init();
添加初始化功能。