· STMicroelectronics STM32F4VGT6 Cortex M4 MCU
· 板载 STLinkv2 编程器
· 板载5V和3V稳压电路
· MPU6050 陀螺
· HMC5883 磁场计
· MS5611 气压传感器
· UBLOX GPS NEO 6M
· 两个3.3V TTL UART (UART3, UART6, 5V 兼容)
· 一个
I2C3.3V bus (I2C2, 5V兼容)
· 11个舵机 PWM 输出
· 4 个状态灯(绿黄蓝红)
· 1个LIS302DL MEMS 加速度计接在SPI1
· 6 个ADC 模拟电压采集 (4号口用于电池电压采集)
· 8 个遥控 PWM 输入
2 细节特征
10 DOFIMU GY-86
传感器使用GY-86 IMU板,该板自带5V转3.3V的电路。GY-86(MPU6050-HMC5883-MS5611) 的硬件与 Drotek 10DOF很像,但它们的I2C地址不同,因此需要对PPZ代码做适当改动。MPU6050的地址是7位长度的b110100X,最后一位的X是LSB位,由AD0的逻辑电平决定。在GY86中,AD0被拉低到GND,因此地址是b1101000。因为I2C的数据长度被定义为8位,所以GY-86的7位地址左移一位变成8位后是b11010000,以16进制表示就是0XD0
为了启用GY-86模块,在PPZ的机体配置文件里要加入以下代码
File: conf/airframes/myplane.xml |
<subsystem name="imu" type="gy86_10dof"> <configure name="GY86_I2C_DEV" value="i2c2"/> <define name="IMU_GY86_ORIENTATION_IC_UP" value="1"/> </subsystem> |
MS5611与MPU6050并联在I2C2总线上。读MS5611的代码不在IMU的驱动上。如果要启用MS5611,机体配置文件上要插入这句话<definename="USE_BARO_MS5611"/>
启用了还不够,为了使读到MS5611的数据用于定点和导航,以下代码要加入到PPZ的机体配置文件。
File: conf/airframes/myplane.xml |
<modules> ... <load name="baro_ms5611_i2c.xml"> <define name="SENSOR_SYNC_SEND"/> <define name="MS5611_I2C_DEV" value="i2c2"/> <define name="MS5611_SLAVE_ADDR=0xEE"/> <define name="MS5611_SEND_BARO_ALTITUDE"/> </load> </modules> |
|
PPMEncoder编码器
ArduPPM是APM项目里的8通道编码器,现在被Hyper X飞控采用了。ArduPPM程序被运行在一块arduino pro mini上。编码版能直接与接收机插一起的构型是引用(shan zhai)了国内ppz论坛一个大虾的开源方案,欢迎编码板原作者批评指正
。
3 引脚说明
LED |
Pin # | Name | Type | Description | Color |
PD13 | LED_3 | Out | above LIS302DL | Orange |
PD12 | LED_4 | Out | left of LIS302DL | Green |
PD14 | LED_5 | Out | right of LIS302DL | Red |
PD15 | LED_6 | Out | below LIS302DL | Blue |
PA9 | LED_9 | Out | same as USB power (VBUS, needs to be enabled in header file) | Green |
UART3 |
Pin # | Name | Type | Description |
PD8 | UART3 TX | Out | UART3 Serial Output |
PD9 | UART3 RX | In | UART3 Serial Input |
UART6 |
Pin # | Name | Type | Description |
PC6 | UART6 TX | Out | UART6 Serial Output |
PC7 | UART6 RX | In | UART6 Serial Input |
I2C2 |
Pin # | Name | Type | Description |
PB10 | I2C2 SCL | I/O | I2C2 Serial Clock |
PB11 | I2C2 SDA | I/O | I2C2 Serial Data |
ADC |
Pin # | Name | Type | Description |
PB1 | AUX1 | I/O | ADC_1 |
PC5 | AUX2 | I/O | ADC_2 |
PC4 | AUX3 | I/O | ADC_3 |
PA4 | AUX4/BAT | I/O | ADC_4, is used for BAT voltage |
PC1 | AUX5 | I/O | ADC_5 |
PC2 | AUX6 | I/O | ADC_6 |
PWM |
Pin # | Name | Type | Description |
PE9 | PWM0 | Out | Servo 1 |
PE11 | PWM1 | Out | Servo 2 |
PE13 | PWM2 | Out | Servo 3 |
PE14 | PWM3 | Out | Servo 4 |
PE5 | PWM4 | Out | Servo 5 |
PE6 | PWM5 | Out | Servo 6 |
PA3 | PWM6 | Out | Servo 7 |
PA2 | PWM7 | Out | Servo 8 |
PA1 | PWM8 | Out | Servo 9 |
PA0 | PWM9 | Out | Servo 10 |
PB14 | PWM10 | Out | Servo 11 |
PB15 | PWM11 | Out | Servo 12 |
PPM |
Pin # | Name | Type | Description |
PC9 | PPM | In | PPM input |
4 Daughterboard分线板
Hyper X基于STM32F4 Discovery,是为具有一定动手能力的并且刚接触飞控开发学生用户设计的。该飞控被我设计得尽可能地简单。在一些数据接口上,我利用了MCU的电平兼容性,省掉了电平转换芯片。另外,分线板上不用对I2C数据口做上拉,STM32F4Discovery母板和GY-86IMU板上已有上拉电路。为了提高舵机控制部分的可靠性,在几个PWM输出口上都有100欧姆的阻抗匹配电阻,该电路我实测过在3米长数据线里把500KHz信号传3米妥妥的。两个UART串口的电源各有一个100nf电容做旁路解耦以保证母板供电稳定(这个实测没必要,我调试时候作死地把9块9包邮的超大波纹的山寨USB手机电源直接接开发板上了,实测不死机,discovery板自带的稳压电路已经够用)。ADC1至4有1N4148高速开关管组成的钳位电路,只要不是手残接到220V市电了,接到继电器、接到马达、就算12S电池反接,各种作死也不会挂。诚然,ADC提高稳定性往往要牺牲采集精度。如果把1N4148换成1N4007整流管,那么就算380V工业用电长时间接着也不怕了,但ADC的精度也就彻底废了。我选用的是漏电流6uA的1N4148开关管组成的钳位电路,虽然漏电流已经很小了,但测量微小电压信号时依然不可避免地会引起失真。ADC分压电路在5V输入时候的电流大约200uA,数量级与漏电流差了10的二次方,钳位电路的影响可以忽略。但是换做微电压,比如0.1V输入时,分压电路的电流是4.5uA,这就与钳位电路的漏电流在一个数量级上了,误差就会很大。因此ADC1至4可以接电压电流模块,但不适合红外平衡传感器那种需要高精度的场合。ADC5和6没有做保护,但保留了对微电压信号的测量精度。
5 Build the code代码编译
1 解压我提供的ppz代码补丁,该补丁是个叫paparazzi.tar的压缩文件
2把里面的文件复制到ppz的工作目录里,我已经按文件夹的名字布置好各个文件了,放到对应的文件夹下。
3启动ppz地面站命令代码是cd ~/paparazzi && ./paparazzi
4在AC选项里选择我配置好的一个飞机,叫MYAC,它是个quadshot飞行器。其他的配置见图。
5先点Build,然后点Upload
6 可以上天咯!
6 STLink上传程序的一些细节
要用到st_flash 和st_util两个程序。我提供的虚拟机里已经做了stlink的部署,所以可以直接点upload上传。
如果你不用我提供的地面站,我也欢迎使用我编译出来的stlink程序,目录在我提供的虚拟机里的~/stlink文件夹或/bin文件夹下。把st_flash 和st_util两个文件拷贝到你的linux电脑的/bin目录,并给执行权限,完事。