算法设计论文-PID算法实例

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子科技大学

UNIVERSITY OF ELECTRONIC SCIENCE AND TECHNOLOGY OF CHINA 算法分析与设计结业论文

Algorithm analysis and design

论文题目PID算法实例分析设计

课程名称算法分析与设计

上课地点清水河立人楼B106

学生姓名范昊洋

学号2015170201032

年月日

PID算法实例分析与设计

一,摘要

在对机械器件(如电机,电热水器等)进行电子控制的实现时,经常会由于被控制器件的被控制量的变化以及反馈存在一定的机械延迟导

致控制的效果不理想,精度不高。尤其是在控制对于实时系统的控制要

求极高的设备,如小车,四轴飞行器,3D打印机等对电机的控制要求非

常高,就要求有合适的算法对这些器件进行控制。PID算法应运而生。

在过程控制中,按偏差的比例(P)、积分(I)和微分(D)进行控制的PID控制器(亦称PID调节器)是应用最为广泛的一种自动控制器。

它具有原理简单,易于实现,适用面广,控制参数相互独立,参数的选

定比较简单等优点;而且在理论上可以证明,对于过程控制的典型对象

──“一阶滞后+纯滞后”与“二阶滞后+纯滞后”的控制对象,PID控制器是

一种最优控制。PID调节规律是连续系统动态品质校正的一种有效方法,它的参数整定方式简便,结构改变灵活(PI、PD、…)。

控制点包含三种比较简单的PID控制算法,分别是:增量式算法,位置式算法,微分先行。这三种PID算法虽然简单,但各有特点,基本

上能满足一般控制的大多数要求。

本文将以一个具体的用于控制两轮平衡小车的PID算法c语言实例对PID算法进行分析与设计。本实验中使用的处理器是ST公司的

STM32f103C8T6芯片,硬件方面,使用市场上广泛使用的陀螺仪mpu6050

作为加速度传感器和方位传感器,使用tb6612芯片制作点击驱动部分,

直流减速电机作为小车的电机。编译器是keil公司的mdk for arm(keil5)。

关键词:PID算法,stm32,平衡小车,mpu6050

二,实验设计

1.PID算法的初步设计准备

在进行实际算法设计之前,首先要进行一些准备工作,确保后续的PID算法设计能够顺利进行。在此之前首先深入了解PID算法设计思路。

第一要明确设计目的,设计目标是制作一个能够保持平衡的两轮平衡小车,那么首先要保持平衡,其次要能够正常直线行走,再次能实现

转向,一个小车就完成了。所以为了完成这些功能的设计,首先要有一

个功能足够的PID体系。

比例(P)控制

比例控制是一种最简单的控制方式。其控制器的输出与输入误差信号成比例关系。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。

积分(I)控制

在积分控制中,控制器的输出与输入误差信号的积分成正比关系。对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(System with Steady-state Error)。

为了消除稳态误差,在控制器中必须引入“积分项”。积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。

因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。

微分(D)控制

微分调节就是偏差值的变化率。例如,如果输入偏差值线性变化,则在调节器输出侧叠加一个恒定的调节量。大部分控制系统不需要调节微分时间。因为只有时间滞后的系统才需要附加这个参数。如果画蛇添足加上这个参数反而会使系统的控制受到影响。

首先看PID的增量型公式:

PID=Uk+KP*【E(k)-E(k-1)】+KI*E(k)+KD*【E(k)-2E(k-1)+E(k-2)】

由公式可以看出,要实现PID算法的编程,所需的PID变量至少有,KP,KI,KD三个系数。实验过程中,这三个变量的值就是许多工程师在实际调试过程中要调整的值。了解这点之后就开始进行实际编码。

2.直立PID的设计

两轮平衡小车不同于四轮的小车,开机之后就必须时刻保持直立,否则就会摔倒而无法进行任何操作,所以小车要完成的第一步就是保持直立。

首先解释一下小车保持直立的原理。小车是一个直立的个体,那么当它要倒下之前,要首先倾斜,但这时如果小车提前预知了这个趋势,并且控制小车的轮子向倾斜的方向运动小段距离,就能保持平衡。小车只要时刻都保持着这个运动,就可以实现一直保持直立。

考虑到这个过程对于高响应速度的要求以及其依赖于对小车状态趋势的分析,这个过程使用P(比例)D(微分)驱动而不使用I(积分)。代码如下:

int balance(float Angle,float Gyro)

{

floatBias,kp=575,kd=2.7;

int balance;

Bias=Angle-ZHONGZHI; //求出平衡的角度中值,和机械相关

balance=kp*Bias+Gyro*kd; //计算平衡控制的电机PWM

return balance;

}

这个函数有两个形参,这两个形参分别是平衡倾角和平衡角速度,由单片机控制的陀螺仪mpu6050实时传回的数据经过卡尔曼滤波计算得出。关于陀螺仪和卡尔曼滤波的算法与此处的PID算法无关不再叙述。

上面的balance函数是计算PWM值的一个函数,在另一中断函数中,使用该函数为电机PWM赋值。

相关文档
最新文档