Git Product home page Git Product logo

electronic-design's Introduction

2018年湖南省大学生电子设计竞赛设计——

升降式双旋翼飞行器

1、赛题简介

1.1、赛题任务

设计并制作一个沿竖杆升降的双旋翼飞行器及其控制系统。竖杆采用φ 12mm的圆钢,外套φ 17mm不锈钢管,长(1.4~1.7)m, 下端固定在底座上,杆上分别标有明显的A、B、C、D点标记,其中: A点距底面30cm, B点距底面70cm, C点距底面100cm,D点距底面130cm,且CD段有cm间隔的标记,如图1所示。双旋翼飞行器由根横板 和安装在横板两端的直流电机、螺旋浆组成,横板长度为50cm,中心最宽处宽度为10cm,两直流电机轴间距离为40cm,且横板中部有一个圆孔( φ20)。竖杆穿过横板中部的圆孔,能使横板沿竖杆自由地上下移动,如图2所示。控制系统通过控制两个螺旋浆的转速实现双旋翼飞行器起飞、降落以及飞行过程中的高度控制。在飞行器上有两个LED灯指示飞行器的状态。其中白色发光二极管为1#指示灯,红色发光二极管为2#指示灯。横板上离中心5cm处需要安装- - 个悬挂法码的小钩。

结构示意图

1.2、基本要求

当飞行器静止地停在底面时,键启动控制系统, 分别完成以下飞行过程:

(1)在15秒内,飞行器由地面上升且高度超过A点3秒以上,再平稳地降落回地面:

(2)在 20秒内,飞行器由地面上升并悬停在CD段维持3秒以上,再平稳地降落回地面:

(3) 在30秒内,飞行器由地面上升并悬停在AB段维持3秒,再上升并悬停在CD段维持3秒,再平稳地降落回地面:在此过程中,飞行器悬停在AB段时亮1“灯,在CD段悬停时亮2*灯,其它不亮灯。

(4) 在30秒内,飞行器由地面上升并悬停在CD段内的指定高度(X)5秒以上,且高度误差不超过Scm (以上下波动中心为准)、上下波动范围不超过5cm, 达到要求时同时亮1"、2*灯;

(5) 将控制系统、电池等全部安装在横板上,完成基本部分所有要求,且飞行器不出现螺旋状态。

1.3、发挥部分

控制系统、电池等全部安装在横板上的条件下:

(1) 飞行器由地面上升并悬停在CD段内的指定高度(X) 5秒以上时,人为将飞行器拉到BC段,飞行器能够自动返回原先的高度;

(2)在基本部分(4) 的基础上,进一步提高控制精度, 实现飞行器高度误差不超过3cm、上下波动范围不超过3cm,误差及波动范围越小越好;

(3)在完成发挥部分(2) 的基础上,实现飞行器高度的增量控制,即:通过按步进值键X),使飞行器上升Xcm、 或按另一个键使飞行器下降Xcm, 误差、波动范围要求同发挥部分(2)

(4)在飞行器中间小钩上加挂10克以上重物,完成发挥部分(3)

(5)自由发挥(仅限于更复杂的飞行路径和提高定位精度)

2、原理论证

PID 控制器以各种形式使用超过了 1 世纪,广泛应用在机械设备、气动设备 和电子设备.在工业应用中PID及其衍生算法是应用最广泛的算法之一,是当之无愧的万能算法。

PID 实指“比例 proportional”、“积分 integral”、“微分 derivative”,这三项构 成 PID 基本要素。每一项完成不同任务,对系统功能产生不同的影响。它的结构简单,参数易 于调整,是控制系统中经常采用的控制算法。

PID:比例单元(P)、积分单元(I)和微分单元(D)组成

PID框图

PID控制公式:

PID公式

其中:**u(t)**为控制器输出的控制量;(输出)

**e(t)**为偏差信号,它等于给定量与输出量之差;(输入)

KP 为比例系数;(对应参数 P)

TI 为积分时间常数;(对应参数I)

TD 为微分时间常数。(对应参数 D)

数字 PID 控制算法通常分为位置式 PID 控制算法和增量式 PID 控制算法。

位置式 PID 算法 :

位置式 PID 算法

e(k): 用户设定的值(目标值) - 控制对象的当前的状态值

比例P : e(k)

积分I : ∑e(i) 误差的累加

微分D : e(k) - e(k-1) 这次误差-上次误差

也就是位置式PID是当前系统的实际位置,与你想要达到的预期位置的偏差,进行PID控制

因为有误差积分 ∑e(i),一直累加,也就是当前的输出u(k)与过去的所有状态都有关系,用到了误差的累加值;(误差e会有误差累加),输出的u(k)对应的是执行机构的实际位置,,一旦控制输出出错(控制对象的当前的状态值出现问题 ),u(k)的大幅变化会引起系统的大幅变化

并且位置式PID在积分项达到饱和时,误差仍然会在积分作用下继续累积,一旦误差开始反向变化,系统需要一定时间从饱和区退出,所以在u(k)达到最大和最小时,要停止积分作用,并且要有积分限幅和输出限幅。

增量式PID:

增量式PID

比例P : e(k)-e(k-1) 这次误差-上次误差

积分I : e(i) 误差

微分D : e(k) - 2e(k-1)+e(k-2) 这次误差-2*上次误差+上上次误差

增量式PID根据公式可以很好地看出,一旦确定了 KP、TI 、TD,只要使用前后三次测量值的偏差, 即可由公式求出控制增量

而得出的控制量▲u(k)对应的是近几次位置误差的增量,而不是对应与实际位置的偏差 没有误差累加

也就是说,增量式PID中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果,并且在系统发生问题时,增量式不会严重影响系统的工作

总结:增量型 PID,是对位置型 PID 取增量,这时控制器输出的是相邻两次采样时刻所计算的位置值 之差,得到的结果是增量,即在上一次的控制量的基础上需要增加(负值意味减少)控制量。

***增量式与位置式区别:*** 1增量式算法不需要做累加,控制量增量的确定仅与最近几次偏差采样值有关,计算误差对控制 量计算的影响较小。而位置式算法要用到过去偏差的累加值,容易产生较大的累加误差。

2增量式算法得出的是控制量的增量,例如在阀门控制中,只输出阀门开度的变化部分,误动作 影响小,必要时还可通过逻辑判断限制或禁止本次输出,不会严重影响系统的工作。 而位置式的输出直接对应对象的输出,因此对系统影响较大。

3增量式PID控制输出的是控制量增量,并无积分作用,因此该方法适用于执行机构带积分部件的对象,如步进电机等,而位置式PID适用于执行机构不带积分部件的对象,如电液伺服阀。

4在进行PID控制时,位置式PID需要有积分限幅和输出限幅,而增量式PID只需输出限幅

位置式PID优缺点: 优点: ①位置式PID是一种非递推式算法,可直接控制执行机构(如平衡小车),u(k)的值和执行机构的实际位置(如小车当前角度)是一一对应的,因此在执行机构不带积分部件的对象中可以很好应用

缺点: ①每次输出均与过去的状态有关,计算时要对e(k)进行累加,运算工作量大。

增量式PID优缺点: 优点: ①误动作时影响小,必要时可用逻辑判断的方法去掉出错数据。 ②手动/自动切换时冲击小,便于实现无扰动切换。当计算机故障时,仍能保持原值。 ③算式中不需要累加。控制增量Δu(k)的确定仅与最近3次的采样值有关。

缺点: ①积分截断效应大,有稳态误差;

②溢出的影响大。有的被控对象用增量式则不太好;

PID算法C语言实现

首先,定义一个结构变量,用以存放PID运算中所需要的数据。

typedef struct _pid{
    float Set;                 //定义设定值
    float Actual;              //定义实际值
    float Kp,Ki,Kd;            //定义比例、积分、微分系数
    float err;                 //定义偏差
    float err_last;            //定义上一个偏差
    float Sum_err;             //定义偏差之和
    float Proportion;          //定义输出
    float Pout,Iout,Dout;      //定义个分量输出
}PID;

其次,初始化任一PID结构体,并为其动态申请内存。

PID *PID_Init(float S, float Kp, float Ki, float Kd)
{
    PID *pid_x = malloc(sizeof(PID));
    pid_x->Set = S;
    pid_x->Kp = Kp;
    pid_x->Ki = Ki;
    pid_x->Kd = Kd;
    pid_x->err_last = 0;
    pid_x->Sum_err = 0;
    pid_x->Proportion = 0;
    pid_x->Pout = 0;
    pid_x->Iout = 0;
    pid_x->Dout = 0;
    return pid_x;
}

在PID运算过程;

void PID_Count(PID *pid_x, float Act)
{
    pid_x->Actual = Act; //更新实际值
    pid_x->err_last = pid_x->err;   //更新上次偏差
    pid_x->err = pid_x->Set - pid_x->Actual; //更新当前偏差
    pid_x->Pout = pid_x->Kp * pid_x->err; //比例输出
    pid_x->Sum_err += pid_x->err; //误差总和   
    pid_x->Iout = (pid_x->Ki) * (pid_x->Sum_err);   //积分输出
    pid_x->Dout = (pid_x->Kd) * (pid_x->err - pid_x->err_last); //微分输出
    pid_x->Proportion = pid_x->Pout + pid_x->Iout + pid_x->Dout;//总输出
}

更改PID参数

void PID_Set_K(PID *pid_x, float Kp, float Ki, float Kd) 
{
    pid_x->Kp = Kp;
    pid_x->Ki = Ki;
    pid_x->Kd = Kd;
}

3、硬件设计

1·主控制器件的论证与选择

方案一:采用传统的51系列单片机

传统的51单片机为8位机,价格便宜,控制简单,但是运算速度慢,片内资源少,存储容量小,难以存储大体积的程序和实现快速精准的反应控制,并且受时钟限制,计时精度不高,外形体积大增加了系统的控制难度。

方案二:采用32位的ARM微控制器

STM32F103C8T6是一款基于ARM Cortex-M 内核STM32系列的32位的微控制器,程序存储器容量是64KB,时钟频率高达72MHZ。

本系统的MCU用于电机控制以及三维角度传感器的信号的采集和处理,对MCU的数据处理和计算要求较高,通过比较,选择方案二。

2·飞行姿态控制的论证与选择

采集模块选择:

方案一:采用MPU-6050模块

MPU-6050六轴模块采用高精度的陀螺仪加速计MPU6050,内部集成了姿态解算器,配合动态卡尔曼滤波算法,能够在动态环境下准确输出模块的当前姿态,姿态测量精度0.01度,稳定性极高。

方案二:采用ADXL345倾角传感器

ADXL345是超低功耗3轴加速度计,分辨率高(13位),数字输出数据为16位二进制补码格式,可通过SPI或I2C数字接口访问。

综合以上两种方案,选择方案一。

3·高度采集模块的论证与选择

方案一:采用的US-100 超声波测距模块可实现 2cm~4.5m 的非接触测距功能,自带温度传感器对测距结果进行校正,同时具有 GPIO,串口等多种通信方式,工作稳定可靠。

方案二:采用MS5611气压传感器,大气压是随高度变化而变化,通过大气压的变化就能转换成高度变化。

方案三:采用激光测距。测量距离远,测量精度高,抗干扰能力强,但体积较大,重量较重,且价格较贵。

考虑到对元器件的熟悉程度,元件的价格以及程序的编写,选择方案一。

4·遥控器模块的论证与选择

方案一:采用蓝牙作为遥控器。蓝牙是一种支持设备短距离通信(最大传输距离100米)的无线电技术。可做到10米左右的准确控制,可以不对准。

方案二:采用红外作为遥控器。红外传输速度快,但传输距离为1~2米,须对准,为单对单传输。

综合以上两种方案,考虑到准确控制飞行器的飞行,选择方案一。

5.电机驱动模块

方案一:298N驱动模块。采用L298N控制芯片。通过单片机改变输入到使能端的电平来控制电机的转速。但飞行器飞行时电机达到的电流远远超过L298N模块所能承受的电流。

方案二:空模无刷马达电子调速器(ESC)。具有强大的耐流能力。具备出色的马达兼容性和很高的驱动效率。最高转速可以达到210000RPM(2极马达),70000 RPM(2极马达),35000(12极马达).具有普通启动,柔和启动,超柔和启动三种模式,兼容固定飞机及直升机。可设定油门行程,兼容各种遥控器。具备输入电压异常保护,电池低压保护,油门信号丢失保护等多种保护功能。

综合以上两种方案,选择方案二。

主控原理图

遥控原理图

4、软件设计

完整代码请访问Github:https://github.com/Zwyywz/Electronic-design

软件逻辑

控制逻辑

5、测试验收

基础部分:

(1) 测试基本部分第一项,飞行器能达到A点3秒以上,然后平稳降落到地面,整个过程在15秒以内。说明飞行器能通过PID运算达到指定高度,而且且耗时短。

(2) 测试基本部分第二项,飞行器能达到CD段悬停3秒以上,然后平稳降落到地面,整个过程耗时18秒。说明飞行器能通过PID运算达到指定高度,并且能维持在某个高度,耗时不是很大。

(3) 测试基本部分第三项,飞行器能达到AB段悬停3秒以上,再上升到CD段悬停3秒,再平稳落地。在此过程中,在AB段悬停时黄色LED1#灯亮,在CD段悬停时红色LED2#灯亮。但整个过程耗时35秒,超出了要求。主要原因为PID运算输出的电机油门可能太小,导致上升缓慢。.

(4) 测试基本部分第四项,飞行器达到能CD段的指定高度5秒以上,但是误差超过5cm,上下波动范围不超过5cm,达到要求的同时红灯,黄灯一起亮,主要是因为PID运算的积分作用太大,从而使其超调。

(5) 将控制系统,电池全部安装在横板上,完成上述操作后,双旋翼出现自旋,主要原因没有用舵机来进行对飞行姿态进行调整,从而出现自旋。

发挥部分:

(1) 发挥部分第一项,飞行器能够达到CD段内的100cm处,并且悬停5秒。但稳定需要一定时间,人为拉到BC段内能较快恢复到原来的位置。由此可以分析PID的调节作用还是有的,但开始做PID运算时有点超调,导致悬停稳定时的时间较长。

(2) 发挥部分第二项,在基础部分第四项的基础上,精度的增加还是完成不了。由此可知PID参数的选定还不够合理。

(3) 发挥部分第三项,在完成基础部分第二项的基础上,按下步进键,高度增加了20cm,5秒后平稳降落。基本上完成要求。

(4) 发挥部分第四项,在飞行器上挂上30g的砝码,能完成发挥部分第三项。由此可以得知通过陀螺仪测得Z轴的角度作为PID的反馈,调整两个电机的转速,从而使飞行器达到平衡并且完成相应动作。

(5) 发挥部分第五项为自由发挥,飞行器分别升到A点,B点,C点,然后降到50cm处,然后平缓降落,每个点悬停的时间均为五秒。

Electronic-design

electronic-design's People

Contributors

zhou-wy avatar

Stargazers

 avatar 余翎瑞 avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.