四旋翼飞行器程序资料.docx
- 文档编号:8157415
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:16
- 大小:130.33KB
四旋翼飞行器程序资料.docx
《四旋翼飞行器程序资料.docx》由会员分享,可在线阅读,更多相关《四旋翼飞行器程序资料.docx(16页珍藏版)》请在冰豆网上搜索。
四旋翼飞行器程序资料
四旋翼自主飞行器(B题)
摘要
系统以R5F100LE作为四旋翼自主飞行器控制的核心,由电源模块、电机调速控制模块、传感器检测模块、飞行器控制模块等构成。
飞行控制模块包括角度传感器、陀螺仪,传感器检测模块包括红外障碍传感器、超声波测距模块、TLS1401-LF模块,瑞萨MCU综合飞行器模块和传感器检测模块的信息,通过控制4个直流无刷电机转速来实现飞行器的欠驱动系统飞行。
在动力学模型的基础上,将小型四旋翼飞行器实时控制算法分为两个PID控制回路,即位置控制回路和姿态控制回路。
测试结果表明系统可通过各个模块的配合实现对电机的精确控制,具有平均速度快、定位误差小、运行较为稳定等特点。
1系统方案论证与控制方案的选择
根据题目要求,对该系统的特点及其控制特性进行了分析,进行了几种不同设计方案的比较。
1.1地面黑线检测传感器
探测地面黑线的基本原理是:
光线照射到路面并反射,由于黑线和白色地面对光的反射系数不同,所以可以根据接收到的反射光强弱来判断黑线。
可实现的方案有:
方案一:
采用普通发光二极管及光敏电阻组成的发射接收方案。
该方案在实际使用时,容易受到外界光源的干扰,有时甚至检测不到。
主要是因为可见光的反射效果跟地表的平坦程度、地表材料的反射情况均对检测效果产生直接影响。
虽然可采取超高高度发光二极管降低一定的干扰,但这又增加额外的功率损耗。
方案二:
红外避障传感器E18-D80NK。
这是一种集发射与接收于一体的光电传感器,发射光经过调制后发出,接收头对反射光进行解调输出,有效的避免了可见光的干扰。
透镜的使用,也使得这款传感器最远可以检测80厘米距离。
检测障碍物的距离可以根据要求通过尾部的电位器旋钮进行调节。
并且具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点。
比较以上二种方案,方案二占有很大优势,不但能准确完成测量,而且能避免电路的复杂性,因此选择方案二。
1.2电机的选择与论证
四旋翼无人飞行器是通过控制四个不同无刷直流电机的转速,达到控制四旋翼无人飞行器的飞行姿态和位置,与传统直升机通过控制舵机来改变螺旋桨的桨距角,达到控制直升机的目的不同。
在电机的选型上,主要有直流有刷电机和直流无刷电机两种。
方案一:
直流有刷电机是当前普遍使用的一种直流电机,它的驱动电路简单、控制方法成熟,但是直流有刷电机使用电刷进行换向,换向时电刷与线圈触电存在机械接触,电机长时间高速转动使极易因磨损导致电气接触不良等问题,而且有刷电机效率低、力矩小、重量大,不适合对功率重量比敏感的电动小型飞行器。
方案二:
直流无刷电机能量密度高、力矩大、重量轻,采用非接触式的电子换向方法,消除了电刷磨损,较好地解决了直流有刷电机的缺点,适用于对功率重量比敏感的用途,同时增强了电机的可靠性。
所以选择直流无刷电机作为动力源。
1.3电机驱动方案的选择与论证
方案一:
采用电阻网络或数字电位器调整电动机的分压,从而达到调速的目的。
但是电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。
更主要的问题在于一般电动机的电阻很小,但电流很大;分压不仅会降低效率,而且实现很困难。
方案二:
采用继电器对电动机的开或关进行控制,通过开关的切换对小车的速度进行调整。
这个方案的优点是电路较为简单,缺点是继电器的响应时间慢、机械结构易损坏、寿命较短、可靠性不高。
方案三:
采用全桥驱动PWM电路。
这种驱动的优点是使管子工作在占空比可调的开关状态,提高使用效率实现电机转速的微调。
并且保证了可以简单的方式实现方向控制。
基于上述理论分析,选择方案三。
2四旋翼自主飞行器控制算法设计
2.1四旋翼飞行器动力学模型
设计的小型四旋翼飞行器适用于室内低速飞行,因此忽略空气阻力的影响。
因此,简化后的飞行器动力学模型为
式1-1
式中
为四旋翼飞行器在导航坐标系下的线位移,
为运动加速度,m为飞行器质量,
分别为机体的偏航角、俯仰角和横滚角,
为旋翼面中心到四旋翼飞行器质心的距离,
为轴向惯性主矩。
该动力学模型对四旋翼飞行器的真实飞行状态进行了合理的简化,忽略了空气阻力等对系统运行影响较小的参数,使得飞行控制算法更加简洁。
2.2PID控制算法结构分析
在动力学模型的基础上,将小型四旋翼飞行器实时控制算法分为两个控制回路,即位置控制回路和姿态控制回路。
算法结构如图B-1所示。
给定位置
位置控制
姿态
控制
电机控制
飞行器机体
姿态控制回路
位置控制回路
图2-1四旋翼飞行器控制算法结构图
使用经典PID控制算法实现位置控制回路和姿态控制回路。
PID算法简单可靠,理论体系完备,而且在长期的应用过程中积攒了大量的使用经验,在飞行器位置和姿态控制应用中具有良好的控制效果和较强的鲁棒性,能提供控制量的较优解。
控制回路包含了
三个控制量,因此设计3个独立的PID控制器对位移进行控制。
根据PID控制器的原理,设
分别为比例项、积分项和微分项系数,有
式1-2
其中,
为航姿参考系统测量到的加速度积分得到的位移量。
姿态控制回路的作用是控制四旋翼飞行器的飞行姿态,使其实际姿态与设定的姿态一致。
姿态控制回路有偏航角、俯仰角和横滚角三个控制量,在此忽略三个通道之间的耦合效应,设计3个独立的PID控制器对每个量进行独立控制。
式1-3
根据PID控制器的原理,设
分别为比例项、积分项和微分项系数,有控制器方程如B-4。
式1-4
其中比例项系数为3.3积分项系数为0.14微分项系数为3.2。
3硬件电路设计与实现
系统以R5F100LE单片机为核心,主要包括电源模块、电机驱动模块、飞行控制模块、传感器检测等功能模块,该系统硬件结构框图如图2-2所示。
飞
行
控
制
模
块
电源模块
数据转发控制器
陀螺仪
角度传感器
红外避障传感器
超声波传感器
电子调速器
无刷直流电机1
电子调速器
无刷直流电机2
电子调速器
无刷直流电机3
电子调速器
无刷直流电机4
键盘
罗盘
图2-2系统硬件结构图
3.1飞行控制电路设计
飞行控制模块是控制系统的核心部分。
它在每个控制周期内实时处理传感器采集的数据和飞行器的姿态信息,完成PID控制的算法,得到四旋翼飞行器的姿态和位置信息,计算出控制量,转化为相应的控制信号经驱动电路后驱动四个电机工作,保持四旋翼飞行器稳定飞行。
电路图如图2-3所示。
图2-3飞行控制器电路原理图
3.2电源模块
电源由一块11.1V2200ma的锂电池(重量约为166克)供电,在由电调降压给系统中的各个模块供5v电压并给电机提供电流,这样可满足可满足各个小系统的电源要求。
3.3电机驱动模块
四电机驱动模块根据中心控制模块指令驱动各个电机到达指定转速,将电机的速度通过测速反馈装置反馈给飞行姿态控制模块,控制无刷直流电机闭环控制转速,从而控制飞行状态,达到预期位置和姿态。
通过电子调速器给电机提供电流,电子调速器模块电路图如图2-4所示。
图2-4电子调速器电流图
3.4传感器检测模块
传感器模块是为四旋翼飞行器的飞行控制提供各种飞行参数的装置,包括测量机身三轴角速率的陀螺仪、测量机身三轴线加速度的加速度传感器、测量机身航向及姿态信息的罗盘,电机转速检测的测速传感器、飞行高度传感器和黑线检测传感器。
其中角度传感器和陀螺仪电路图如图2-5和2-6所示。
图B-5角度传感器电路图
图2-6陀螺仪电路图
4系统的程序设计
本系统以瑞萨MCU为核心,采用C语言对单片机进行编程。
主程序主要起导向和决策的作用,系统的控制总流程图如图所示。
系统包括延时子程序,电机转速控制子程序,检测子程序,副翼子程序。
系统控制的总流程图如图2-7所示。
部分程序清单见附录A。
按键开始
系统初始化
上升定高
校正姿态
前行
红外传感器1是否检测到黑线?
计黑线值
减速降落
Y
N
红外传感器2是否检测到黑线?
黑线值=3?
寻点
Y
N
Y
图2-7系统主程序流程图
5测试与结果分析
5.1测试设备
模拟区域:
按题目要求设计。
设备:
秒表、卷尺。
测试环境为室内。
5.2测试结果
使系统运行,参照题目的各项要求进行多次实际定量测量,得到该系统的测量结果如表表B-1所示。
表B-1测试功能、测试工具及实现的情况表
具体功能要求
实际测试结果
基本部分
四旋翼自主飞行器一键式启动,从A区飞向B区,在B区降落并停机;飞行时间不大于45s
可以满足,飞行时间为15s
四旋翼自主飞行器一键式启动,从B区飞向A区,在A区降落并停机;飞行时间不大于45s
可以满足要求,飞行时间为17s
发挥部分
飞行器摆放在A区,飞行器下面摆放一薄铁片,一键式启动,飞行器拾取薄铁片并起飞
飞行器携带薄铁片从示高线上方飞向B区,并在空中将薄铁片投放到B区;飞行器从示高线上方返回A区,在A区降落并停机
以上往返飞行时间不大于30s
其他
最为完成发挥部分但以实现其在一个水平高度前行
经测试,系统可以满足基本要求和部分发挥部分,并具有稳定前行的特点。
6总结
本次设计按照题目要求,采用模块化的硬件和软件设计方法,运用PID控制算法,成功地实现了飞行器寻黑带自主飞行并定点降落的要求。
具有飞行稳定、运动迅速、接收信号灵敏等特点。
完成了题目基本部分和部分发挥部分的要求。
附录A部分程序清单
/***********************************************************************************************************************
*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:
*
*
*Copyright(C)2011,2013RenesasElectronicsCorporation.Allrightsreserved.
***********************************************************************************************************************/
/***********************************************************************************************************************
*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.Donoteditcommentgene
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 四旋翼 飞行器 程序 资料