APP下载

基于STC15单片机的四轴飞行器系统设计

2020-09-10王庐山

内燃机与配件 2020年11期
关键词:陀螺仪

王庐山

摘要:选用STC单片机作为主控芯片,采用MPU6050九轴陀螺仪作用四轴飞行器的姿态传感器,飞控主板与遥控器的通讯采用2.4G无线模块。电机驱动采用场效应管,同时利用STC15单片机内部自带的硬件PWM控制飞机电机的转速,电源部分采用一节3.7V锂电池供电,经过升压为5V,再经过降为3.3V。与其它外围电路一起构成四轴飞行器的硬件系统。软件部分采用C语言模块化编程,提高开发效率。四轴飞行器在遥控器的控制下能够完成一键起飞、无线遥控、手动控制等功能。同时电脑上位机可实时显示四轴的飞行姿态。

关键词:STC15单片机;四轴飞行器;PWM控制;无线遥控;陀螺仪

0  引言

飞行器设计与制作越来越受学生的喜爱。但由于飞行技术涉及专业领域较多,致使他们望而却步。该四轴飞行器基于STC15微控制器,是中国宏晶公司自主研发的一款高性能微控制器,在全国大学生电子设计大赛中多有采用。本款四轴飞行器采用2.4G无线遥控器和WIFI控制,能一键起飞,弹射抛飞,还能够向上位机实时传回飞机的姿态,采用先进的飞控算法,PID控制,PWM调速功能。

同时学生既可以练习电子产品装配与调试技术,又可以学习STC15单片机技术,是典型的软硬件都可以学习的教学实训好载体。因此我们设计了这款四轴飞行器。让学生在玩中学,在学中玩。因此设计一款STC15微控制器为核心的四轴飞行器,市场前景看好。

1  四轴飞行器硬件系统设计

1.1 系统的总体设计

四轴飞行器主要由单片机最小系统电路、电源电路、电机驱动电路、2.4G无线通讯模块、九轴陀螺仪电路、超声波定高模块和串口通信模块六个部分组成。

传统51单片机是目前使用量最多的单片机,但其片内资源较少,而且A/D转换时需要外接芯片,并且没有PWM功能,而STC15W4K48S4单片机是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍,内部集成6路硬件PWM单元,8路高速10位A/D转换,针对强干扰场合。由于四轴飞行器器需要4路硬件PWM调速控制单元和4路A/D采集系统,因此四轴飞行器的CPU采用STC15W4K48S4单片机作为主控制芯片,该CPU完全兼容传统的51单片机,学习起来非常熟悉,参考资料多,降低了设计难度,便于学生开发。

本款四轴飞行器的四个电机采用MOS管驱动。利用STC内部自带的四路硬件PWM,P3.7、P2.1、P2.2、P2.3四个引脚分别为PWM2、PWM3、PWM4、PWM5。九轴陀螺仪MPU6050通过IIC总线与CPU的P3.4、P3.5相连。2.4G无线模块通过SPI总线接在CPU的P2.4、P2.5、P2.6、P2.7、P0.1。超声波定高模块接在P3.2和P3.4口,WIFI模块和程序下载接在P3.0和P3.1口。

1.2 电源电路设计

四轴的电源,我们采用3.7V的锂电池来供电。首先电池的3.7V电压送到BL8530进行升压处理,得到稳定的5V电压,5V电压主要供给STC15单片机、程序下载电路、MPU6050,超声波定高模块和磁场模块。5V的电压再经 ME6219进行降压,降到3.3V,供2.4G无线模块使用,电容C5、C6是退耦电容,起到抗干扰的作用。电容C14、C15、C16是滤波电容。L1、D6和U3一起作为开关电源,起到把3.7V电压升到5V的作用。D5是防电源插座防反接作用。CON2是3.7V锂粒子电池接口。

1.3 四轴飞行器电机驱动电路设计

STC15单片机I/O口,是不能直接驱动大电路器件的,本设计采用NMOS管SI2302来驱动电机,电路如图1所示。该MOS管的驱动电路可达3A,完全满足我们的设计需求。C9、C10、C11、C12都为退耦电容,用于滤除电机运行时的干扰。

当单片机发出PWM控制信号时,对于N沟道的MOS管来说,高电平导通,低电平截止。需要注意的是,在飞行器的电机驱动电路中,驱动电路的电源直接用电池的电源。

1.4 无线通信电路设计

无线通信采用NRF24L01模块,通过SPI总线与单片机通讯,接收遥控器发来信号,单片机收到控制信号后,做出相应的飞控动作。需要注意的是,无线模块采用3.3V供电。

1.5 九轴陀螺仪电路设计

飞控的姿态数据采集用陀螺仪 MPU6050,这部分的电路图比较简单,单片机通过IIC总线与陀螺仪电路相连,读取飞行器的姿态数据,然后进行数据融合或四元数转换,再经过PID运算,PWM输出控制飞行器的电机动作。

2  四轴飞行器软件系统设计

四轴飞行器主控系统软件分为主程序、MPU6050飛行器姿态读取子程序、PID数据融合与PWM子程序、无线通信子程序、超声波定高子程序五部分。

2.1 四轴飞行器主程序设计

在主程序中,首先对飞控用到的模块和端口初始化。初始化PWM、ADC转换功能、九轴陀螺仪MPU6050、2.4G无线通讯模块、定时器T0等。

NRF24L01先设定为发送状态,并发送飞控的姿态数据给上位机,然后设定无线模块为接收状态,接收遥控器发来的数据。

判断飞机是否失联,如果失联,则降低油门,归中航向、横滚、俯昂角,迫使飞机降落下来。当飞机未失联时,判断飞机是否解锁。

当处于解锁状态时,点亮流动状态灯,指示飞机处于正常状态,并且每2毫秒读取陀螺仪数据,超声波数据,进行数据融合,四元数据解算,PID运算和PWM控制,使得飞机的飞行状态在人的操作下,稳定的飞行。

2.2 MPU6050飞行器姿态读取子程序设计

单片机通过IIC总线读出陀螺仪的三轴加速度和三轴陀螺仪的数据,然后进行数据的处理。

MPU6050集成了三轴的陀螺仪和三轴加速度。角速度范围为±250、±500、±1000与±2000。MPU6050带有三轴陀螺仪,每个陀螺仪各自负责检测相应轴的转动速度,也就是检测围绕各个轴转动的速度。

通过I2C接口读出来的转换结果ADC值,并不是以度/每秒为单位。一般按以下公式进行转换:转换结果= ADC值/灵敏度。以量程为±1000°/s为例说明。假设读取x轴的ADC值为200,而在±1000°/s下的灵敏度为32.8LSB/(°/s)。根据上面的公式:转换结果=200/32.8=6.09756°/s。这就是说,MPU6050检测到模块正在以约6度每秒的速度绕X轴旋转。ADC值并不都是正的,当出现负数时,意味着该设备从现有的正方向相反的方向旋转。

2.3 PID、四元数数据融合、PWM控制子程序设计

PID、四元数数据融合、PWM控制子程序流程图如图2所示。四轴飞行器的PID采用双环控制。外环是角度,内环是陀螺仪。以X轴的PID为例说明操作过程。

①读取MPU6050飞控制的姿态数据,即三轴加速度和三轴陀螺仪数据。

Gyro_x=GetData(GYRO_XOUT_H);//读出X轴陀螺仪数据

Gyro_y=GetData(GYRO_YOUT_H);//读出 Y轴陀螺仪数据

Gyro_z=GetData(GYRO_ZOUT_H);//读出 Z轴陀螺仪数据

Accel_y=GetData(ACCEL_YOUT_H);//读出 X轴加速度数据

Accel_x=GetData(ACCEL_XOUT_H);//读出 Y轴陀螺仪数据

Accel_z=GetData(ACCEL_ZOUT_H);//读出 Z轴加速度数据

②根据选择的量程对陀螺仪和加速度数据进行转换,因为我们加速度的量程为±4g/S,所以要除以8192,陀螺仪的量程为±500度/S,所以要除以65.5。

Angle_ax=(Accel_x)/8192;  //加速度处理

Angle_az=(Accel_z)/8192;  //加速度量程±4g/S

Angle_ay=(Accel_y)/8192;  //转换关系   8192LSB/g

Angle_gx=(Gyro_x)/65.5;    //陀螺仪处理

Angle_gy=(Gyro_y)/65.5;    //陀螺仪量程±500度/S

Angle_gz=(Gyro_z)/65.5;    //转换关系65.5LSB/度

③四元数解算出欧拉解。

IMUupdate(Angle_gx*0.0174533,Angle_gy*0.0174533,Angle_gz*0.0174533,Angle_ax,Angle_ay,Angle_az);得到俯昂角AngleX和橫滚角AngleY。

④计算外环的误差。

Ax=-FR1+a_x-AngleX; 其中FR1为遥控器发来的横滚摇杆数据,ax为遥控器发来的横滚微调数据,AngleX为俯昂角。

⑤外环误差积分与限幅。

ERRORX_Out += Ax; //外环积分

if(ERRORX_Out >  ERR_MAX)ERRORX_Out =  ERR_MAX;//积分限幅

else if(ERRORX_Out < -ERR_MAX)ERRORX_Out = -ERR_MAX;//积分限幅

⑥算出外环的PID。

PID_Output = Ax*Out_XP + ERRORX_Out*Out_XI+(Ax-Last_Ax)*Out_XD; //外环PID

⑦计算内环误差。

gy=PID_Output-Angle_gy;PID_Outpu为外环的输出,作为内环的输入,Angle_gy为Y轴的陀螺仪值。

⑧内环误差积分与限幅。

if(YM > 30)ERRORX_In += gy;//内环积分(油门小于某个值时不积分)

else ERRORX_In  = 0; //油门小于定值时清除积分值

if(ERRORX_In >  ERR_MAX) ERRORX_In =  ERR_MAX;

else if(ERRORX_In < -ERR_MAX) ERRORX_In = -ERR_MAX;//积分限幅

⑨算出总环的PID及限幅。

PID_Output = gy*In_XP + ERRORX_In*In_XI + (gy-Last_gy)*In_XD;

if(PID_Output >  1000) PID_Output =  1000;//输出量限幅

if(PID_Output < -1000) PID_Output = -1000;

⑩PWM控制四轴飞机的电机。

speed0 = 0 + PID_Output;speed1 = 0 - PID_Output;

speed3 = 0 + PID_Output;speed2 = 0 - PID_Output;

2.4 无线通讯子程序设计

主程序上电,通过SPI总线初始化NRF24L01,并配置为接收方式,当NRF24L01模块接收到数据后传递给主控制器,由主控制器进行数据处理。

NRF24L01模块每个数据帧为11个字节,这11个字节的功能依次为:失联变量、解锁或上锁命令值、油门变量、高低字节、航向变量、横滚变量、俯仰变量、设置参数变量、横滚微调值、俯昂微调值、航向微调值。单片机就是根据无线模块发来的数据,对飞行器进行控制。

参考文献:

[1]刘乾,孙志锋.基于ARM的四旋翼无人飞行器控制系统[J].机电工程,2011(10).

[2]赵鹤,王喆垚.基于UKF的MEMS传感器姿态测量系统[J].传感技术学报,2011(05).

[3]周江华,苗育红.四元数在刚体姿态仿真中的应用研究[J].飞行力学,2000(04).

猜你喜欢

陀螺仪
Micro Beast Plus陀螺仪使用心得(上)
Kyosho Drone Racer穿越机
自动跑位和数据采集机器人
基于Android平台的老人跌倒检测算法及APP设计
基于模糊理论摆式陀螺仪悬挂带的优化设计
惯性导航技术介绍及应用发展研究
基于ARM技术的捷联惯导系统信号降噪分析与设计
基于DSP的MEMS陀螺仪信号处理平台的设计