本发明涉及飞行器技术领域,具体涉及一种无人飞行器控制系统设计。
背景技术:
无人飞行器(unmannedaerialvehicle,uav)是指无需驾驶员在机体内操作,通过无线电遥控或自身控制程序,利用空气动力承载飞行并可回收重复使用的飞行器。当无人飞行器第一次出现时是针对防空火炮部队进行打靶的靶机。海湾战争之后,由于无人机在战争中出色的表现,无人机的研发工作在世界各国都开始引起重视,先进的无人机可以携带各种探测、检测设备,以执行侦察与监视任务,甚至可以装备攻击型武器执行打击任务。
无人飞行器按旋翼形式分为两种是固定翼和旋翼式,旋翼式无人机存在多方面的优势和固定翼无人机相比。本发明主要研究小型四旋翼式无人机。小型四旋翼无人飞行器是一种结构简单可靠的飞行器。它是一种电动的、能够垂直起降的多旋翼式遥控自主飞行器,属于非共轴式碟形飞行器。与固定翼飞行器相比,四旋翼飞行器在飞行过程中通过改变四个螺旋桨的转速和转向来改变飞行器的姿态,而不需要调整螺旋桨倾角,因此结构紧凑,操控简单。四旋翼飞行器的四只旋翼对称分布,产生的反扭力矩相互抵消,因此不需要额外的反扭矩尾桨。与常规布局的直升机相比,四旋翼飞行器的机械结构简单,易于维护,成本较低。其四个螺旋桨对称分布,使得四旋翼飞行器的机动能力更强,静态盘旋的稳定性更好,也更容易实现机型的微小型化。这些优点决定了四旋翼无人飞行器可以用于执行某些特殊任务。如航拍、考古、电力线检测、资源勘探、大气监测、边境巡逻、交通监控、灾情监视、反恐侦查、缉毒缉私等,具有良好的民用和军事前景。
四旋翼飞行器是一个多输入多输出的非线性控制系统,由于不同于传统的飞行器结构,因此系统建模也相对复杂,由于结构的特殊性其对控制算法的要求也相对较高。四旋翼飞行器是一个多学科融合的综合体,涉及动力、惯性、控制、检测等学科。近几年来,随着材料学、微机电系统、高性能微型传感器及飞行控制理论的不断发展,四旋翼飞行器获得了日新月异的进展,并且展现出了巨大的商业潜力。同时,由于四旋翼飞行器能够在三维空间中运动,为机器人提供了良好的实现平台,在路径规划、三维场景重构等领域具有较高科研价值。
技术实现要素:
本发明涉及飞行器技术领域,具体涉及一种无人飞行器控制系统设计。本发明以r5f100le作为四旋翼自主飞行器控制的核心,由电源模块、电机调速控制模块、传感器检测模块、飞行器控制模块等构成。飞行控制模块包括角度传感器、陀螺仪,传感器检测模块包括红外障碍传感器、超声波测距模块、tls1401-lf模块,瑞萨mcu综合飞行器模块和传感器检测模块的信息,通过控制4个直流无刷电机转速来实现飞行器的欠驱动系统飞行。在动力学模型的基础上,将小型四旋翼飞行器实时控制算法分为两个pid控制回路,即位置控制回路和姿态控制回路。
本发明可通过各个模块的配合实现对电机的精确控制,具有平均速度快、定位误差小、运行较为稳定等特点。
附图说明
图1:四旋翼飞行器控制算法结构图。
图2:系统硬件结构图。
图3:电子调速器电流图。
图4:角度传感器电路图。
图5:陀螺仪电路图。
图6:系统主程序流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施仅仅用以解释本发明,并不用于限定本发明。
本发明涉及飞行器技术领域,具体涉及一种无人飞行器控制系统设计。本发明以r5f100le作为四旋翼自主飞行器控制的核心,由电源模块、电机调速控制模块、传感器检测模块、飞行器控制模块等构成。飞行控制模块包括角度传感器、陀螺仪,传感器检测模块包括红外障碍传感器、超声波测距模块、tls1401-lf模块,瑞萨mcu综合飞行器模块和传感器检测模块的信息,通过控制4个直流无刷电机转速来实现飞行器的欠驱动系统飞行。在动力学模型的基础上,将小型四旋翼飞行器实时控制算法分为两个pid控制回路,即位置控制回路和姿态控制回路。
进一步的,本发明的地面黑线检测传感器采用红外避障传感器e18-d80nk。这是一种集发射与接收于一体的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出,有效的避免了可见光的干扰。透镜的使用,也使得这款传感器最远可以检测80厘米距离。检测障碍物的距离可以根据要求通过尾部的电位器旋钮进行调节。并且具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点。
进一步的,本发明选择直流无刷电机作为动力源,直流无刷电机能量密度高、力矩大、重量轻,采用非接触式的电子换向方法,消除了电刷磨损,较好地解决了直流有刷电机的缺点,适用于对功率重量比敏感的用途,同时增强了电机的可靠性。
进一步的,本发明采用全桥驱动pwm电路。这种驱动的优点是使管子工作在占空比可调的开关状态,提高使用效率实现电机转速的微调。并且保证了可以简单的方式实现方向控制。
进一步的,本发明在动力学模型的基础上,将小型四旋翼飞行器实时控制算法分为两个控制回路,即位置控制回路和姿态控制回路。算法结构如图1所示。使用经典pid控制算法实现位置控制回路和姿态控制回路。pid算法简单可靠,理论体系完备,而且在长期的应用过程中积攒了大量的使用经验,在飞行器位置和姿态控制应用中具有良好的控制效果和较强的鲁棒性,能提供控制量的较优解。
进一步的,本发明以r5f100le单片机为核心,主要包括电源模块、电机驱动模块、飞行控制模块、传感器检测等功能模块,该系统硬件结构框图如图2所示。
进一步的,本发明的飞行控制模块是控制系统的核心部分。它在每个控制周期内实时处理传感器采集的数据和飞行器的姿态信息,完成pid控制的算法,得到四旋翼飞行器的姿态和位置信息,计算出控制量,转化为相应的控制信号经驱动电路后驱动四个电机工作,保持四旋翼飞行器稳定飞行。
进一步的,本发明的电源由一块11.1v2200ma的锂电池(重量约为166克)供电,在由电调降压给系统中的各个模块供5v电压并给电机提供电流,这样可满足可满足各个小系统的电源要求。
进一步的,本发明的四电机驱动模块根据中心控制模块指令驱动各个电机到达指定转速,将电机的速度通过测速反馈装置反馈给飞行姿态控制模块,控制无刷直流电机闭环控制转速,从而控制飞行状态,达到预期位置和姿态。通过电子调速器给电机提供电流,电子调速器模块电路图如图3所示。
进一步的,本发明的传感器模块是为四旋翼飞行器的飞行控制提供各种飞行参数的装置,包括测量机身三轴角速率的陀螺仪、测量机身三轴线加速度的加速度传感器、测量机身航向及姿态信息的罗盘,电机转速检测的测速传感器、飞行高度传感器和黑线检测传感器。其中角度传感器和陀螺仪电路图如图4和5所示。
进一步的,本发明以瑞萨mcu为核心,采用c语言对单片机进行编程。主程序主要起导向和决策的作用,系统的控制总流程图如图所示。系统包括延时子程序,电机转速控制子程序,检测子程序,副翼子程序。系统控制的总流程图如图6所示。程序代码如下:
*disclaimer
*thissoftwareissuppliedbyrenesaselectronicscorporationandisonly
*intendedforusewithrenesasproducts.nootherusesareauthorized.this
*softwareisownedbyrenesaselectronicscorporationandisprotectedunder
*allapplicablelaws,includingcopyrightlaws.
*thissoftwareisprovided"asis"andrenesasmakesnowarrantiesregarding
*thissoftware,whetherexpress,impliedorstatutory,includingbutnot
*limitedtowarrantiesofmerchantability,fitnessforaparticularpurpose
*andnon-infringement.allsuchwarrantiesareexpresslydisclaimed.
*tothemaximumextentpermittednotprohibitedbylaw,neitherrenesas
*electronicscorporationnoranyofitsaffiliatedcompaniesshallbeliable
*foranydirect,indirect,special,incidentalorconsequentialdamagesfor
*anyreasonrelatedtothissoftware,evenifrenesasoritsaffiliateshave
*beenadvisedofthepossibilityofsuchdamages.
*renesasreservestheright,withoutnotice,tomakechangestothissoftware
*andtodiscontinuetheavailabilityofthissoftware.byusingthissoftware,
*youagreetotheadditionaltermsandconditionsfoundbyaccessingthe
*followinglink:
*http://www.renesas.com/disclaimer
*filename:r_cg_timer_user.c
*version:codegeneratorforrl78/g13v2.00.00.07[22feb2013]
*device(s):r5f100le
*tool-chain:ca78k0r
*description:thisfileimplementsdevicedriverfortaumodule.
*creationdate:2013/9/7
pragmadirective
#pragmainterruptinttm00r_tau0_channel0_interrupt
#pragmainterruptinttm01r_tau0_channel1_interrupt
#pragmainterruptinttm02r_tau0_channel2_interrupt
#pragmainterruptinttm03r_tau0_channel3_interrupt
#pragmainterruptinttm04r_tau0_channel4_interrupt
#pragmainterruptinttm05r_tau0_channel5_interrupt
#pragmainterruptinttm06r_tau0_channel6_interrupt
#pragmainterruptinttm07r_tau0_channel7_interrupt
/*startusercodeforpragma.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
includes
#include"r_cg_macrodriver.h"
#include"r_cg_timer.h"
/*startusercodeforinclude.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
#include"r_cg_userdefine.h"
#include"r_cg_kongzhi.h"
#include"r_cg_lcd.h"
globalvariablesandfunctions
/*fortau0_ch0pulsemeasurement*/
volatileuint32_tg_tau0_ch0_width=0u;
/*startusercodeforglobal.donoteditcommentgeneratedhere*/
uint32_toko=0;
/*endusercode.donoteditcommentgeneratedhere*/
*functionname:r_tau0_channel0_interrupt
*description:thisfunctionisinttm00interruptserviceroutine.
*arguments:none
*returnvalue:none
interruptstaticvoidr_tau0_channel0_interrupt(void)
{
if((tsr00&_0001_tau_overflow_occurs)==1u)/*overflowoccurs*/
{
g_tau0_ch0_width=(uint32_t)(tdr00+1u)+0x10000u;
}
else
{
g_tau0_ch0_width=(uint32_t)(tdr00+1u);
}
/*startusercode.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
}
*functionname:r_tau0_channel1_interrupt
*description:thisfunctionisinttm01interruptserviceroutine.
*arguments:none
*returnvalue:none
interruptstaticvoidr_tau0_channel1_interrupt(void)
{
/*startusercode.donoteditcommentgeneratedhere*/
tdr05=2980;
delayms(500);
tdr05=3025;
delayms(100);
tdr05=2980;
delayms(500);
tdr05=3040;
delayms(50);
oko++;
if(oko++>=10){r_tau0_channel1_stop();z(2040);}
//xianshi();
/*endusercode.donoteditcommentgeneratedhere*/
}
*functionname:r_tau0_channel2_interrupt
*description:thisfunctionisinttm02interruptserviceroutine.
*arguments:none
*returnvalue:none
__interruptstaticvoidr_tau0_channel2_interrupt(void)
{
/*startusercode.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
}
*functionname:r_tau0_channel3_interrupt
*description:thisfunctionisinttm03interruptserviceroutine.
*arguments:none
*returnvalue:none
__interruptstaticvoidr_tau0_channel3_interrupt(void)
{
/*startusercode.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
}
*functionname:r_tau0_channel4_interrupt
*description:thisfunctionisinttm04interruptserviceroutine.
*arguments:none
*returnvalue:none
__interruptstaticvoidr_tau0_channel4_interrupt(void)
{
/*startusercode.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
}
*functionname:r_tau0_channel5_interrupt
*description:thisfunctionisinttm05interruptserviceroutine.
*arguments:none
*returnvalue:none
__interruptstaticvoidr_tau0_channel5_interrupt(void)
{
/*startusercode.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
}
*functionname:r_tau0_channel6_interrupt
*description:thisfunctionisinttm06interruptserviceroutine.
*arguments:none
*returnvalue:none
__interruptstaticvoidr_tau0_channel6_interrupt(void)
{
/*startusercode.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
}
*functionname:r_tau0_channel7_interrupt
*description:thisfunctionisinttm07interruptserviceroutine.
*arguments:none
*returnvalue:none
__interruptstaticvoidr_tau0_channel7_interrupt(void)
{
/*startusercode.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
}
/*startusercodeforadding.donoteditcommentgeneratedhere*/
/*endusercode.donoteditcommentgeneratedhere*/
以上所述仅为本发明专利的较佳实施例而已,并不用以限制本发明专利,凡在本发明专利的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明专利的保护范围之内。