电赛设计报告更改.docx
《电赛设计报告更改.docx》由会员分享,可在线阅读,更多相关《电赛设计报告更改.docx(24页珍藏版)》请在冰豆网上搜索。
电赛设计报告更改
2017电赛设计报告(更改)
第一页是空白页
2017年全国大学生电子设计竞赛
四旋翼自主飞行器探测跟踪系统(c题)
【本科组】
2017年8月12日本系统由数据信息采集、数据信号处理、飞行姿态稳定和航向控制部分组成。
系统选用瑞萨RX23TMCU单片机作为主控芯片,以STM32F103VET6为核心的飞控完成飞机自稳,通过超声波传感器来检测飞行高度,再通过瑞萨芯片分析并向飞控传递信号来保持或改变飞行状态。
利用无线信号发射接收装置来建立
小车与飞行器之间的联系,完成配对后会有二极管和扬声器发出配对成功信号,再通过接收方位信号的改变来调整飞行姿态以完成跟随小车的目标。
关键词:
瑞萨R5F523T5ADFM单片机
STM32F103VET6最小系统板
超声波测距
PID算法
无线收发模块
1系统方案
0
1.1控制系统的选择0
1.2飞行姿态控制的论证与选择0
1.3高度测量模块的论证与选择0
1.4电机及调速方案的论证与选择1
1.5无线信号发射与接收模块的论证与选
2系统理论分析与计算
2.1控制方案的设计与分析
飞行器起飞及悬停方案设计
择1
1
1
1
飞行姿态控制设计飞行高度控制
2.1.4小车与飞行器联动设计2
2.2参数的计算2
飞行稳定的PID计算2
高度控制的PID计算
声光联动的参数设定2
3电路与程序设计
3.1电路的设计
控制系统框图
飞控系统框图
4
电源的选用
4
3.2程序的设计
程序功能描述与设计思路
程序流程图4
4测试方案与测试结果5
4.1测试方案5
4.2测试结果及改进6
附录1:
电路原理图7
附录2:
源程序9
四旋翼自主飞行器探测跟踪系统(C题)
【本科组】
1系统方案
本系统主要由总控制模块、飞行控制模块、超
声波测距模块、无线信号发射接收模块、电源模块组成,下面分别论证这几个模块的选择。
1.1控制系统的选择
按照本次赛题要求,控制系统芯片选用瑞萨RX23TMCU板(芯片型号为R5F523T5ADFM)作为主控芯片来采集信号以及控制飞行器飞行姿态与方向。
1.2飞行姿态控制的论证与选择
方案一:
瑞萨芯片将从MPU-6050中读取出来的飞行原始数据进行PID算法运算,得到当前飞行器的四元数,单片机再将数据融合,并对电调发出相应指令,从而达到控制飞行器的飞行姿态的目的。
但四元数法需要进行大量的运算,且运算复杂。
而且比赛时间紧迫,调试程序复杂且困难。
方案二:
采用市面上现有的QQ、KK等商用飞控板进行飞行姿态稳定的控制,再由瑞萨芯片给与干预来达到想要的飞行方案。
但由于这些飞控不开源且干预所需要的波形复杂不可模仿,对设计和调试都是巨大的挑战,且稳定性较差。
方案三:
录的市面上现有的飞控中的传感器集成部分与比较熟悉的STM32单片机最小系统相结合,利用飞控传感器模块的多面性和STM32强大的抗干扰性与兼容性自制飞控模块,再利用瑞萨芯片对STM32进行干预来实现比较稳定简便的飞行控制。
综合以上三种方案,选择方案三。
13高度测量模块的论证与选择
方案一:
采瓜bmp085气压传感器测量大气压并转换为海拔高度,把当前的海拔测量值减去起飞时的海拔值即得飞机的离地高度。
但此次竞赛飞行髙度相对比较低,芯片价格较贵,误差较大,调试较为困难。
方案二:
采用HGSR04超声波传感器测量飞行器当前的飞行高度。
这种传感器在较近距离测距误差较小,算法较易且价格便宜。
综合以上两种方案,选择方案二。
1.4电机及调速方案的论证与选择
要确定调速方案首先要确定电机型号的选择。
方案一:
采用有刷电机。
有刷电机采用机械转向,寿命短,噪声大,产生电火花,效率低。
它长期使用碳刷磨损严重,较易损坏,同时磨损产生了大量的碳粉尘,这些粉尘落轴承中,使轴承油加速干涸,电机噪声进一步增大。
有刷电机连续使用一定时间就需更换电机内碳刷。
方案二:
采用无刷电机。
无刷电机以电子转向取代机械转向。
无机械摩擦,无摩擦,无电火花,免维护且能做到更加密封等特点所以技术上要优于有刷电机。
综合以上两种方案,选择使用方案二无刷电机。
考虑到经济型实用性等方面,我们选用新西达A2212无刷电机。
而且由于本四旋翼飞行器选用的是无刷电机,所以电调只能选用无刷电机的电调,对于新手来说自己做电调需要的时间长,而且可能不稳定,危险性较大,所以直接用的是成品电调,我们选用电机配套的新西达A2212电调。
由此确定调速方案。
1.5无线信号发射与接收模块的论证与选择
方案一:
采用蓝牙模块来进行无线配对通信,将两个配对完成的蓝牙模块分别接在小车与飞行器的单片机上进行数据配对传输,但是蓝牙模块抗干扰性较差,传输速度略慢,传输信息量大,编辑代码较为复杂,调试麻烦。
方案二:
采沟超外差RF无线编码模块TXU8SA来进行无线信号发射,利用RX480E通用解码芯片进行信号接收,这两个传感器不仅价格低廉,且在近距离信号传输时抗干扰性较强,对码等调试较为简易。
综合两种方案我们选用第二种进行小车与飞行器之间的配对与信号传输。
2系统理论分析与计算
2.1控制方案的设计与分析
飞行器起飞及悬停方案设计
飞行姿态控制设计
飞行器在悬停的时,MPU6050会不断将现有姿态角数据传输给STM32飞控中,飞控会自动代入PID调试公式来确定现有的飞行姿态并给予调整来尽量保证飞机姿态的稳定。
飞行高度控制
飞行高度的采集采用超声波模块来实现,通过超声波发出时开始计时,收到返回信号时停止计时,瑞萨单片机利用声音在空气中的传播速度(粗记为340m/s)与时间的数学关系来计算出飞行器距地面的时间,从而控制飞行器的飞行髙度达到我们所需的高度。
2.1.4小车与飞行器联动设计
小车与飞行器之间采用TX118SA无线信号发射接收传感器来进行通讯连接,位于飞行器上的接收端可以接收到来自小车上发射端的信号来进行平面定位操作,再由瑞萨芯片发出指令来控制飞行器和小车控制在一定距离从而达到跟随。
2.2参数的计算
飞行稳定的PID计算
STM32最小系统板从飞控传感器模块中的MPU-6050芯片获取的数据是飞行器的三轴角速度和三轴角加速度,MCU对数据进行PID算法处理可以得到飞行器当前的飞行姿态。
PID是比例、积分、微分的缩写。
比例调节是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。
比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。
积分调节是使系统消除稳态误差,提高无差度。
因为有误差,积分调节就进行,直至无差,积分调节停止,积分调节输出一常值。
积分作用的强弱取决与积分时间常数Ti,Ti越小,积分作用就越强。
反之Ti大则积分作用弱,加入积分调节可使系统稳定性下降,动态响应变慢。
积分作用常与另两种调节规律结合,组成PI调节器或PID调节器。
几者结合从而保持飞行姿态稳定。
高度控制的PID计算
超声波测距传感器能测量出发出声波到接收到声波之间的时间长度,设这个值为X,则X/340/2即为所测量距离的长度,将这个经计算所得的值与所需要的高度进行对比,在对STM32进行反馈从而实现调速定高,来达到控制飞行高度的目的。
声光联动的参数设定
TX118SA发射器和接收器之间信号传输时间为声波在两者之间传递时间,与声速相除可测出之间距离,在距离到达所要求0・5m〜1.5m之间时,二极管所在端口输出高电平达到让二极管发光,同时扬声器所在端口输出高频PWM波以达到让扬声器发出尖锐声音的效果从而达到声光联动。
3电路与程序设计
3.1电路的设计
系统总体框图设计
系统总体框图如图1所示,
招声波
㈡
飞
瑞萨
飞
行
IFTT
由
图1系统总体框图
控制系统框图-
控制系统框图
二极管
扬声器
超
图2控制系统框图
飞控系统框图
飞控系统框图
图3飞控系统框图
电源的选用
电源由变压部分、滤波部分、稳压部分组成。
为整个系统提供±5V或者土12V电压,确保电路的正常稳定工作。
这部分电路比较简单,都采用三端稳压管实现,故不作详述。
3・2程序的设计
程序功能描述与设计思路
1、程序功能描述
首先一键启动飞行器,起飞后悬停,5S后降落;其次手持飞机靠近小车飞机和小车发出声光互响;再次一键启动飞机向前寻找小车,寻到后降落;然后启动飞机沿直线追寻小车;最后飞机沿不同方向追寻小车。
2、程序设计思路
先设计出每种功能中相同的程序部分方便在各个步骤中调用,再设计出各个步骤中特有的部分加上之前的公共部分进而完成整个步骤。
程序流程图
图4程序流程图
4测试方案与测试结果
4.1测试方案
对程序进行分块测试,先公共部分后独立部分,测试均无误后针对要求的需要进行测试。
分模块测试完毕后,在实验室自主搭建安全网空间进行整体测试,包括一键起飞、悬停定高、声光指示、定向飞行、追踪等,在队员安全与符合国家相关飞行器政策要求前提下完成所有测试。
4.2测试结果及改进
经过测试,将不稳定区间过大的部分进行了多次优化,使其能高效稳定地完成每步的运作。
尤其对PWM信号控制电机转速这一方面做了较大改进,在不断的调试中,使飞行器飞行更加稳定、准确,减小了许多外界因素造成的干扰。
综上所述,本设计达到要求。
附录1:
电路原理图
P120
1
ni^n/AXHlQ
DMa/WTPIITfKTVTPA
64
PHO
P43
2
r1XLvAiN!
It
P43P42/T104/T004P41E07P4Q/TOOLO"iJuvLrr
1lHU/rVLDUiGlWIlNIrOniziirprMim171^IVTP7
63P141
P42
3
r!
*•I/IX.LDU461/IIN1r/poorrioo
POlfTOOOP02/AN117/SO10/TXD1mmami1ln/t?
ymijqrain
62
POO
P4I
4
61
P01
TOOLO
5
60
P02
RESET
6
59
P03
P124/XT2
7
IxEwTTb
rUJ/AnllO/olIU/KALzI/oL/A1vR)4/SCKI(MSCLI0P130P20/ANI0/AVREFPP21/ANI1/AVREFM
58
P(M
P123/XTI
8
r11Z/tAVLKo
P123/XT1P137/INTP0P122/X2/EXCLK
I>1?
1/Y1
57
Pl30
P137
9
56
P20
P122/X2
10
rss-
P21
P121/X1
11
54
P22
REGC
12
I1/1/1
REGC
VSS
EVSS
VDDEVDDIWSCLAOP61/SDAA0
1ZZ7A1NIZ
P23/ANI3
P24/ANU
P25/ANI5
P26/ANI6
P27/AN17
P147/AN11RP146
PI(VSCK0CVSCL00/(T107)/(TO07)
PIbSI00/RXIMVTOOLRXD/SDA00/(T!
06y(TO06)
Pi2/SO(XVrXIXyrO€)LTXiy(1NTP5WT105y(T005)
P13HXD2/S020ASDAAO)/(T!
04)/(T004)P14/RXD2/SI2QP15/SCK20/SCL20;(TI02y(TO02)P1&noIfTOO1/INTP5Z(S100wRXDO)pi7frio2nr)o2/(so()orrxDO)
P55/(PCLBIJZI^SCKOO)P54
P53/(INTPU)
P52/(1NTP1O|
P51/1NTP2/SOI1
P50/INTP1ZSI11ZSDA1】
53
P23
DGND
13
52
P24
DGND
14
rsT"
P25
VCC
15
50
P26
VCC
16
49
P27
P60
17
4S
P147
P61
18
47
P146
P62
19
46
P10
P63
20
P63
P31ZTI03/1003/1NIP4/(PCLBI:
ZO)
I»77/KR7/IMP11/(TXD2)
P76/KR6/INTPI0/(RXD2)
P75/KR5/1NTP9/SCK01/SCL01
P74/KR4/1NTP8/SI01/SDA01
P73/KR3/SO01
45
PH
PSI
21
44
P12
P77
22
43
Pl3
P76
23
42
P14
P75
24
41
P15
P74
25
40
P16
P73
26
39
P17
P72
27
38
P55
P7)
28
r/Z/KKZ/owx1
P71/KRbS⑵/SDA21P7ftzKR0?
SCK21/SCL21P06/T106/T006K)5fII05/T005
UlA/lV1jy1111
37
P54
P70
29
36
P53
P06
30
35
P52
P05
31
34
P51
P30
32
33
P50
rJWIIN1rJ/l\1VlMZxoVKlIfoVLI1tT•
3V3
IHj
T3
mow,I54zn4»i«ioisutrannw
(fillIURT3火IMP
riFlit©
•ifQkci
U13
甌CD—kkurtjs
1-^L
a-
COAX
y
CMOfi
ITT
T
mHFI.RST旳D—
VDtlA
LK®
VDUSM
VDD3P3HXUfirTOUTC1IIPLHN
SMI>:
S10CLC
S»J>:
«»_(*s»_cu
WJM
mjw
3V3
ix»ni»ot-r»fSi
J:
6
9
CI】
0.0:
ADOnio
=i
I0
•
GND
enby
4
C:
.
SDA
J2C0N2
INT
JICON
XDAxcTA^-
C13—
0luF
DI
■
」
XDA
xcF
:
」INT12
CLKIN
SDA
AUX_DA
SCL
AUX~CL
CLKOLT
\1OGIC
RESV
ADO
CPOIT?
REGOUT
RESV
FSYNC
GND
INT.JSl
—\QD
24
SDA
23
SCL
21
20
n
C102
Oluf
:
20OpF
~TL
XCC33V
附录2:
源程序
#include"r_cg__macrodriver.h"
^include"regcgc.h"
ttinclude"r_cg_cac・h"
ttinclude"r_cg」ort・h"
ttinclude"r_cg_mtu3・h"
ttinclude"r_cg_cmt・h"
/*Startusercodeforinclude・Donoteditcommentgeneratedhere*/
/*Endusercode.Donoteditcommentgeneratedhere*/
ttincludeMr_cg_userdefine•hM
/****拿********拿****拿***************************拿****拿*拿***********************拿*拿車**************************************
Globalvariablesandfunctions
拿******拿***********************拿***************************拿***********拿*************拿*拿***
/*Startusercodeforglobal.Donoteditcommentgeneratedhere♦/voiddelay_m(uint32_tm)
{
for(;m>0;m--);
}
/*Endusercode.Donoteditcommentgeneratedhere♦/voidRMAINJJserlnit(void);
/******拿*********拿*拿***********拿*************拿車拿*********拿*拿*************拿*************拿***拿******拿****拿*拿**拿***********
♦FunctionName:
main
♦Description:
Thisfunctionimplementsmainfunction.
*Arguments:
None
♦ReturnValue:
None
拿****拿*拿*********拿****************水*我*******4(拿*拿***********拿****拿********拿****拿*******4(拿***
voidmain(void)
R_MAIN_UserInit();
/♦Startusercode.Donoteditcommentgeneratedhere♦/delayjn(0x5ffffff);
PORT1.POOR.BYTE=—Pm0_OUTPUT_l|_e2_Pml_OUTPUTJL;
PORT1.DSCR.BYTE|=_Ol_Pm0_HIDRV_ON|_00_Pml_HIDRV_OFF;
PORT1.PDR.BYTE=_01_Pm0_MODE_OUTPUT|_02_Pml_MODE_OUTPUT;
R_MTU3_C0_Start();
R_MTU3_C2_Start();
R』TU3_C3_Start();
while(1U)
/*Endusercode.Donoteditcommentgeneratedhere*/
staticvoidADVANCE_TIM_GPIO_Config(void)
{
GPIO_InitTjpeDefGPIO_InitStructure;
〃输出比较通道GPIO初始化
RCC_APB2PeriphClockCmd(ADVANCE^TIM^CHl_GPIO^CLK,ENABLE);GPIO_InitStructure.GPIO_Pin=ADVANCE_TIM_CH1_PIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP:
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_5()MHz;
GPIO_Init(ADVANCE_TI\LCHLPORT,&GPIO_InifStrudure);
//输出比较通道互补通道GPIO初始化
RCC_APB2PeriphClockCmd(ADVANCE_TIM_CHlN_GPIO_CLK,ENABLE);GPIO_InitStructure.GPIO_Pin=ADVANCE_TIM_CH1N_PIN;
GPIO_InitStructure.GPIO_Mode=GPIOJVIode_AF_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(ADVANCE_TIM_CHlN_PORT,&GPIO
//输出比较通道刹车通道GPIO初始化
RCC_APB2PeriphClockCind(ADVANCE_TIM_BKIN_GPIO^CLK,ENABLE);GPIO_InitStructure.GPIO_Pin=ADVANCE_TIM_BKIN_PIN;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO^Speed=GPIO_Speed_50MHz;GPIO_Init(ADVANCE_TIM_BKIN_PORT,&GPIO_InitStnictum);
nbkin引脚默认先输出低电平
GPIO_ResetBits(ADVANCE_TIM_BKIN_PORT,ADVANCE_TIM_BKIN_PIN);
}
staticvoidADVANCE_TIM_Mode_Config(void)
{
//开启定时器时钟、即内部时钟CKJNT=72MADVANCE_TIM_APBxClock_FUN(ADVANCE_TIM_CLK,ENABLE);
/*时基结构体初始化*/
TIM__TimeBaseInitTjpeDefTIM_TimeBaseStructure:
//自动塑装载寄存器的值,累计TIM_Period+l个频率后产生一个更新或者中断TIMTimeBaseStructure.TIMPeriod=ADVANCETIMPERIOD;
//驱动CNT计数器的时钟=FckJnt/(psc+l)
TIM_TimeBaseStructure.TIM_Prescaler=ADVANCE_TIM_PSC;
//时钟分频因子,配置死区时间时需要用到TIM_TiineBaseStructure.TIM_Cl(KkDivision=TIM_CKD_DIVl;
//计数器计数模式,设置为向上计数
TIM_TiineBaseStructure.TIM_CounterMode=TIM_CounterMode_Up:
〃重复计数器的值,没用到不用管
TIM_TiineBaseStructure.TIM_RepetitionCounter=0:
//初始化定时器TIM_TimeBaseInit(ADVANCE_TIM,