收藏 分销(赏)

MWC-多方案DIY-经验教程.docx

上传人:仙人****88 文档编号:9258504 上传时间:2025-03-18 格式:DOCX 页数:11 大小:513.27KB 下载积分:10 金币
下载 相关 举报
MWC-多方案DIY-经验教程.docx_第1页
第1页 / 共11页
MWC-多方案DIY-经验教程.docx_第2页
第2页 / 共11页


点击查看更多>>
资源描述
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点后,机头再转向到解锁时的方向。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服