资源描述
.本科毕业设计(论文)( 2012 届 )题 目:四旋翼飞行器遥控发射接收系统设计 分 院:信息工程分院专 业:电气工程及其自动化班 级:12电气本1姓 名:赵浩锋学 号:12303653144指导老师:孙跃完成时间:2016年3月.温州大学城市学院学位论文原创性声明本人郑重声明:所提交的学位论文是本人在导师的指导下,独立进行研究工作所取得的研究成果。除文中已经加以标注引用的内容外,本论文不包含其他个人或集体已经发表或撰写过的研究成果,也不含为获得温州大学城市学院或其它教育机构的学位证书而使用过的材料。对本文的研究作出重要贡献的个人和集体,均已在文中以明确方式标明。本人承担本声明的法律责任。作者签名:日期: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权温州大学城市学院可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密,在_年解密后适用本授权书。2、不保密。(请在以上相应方框内打“”)作者签名:日期: 年 月 日导师签名:日期: 年 月 日摘要:四旋翼飞行器以其结构新颖、机动性强、性能卓越等特点,使其在军事、民用及科技领域都有很强的研究和应用价值。由于它用四个螺旋桨进行飞行,因此它的飞行姿态保持能力比单旋翼飞行器更强,升降所需要的空间也较小,且其在障碍物较多的情况下仍具有很强的操纵性。根据这些特点四旋翼飞行器比单旋翼飞行器更适合在室内、街道、森林等复杂环境下的进行拍摄和救灾工作。本文以STM32处理器为核心;无线数据通讯模块采用的是NRF21L01模块实现。经过试验,飞行器能够准确接收到来自地面的控制指令并完成相应的飞行任务,实现垂直起降、悬停等飞行姿态。关键词:四旋翼飞行器;无线通信;微控制器 Abstract:Four-rotor aircraft for its novel structure, high mobility, high performance features, making the military, civilian and scientific and technological fields have a strong research and application. Because it uses four propellers flight, flight attitude so that the ability to maintain greater than single-rotor, the space required for the lift is small, and it still has a strong maneuverability in case more obstacle. According to these characteristics four-rotor aircraft more suitable than single-rotor aircraft shooting and relief work in the interior, streets, forests and other complex environments.In this paper, core processor is used STM32; wireless data communication module is used NRF21L01 modules. After testing, the aircraft can accurately control commands received from the ground and complete the mission, achieve vertical takeoff and landing, hovering and other flying attitude.Key Words:Four-rotor aircraft; Wireless communication; Microcontroller . 目 录摘要IIAbstractIII一、绪论1(一)课题研究的目的和意义1(二)国内外发展及研究现状11.国内四旋翼飞行器的研究12. 国外四旋翼飞行器的研究1二、总体方案设计3(一)总体设计原理3(二)总体设计方案31.系统硬件电路设计方案32.各部分功能作用33.系统软件设计方案4三、硬件电路设计52.无线通信模块电路设计63.实物介绍9四、系统软件设计11(一)Keil MDK5.12简介111Keil MDK概述112. Keil MDK功能特点11(二)软件设计框图11结论13致 谢14参考文献15附录16一、绪论本章主要介绍了关于四旋翼飞行器研究的背景和意义,和国内外高校以及研究机构对四旋翼飞行器研究的现状。本章主要由课题研究的目的和意义,国内外四旋翼飞行器的研究和论文的主要研究内容等几个部分组成。(一)课题研究的目的和意义随着微电子、微导航、微机电技术的广泛运用,无人机技术很快就在全世界范围内掀起了研究热潮,并得到了快速且长足的发展。相对于其他无人机而言,四旋翼飞行器的结构较为简单,成本也相对较低,方便维修和护理。除此之外,四旋翼飞行器还具有体积小、重量轻、控制灵活方便、可垂直起降、悬停等特点,不论是在军事领域或是民用领域都得到了非常广泛的运用。(二)国内外发展及研究现状1.国内四旋翼飞行器的研究目前,我国的一些高校和科研机构在四旋翼飞行器的研究上也取得了长足的发展。比如国防科技大学,哈尔滨工业大学和南京航空航天大学等。国防科技大学早就在2004年开始研究微小型飞行器的相关技术,是我国最早一批开展对四旋翼飞行器研究的高校之一,他们使用了自抗扰控制器(ADRC)算法以及反步法这两种方法来对四旋翼飞行器的控制系统进行设计。在接下来的几年里,南京航空航天大学、南京理工大学等等高校也进行了对四旋翼飞行器的理论分析和计算机仿真,并都制作了属于自己的四旋翼飞行器。同时,四旋翼飞行器在商业上的应用也越来越广泛,在2013年9月3日,顺丰就在广东东莞松山湖区域进行了无人机送货内测。顺丰自主研发了该无人机的内置导航系统,该飞行器飞行高度约为100米,落点误差基本上能够控制在方圆两米以内,同时可以对路线和目的地来进行预先设定。如果测试可行,就可以大量减少人力成本。除此以外,越来越多的四旋翼飞行器以一种娱乐设备的形式出现在大众的视线里。通常这种四旋翼飞行器都携带着摄像头,用户可以通过手持设备来对飞行器进行控制,以此来给用户带来乐趣。2. 国外四旋翼飞行器的研究国外四旋翼飞行器的发展非常迅速,因为他们在这一领域已经拥有了非常悠久的历史,同时还有着深厚底蕴的研发团队。四旋翼飞行器在多旋翼无人飞行器中是较为常见的一种类型,其对硬件平台的要求较高,相应的难度也较大。国外有很多高校和科研机构都做出了一定的成果,有进行室外研究和室内研究的,其中进行室外研究的有美国斯坦福大学,日本千叶大学以及美国奥克兰大学和法国贡比涅技术大学等。进行室内的有美国麻省理工大学,美国宾夕法尼亚大学和瑞士联邦技术机构等。除了高校和科研单位,国外的一些商业公司也加入到对四旋翼飞行器的研究行列,如美国的Draganfly公司和德国的Microdrone GbmH公司等。近年来,国外研发了很多高性能的飞行器。在欧美发达国家四旋翼飞行器已经在军事和商业领域都取得了非常显著的成就。其中比较具有代表性的就是Draganflyer X4、Parrot AR.Drone Quadricopter。Draganflyer X4是美国Draganfly Innovations Inc研发的遥控飞机。如图1.1所示。该飞行器具有良好的可靠性和稳定性,并且它还具有悬浮功能,对于拍摄有很大的帮助。当控制器失控时,它甚至可以实现自动着陆,从而保证飞行器和摄像设备的安全。图1. 1 二、总体方案设计(一)总体设计原理本次设计硬件主要为遥控器部分,处理器采用32位基于Cortex-M3内核的STM32F103芯片,遥控器和飞行器之间的数据通信采用的是2.4G民用无线通信频段的NRF24L01模块。遥控器外型类似与游戏手柄。遥控器通过采集蘑菇头摇杆电位器ADC电压值以及按键状态发送给飞行器。(二)总体设计方案1.系统硬件电路设计方案本次设计采用IAP15W4K58S4微控制器作为MCU,并且均采用3.7V充电电池作为电源为系统供电,电池通过CAT2829芯片稳压到3.3V为MCU以及外设供电。遥控器端的主要硬件部分包括最小系统、无线NRF24L01模块、程序下载、ADC采集、蜂鸣器、LED指示灯以及串口调试,飞行器端硬件主要部分有最小系统、程序下载,无线NRF24L01模块、电机驱动、惯性测量单元MPU6050以及LED驱动电路,其系统总体框图如下所示。NRF24L01无线模块NRF24L01无线模块串口调试程序下载串口调试程序下载电池电量监控电源状态显示LED按钮蜂鸣器电源电机驱动复位惯性测量单元遥控器MCU摇杆控制状态显示LED遥控器MCU-2.各部分功能作用(1)MCU控制中心MCU是飞行器以及遥控器的控制中心,是它们的大脑,主要功能是采集数据和处理数据并做出指示。本次设计采用的是32位的基于ARM Cortex-3为内核的STM32F103作为中央处理器。(2)通信模块通信模块在整个系统中起着信号交流的作用,遥控器通过MCU读取的按键信息以及油门方向值发送到飞行器端,飞行器端接收到之后做出相应的动作。本次设计主要采用NRF24L01无线通信模块,选择该模块的原因是因其通信协议简单、传输距离相对较远、价格低廉等优点。(3)LED状态指示在硬件电路设计中,LED首先必须要有电源指示灯,从而判断系统是否上电。同时还需要有信号指示灯,指示遥控器和飞行器是否通信,最后就是状态显示LED灯显示飞行器状态等等。3.系统软件设计方案本次设计软件部分包括遥控器程序以及飞行器的接收程序设计。遥控器程序设计主要包括有无线NRF24L01发送、ADC电压采集之后的处理、读取按键状态和LED灯指示等,涉及的软件包括SPI通信协议、ADC数模转换、I/O口驱动等。飞行器端程序涉及部分主要包括NRF24L01接收、LED状态灯等。 三、硬件电路设计(一)遥控器的硬件设计如图3.1所示,遥控器主要由处理器、无线收发模块和4路摇杆器三部分组成。主处理器及其最小系统的电路和飞行器的电路相同。主要利用处理器片内的AD转换器采集摇杆的信息,然后将四路电位器的输出引脚接到处理器的AD转换口,免去了外接AD转换芯片以及配置电路的麻烦,大大节省了硬件空间。无线收发模块选用E01-ML01DP3无线通信模块模块,传输距离大概在1100m左右。图3. 1遥控硬件配置: MCU:STM32F103 72Mhz 传感器:MPU6050 3轴加速度、三轴陀螺仪 通信方式:NRF24L01、串口蓝牙、串口WIFI、串口433等 通信芯片:FT232串口芯片,串口波特率可以上M,轻松稳定高速通信1. 处理器(1) 针对各公司单片机的优缺点比较从总体上来讲,ARM的控制能力较强,速度快功耗也低,价格也适中,同时还可以加操作系统;DSP的速度最快,但同时价格更高,更适用于高速信号处理系统;C51更适用于简单的控制,编程也简单方便,同时价格也更加实惠。从运算能力上看,因为C51是8位的;ARM是32位;DSP有16位,以及更高的。所以C51最弱,DSP最强,ARM比较中庸。从结构上看,C51是一般的冯诺依曼结构,ARM和DSP一般采用哈佛结构。从频率上看,C51工作频率最低,一般为1024MHz,因此功耗也低。ARM的功率一般在几十到200MHz之间。而DSP的频率高达300MHz以上,同时功耗也大。虽然C51的性能远不如其他两种,但它的性价比很高,面积也非常小,还能配比非常丰富的外围电路,同时,这些也限制了它的使用,因此C51主要应用于不需要太多计算量的系统。ARM相对于其他两种的优点在于其内部的模块或者总线接口功能十分丰富。同时,ROM,RAM较大,管脚也多。(2) 芯片简介ARMCortex-M3采用哈佛结构,采用的是分离的指令以及数据总线,相比于冯诺依曼结构而言处理速度更快。ARMCortex-M3在成本以及功耗方面具有非常优秀的性能,并且非常适用于汽车以及无线通信领域。STM32系列处理器是由ST公司按照ARMCortex-M3内核标准打造的,其追求的是高性能、低成本、低功耗。按照其性能可以分为增强型STM32F103系列以及基本型STM32F101系列两种。本设计中使用的是增强型STM32F103。概述:闪存FLASH:512K字节、SRAM:64K、3xUSART、2xSPI、2xI2C、3x16位定时器、4-16MHz主振荡器、实时钟、2x看门狗、复位电路、上电/断电复位、电压检测、7通道DMA、80%通用I/O管脚、内嵌8MHz的RC振荡器、和32kHz的RC振荡器、72MHzCPU、2x12位ADC(1ms)温度传感器、USB2.0全速、CAN2.0B、PWM定时器。2.无线通信模块电路设计本次设计无线通信模块采用的是NRF24L01模块。NRF24L01模块。NRF24L01具有以下特性: 真正的GFSK单收发芯片 内置链路层 增强型ShockBurstTM 自动应答及自动重发功能 地址及CRC检验功能 数据传输率1或2Mbps SPI接口数据速率08Mbps 125个可选工作频道 很短的频道切换时间可用于调频 与NRF24XX系列完全兼容 可接受5V电平的输入 极低的晶振要求60ppm 工作电压1.93.6V四旋翼无人机要将数据传输到地面,操作者将操作指令发送给无人机,这些都需要通过无线数据通信来实现,本设计选用了E01-ML01DP3无线通信模块,这是一款 2.4G 无线通信模块,采用原装进口的 nRF24L01P芯片,配备20dBm 功率放大芯片,使模块最大发射功率达到了 100mW(20dBm),并同时将接收灵敏度提升到 10dBm,使得模块超过 nRF24L01P 本身10 倍以上的发射距离,传输距离可以达到 1100m。E01-ML01DP3 模块实物如图 3.2 所示。E01-ML01DP3 模块引脚及尺寸下图 3.3 所示。模块与模块之间采用2.4G无线网络频段通信,其电路原理图如图3.4所示。无线NRF24L01模块与MCU之间连接口如表3-1所示。图3.2图3.3图3.4表3-1MCU引脚NRF24L01引脚功能PA3CE使能发送或接收PA4CSNSPI片选信号PA5SCKSPI时钟信号PA6MOSISPI数据输入脚PA7MISOSPI数据输出脚(1)模块简介E01-ML01DP3 模块引脚描述引脚序号名称方向描述1GND/地线,连接到电源参考地2VCC/供电电源,必须2.0-3.6V之间3CE输入模块控制引脚4CSN输入模块片选引脚,用于开始一个SPI通信5SCK输入模块SPI总线时钟6MOSI输入模块SPI数据输入引脚7MISO输出模块SPI数据输出引脚8IRQ输出模块中断信号输出,低电平有效E01-ML01DP3 模块的参数序号参数名称参数数值备注1模块尺寸15*27mm不含SMA天线座2接口方式2.54*2*4可使用2.54标准杜邦线,可用于万能板3供电电压2.0-3.6V注意:高于3.6V电压,将导致模块永久损毁4通信电平0.7VDD-5VVDD指模块供电电压5实测距离1157m条件:市区,空旷,30,可视,阴天,250K6最大功率20dBm约合100mW7空中速率250K,1M,2M三种速率可以软件调节8关断电流1uAnRF24L01P设置为掉电,CE低电平9功率等级4级可调PA芯片功率不可调10发射电流95mA峰值11接受电流20mACE=112天线接口SMA外螺内孔型13天线要求SMA内螺内针,2.4G频段,50欧姆阻抗14通信接口SPI最高速率10Mbps15发射长度32字节单个数据包32字节最大,3级FIFO16接收长度32字节单个数据包32字节最大,3级FIFO17RSSI支持不支持仅支持简单的丢包统计18工作温度-3085无19工作湿度90%相对湿度无20储存温度-40+120无21工作频段2.4G2.4002.525可调,1MHz步进SPI是一种串行同步通讯协议,由一个主设备和一个或多个从设备组成,主设备启动一个与从设备的同步通讯,从而实现数据的交换。SPI接口由MOSI(串行数据输入),MISO(串行数据输出),SCK(串行移位时钟),CS(从使能信号)四种信号构成,CS决定了唯一的与主设备通信的从设备,如果没有CS信号,则只能存在一个从设备,主设备通过产生移位时钟来发起通讯。通讯时,数据由MISO输出,MOSI输入,数据在时钟的上升或下降沿由MISO输出,在紧接着的下降或上升沿由MOSI读入,这样经过8/16次时钟改变,完成8/16位数据的传输。3.实物介绍实物操作细节如下所示:第一步:上电:首先给遥控器上电,等待遥控器LED信号灯闪烁之后再给飞行器上电。第一步必须这样做,这样做是为防止飞行器先上电之后接收到无线信号不准确从而导致飞行器出现不确定的飞行情况。解锁:遥控器的左手油门拉到最低,就解锁了,解锁成功后,飞机上的电源指示灯旁边的一个黄色指示灯,遥控接收配对灯,会亮,表示遥控器解锁成功。否侧,解锁失败!拔掉遥控器电源,黄色无线指示灯会熄灭。第二步:打开飞机电源后,要等待20秒,才开始推动飞机的油门,先是慢慢推动飞机的油门,等待飞机的叶子转速都均匀,快要离开地面的时候,才突然加大油门。注意:上电顺序不能弄反,操作需缓慢进行,飞行器别在狭小的空间飞行。实物图如图3.5所示图3.5四、系统软件设计(一)Keil MDK5.12简介1Keil MDK概述Keil MDK,也称MDK-ARM,Realview MDK、I-MDK、uVision4等。目前Keil MDK 由三家国内代理商提供技术支持和相关服务。MDK-ARM软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。 MDK-ARM专为微控制器应用而设计,不仅易学易用,而且功能强大,能够满足大多数苛刻的嵌入式应用。MDK-ARM有四个可用版本,分别是MDK-Lite、MDK-Basic、MDK-Standard、MDK-Professional。所有版本均提供一个完善的C / C+开发环境,其中MDK-Professional还包含大量的中间库。2. Keil MDK功能特点 完美支持Cortex-M、Cortex-R4、ARM7和ARM9系列器件。 行业领先的ARM C/C+编译工具链 确定的Keil RTX ,小封装实时操作系统(带源码) Vision4 IDE集成开发环境,调试器和仿真环境 TCP/IP网络套件提供多种的协议和各种应用 提供带标准驱动类的USB设备和USB主机栈 为带图形用户接口的嵌入式系统提供了完善的GUI库支持 ULINKpro可实时分析运行中的应用程序,且能记录Cortex-M指令的每一次执行 关于程序运行的完整代码覆盖率信息 执行分析工具和性能分析器可使程序得到最优化 大量的项目例程帮助你快速熟悉MDK-ARM强大的内置特征 符合CMSIS (Cortex微控制器软件接口标准)(二)软件设计框图系统软件设计包括遥控器程序设计以及飞行器程序设计。遥控器的主要作用就是采集操控信息发送给飞行器,飞行器部分主要是接收无线数据以及数据处理。遥控器的主要设计流程图如图4.1所示。NRF24L01初始化NRF24L01初始化遥控器上电GPIO初始化ADC初始化LED灯初始化NRF24L01初始化设置无线发送模式LED指示灯循环闪烁NRF24L01发送数据采集ADC电压以及按键状态并打包数据图4.1在遥控器程序设计中,采取循环采集ADC电压并无线发送数据。ADC电压取值范围为02.5V,分辨率是100,采集到的数据即为0250,并把采集到的电压值存入无线传输缓存Buf数组里面。Buf数组定义为8位数据类型,设置了8位长度,Buf0里面存入帧头,Buf1里面存放油门,Buf2存放左边摇杆数据,Buf3里存放前后方向数据,Buf4存入左右方向数据,剩余部分存入按键状态信息。NRF24L01直接将读取到的8位数据发送到飞行器端,进行实时控制。结论毕业设计期间,最辛苦也是最有意义的地方就是找出问题的所在,并通过查阅相关资料,寻找解决方案并最终解决问题,这个过程虽然比较繁琐,但是对于我们的学习却极有意义。四年的大学课程学习,以及两年的实验室学习经验,学到了很多关于单片机以及嵌入式方面的知识,这也是我们电气工程专业所学的比较重要的内容,通过这次毕业设计,使得我对这方面的知识得到了提高。想要很好的完成本次毕业设计,总体的设计思路一定要清晰。从主控芯片的选择到模块的选择方案,都需要经过深思熟虑。我的思路还算比较清晰,首先要有遥控器作为控制端,采集控制信息通过无线模块传输到飞行器端,飞行器端通过无线接收模块接收到的信息从而做出相应的反应。经过查阅相关资料,本次设计选用基于ARM Cortex-3为内核的STM32F103作为控制芯片,采用NRF24L01作为通信模块,电源部分采用3.7V充电锂电池作为系统提供电源。这段时间里,在老是以及同学的帮助下,还有自己的不断学习和探索下,一步一步的完成了设计的要求,这个过程非常的有意义以及值得回味。通过和老师同学的交流,不仅丰富了自己的知识面,开拓了自己的思路,同时还可以拉近与老师同学之间的关系。通过这段时间的学习,我掌握了很多书本上没有的指示,但同时又可以把书上的内容运用到实践中来,学以致用。总之,通过本次设计,我了解了关于我所设计课题的相关内容,加深了对本专业的理解,巩固了大学四年所学到的知识,毕业设计是理论与实践相结合的一个过程,同时也是对我们大学四年锁学知识的一次总体考核。致 谢历时两个月的时间完成了本次毕业设计,从开题报告到硬件电路的设计再到程序设计最后撰写这篇论文,在这么长的毕业设计过程中,我遇到了很多困难,为此我的指导老师孙跃老师始终给予了我细心的知道和不懈的支持。孙老师为人随和、治学严谨细心,即使不是上班时间也不厌其烦的帮助我进行论文的修改,为我指点迷津,帮助我开拓思路,从开始的方案选择到最后的调试都是如此的帮助我。孙老是深厚的理论功底、丰富的实践经验以及诲人不倦的高尚师德对我能够完成本次毕业设计起到了至关重要的作用,在此,向孙跃老师致以崇高的敬意以及由衷的感谢。同时还要感谢我的同学,在实物制作以及论文撰写过程中给予了我很多有价值的意见,同学之间的互相讨论,解决了很多个人难以解决的问题。本论文的完成对我而言并不是重点,文中的不足和浅显之处则是我新的征程上的新的起点。同时我在本论文的写作过程中引用了很多学者的文献,如果没有这些前辈的研究成果,我将很难完成这篇论文的撰写,在此由衷的感谢这些文献的作者。学业即将完成,我将带着家人、老师、同学以及朋友的鼓励和期望,迈向人生崭新的台阶。参考文献1 冯旭光 四旋翼无人机自主控制系统设计学位论文硕士 2014 2 陈海滨,殳国华.四旋翼飞行器的设计J.实验室研宄与探索.2013,32(3) :41-44.3 杨云高,鲜斌,殷强,等.四旋翼无人飞行器架构及飞行控制的研宄现状J.2011,22-24(7):448-453. 4 段国强四旋翼无人直升机仿真及控制方法比较研究D哈尔滨:哈尔滨工业大 学,2013 5 尹志林, 张 伟. 超小型红外遥控装置设计. 南京航空航天大学航空宇航学院 ,南京 , 2100166 彭贞慧小型四旋翼无人直升机控制系统设计D南京:南京理工大学,20107 张垚,鲜斌,殷强等基于 ARM 处理器的四旋翼无人机自主控制系统 研究J中国科学技术大学学报,2012,09:753-7608 高同跃.超小型无人直升机飞控系统及自主滞空飞行的研究,博士学位论文.上海:上海大学,2008.9 朱海荣,张鹤鸣,郭浩波. 基于无线遥控技术的四旋翼飞行器控制系统设计. 南通大学 电气工程学院, 江苏 南通 22601910 钟佳朋四旋翼无人机的导航与控制D哈尔滨:哈尔滨工业大学,201011 刘焕晔. 小型四旋翼飞行器飞行控制系统研究与设计D. 上海交通大学,2009.12 庞庆霈. 四旋翼飞行器设计与稳定控制研究D. 中国科学技术大学, 2011.13 乔维维四旋翼飞行器飞行控制系统研究与仿真D太原:中北大学,201214 吴中华,贾秋玲四旋翼几种控制方法研究J现代电子技术,2013,15:88- 90+9415 国倩倩,微型四旋翼飞行器控制系统设计及控制方法研究吉林大学,201316 陈新泉. 四旋翼无人机飞控系统设计与研究【硕 士 学 位 论 文】, 南昌航空大学,201417 李尧. 四旋翼飞行器控制系统设计【大连理工大学硕士论文】, 大连理工大学, 2013附录遥控器端代码/左手上下为油门,左右为旋转/右手上下为俯仰,左右为横滚/ MCU工作频率28MHZ!#include #include #include #include #include sbit RLED=P05; /p05为p0口的第六位sbit GLED=P06;sbit LKEY=P47;sbit RKEY=P34;float temp1=0; volatile int idata ay,ax,by,bx;volatile int idata cy,cx,dy,dx;volatile float idata battery;unsigned char idata TxBuf20=0;unsigned char idata RxBuf20=0;void IO_and_Init();#if 1typedef unsigned char uint8_t;/typedef为类型定义typedef unsigned short int uint16_t;typedef unsigned int uint32_t;/typedef unsigned _int64 uint64_t;int Throttle;/油门门int Roll; /横滚角int Pitch; /仰俯角int Yaw; /自旋角int Throttle_Calibra=1500;/风门校准int Pitch_Calibra =1500;/反转校准int Roll_Calibra =1500;/横滚校准int Yaw_Calibra =1500;/偏航校准typedef uint32_t u32;typedef uint16_t u16;typedef uint8_t u8;#define AmericaMode 1 /左手油门。u32 Mytest=0;/获取AD转换平均值。u16 Get_Adc_Average(u8 ch,u8 times)u32 temp_val=0;u8 t;for(t=0;ttimes;t+)temp_val+=getADCResult(ch);/Get_Adc(ch); Mytest=temp_val/times; _nop_();return Mytest;/temp_val/times; /*获取摇杆数据的AD转换平均值。*/void LoadRCdata(void) /*左手油门*/#ifdef AmericaMode Throttle=1000+1000*(float)(Get_Adc_Average(1,15)/256); Throttle=(Throttle=2000)?2000:Throttle; Pitch= 1000+(1000*(float)(Get_Adc_Average(3,15)/256)-Pitch_Calibra); Pitch=(Pitch=2000)?2000:Pitch; Roll= 1000+(1000*(float)(Get_Adc_Average(2,15)/256)-Roll_Calibra); Roll=(Roll=2000)?2000:Roll; Yaw= 1000+(1000*(float)(Get_Adc_Average(0,15)/256)-Yaw_Calibra); Yaw=(Yaw=2000)?2000:Yaw; #else /*右手油门*/ Throttle=1500 - (Throttle_Calibra - (1000 + (1000*Get_Adc_Average(1,15)/4096); Throttle=(Throttle=2000)?2000:Throttle; Pitch= 1500 - (Pitch_Calibra-(1000 + (1000 - (1000*Get_Adc_Average(3,15)/4096); Pitch=(Pitch=2000)?2000:Pitch; Roll= 1500 - (Roll_Calibra - (1000 + (1000*Get_Adc_Average(0,15)/4096); Roll=(Roll=2000)?2000:Roll; Yaw= 1500 - (Yaw_Calibra - (1000 + (1000*Get_Adc_Average(2,15)/4096); Yaw=(Yaw=2000)?2000:Yaw; #endif /校准摇杆。void controlClibra(void)static u8 i;uint16_t sum4=0,0,0,0;/static unsigned char lednum=1; static unsigned char clibrasumNum = 20;for(i=0;i8); /发送遥控器数据。void CommUAVUpload(uint8_t cmd) sendCnt=0; uart8chk($); uart8chk(M); uart8chk(); checksum = 0; switch(cmd) case MSP_SET_4CON: uart8chk(8); /data payload len uart8chk(cmd); uart16chk(Throttle); uart16chk(Yaw); uart16chk(Pitch); uart16chk(Roll); break; case MSP_ARM_IT: uart8chk(0); uart8chk(cmd); break; case MSP_DISARM_IT: uart8chk(0); uart8chk(cmd); break; case MSP_HOLD_ALT: uart8chk(0); uart8chk(cmd); break; case MSP_STOP_HOLD_ALT: uart8chk(0); uart8chk(cmd); break; case MSP_HEAD_FREE: uart8chk(0); uart8chk(cmd); break; case MSP_STOP_HEAD_FREE: uart8chk(0); uart8chk(cmd); break; case MSP_AUTO_LAND_DISARM: uart8chk(0); uart8chk(cmd); break;case MSP_ACC_CALI: uart8chk(0); uart8chk(cmd); break; uart8chk(checksum); nRF24L01_TxPacket(sendBuf); /NRF24L01_TxPacket2(sendBuf);#endif/获取AD采样数据void AD() _task_ 0 IO_and_Init(); /初始化I/O口os_create_task (1); /启动进程1while(1) cy=getADCResult(1); /油门 /读取4个摇杆通道每个通道的8位数据,取值范围0-255 Delay(10); cx=getADCResult(0); /YAW Delay(10); dy=getADCResult(3); /Pitch Delay(10); dx=getADCResult(2); /Roll Delay(10); battery=(getADCResult(4)*5.05*100)/256; /电池电压检测通道 低于3.7V亮红灯 Delay(10); if(battery=370) RLED=1; GLED=0; else RLED=0; GLED=1; os_wait(K_IVL,3,0);/延时3个节拍 /void NRF24L01() _task_ 1 while(1) TxBuf0+; TxBuf1=128; TxBuf2=128; TxBuf3=128; if(cy=255) TxBuf1=255; /用上电记录的数据对采样数据进行修正,保证摇杆中位时数据为128else if(dy-by)=255) TxBuf2=255; else if(dx-bx)=255) TxBuf3=255; else if(cx-ax)=0) TxBuf3=0; else TxBuf3=cx-ax; /油门:TxBuf4 /Yaw :TxBuf3 /俯仰:TxBuf1 /横滚:TxBuf2TxBuf4=cy; /油门通道不需处理,直接发送AD检测的8位数据即可,根据AD采样原理易知读取的AD采样数据不可能为负也不可能大于255if(RKEY=0) TxBuf5=1; else TxBuf5=0; if(LKEY=0) TxBuf6=1; else TxBuf6=0; TxBuf0+;LoadRCdata();/获取摇杆数据。 CommUAVUpload(MSP_SET_4CON); /nRF24L01_TxPacket(TxBuf);/发射数据os_wait(K_IVL,2,0); /给一定延时让数据发送完成/IO初始化。void IO_and_Init()P1M0=0x00; /P1设为高阻模式P1M1=0xFF;P0M0=0XFF; /其他I/O口设置为准双向,弱上拉模式P0M1=0X00;P2M0=0X00;P2M1=0X00;P3M0=0X00;P3M1=0X00;P4M0=0X00;P4M1=0X00;P5M0=0Xff;P5M1=0X00;LKEY=1; /拉高按键检测I/O口电平,按键为低电平触发RKEY=1;init_NRF24L01(); /初始化无线模块adc_init(); /初始化AD检测模块ax=(getADCResult(0);temp1=(float)ax/256)*1000-500;Roll_Calibra=temp1;/ax*1000-500; /记录上电时摇杆的数据作为中位修正,因为摇杆中位要为128即256/2Delay(10);by=getADCResult(3);temp1=(float)by/256)*1000-500; /
展开阅读全文