资源描述
QQ: 110671958
2类板子:
1. 14路数字输入输出口:工作电压为3.3V或者5V,每一路能输出和接入最大电流为40mA。每一路配置了20-50K欧姆内部上拉电阻(默认不连接)。除此之外,有些引脚有特定的功能
§ 串口信号RX(0号)、TX(1号): 提供TTL电压水平的串口接收信号,可以与6脚Header通孔相连。
§ 外部中断(2号和3号):触发中断引脚,可设成上升沿、下降沿或同时触发。
§ 脉冲宽度调制PWM(3、5、6、9、10 、11):提供6路8位PWM输出。
§ SPI(10(SS),11(MOSI),12(MISO),13(SCK)):SPI通信接口。
§ LED(13号):Arduino专门用于测试LED的保留接口,输出为高时点亮LED,反之输出为低时LED熄灭。
2. 6路模拟输入A0到A5:每一路具有10位的分辨率(即输入有1024个不同值),默认输入信号范围为0到5V,可以通过AREF调整输入上限。除此之外,有些引脚有特定功能
§ TWI接口(SDA A4和SCL A5):支持通信接口(兼容I2C总线)。
3. Reset:信号为低时复位单片机芯片。
如果采用以下10DOF,
GY-86 10DOF MS5611 HMC5883L MPU6050模块 MWC飞控传感器模块
资料下载地址:
或
10DOF模块(三轴陀螺仪+三轴加速度+三轴磁场+气压)
采用沉金PCB工艺
使用芯片:MPU6050+HMC5883L+MS5611
供电电源:3-5v
通信方式:IIC通信协议(完全兼容3-5v系统,含LLC电路)
尺寸:2.2cm*1.7cm
请打开
#define GY_86 // Chinese 10 DOF with MPU6050 HMC5883L MS5611, LLC
(1) 如果使用PPM遥控器, 则连接PPM的8个通道:
首先看定义 def.h
//RX PIN assignment inside the port //for PORTD
#define THROTTLEPIN 2
#define ROLLPIN 4
#define PITCHPIN 5
#define YAWPIN 6
#define AUX1PIN 7
#define AUX2PIN 0 // optional PIN 8 or PIN 12
#define AUX3PIN 1 // unused
#define AUX4PIN 3 // unused
如果打算在pro mini上使用AUX2,那么打开
#define RCAUXPIN8
或者//#define RCAUXPIN12
连接好PPM接受芯片的PIN到上述PIN.
那么数据的获取在RX.ino
// predefined PC pin block (thanks to lianj) - Version without failsafe
#define RX_PIN_CHECK(pin_pos, rc_value_pos) \
if (mask & PCInt_RX_Pins[pin_pos]) { \
if (!(pin & PCInt_RX_Pins[pin_pos])) { \
dTime = cTime-edgeTime[pin_pos]; \
if (900<dTime && dTime<2200) { \
rcValue[rc_value_pos] = dTime; \
} \
} else edgeTime[pin_pos] = cTime; \
}
ISR(RX_PC_INTERRUPT) {
….
RX_PIN_CHECK();
}
rcValue的数值就是各个PIN的数值。
读取流程:
loop () à computeRC() à readRawRC()à
data = rcValue[rcChannel[chan]]; / ISR(RX_PC_INTERRUPT) { RX_PIN_CHECK();}
如果使用PPM在一根PIN上(PPM sum signal, on digital PIN 2),则修改config.h
#define SERIAL_SUM_PPM 具体SUM SIGNAL中通道顺序需要看PPM接收器编码规则。
(2) 如果使用蓝牙串口数传及控制飞机:
首先在config.h定义 #define RCSERIAL 并且不要定义FAILSAFE ://#define FAILSAFE
读取流程:
Loop() à computeIMU() à annexCode() à serialCom() à
c = SerialRead(); evaluateCommand(); à
void evaluateCommand() {
switch(cmdMSP[CURRENTPORT]) {
case MSP_SET_RAW_RC:
for(uint8_t i=0;i<8;i++) {
rcData[i] = read16();
}
headSerialReply(0);
break;
…….
}
从而得到rcData;
在PC的上位机上使用, 则发现HOST上位机并没有实现MSP_SET_RAW_RC,网上有一个例子,是用游戏手柄来控制电脑的上位机软件,进而通过串口操作飞控。
MultiWiiConf_2_1JoyStick
其添加的关键代码如下:
if ((time-time5)>40 ){
time5=time;
payload = new ArrayList<Character>();
payload.add(char((int)rightX % 256));
payload.add(char((int)rightX / 256));
payload.add(char((int)rightY % 256));
payload.add(char((int)rightY / 256));
payload.add(char((int)leftX % 256));
payload.add(char((int)leftX / 256));
payload.add(char((int)leftY % 256));
payload.add(char((int)leftY / 256));
payload.add(char(1500 % 256));
payload.add(char(1500 / 256));
payload.add(char(1500 % 256));
payload.add(char(1500 / 256));
payload.add(char(1500 % 256));
payload.add(char(1500 / 256));
payload.add(char(1500 % 256));
payload.add(char(1500 / 256));
sendRequestMSP(requestMSP(MSP_SET_RAW_RC,payload.toArray(new Character[payload.size()])));
}
当然有一款安卓APK,也是实现了此MSP_SET_RAW_RC,
MultiWii EZ-GUI
QQ: 110671958, 我简单修改了EZ-GUI的使用方式及软件兼容性问题,有需要的联系我.
(3) 如果使用有刷电机,比如空心杯电机:
引脚定义参见Output.ino:
uint8_t PWM_PIN[8] = {3,9,11,10,6,5,A2,12}; //for a quad+: rear,right,left,front
首先在config.h定义 #define EXT_MOTOR_RANGE
这样的话行程由PPM的[1000;2000] => PWM的[0;250]。这是针对328P单片机的,其它型号的单片机请自行研究更改。
关于无刷改有刷的问题:无刷信号是1ms-2ms脉宽的PPM信号,而有刷信号是0-100%占空比PWM的信号,两者是不兼容的。
2、一上电马达就旋转的问题:328P的PWM输出脚D9/D10/D11/D3接下拉电阻10k即可。
(4) 如果使用无刷电机,则ESC电子调速控制器的连接及参数如下:
引脚定义参见Output.ino:
uint8_t PWM_PIN[8] = {3,9,11,10,6,5,A2,12}; //for a quad+: rear,right,left,front
对电调的校准方法:
去掉//#define ESC_CALIB_CANNOT_FLY这句代码前面的两条斜线,启用这句代码,并将改过的程序烧录到飞控板里。烧录完成后,拔掉FTDI,接上电池,这时你会听到一段奇怪的音调,等待一分钟左右,拔掉电池,重新插上FTDI,将#define ESC_CALIB_CANNOT_FLY这句代码注释掉,再次烧录到飞控板里,至此校准电调完成。
(5) 解锁/枷锁 ARMED/DISARM
解锁前,必须对CALIB_ACC/CALIB_MAG进行校准,写入保存。
默认情况下
使用油门最低+方向YAW最高,就是解锁,然后油门最低+方向最低,是枷锁。
如果你的遥控器,或者游戏手柄不太顺手,你可以更改用油门+ROLL组合来实现相同的方式,
请修改config.h 为:
//#define ALLOW_ARM_DISARM_VIA_TX_YAW
#define ALLOW_ARM_DISARM_VIA_TX_ROLL
如果想实现,简单的油门最低,就是停止电机,则修改config.h为:
#define MOTOR_STOP
(5)打开GPS Follow me功能
修改config.h
#define USE_MSP_WP
当然还有GPS_HOLD,定点悬停。
GPS_HOME,找回功能。
飞控调试经验总结:
(1) 桨的振动影响很大的,压住飞机,推油门,如果桨会摆动那就不用飞了,没法控制的!
的MWC 开始也是狂跳舞,没有怎么改程序。根本原因,四轴震动问题。换了机架和电机后,稳。
(2) MWC自旋/开自稳晃动问题的解决:下面这个最关键:
很多人搞MWC,发现打开自稳后飞行器晃动,我以前也是这个样子,纠结了好久,最后测底研究代码,发现了问题所在,共享出来给大家。
连上上位机,转动传感板,向前转动,也就是机头下沉,ACC里PITCH应该变正数,值和角度有关,GYRO里PITCH应该变正,停止转动时归零,反向转动抬高机头,则ACC.PITCH变负的,GYRO.PITCH变负,停止转动归零。
机头向前,向右倾斜,ACC.ROLL变正,值和倾斜角度相关,GYRO.ROLL变正,停止转动归零,反向同理数值相反。
如果有哪项的数值变化方向不对,打开config.h
找到类似如下的地方:
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = Y; gyroADC[PITCH] = -X; gyroADC[YAW] = -Z;}
#define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = -X; accADC[PITCH] = -Y; accADC[YAW] = Z;}
哪项不对,就改哪项的符号(X或Y前面的负号),例如发现 ACC里PITCH方向不对,那就把上面的accADC[PITCH] = -Y改成accADC[PITCH] = Y,其他同理。
改好后,重新刷进去,适当减小PID,开自稳,爽飞吧。
MAG里各项的变化也保持和GYRO相同,方法相同。:
也就是说,如果你找不到config.h里的标准传感器组合,那么自己单独打开某个传感器时,比如MPU6050,那么一定记住检查上述是否一致,不一致就要改#define GYRO_ORIENTATION等等。
(3) 自旋问题:
四个电机的输出值不一致,解决了就是你说的LEVEL的 I值 我改成0.000-0.001就好了。
陀螺仪的z轴反向看看。之前我也是这个问题。
哈哈,你有没有在安装控制板的时候使用铁质的螺丝,螺母?
我就被这个给坑了。
电调是否和控设定了最大油门和最小油门 -这个比较重要,我之前就换了控,没从新设定,导致旋转。
电机轴松动、浆不水平,高度不一样都会造成自旋。
真个飞机的浆方向搞错,也会自旋。
试试方向YAW可对,比如让机架水平左旋,看GUI图里那个机架也向左旋,要是不对,应该改改config.h里的#define MAG_ORIENTATION(X, Y, Z) {accA等。
建议:首先不用飞控板子,直接把四个电机连到一起,同时接到接收器的油门通道上,然后测试。这样能保证机架、电机、浆的平衡。
重点看上述(2)
(4) 定高问题:
气压定高操作方法:
刚起飞时,关闭气压定高BAR开关,等飞到一定高度,然后打开它,就OK了。
GPS定高方法:
起飞前用安卓地面站在地图上选一点,长按地图,出现对话框,输入高度,然后选HOLD。
之后起飞,飞机自动飞到那个坐标及高度。
(5) 失控保护FailSafe问题:
这个一定要打开:config.h
#define FAILSAFE
测试步骤:拿下所有浆,解锁、开油门让电机转起来(稍微快点也可以),关闭遥控器电源,等待1秒,发现电机转速会降低,然后等20秒,电机应该停止转动,并自动上锁。
使用GPS方法:
i2c-gps-sonar-nav 板子
Arduino based GPS and NAV co-processor with I2C protocol
使用导航板前,需要在Multiwii固件中启用I2C-GPS功能(建议MWC固件版本2.1或以上):
#define I2C_GPS// Enable I2C-GPS
使用导航板前,请在MWC固件中填写地磁偏移量,如果忽略此步骤,磁阻的罗盘度数与GPS罗盘度数可能会产生误差,影响自动返航时航向的准确性。不同地区的地磁偏移量差异很大,请根据实际情况自行设置。
例:#define MAG_DECLINIATION 3.96f
ARM:解锁指示(解锁成功后会变成绿色)
ANGLE:自稳功能(2.2以前的固件显示为ACC.需要加速度计,MWC-2012 MWC-MEGA都支持)
HORIZON:3D模式(激活后自动关闭ANGLE功能,请初级玩家慎用)
BARO:高度保持功能(需要气压计, MWC-2012 MWC-MEGA都支持)
MAG:航向保持功能(需要磁阻,MWC-2012 MWC-MEGA都支持)
HEADFREE:CF功能,也就是俗称的无头功能(需要同时激活MAG)
CAMSTAB:云台自稳功能(需要在固件中开启云台功能)
GPSHOME:自动回航功能(需要GPS模块,并且同时激活MAG)
GPSHOLD:定点功能(需要GPS模块)
Arco是特技飞行动作,不开启自稳(也就是Angle的对立)Horizon是先进自稳模式,只有在满摇杆输入时暂时取消自稳,摇杆输入柔和时自动维持自稳,属于Angle和Arco的结合。在MWC官方Wiki上给出的说明说Angle模式已经过时了,以后可能会取消,建议使用Horizon模式。Baro是气压计定高模式,开启后飞行器将维持当前高度。Mag是锁尾模式,用来抑制自旋漂移;HeadFree是无头模式,在解锁时刻记录当前指向,并以此指向作为二维坐标轴,无论YAW如何,前后左右的朝向均不变;HeadAdj是空中重定义无头,以开启的瞬间飞机的正方向重新定义无头参考系(这个功能除非你是老手否则不建议用,脑子一不清楚很容易搞不清方向然后炸机)
MAG:航向保持功能,是指通过磁阻来保持航向,可以避免飞行器的非操控原因的自旋,第一次打开时,机头会自动转向(指向解锁时还是上电时或真北我没注意,因为我们的飞场三个方向是一样的)。
HEADFREE:CF功能,也就是俗称的无头功能,不需要同时激活MAG,是指飞行器的倾斜与横滚根据飞行器解锁时机头指向关联,与飞行器实际的机头指向无关。例如,无论飞行时机头如何指向,往前推杆,飞行器就向解锁时机头指向的前方飞去。注意,是解锁时机头指向。(具体无头模式功能的详细说明你可以看其他帖子)
另外,打开GPSHOME或GPSHOLD时,都需要磁阻的辅助,不需要同时打开MAG,也不会自动打开MAG。但需要打开ANGLE功能,否则不工作。
在GPSHOME时,打开MAG,机头会自动转向HOME点方向后开始返航,到HOME点后,机头再转向到解锁时的方向。
展开阅读全文