-
Notifications
You must be signed in to change notification settings - Fork 7
复杂工程问题归纳与实施方案可行性研究
本章将对四轴飞行器整体设计进行研究,结合使用背景进行相应的需求分析并置定目标任务。针对硬件搭建,硬件调试,软件驱动系统集成进行概要设计与详细设计,归纳复杂工程问题的实施方案,最后进行方案的可行性研究分析。
1.1.1 项目背景
四轴飞行器具有高灵活性,可自由实现悬停和空间中的自由移动;其机械稳定性好,不存在很大的安全隐患,适合研究;同时成本低廉、性价比较高;应用领域广泛,在玩具、航模、以及航拍等诸多领域都有投入使用;加之其结构简单,适合本科在校生进行实际项目研究。
此外,四轴飞行器还具有广阔的应用场景:在军事上,四轴飞行器的灵活性,以及低成本,低事故代价等适合进行侦查和监视工作,获取情报,近空区域执行特殊任务,是现在电子战等战斗形式的中坚力量;在工业上,可用于高危作业,有害工厂施工等有害人体健康,或者人工施工难度大的场合进行工作;而在民用上,则可以开发出移动监控探头,目标跟踪等多种功能,可谓是百花齐放。
1.1.2 目标内容
第一步完成硬件的自主选型与搭建机架。
第二步通过自主绘制打样焊接PCB转接板,实现STM32核心系统与系列外设的硬件系统集成:其中包括选用STM32F4嵌入式开发平台,在其上扩展GY-86姿态传感模块,用于确定四轴飞行器的实时飞行姿态,GY-86姿态传感器采集数据后,在STM32上完成姿态解算;遥控器与接收机通过电磁波远程传输信号,STM32上接收到控制信号后结合自身姿态数据通过PID控制算法实时调整PWM脉宽调制完成电机转速调节,同时使用ESP8266模块通过WIFI信号实现四轴飞行器和电脑上位机的通信。
第三步进行基础外设驱动的编写,使用前后台系统完成基本软件功能的集成调试。
最终目标实现能够用遥控器控制四个电机转速,并能利用上位机实时查看飞行器各项参数,能够连接匿名上位机软件实时查看飞机姿态,能够初步探索硬件一体化飞行控制实现。
1.1.3需求分析
该项目共分时三个学期完成。第一个学期主要内容为四轴飞行器机械部件搭建、四轴飞行器硬件系统设计实现以及相关软件驱动模块编写与系统集成三大模块。
根据四轴飞行器的结构,绘制出以下结构图:
图1-1 四轴飞行器结构框图
参考项目背景与目标内容,以下为四轴飞行器的DFD数据流图:
图1-1 0层数据流图
0层数据流图展示了最核心的四轴飞行器操作逻辑,用户遥控四轴飞行器,STM32核心系统产生电路信号与串口信号,分别控制飞行器相关外设和与上位机进行通讯。
对四轴飞行器STM32核心系统进行细化,得到下图1层数据流图:
图1-2 1层数据流图
图中描述了四轴飞行器的基本操作逻辑,用户通过遥控器进行遥控操作,遥控器发送无线信号,接收机接收信号并转化为PWM波供STM32芯片采集解析,同时姿态数据也由GY-86进行提供,STM32处理这些数据后,将处理结果通过引脚电信号的方式发送给飞行器相关外设,同时也将数据信息通过WIFI发送给上位机以供用户查看。
1.1.4预计完成内容
-
四轴飞行器机械部件采购与搭建
-
PCB转接板绘制打样与焊接
-
GY-86姿态数据处理并进行硬件姿态解算
-
捕获遥控器接收机产生的PWM信号
-
STM32输出PWM波通过电调控制电机转速
-
飞行器各部件工作状态由OLED屏幕显示
-
WIFI模块完成上位机通信
-
一体化集成式飞控PCB版绘制
四轴飞行器设计制作是不折不扣的复杂工程问题,经过小组讨论研究,归纳出了以下富有挑战性并值得解决的问题:
1.四轴飞行器的硬件相关部分内容学习问题:
学习过程中我们遇到了很多不熟悉的硬件相关名词,较短时间内掌握STM32的基础开发以及四轴飞行器相关外设驱动编写有很大挑战性。并且需要我们自主查找资料并提取其中关键信息进行快速学习。
2.机械部件搭建稳定性问题:
机械部件的搭建对于转接板布局以及整个四轴飞行器的硬件部分正常工作尤为重要。搭建的机械部件要求稳定且可靠,同时尽量避免部件之间产生相互干扰,否则在后期可能会对调试的正确和稳定性产生严重影响。这需要搭建部件时提前查阅相关资料,学习已有经验,多次设计与尝试,逐步找出机械部件搭建方案的最优解。
3.转接板布局合理性问题:
PCB转接板需在部件均能够稳定工作的前提下,设计最优布局和线路,同时得考虑后期扩展性和插装焊接等可维护性。
4.STM32GPIO引脚分配问题:
四轴飞行器实现的时候需要将多个外设与STM32GPIO引脚相连,如何按照部件功能合理分配相应引脚非常重要。在引脚调用的同时需要进行使能初始化,其中涉及到引脚对应的多个寄存器的设置以及相关总线时钟的使能问题。对电路的有限理解程度和交叉环境开发等因素可能会导致潜在问题。
5.系统多功能协调问题:
当STM32同时控制如GY-86、接收机、WIFI、串口、电调等多个模块时,也要完成相关数据的解析运算。如何保证各部分协调工作,应对随机模块故障,增强集成系统健壮性和稳定性等,需要在软件层面上进行详细设计。
本部分主要是为前面归纳出的问题提出解决方案,解决方案包含概要设计和详细设计,同时对所提出的设计方案进行可行性研究。
1.3.1 实施方案概要设计
实施方案总体分为3个部分。
首先是相关硬件资源的采购、调试与组装,完成飞行器雏形的搭建。其中包含了元器件的选型,机架的选择,四轴飞行器的组装,PCB转接板的设计制作,STM32主控与各个外设的硬件连接。
其次是针对每一个外设单独进行驱动编写与功能测试,保证单一功能调试正常。其中包含了WIFI模块、接收机、GY-86模块、OLED显示模块、电调等模块驱动的编写以及其对应的基础功能TIM、I2C、USART等的使能配置。
最后是完成四轴飞行器硬件各外设部分的系统集成。每一个模块功能测试正常后,利用前后台模式进行系统的集成,然后进行应用层软件的编写,使飞行器能够利用DMP硬件进行姿态解算并将解算后数据发送给“匿名上位机”软件实时显示飞行器姿态,能够通过遥控器控制四个电机进行旋转与锁定。
1.3.2硬件部分实施方案
1.硬件资源选型采购方案
组装四轴飞行器除机架外,需要一系列硬件资源,主要包含以下物品:
-
STM32核心主控芯片
-
GY-86姿态传感器(内含MPU6050姿态检测与hmc5883l地磁传感器)
-
ESP8266无线通讯模块
-
OLED显示屏
-
接收机与遥控器
-
无刷电机*4
-
电调*4
-
电池与螺旋桨
下面对每个模块的选型采购进行详细方案设计。
首先是最重要的STM32主控芯片的选择。主控芯片的选型要求首先要满足基础的功能,引脚数量要足够,外设功能得齐全,同时资料丰富。同时考虑到四轴飞行器未来的拓展需求,以及对处理速度的要求,最终小组讨论决定使用型号为STM32F411CEU6的核心处理器。该处理器采用Cotex-M4内核架构,最大主频100MHz,Flash大小512KB,RAM大小128KB,GPIO口有36个。同时支持3组USART,5组SPI,3组I2C,能够同时支持32路PWM信号采集,整体性能满足要求。
处理器型号确定后,秉持集成一体,使飞行器尽可能小的原则,经过网上资料搜索,最终确定了使用一款搭载F411芯片的最小系统板WeActV3.0。该公司设计制作的这款最小核心板结构小巧,引脚资源丰富,采用TypeC接口比较主流,最终要的是资料丰富且开源,能够在Github上查询到这款核心版的硬件设计电路图等资料,有助于进行核心系统的学习。
该核心版的渲染图和片上外设资源图下图:
图1-3 最小系统版选型
然后是相关传感器的选购。传感器的选择是尽量经济实惠,性价比高,性能稳定。市面上传感器鱼龙混杂,很容易购买到假传感器徒增烦恼,因此尽量选择规模比较大的机构进行采购。经过调研,最终在淘宝店铺选定了相应传感器:
图1-4 ESP8266、GY-86、OLED显示(从上到下)
接下来是动力系统装置的选择。考虑到飞机飞行所需要的升力,在学长前辈的帮助下,我们选择了SUNNYSKY品牌的X2212-13型号无刷电机。2212表示该无刷电机定子直径22mm,定子高度为12mm。该电机KV为980CW,意为每升高1V电压电机每分钟转速增加980转,该电机空载电流0.3A,最大连续功率高达300W,KV值低但扭力大,搭配电机建议的型号为APC9450的桨叶,最大载重3KG,符合飞行器起飞要求。同时按照电机建议,我们选用了天行者20A电调,能够达到令人满意的性能,电池也选用了格氏ACE25C2200mAh 3S航模Li-Po电池,保证稳定电流输出与安全性。
图1-5 电机 螺旋桨 电调 电池(从左到右)
最后是飞行器的控制部分,在小组成员对飞行器的综合性能以及未来拓展需求进行评估过后,我们最终决定采用FS-iA10B接收机。该接收机拥有10个通道,能够同时进行10组不同数据信号的接收,采用26mm双天线设计,支持140个2.4GHz波段,输入电压4.0-6.5V,支持数据回传,支持iBus协议,支持PPM输出,可扩展性强。
配套我们采购了Jumper-T18遥控器,该遥控器使用OpenTX开源操作系统,内部集成射频芯片5合1,能够支持2.4GHz和915MHz频率,可控制范围最大可达10KM,并且配备了4.3inch彩屏可供数据显示,支持67种通讯协议,16个通道输出,性能优秀,能够操控多种设备。
图1-6 接收机与遥控器
至此,所有硬件资源选型采购方案设计完毕,下面为四轴飞行器机架选型。
2.机架选型方案
我们都知道机架是承载整个飞行器的核心部件,所有的控制设备,动力设备,传感器等都搭载在机架上,因此机架的选择也是非常重要的。
机架的选择需要考虑以下因素:首先是机架的大小,市面上的机架主要是F330与F450两种规格,当然也有新一代的380规格的机架,即电机对角轴距380mm。我们计划选用的即为这种大小的机架。其次为机架的材质,有普通的塑料玻纤机架,也有更高级的碳纤机架。最后该考虑机架的造型以及功能。
考虑以上因素,我们第一款机架选择了一款可折叠设计的碳纤机架,但因改机架做工原因与可拓展性,最终放弃使用该机架。第二款机架选用了图腾Q380穿越机机架,可扩展性强,内部空间较大,能够满足线材的收纳,整体形象美观,机臂兼容大部分电机,底座PCB自带分电功能,开孔合理,重量仅仅165g,性价比高。
图1-7 飞行器机架
3.四轴飞行器的组装方案
在四轴飞行器硬件与机架选型采购完毕后,接下来的工作则为整个四轴飞行器硬件部分的组装。
第一步应该将机架底部分电板与电源接口连接,选取一个较大焊点将XT60接口对应正负极完成焊接。
第二步为四轴机架的组装,将机臂固定到底部分电板上,然后再将上载板合拢,拧紧螺栓,检查整体稳定性。
第三步为固定四个电机。将四个电机分别安装到机臂四角,拧紧底部螺丝,固定稳定。
第四步为连接并固定电调。先将电调与电机三个控制线进行连接,可以暂时不关注电机转向。然后将四个电调电源正负极量好长度裁切后,在分电板底部进行焊接,最后将电调用绑扎带固定到机臂上,理顺走线。
最后一步为将电池进行固定。用绑扎带将充满电的电池固定到飞机底部后,连接电池于底部分电板XT60接口。正常情况下电调通电将会自检,电机也会发出固定频率的鸣叫。至此说明硬件部分组装正常。
4.PCB转接板设计方案
考虑到如果将核心系统板直接固定在飞行器上,相关的传感器位置将无法确定,同时走线难度大且不易管理。因此我们计划设计PCB转接板,功能为连接所有的硬件装置,包括核心板,传感器,电调,接收机等外设,能够进行数据信号的传递。
我们尝试了两套工具来做PCB的设计,分别是Altium Designer和立创EDA,下面是这两款软件的使用感受:
优点 | 缺点 | |
---|---|---|
Altium Designer | 1.可自定义程度更高 2.使用稳定 | 1.操作复杂、上手困难 2.原理图库、封装库难以寻找 |
立创EDA | 1.面向国区用户,上手简单 2.有在线封装库,便捷高效 | 1.高级功能不如AD多 2.有一些小BUG |
表1-1 硬件开发工具使用感受
最终我们选定的制作PCB转接板使用的软件为Altium Designer,是一款电子产品开发系统,具体的使用说明在此不再赘述,详细使用流程可参见网上资料。我们在复杂问题归纳里面提到过相关知识的学习,因此在本部分只对设计进行解释。
首先我们经过测量和观察,发现机架上盖中心有一直径18mm的圆形打孔,可以解决线路隐藏问题。因此我们转接板底板设计采用中心打孔方式。
然后我们在计划将传感器采用可拔插设计与转接板连接,这样便于更换和调试,所有对于所有的传感器都需要设计相应母座。
在结合软件设计部分需要的引脚后,采取核心板底隐藏电调接口,接收机通道从板底引入的双面设计办法。同时单独将核心板引脚进行二次引出,便于后期机载调试。也将电源进行了扩展,3V、5V、GND接口各多引出两组便于使用。
排布好焊盘和焊孔口,利用AD进行自动布线,最后手动绘制丝印层和元器件选型,生成3D模型。
5.一体化飞控设计方案
转接板适用于开发阶段,当代码调试成功后,一体化的飞控能够最大限度缩小空间,不使用也不引出无效引脚,便于批量生成和制作。因此第二阶段我们设计制作了一体化飞控,并在次基础上进行迭代更新,设计制作了一款能够搭载更强规格处理器,据备如GPS、光流、激光测距、图传等多模块的集成式一体飞控开发板。
一体化飞控详细设计流程如下:
首先是原理图绘制。原理图的绘制是极其关键的一步,不仅要正确表示各部件之间的逻辑关系,还要考虑接线是否有利于PCB的布线,布局。根据MCU上的外设的功能和引脚复用,我们先根据外设的通讯协议为其分配引脚,根据MCU某项外设的稀缺性确定分配的顺序,比如FSMC协议的引脚是唯一且不可更改的,所以我们先为需要FSMC的SDRAM分配引脚。因为I2C是可以软件模拟的,所以只需要普通的GPIO引脚即可,可以最后分配引脚。分配完引脚后开始具体绘制原理图。
原理图阶段需要制作好相关的原理图库和PCB库,这些可以从淘宝卖家的百度网盘和Altium designer内置的搜索插件获取。
原理图绘制阶段中,我们先放置主芯片STM32F407ZGT6,并放置退耦电容,晶振等器件。接下来设计各外设模块电路。模块与MCU连接依靠网络标号。每个模块大同小异,都是信号线连接上拉电阻再接入外设芯片。外设芯片再连一些地线,控制线,电源线,电容即可。一些通讯模块比如串口CH340或WIFI模块可能还需要连接天线和晶振,接上即可。很多电阻,电容数值都有特殊的要求,这些数据主要来自外设芯片数据手册,网上资料,和淘宝芯片卖家资料。供电模块方面,我们选择LIPO电池通过2次降压,先降到5V,再降到3.3V再给MCU和外设供电。这部分需要线性稳压模块和降压模块,资料主要来自电子工程网站。画完原理图经过仔细的检查就可以开始绘制PCB了。
将原理图导入到PCB文件中,即可开始绘制PCB图。PCB最关键的问题是布局与布线,布线能否成功依赖布局是否隔离。首先,先确定要投板的厂家,从厂家的客服和网站获取相关工艺参数,比如过孔大小,导线最小宽度,板子大小,元器件到线最小间距等。得到正确的工艺参数才好开始设置编译规则。设定完规则之后,开始布局布线。先确定板子大小边框,然后将MCU放到板子中央,接着在靠近规定引脚的地方放置晶振,晶振要尽量靠近MCU,防止频率的延迟。接着在MCU周围放置各个模块,模块可以放在MCU的四边或者背后,模块放在哪一边取决于连接的引脚会靠近芯片的哪个边上,哪边靠近就放在芯片的哪一边。布局还需要考虑板子与其他机械结构和具体功能,比如机架之间的耦合。布局的最后一步是放置各模块的电阻,电容,二极管,接口,然后再微调一下即可开始布线。
布线最重要的是遵循正面走竖线,反面走横线原则。因为复杂的电路需要很多导线,如果正反面同时走了很多竖线或横线会导致某些跨度较远的线无法通过。此外,还要注意走线的宽度,通大电流的线要有更大的宽度,否则板子会烧坏。还有不能吝惜过孔,在合适的位置打孔会让走线更加整齐美观。因为线路较复杂,无法使用自动布线,自动布线器的布线也很丑。所以决定自己动手布线,过程及其枯燥。最后加上泪滴,敷铜,通过编译测试即可交给厂家投板。
至此,硬件部分实施方案结束,下面将对软件部分的设计方案进行说明。
1.3.3软件部分实施方案
在我们完成硬件部分的搭建后,接下来最重要的工作便是进行软件部分的设计。软件部分的设计将从总体设计、基础外设驱动、功能模块驱动以及系统集成四个方面进行说明。
1.软件部分总体设计方案
软件部分总体上采用HAL库编程方案,三层封装。
首先利用CubeMX软件进行基础外设的配置,如时钟、I2C、USART、TIM等,对上层功能模块留出接口。
然后建立在接口基础上,对GY-86、ESP8266、OLED、接收机、电调等功能模块的驱动进行编写。
完成各个单独功能模块驱动编写后,对系统进行集成,使用前后台逻辑,后台程序为OLED屏幕的刷新和与上位机的交互,前台程序为串口接收中断、输入捕获中断、姿态更新中断等。
最后连接“匿名上位机”,能够实时采集飞行器姿态,同时也可以用遥控器控制四个电机的解锁与转速。
2.基础外设驱动原理与设计方案
时钟配置
时钟部分是一个系统的基础,所有的操作都是建立在时钟正常工作基础之上的所以第一步为配置一个稳定并且稳定的时钟系统,能够供所有外设使用。
考虑到时钟配置的原理性问题超出了我们本部分讨论的目的,所以我们最终使用了CubeMX软件的时钟树功能进行自动配置,配置界面和结果如下图:
图1-8 STM32F411CEU6时钟树
接下来对时钟树中一些关键节点配置进行解释:
HSE高速外部时钟信号配置:
HSE是高速的外部时钟信号,可以由有源晶振或者无源晶振提供,频率从4-26MHZ不等。当使用有源晶振时,时钟从OSC_IN 引脚进入,OSC_OUT引脚悬空,当选用无源晶振时,时钟从OSC_IN和 OSC_OUT进入,并且要配谐振电容。
PLL多路复用器配置:
HSE使用的是25M的无源晶振。在设置主PLL时钟的时候,需要设置一系列的分频系数和倍频系数,配置RCC_PLLCFGR寄存器。经过设置后,我们的主PLL时钟为100MHz
系统时钟SYSCLK多路复用器配置:
系统时钟来源可以是:HSI、PLLCLK、HSE,具体的时钟配置寄存器RCC_CFGR的位1-0: **SW[1:0]**设置。我们这里设置系统时钟:SYSCLK=PLLCLK=100MHz。
AHB总线时钟HCLK配置:
系统时钟SYSCLK经过AHB预分频器分频之后得到时钟叫APB总线时钟,即HCLK,分频因子可以是:[1,2,4,8,16,64,128,256,512],具体的由 RCC_CFGR的位7-4:HPRE[3:0] 设置。片上大部分外设的时钟都是经过HCLK分频得到,至于AHB总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需粗线条的设置好APB的时钟即可。我们这里设置为1分频,即HCLK=SYSCLK=100MHz。
APB1总线时钟HCLK1配置:
APB1总线时钟PCLK1由HCLK经过低速APB预分频器得到,分频因子可以是:[1,2,4,8,16],具体的由 RCC_CFGR的位12-10:PRRE1[2:0]决定。HCLK1属于低速的总线时钟,最高为50MHz,片上低速的外设就挂载到这条总线上,至于APB1总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需设置好APB1的时钟即可。我们这里设置为2分频,即PCLK1=HCLK/2=50MHz。
APB2总线时钟HCLK2配置:
APB2总线时钟PCLK2由HCLK经过高速APB2预分频器得到,分频因子可以是:[1,2,4,8,16],具体由RCC_CFGR的位15-13:PPRE2[2:0]决定。HCLK2属于高速的总线时钟,片上高速的外设就挂载到这条总线上。至于APB2总线上的外设的时钟设置为多少,得等到我们使用该外设的时候才设置,我们这里只需设置好APB2的时钟即可。我们这里设置为1分频,即PCLK2=HCLK=100MHz。
I2C配置
I2C协议有硬件I2C和软件I2C两种。最开始我们选择的是软件I2C,从学习的角度上来考虑,我们从寄存器级实现了软件I2C,但是在实际使用的时候,特别是在高速模式下难以避免软件I2C时序不规范所带来的稳定性问题,所以我们最终选择了使用更加稳定的硬件I2C。
I2C配置分为物理层和协议层。物理层需要设置I2C使用的GPIO引脚,定义SDL和SCK并且初始化引脚时钟。因为STM32有固定复用给I2C的引脚,所以我们只需要查询手册进行对应的配置即可。协议层配置则利用CubeMX自带的配置系统,选定I2C号后,设置时钟为快速模式,然后设置时序占空比,四轴I2C采用7地址模式,自有地址1和2都设置为0,不使能双倍地址和通用呼叫模式,但是使能I2C中断。
USART配置
在四轴飞行器中,USART主要用于O与上位机进行串口通信,为WIFI模块提供下层接口。
USART的配置也分为物理层与协议层。
物理层配置中,我们需要按照手册要求使用对应的USART复用引脚,进行USART时钟和GPIO时钟的使能,然后设置引脚的输出模式以及配置USART的中断。
在协议层配置中,主要任务为和上位机约定好串口交互协议。四轴飞行器与上位机交互的过程波特率使用115200,字长8位,包含1位停止位,无校验位。采用全双工模式,不使用硬件流,采样率选择16倍过采样。
最后我们还得对printf进行重定向,这样方便我们编程人员通过printf函数向USART串口打印信息。
TIM配置
TIM定时器在四轴控制系统中起到很重要的作用。
主要功能有3个。第一是基础的计数功能,产生1us的节拍来模拟程序运行的时许,控制不同模块程序运行的频率。第二是进行接收机回传PWM波的捕获。第三是进行电调电机的PWM输出。
因此我们使用TIM1进行计数中断,利用TIM2与TIM4进行六个通道的输入捕获,利用TIM3进行四个电机控制信号的输出。
首先是计数中断的配置。我们直到TIM是挂载到APB2总线上的,在时钟配置中我们以及将APB2的时钟配置为100MHz。为达到1us的节拍,经过公式计算,我们将TIM1的PSC配置为99,将ARR配置为999,设置向上计数模式,不分频。这样就能够每隔1us产生一个中断了。然后我们将这个中断配置到用户程序的最高优先级,即不能被其他的外设中断打断。
然后是配置TIM2与TIM4的PWM输入捕获。在物理层中,设置PA0~PA3四个引脚对应TIM2的四个通道,PB8与PB9对饮TIM4的一二通道。对相关时钟进行使能,然后对GPIO引脚模式进行配置,最后初始化GPIO,配置并使能中断。在协议层中,我们也将节拍调整到1us,然后将ARR寄存器配置为最大值,用于准备捕获中断。
最后是配置TIM3的PWM输出。物理层配置与之前类似,四个电机分别对应PA6、PA7、PB0、PB1.协议层中,查询了电机和电调的说明书,配置频率为50Hz的PWM,用于电机转速的控制。
至此,基础外设驱动原理与设计方案说明完毕。
3.外设功能模块原理与设计方案
OLED驱动
OLED显示驱动部分,我们采用了开源方案,使用IIC协议进行接口的读写,接口包含了以下功能:
1.OLED初始化。 2.显存写操作。 3.数字定点显示。 4.字符定点显示。 5.字符串定点显示。 6.汉字显示。 7.BMP位图显示。
我们利用以上资源实现了:
1.飞控界面的绘制。 2.自定义数据显示方式。
GY-86驱动
GY-86包含两个传感器,分别是MPU6050,用于测量角度与加速度,HMC5883L用于测量地磁场。两个传感器与STM32进行通讯都是使用I2C协议。
因此我们对接I2C读写接口,封装GY-86寄存器的读写方式。对照GY-86的数据手册,对传感器进行初始化设置:
配置路径为:MPU6050初始化配置->开启MPU6050旁路模式->将HMC5883L挂载到MPU6050的I2C总线并初始化。具体实现代码我们在工程实现一章进行详细展示。
经过逐步迭代,我们最终的GY-86驱动实现了以下功能:
1.MPU6050初始化 2.HMC5883L地磁仪初始化 3.GY-86初始化 4.I2C基本读写接口对接 5.陀螺仪数据获取 6.加速度计数据获取 7.温度计数据获取和解析 8.地磁仪数据获取 9.宏定义所需寄存器表 10.陀螺仪零偏矫正 11.磁力计校准 12.陀螺仪显式数据输出 13.磁力计显式数据输出 14.提供DMP接口
ESP8266驱动
ESP8266作为与上位机通讯的模块,我们采用了TCP/IP协议进行数据收发,以下是相关的配置流程和功能模块。
在配置之前需要先将ESP8266的读写操作对接到USART的读写接口,在完成printf重定向后直接调用printf即可。
通过查询AT指令集手册可以获得TCP_Client透传模式的配置方法:首先发送复位命令,然后将ESP8266设置为AP模式,并且设定wifi基本信息。然后设置为单链路联络,配置TCP服务,选择透传模式,最后开始透传。
电机驱动
电机驱动的主要目的是封装对电调的控制函数,在加载电机驱动之前需要先对接TIM3的相关接口。
电机驱动主要实现了以下功能:
1.电机初始化。 2.设定电机转速。 3.电机测试。 4.电机锁定。
接收机驱动
接收机驱动主要是完成对接收机信号的捕获和解析,其重点是PWM的输入捕获。
在使用之前需要先初始化捕获中断,将时钟频率置为100MHz,这样CNT每经过1us计数一次。
中断程序流程图为:
图1-9 中断捕获流程图
DMP姿态解算驱动
如果选择了使用DMP姿态解算,那么前面的GY-86初始化实际上可以直接调用DMP固件库函数完成。
DMP姿态解算采用的MPU6050官方固件库,我们需要完成的工作就是将官方固件库移植到STM32上,需要完成的工作如下;
1.预留I2C读写接口。 2.预留毫秒延迟接口。 3.预留节拍获取接口。
完成接口对接后,我就即可使用DMP固件库完成模块的初始化。
4.系统集成方案
在完成基础外设驱动的编写以及功能模块驱动的编写后,我们的任务则为进行整体系统的集成。实现的功能目标是能够利用遥控器进行四个电机转速的控制,同时能够在上位机中实时查看到飞行器的姿态。
因此我们设计采用前后台系统,后台程序为OLED屏幕的刷新和与上位机的交互,前台程序为串口接收中断、输入捕获中断、姿态更新中断等,最终前后台逻 辑如图所示:
图1-20 前后台系统示意图
1.3.4 实施方案可行性研究
前两个小节分别对四轴飞行器的硬件部分和软件部分进行的实施方案设计,本章将对该实时方案进行提炼归纳,并且给出该方案的可行性研究说明。
- 实施方案归纳
完成需求分析以及任务制定:进行综合课程设计I需求分析,绘制相关数据流图。结合小组成员时间以及知识掌握水平制定任务,完成分工。
相关基础知识学习:通过网上各大论坛(野火,正点原子,CSDN等)提供的开源免费学习资料和相关实战视频,理解STM32内部设计和使用方法。确定并学习使用课程设计需要用到的IDE和软件,如MDK5等进行工程开发调试,Altium Designer绘制PCB转接板,STM32CubeMX软件进行引脚的选定等。通过和学长前辈进行沟通,学习经验教训,少走弯路。在有限的时间里掌握更多知识。
机械部件选型采购搭建:按照3学期课程设计相关要求,选择合适的STM32主控芯片型号,采购机架、螺旋桨、电机、电调、GY-86传感器、接收机、遥控器、WIFI模块、供电模块等相关机械部件,认真阅读相关部件说明手册,确定搭建顺序,和同学、学长交流,结合自己的想法完成机械部件搭建固定与调试。
PCB转接板绘制打样焊接:学习Altium Designer官网提供的说明手册,查找网络文字资料以及视频资源进行入门学习。有一定基础后开始尝试绘制较为简单的PCB 板,熟悉软件的使用方法。在完成STM32引脚分配,以及明确项目外设引脚需求后,设计符合要求的转接板。并制作实物验证其电路设计的正确性。调试正常后固定到四轴飞行器机架上,完成与各个部分的连线。
WIFI模块相关设计:首先将STM32最小系统板与WIFI模块进行连接,认真阅读官方说明文档完成接线。通过串口调试,上位机发送AT指令加以检验。确保WIFI模块能够正确稳定地传动数据信息。最后将WIFI模块接入PCB转接板进行集成测试。
I2C以及GY-86相关设计:STM32板载硬件I2C电路,当然也可以通过GPIO引脚实现软件模拟I2C信号协议进行通信,出于工程开发和效率考虑,我们选择使用STM32板载硬件I2C进行与GY-86姿态传感器的通信。结合GY-86相关参考手册与说明文档,完成回传数据采集与含义解释。软件I2C功能作为备用,如果后续阶段有需求,或者遇到了难以解决的硬件稳定性问题,在低内聚高耦合的设计框架下,我们可以快速更改为软件 I2C 并且不影响其他功能。
接收机电调相关PWM输入输出设计:接收机工作后可将遥控器发送的通道信号转换为PWM波进行输出,STM32利用TIM外设进行PWM的输入捕获。四个与电机相连的电调通过STM32输出PWM波进行控制,同样使用TIM外设产生可控PWM驱动电调调节电机转速。我们采用中断的方式捕获接收机传来的PWM信号,在STM32中进行信号处理,将接收机采集到的四个通道信号分别输出给4个电调,单独完成四个电机转速的控制。
串口与OLED屏幕显示设计:为便于实机调试数据的显示,我们计划在转接板上为OLED显示屏预留位置,设计相应的硬件接口连接OLED显示屏和STM32最小系统板,编写相关屏幕驱动,在系统集成过程中将每一步骤的设备情况显示在OLED屏幕上,也将GY-86采集陀螺仪、加速度、地磁信号、六个TIM通道捕获到的PWM数据和电机转速实时显示在屏幕上,便于调试。
2. 可行性研究
**技术可行:**在指导老师带领下每周开会共同讨论疑难点;由经验丰富的同学给出建议或者解惑;分小组讨论共同学习进步;小组成员利用C语言编写硬件驱动程序,使用MDK软件进行交叉开发,学习使用Altium Designer绘制PCB转接板。同时时间充足,技术成熟,网络资源丰富。加之有经验丰富的老师指导。所涵盖技术有绘制PCB转接板,机架电机选型和安装、电调接收机选型安装等硬件操作。
**课题合理性:**本课题研究理论假设合理,目标内容清晰,实施的可操作性较强,阶段实施过程与目标明确,完成课题的可行性有充分保证。
**经济可行性:**四轴飞行器与航空飞机等大型飞行器相比价格低很多。在学生可承担范围。利用较少的经费动手实践学习更多的知识。
法律可行性:对于项目的开发和使用来说,必须符合法律规定要求。该软件完全符合法律要求,可以自由开发使用。
3. 需求规则
**可靠性需求:**四轴飞行器属于嵌入式软件项目开发。要求安全且可靠。应确保产品在正常环境中的可靠稳定以及在恶劣环境下相对安全。不应该出现电池漏电、飞机失控等安全隐患和安全事故。
**实时性需求:**要求飞行器在遥控器做出操作指令后应该立即响应。
功能性需求:
硬件搭建完成后,四个电机能够按照正常方向旋转;
PCB转接板和最小系统板连接后,所有硬件能够完成焊接、插接并且正常通电;
PCB转接板模块分布合理,符合审美。避免出现硬件连接后线路杂乱交错情况;
能够利用连接调试好的WIFI模块进行地面端上位机和飞行器之间的信息交互;
传感器实时数据(如GY-86等)能实时向地面端上位机传送飞行器所处状态的陀螺仪、加速度计、地磁仪、电机转速等状态。
4. 开发运行环境:
**编程语言为C语言:**飞行控制系统由C语言编写
**开发板/STM32最小系统板:**STM32F411CEU6单片机性能高、成本低、功耗低,适用于嵌入式开发,是四轴飞行器的处理核心;
采用交叉开发模式:交叉开发为在一台通用PC上对软件进行编辑、编译、链接,然后下载到嵌入式设备中运行调试的开发过程。