文档库 最新最全的文档下载
当前位置:文档库 › 算法设计论文-PID算法实例

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

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

电子科技大学

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赋值。

Balance_Pwm =balance(Angle_Balance,Gyro_Balance);

简要说明,PWM在此处指的是单片机通过IO口传出的频率,占空比都可控的方波信号,单片机通过这些方波信号来控制电机的转动与转速,根据电机种类的不同而控制方式也不同。此处可简要理解为pwm的变量值越大,电机的转速越快。

那么我们来看balance函数的具体内容,函数中的kp为比例系数,kd为微分系数,该值为已经调试好的取值。输出一个值balance=kp*Bias+kd*Gyro,Angle为平衡倾角,而Bias=Angle-ZHONGZHI 的意思就是求出平衡方向的倾角与实际要控制的值之间的差值,既是被控制量与被控制的值的差值,这个差值与kp的乘积就是比例系数的变量。

然后再看另一个,另一个是平衡倾角角加速度,由加速度传感器直接经过计算而得,也就是现成的平衡倾角(被控制量)的微分变化,与kd的乘积就是微分系数的变量。两者相加就完成了直立PID的计算。

3.速度PID的设计

解决了直立的问题,下一步就要让小车能够自由前行。既是实现速度PID控制。

int velocity(intencoder_left,intencoder_right)

{

static float Velocity,Encoder_Least,Encoder,Movement;

static float Encoder_Integral,Target_Velocity;

floatkp=210,ki=1.05;

if(1==Flag_Qian) Movement=Target_Velocity/Flag_sudu;

else if(1==Flag_Hou) M ovement=-Target_Velocity/Flag_sudu;

else Movement=0;

Encoder_Least=(encoder_left+encoder_right)-0;

Encoder *= 0.8;

Encoder += Encoder_Least*0.2;

Encoder_Integral +=Encoder;

Encoder_Integral=Encoder_Integral-Movement;

if(Encoder_Integral>10000) Encoder_Integral=10000;

if(Encoder_Integral<-10000) Encoder_Integral=-10000;

Velocity=Encoder*kp+Encoder_Integral*ki;

return Velocity;

}

这个函数就是速度PID控制的函数,由于小车本身速度不快(使用直流减速电机),不需要对于很快的动作有过于明显的反应所以舍弃微分D而只使用P和I两个变量进行控制。

Flag_Qian和Flag_Hou两个变量是标志位,若变量为0表示不行进,Flag_Hou=1表示向后走,Flag_Qian=1表示往前走。函数的两个形参分别是编码器返回值的左轮速度和右轮速度(编码器是用来检测转动圈数的,返回值是单位时间内的转动圈数,也就是速度)。

此处需要说明的是如下语句:

Encoder_Least=(encoder_left+encoder_right)-0;

Encoder *= 0.8;

Encoder += Encoder_Least*0.2;

Encoder_Least是当前速度值(两轮速度和),得到当前速度之后,并没有直接把它作为比例量与比例系数相乘,也没有把它的值作为一个时刻的积分量累加,而是让Encoder量自乘0.8,再与Encoder_Least乘0.2的结果相加。这个处理过程其实是一个低通滤波过程。由于编码器传回的数据也是直接从机械装置之中检测到的值,偶然事件对该值的影响可能会比较明显,但是这样就会偏离真实的转动量,所以对转动量(速度)这个值进行低通滤波之后再作为变量使用,这样做是为了让小车更加平稳,速度的PID效果更稳定高效。

Encoder_Integral这个变量则是转动量(速度)的积分变量。积分量每次都加上一个当前变量值,减去该次的速度的目标值,表示速度与目标速度的差值的积分。其中如下语句:

if(Encoder_Integral>10000) E ncoder_Integral=10000;

if(Encoder_Integral<-10000) Encoder_Integral=-10000;

则是为了防止积分变量过大,当系统处于特殊情况时积分变量不断增大可能会对系统的调整造成很大影响,于是在每次积分变量计算结束之后都对积分变量进行一个上限判断(正值上限与负值上限),如果积分变量超过10000则把它的值限定在10000,这样做增加了系统的稳定性,同时在开发过程中这样的语句也有很大的意义。

最后把积分变量和比例变量相加赋给电机pwm:

Velocity=Encoder*kp+Encoder_Integral*ki;

这样就能把每一次的计算结果传递给电机,让电机按照指定的计算结果转动,保证电机已给定的控制量方式转动。

4.转向环PID的设计

两个电机都赋予了速度之后,小车就能被控制直走了,但是还需要一个转向的指令,这样小车才能够实现正常的功能。如下为转向PID函数。

int turn(intencoder_left,intencoder_right,float gyro)

{

Static float Turn_Target,Turn,Encoder_temp,Turn_Convert=0.9,Turn_Count;

floatTurn_Amplitude=15/Flag_sudu,Kp=60,Kd=0;

//=============遥控左右部分=======================//

if(1==Flag_Left||1==Flag_Right)

{

if(++Turn_Count==1)

Encoder_temp=myabs(encoder_left+encoder_right);

Turn_Convert=50/Encoder_temp;

if(Turn_Convert<0.6)Turn_Convert=0.6;

if(Turn_Convert>3)Turn_Convert=3;

}

else

{

Turn_Convert=0.9;

Turn_Count=0;

Encoder_temp=0;

}

if(1==Flag_Left) Turn_Target-=Turn_Convert;

else if(1==Flag_Right) Turn_Target+=Turn_Convert;

elseTurn_Target=0;

if(Turn_Target>Turn_Amplitude) Turn_Target=Turn_Amplitude;

if(Turn_Target<-Turn_Amplitude) Turn_Target=-Turn_Amplitude;

if(Flag_Qian==1||Flag_Hou==1) Kd=1;

elseKd=0;

Turn=-Turn_Target*Kp -gyro*Kd;

return Turn;

}

转向部分使用PD控制,有kp,kd两个变量。函数的三个形参分别是左轮速度,右轮速度和当然角度。这个转向环PID使用的是带有陀螺仪获取方向的控制。那么分析函数本身,先判断flag_left或者flag_right 是否为1,如果为1再进行转向PID的计算,如果不是,就把turn_convert 置为初值0.9,turn_count置为初值0,encoder_temp也置为0(这几个变量在函数的开始就定义为静态变量可以一直存在并且保存其值大小)。若转向标志变量设置为1,则进行计算,若Turn_Count变量自加后为1,给encoder_temp变量赋值为当前两轮速度和。而Turn_Convert变量则赋值为50/encoder_temp,是根据速度越快转向越慢的调速,这样比较符合正常的感觉,在不同速度时转向变量大小若相同则会产生快速的时候转向过快的问题。同时如下两个语句:

if(Turn_Convert<0.6)Turn_Convert=0.6;

if(Turn_Convert>3)Turn_Convert=3;

是给Turn_Convert变量进行限幅,避免出现过大的转速变量导致系统出现问题,或者变向过快或者过慢。

经过上式计算得出的Turn_Convert是当前得出的转向变量的控制目标值,于是要根据转动方向的不同为两个方向上的转动目标值赋予不同的值。如果向左转动则左轮减去转动量,右轮加上转动量。如果向右则正好相反。

if(1==Flag_Left) Turn_Target-=Turn_Convert;

else if(1==Flag_Right) Turn_Target+=Turn_Convert;

elseTurn_Target=0;

然后再对增加转动变量后的转向速度进行限幅

if(Turn_Target>Turn_Amplitude) Turn_Target=Turn_Amplitude;

if(Turn_Target<-Turn_Amplitude) Turn_Target=-Turn_Amplitude;

最后如果正在向前或者向后行进,则增加一个kd=1多一个陀螺仪的纠正变量,if(Flag_Qian==1||Flag_Hou==1) Kd=1;

elseKd=0;

最后计算出转向PID的电机PWM值,并返回这个值。

Turn=-Turn_Target*Kp -gyro*Kd;

至此转动变量的PID计算也结束了。

三,实验的程序全貌

在这里给出操作这三个函数的控制函数:

int EXTI9_5_IRQHandler(void)

{

if(PBin(5)==0)

{

EXTI->PR=1<<5;

//清楚line5上的中断标志位

Flag_Target=!Flag_Target;

if(delay_flag==1)

{

if(++delay_50==10) delay_50=0,delay_flag=0;

//给主函数提供100ms精确延时

}

if(Flag_Target==1)

//5ms读取一次陀螺仪和加速度计的值,更高的采样频率可以改善滤波效果

{

Get_Angle(Way_Angle);

//更新姿态

return 0;

}

//10ms控制一次,为保证测速时间的精准,首先读取编码器的值

Encoder_Left=-Read_Encoder(2);

//读取编码器的值,因为两个电机的反向,所以对其中一个取反,保证输出极性一致

Encoder_Right=Read_Encoder(4);

//读取编码器的值

Get_Angle(Way_Angle);

//更新姿态

Balance_Pwm =balance(Angle_Balance,Gyro_Balance);

//;平衡PID控制

Velocity_Pwm=velocity(Encoder_Left,Encoder_Right);

//速度环PID控制,此处速度环是正反馈,就是小车快的时候要慢下来就需要再跑快一点

Turn_Pwm=turn(Encoder_Left,Encoder_Right,Gyro_Turn);

//转向环PID控制

Moto1=Balance_Pwm-Velocity_Pwm+Turn_Pwm;

//计算左轮电机最终PWM

Moto2=Balance_Pwm-Velocity_Pwm-Turn_Pwm;

//计算右轮电机最终PWM

Xianfu_Pwm();

//pwm限幅

Set_Pwm(Moto1,Moto2);

//赋值给PWM寄存器

}

return 0;

}

该函数为单片机的中断函数,当PB5这个引脚的电平为低电平时,触发该中断。该终端由mpu6050的INT引脚触发,为5ms定时采样的定时中断,严格保证采样和数据处理的同步。该函数展示了系统把直立环,速度环和转向环三者结合的整个算法和思想,实现了在保持平衡小车直立的前提下对于小车的速度以及转向的控制。编者在每句后都加了注释在这里不再赘述。

以下函数为PWM的配置函数,经过整个中断函数计算得出的电机PWM值经由这个函数配置给电机。

voidSet_Pwm(int moto1,int moto2)

{

if(moto1<0) AIN2=1, AIN1=0;

else AIN2=0, AIN1=1;

PWMA=myabs(moto1);

if(moto2<0) BIN1=0, BIN2=1;

else BIN1=1, BIN2=0;

PWMB=myabs(moto2);

}

其中,PWMA和PWMB都是宏定义的变量:

#define PWMA TIM1->CCR1

#define PWMB TIM1->CCR4

将TIM1->CCR1这个寄存器宏定义给了PWMA,TIM->CCR2这个寄存器宏定义给了PWMB,这样定义增强了代码的可读性。

上述函数中的mayabs函数是一个数学函数,取绝对值。

以下函数为PWM限幅函数。其中PWM的最大值为7200是硬件限制。经过对定时器的计算得出的。具体计算过程在此不予说明。

voidXianfu_Pwm(void)

{

int Amplitude=6900; //===PWM的最大值为7200 限制在6900 if(Moto1<-Amplitude) Moto1=-Amplitude;

if(Moto1>Amplitude) Moto1=Amplitude;

if(Moto2<-Amplitude) Moto2=-Amplitude;

if(Moto2>Amplitude) Moto2=Amplitude;

}

最后把主函数展示出来

int main(void)

{

Stm32_Clock_Init(9);

delay_init(72);

LED_Init();

KEY_Init();

OLED_Init();

uart_init(72,128000);

uart3_init(36,9600);

MiniBalance_PWM_Init(7199,0);

MiniBalance_PWM_Init(9999,35) ;

Encoder_Init_TIM2();

Encoder_Init_TIM4();

Adc_Init();

IIC_Init();

MPU6050_initialize();

DMP_Init();

//TIM3_Cap_Init(0XFFFF,72-1);

EXTI_Init();

while(1)

{

delay_flag=1;

delay_50=0;

while(delay_flag);

}

}

While(1)之前的为各种外部设备和系统的初始化函数,while(1)内部为通过MPU6050的INT中断实现的50ms精确延时。

下面再放一个简易的卡尔曼滤波的函数,不做解释,使用卡尔曼滤波或者互补滤波等可以使系统得到的加速度传感器传回值更稳定。

voidKalman_Filter(float Accel,float Gyro)

{

angle+=(Gyro - Q_bias) * dt; //?è?é1à??

Pdot[0]=Q_angle - PP[0][1] - PP[1][0];

Pdot[1]=-PP[1][1];

Pdot[2]=-PP[1][1];

Pdot[3]=Q_gyro;

PP[0][0] += Pdot[0] * dt;

PP[0][1] += Pdot[1] * dt;

PP[1][0] += Pdot[2] * dt;

PP[1][1] += Pdot[3] * dt;

Angle_err = Accel - angle;

PCt_0 = C_0 * PP[0][0];

PCt_1 = C_0 * PP[1][0];

E = R_angle + C_0 * PCt_0;

K_0 = PCt_0 / E;

K_1 = PCt_1 / E;

t_0 = PCt_0;

t_1 = C_0 * PP[0][1];

PP[0][0] -= K_0 * t_0;

PP[0][1] -= K_0 * t_1;

PP[1][0] -= K_1 * t_0;

PP[1][1] -= K_1 * t_1;

angle += K_0 * Angle_err;

Q_bias += K_1 * Angle_err;

angle_dot = Gyro - Q_bias;

}

四,实验总结和经验

实验程序经调试可以在小车上达到非常良好的行驶效果,实验程序上写的参数都是经过实际调试PID参数之后试验认为比较合适的参数,

因个人的硬件设施不同,PID系数一定会产生差异,本文中的参数只能作

为参考,具体如何调PID的参数本身也十分考究。

实验过程中,笔者曾在陀螺仪数据处理的方式中选择使用dmp方式,最后可能是偶然原因导致dmp方式计算总是使系统的反应较慢,达不到

应有的效果。后来改用了卡尔曼滤波方式,系统的性能,小车的平稳性

以及行进得到很好的改善。

在其他程序中常见PID参数以另一种方式出现在程序中,即设定一个PID结构体,这种方式使用也非常方便,本文中为了讲解简便易懂,

将所有的结构体变量设置为普通的变量,同时因为本文中的PID参数已

经为设置好的,三个PID环中的kp,ki,kd参数都没有给外部接口,在

调试过程中使用蓝牙串口直接调整这三个变量的值比较方便调试。不建

议直接这样写。

计算机算法与设计论文

中国传媒大学2011 学年第一学期计算机算法设计与分析课程 计算机算法设计与分析 题目回溯法解决n色方柱问题的算法设计与分析 学生姓名 学号 班级 学院 任课教师

回溯法解决n色方柱问题的算法设计与分析 摘要: 对于计算机科学来说,算法(Algorithm)的概念是至关重要的。算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。为了充分理解算法分析的思想,利用算法思想解决实际问题,所以用回溯法解决书上P181习题5—7 n色方柱问题。 关键字: 计算机算法回溯法 n色方柱 回溯法背景: 回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解;倘若当前候选解除了还不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。扩大当前候选解的规模,以继续试探的过程称为向前试探。 回溯法的基本思想:确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先的方式搜索整个解空间。这个开始结点就成为一个活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点就成为一个新的活结点,并成为当前扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为死结点。换句话说,这个结点不再是一个活结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。回溯法即以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已没有活结点时为止。 1、问题描述: 设有n立方体,每个立方体的每个面用红、黄、蓝、绿等n种颜色之一染色。要把这n个立方体叠成一个方形柱体,使得柱体的4个侧面的每一侧均有n种不同的颜色。试设计一个回溯算法,计算出n个立方体的一种满足要求的叠置方案。 例如:第一行有1个正整数n,0

C语言程序设计论文

C语言程序设计论文 鸡西大学 08电气与信息工程系 班级:软件2班 姓名:范孝龙

设计题目:贪吃蛇 正文: 一、引言: 贪吃蛇这一游戏实训中初次接触,通过操作熟悉,觉知此游戏简单易行,操作方便,而且娱乐性较强,应该吸引了不少游戏的钟爱者人。这一款游戏紧紧地抓住了人们的心理,虽然简单,却起乐无穷,在人们不断追求更多的欲望下,该游戏给人们带来了追逐的快感,以及成功后的满足感,对于一直处于高压下的现代人是很好的放松工具,令人百玩不厌。 二、系统分析: 1)可行性分析:首先,贪吃蛇用C语言编程,有很好的技术可行性,在MYTC下也能顺利运行,可以说在技术方面,只要掌握代码编写知识,就不会有多大的问题。其次,贪吃蛇这类小游戏,还能够下载到手机上玩,所以,更容易为人们所接受,这就展现它的经济可行性也会不赖。再次,无论是电脑还是手机或游戏机,在操作上它都很简单,一学就懂,又证实了它的操作可行性。 2)需求分析:游戏是人们生活中不可或缺的,是一个人从小到大,真正伴随他成长的东西。游戏在娱乐中占有着很重要的地位,不论是一个玩具,还是一个能和伙伴一起开心的小游戏,都是能给我们留下很多美好的回忆。所以不论是什么样的游戏,只要它能迎合人们内心的某种需求,它的市场总会是好的。贪吃蛇,是个简单的小游戏,但却能给人以放松,让我们从繁重的日常生活中解脱出来,得到身心

的放松,现在的人,不管是已经工作的,还是还未进入社会的学生,都面临着很大的压力,而这样一款能让我们随时随地都能享受的游戏,其魅力还是不可估量的。 贪吃蛇,之所以取这样的名字,去用意还是很明显的。贪吃蛇其实并不贪,它只是人不断向前追求的象征。就像现代的人只有不断努力向前才能得到自己想要的。而食物也是随机出现的,就像现在社会存在的机会,而我们只有找好自己的目标才能成功。虽然现在市面上存在着各种各样的游戏版本,可是贪吃蛇其市场还是相当大的。因为它的特殊在于它能吸引人更深入,爱不释手。随着游戏速度不断加快,其刺激性也更强。 我觉得该游戏的优势在于它的简单易行,不论是手机,还是小游戏机,都能很快顺利的运行,对于在外忙碌的人,不可能花费大量时间在娱乐上,大型游戏是行不通的,这样的小游戏刚好迎合了他们的需求。 三、设计目的: 进一步培养结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;针对C语言中的重点和难点内容进行训练,能够独立完成有一定工作量的程序设计任务,同时培养好的程序设计风格;掌握C语言的编程技巧和上机调试程序的方法;掌握程序设计的常用算法;加强对所学知识的巩固。 四、设计思想及其编码过程概述: 1)这个程序的关键是表示蛇的图形以及蛇的移动。用一个小矩

(完整版)数字PID及其算法

数字PID 及其算法 主要内容:1、PID 算法的原理及数字实现 2、数字PID 调节中的几个实际问题 3、几种发展的PID 算法 4、PID 参数的整定方法 一、概述 几个概念: 1、程序控制:使被控量按照预先规定的时间函数变化所作 的控制,被控量是时间的函数。 2、顺序控制:是指控制系统根据预先规定的控制要求,按 照各个输入信号的条件,使过程的各个执行机构自动地按预 先规定的顺序动作。 3、PID 控制:调节器的输出是输入的比例、积分、微分的 函数。 4、直接数字控制:根据采样定理,先把被控对象的数学模 型离散化,然后由计算机根据数学模型进行控制。 5、最优控制:是一种使控制过程处在某种最优状态的控制。 6、模糊控制:由于被控对象的不确定性,可采用模糊控制。 二、PID 算法的原理及数字实现 PID 调节的实质:根据系统输入的偏差,按照PID 的函数 关系进行运算,其结果用以控制输出。 PID 调节的特点:PID 的函数中各项的物理意义清晰,调节灵活,便于程序化实现。 三、 PID 算法的原理及数字实现 PID 调节器是一种线性调节器,他将设定值w 与实际值y 的偏差: 按其比例、积分、微分通过线性组合构成控制量 1、比例调节器:比例调节器的微分方程为:)(*y t e Kp = y 为调节器输出,Kp 为比例系数,e(t)为调节器输入偏差。由上式可以看出比例调节的特点:调节器的输出与输入偏差成正比。只要偏差出现,就能及时地产生与之成比例的调节作用,使被控量朝着减小偏差的方向变化,具有调节及时 的特点。但是,Kp 过大会导致动态品质变坏,甚至使系统不稳定。比例调节器的阶跃响应特性曲线如下图 y w e -=s d *K s Ki p K 对象 w e + - + + + u y

算法设计和分析课程论文

理工学院课程论文 论文题目贪心法的应用 课程名称算法设计与分析 姓名学号 专业计算机科学与技术年级 学院计算机日期(2014年4月10日) 课程论文评价标准

贪心法的应用 摘要:在解决问题的过程中,通过逐步获得最优解从而获得整体最优解的策略就是贪心策略,在已经学会在解的围可以确定的情况下,可以采用枚举或递归策略,一一比较它们最后找到最优解;但当解的围非常大时,枚举和递归的效率会非常低。这时就可以考虑用贪心策略。贪心算法没有固定的框架,算法设计的关键是贪心策略的选择,贪心策略要具有无后向性,即某阶段状态一旦确定以后,不受这个状态以后的策略的影响。当一个问题有好几种解决方法时,贪心法应该是最好的选择之一。本文讲述了贪心算法的含义、基本思路以及贪心算法在实例中的应用。 关键词:贪心算法;删数问题;最小生成树 一、引言 在平时解决问题的过程中,当一个问题就有无后向性和贪心选择性质时,贪心算法通常会给出一个简单、直观和高效的解法。贪心算法通过一系列的选择来得到一个问题的解。它所做的每一个选择都是当前状态下就有某种意义的最好选择,即贪心选择;并且每次贪心选择都能将问题化解为一个更小的与原问题具有相同形式的子问题。尽管贪心算法对于很多问题不能总是产生整体最优解,但对于最短路径、最小生成树问题,以及删数问题等却可以获得整体最优解,而且所给出的算法一般比动态规划算法更为简单、直观和高效。 二、贪心算法的含义和特点 (一)贪心算法的含义 贪心算法是通过一系列的选择来得到问题解的过程。贪心算法是一种能够得到某种度量意义下的最优解的分级处理方法,它总是做出在当前看来是最有的选择,也就是说贪心策略并不是从整体上加以考虑,它所做出的选择只是在某种意义上的局部最优解算法。 (二)贪心算法的特点

C语言程序设计论文

C语言程序设计论文学校:天津电子信息职业技术学院 系别:电子技术系 专业:通信技术 班级:通信S13-26 学号:89757 姓名:王磊

C语言课程设计报告 一、设计题目:计算器 二、设计目标:进一步加深、巩固学生所学专业课程(《C语言》)的基本理论知识,理论 联系实际,进一步培养学生综合分析问题和解决问题的能力。掌握运用C语言独立地编写、调试应用程序和进行其它相关设计的技能,充分发挥广大同学的潜力,使他们通过本次课程设计而得到全面的锻炼。 三、设计内容: 1.设计系统的功能框图、流程图; 2.编写计算器的源程序代码; 3.上机调试; 4.答辩; 5.书写实习报告。 四、课程设计所用设备:每人一台计算机。 五、课程设计系统组成及模块功能: (1)主函数模块 (2)设置系统进入图形模块 (3)初始化图形系统模块 (4)计算器计算函数模块 (5)窗口函数模块 (6)设计鼠标图形函数模块 (7)获取特殊键函数模块 六、软件环境:Visual c++6.0 七、课程设计要求:在计算机上操作,通过Visual c++6.0,设计出“计算器”程序。 八、应提交的材料:实习报告一份,内容包含“计算器”程序代码。 设计报告: 程序代码:#include #include #include #include #include #include #include

#include #include #define UP 0x48 #define DOWN 0x50 #define LEFT 0x4b #define RIGHT 0x4d #define ENTER 0x0d void *rar; struct palettetype palette; int GraphDriver; int GraphMode; int ErrorCode; int MaxColors; int MaxX, MaxY; double AspectRatio; void drawboder(void); void initialize(void); void computer(void); void changetextstyle(int font, int direction, int charsize); void mwindow(char *header); int specialkey(void) ; int arrow(); int main() { initialize(); computer(); closegraph(); return(0); }

操作系统算法设计操作系统课程设计大学论文

课程设计报告 题 目 操作系统算法设计 课 程 名 称 操作系统课程设计 院 部 名 称 计算机工程学院 专 业 计算机科学与技术 班 级 14计算机科学与技术单 学 生 姓 名 邵佳楠 学 号 141320100 课程设计地点 A107 课程设计学时 20学时 指 导 教 师 潘 金陵科技学院教务处制 成绩

目录 摘要 (2) 一、课程设计的目的和要求 (3) 二、系统需求分析 (3) 三、总体设计 (3) 四、详细设计 (4) 五、测试、调试过程 (7) 六、结论与体会 (16) 附录:源程序 (17) 摘要 (32) 一、课程设计的目的和要求 (33) 二、系统需求分析 (33) 三、总体设计 (33) 四、详细设计 (33) 五、测试、调试过程 (34) 六、结论与体会 (38) 附录:源程序 (39) 摘要 (47) 一、设计的目的和要求 (47) 二、系统需求分析 (48) 三、总体设计 (48) 四、详细设计 (48) 五、测试、调试过程 (50) 六、结论与体会 (54) 附录:源程序 (55)

操作系统算法设计-进程调度程序 摘要 随着计算机的普及,人们生活得到极大改善,人们在精神方面也同样需要提高,所以越来越多的人进行着各种各样的学习。操作系统是计算机中最重要的环节之一,也是计算机专业学生的一门重要的专业课程。操作系统的好坏,直接影响整个计算机系统的性能和用户对计算机的使用。一个精心设计的操作系统能极大的扩展计算机的功能,充分发挥系统中的各种设备的使用效率,提高系统的可靠性。由于操作系统中各种软硬件资源的管理,内容比较繁琐,具有很强的实践性,要学好这门课程,必须把理论和时间紧密结合,才能取得较好的学习效果。 本次课程设计师在学习完《操作系统教程》后,进行的一次全面的综合训练,通过课程设计,让学生更好的掌握操作系统的原理以及实现方法,加深对操作系统基础理论和重要算法的理解,加强对学生的动手能力。 熟悉“最高优先级优先调度算法”、“基于时间片轮转法”、“多级反馈队列调度算法”、“最高优先级优先算法”,虽然不用全部每一个都弄清楚,但是了解其中的算法思想也是有好处的。 关键词:最高优先级优先调度算法、基于时间片轮转法、多级反馈队列调度算法、最高优先级优先算法

数字PID控制算法

第三章、计算机测控系统设计与实现 一、参考书目: 书名:《计算机控制系统》 章节:第六章 页号:P140-156 二、主要学习内容: 1.数字PID 控制算法 PID 控制规律的基本输入/输出关系可用微分方程表示: ()()()??????++=?dt t de T dt t e T t e K Y D I P 1 在模拟调节系统中,PID 控制算法的模拟表达式为: ()()()()??????++=?dt t de T dt t e T t e K t Y D I P 1 2.对标准PID 算法的改进 1、微分项的改进 不完全微分型PID 算法传递函数 ????? ? ??++???? ??+=1111)(S K T S T S T K S G D D D I P C

2、积分项的改进 抗积分饱和 积分作用虽能消除控制系统的静差,但它也有一个副作用,即会引起积分饱和。在偏差始终存在的情况下,造成积分过量。当偏差方向改变后,需经过一段时间后,输出u(n)才脱离饱和区。这样就造成调节滞后,使系统出现明显的超调,恶化调节品质。这种由积分项引起的过积分作用称为积分饱和现象。 克服积分饱和的方法: 1、积分限幅法 积分限幅法的基本思想是当积分项输出达到输出限幅值时,即停止积分项的计算,这时积分项的输出取上一时刻的积分值。其算法流程如图3-2-4所示。 2、积分分离法 积分分离法的基本思想是在偏差大时不进行积分,仅当偏差的绝对值小于一预定的门限值ε时才进行积分累积。这样既防止了偏差大时有过大的控制量,也避免了过积分现象。其算法流程如图3-2-5。 三、知识点: 1、为什么要用PID调节器 1、经典控制方法,可靠成熟。 2、相比两位式控制,控制精度大大提高。 3、算法成熟,资源丰富。 2、数字PID控制算法的比例、积分、微分的作用特点和不足 PID是英文单词比例(Proportion),积分(Integral),微分(Differential coefficient)的缩写。PID调节实际上是由比例、积分、微分三种调节方式组成,它们各自的作用如下: 比例调节作用:是按比例反应系统的偏差,系统一旦出现了偏差,比例调节立即产生调节作用用以减少偏差。比例作用大,可以加快调节,减少误差,但是过大的比例,使系统的稳定性下降,甚至造成系统的不稳定。 积分调节作用:是使系统消除稳态误差,提高无差度。因为有误差,积分调节就进行,直至无差,积分调节停止,积分调节输出一常值。积分作用的强弱取

算法分析与设计论文[精品文档]

算法设计与分析论文 题目0-1背包问题的算法设计策略对比与分析专业 班级 学号 姓名

引言 对于计算机科学来说,算法(Algorithm)的概念是至关重要的。算法是一系列解决问题的清晰指令,也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。 算法可以理解为有基本运算及规定的运算顺序所构成的完整的解题步骤。或者看成按照要求设计好的有限的确切的计算序列,并且这样的步骤和序列可以解决一类问题。算法可以使用自然语言、伪代码、流程图等多种不同的方法来描述。 一个算法应该具有以下五个重要的特征: 有穷性:一个算法必须保证执行有限步之后结束; 确切性:算法的每一步骤必须有确切的定义; 输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件; 输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 可行性:算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。 计算机科学家尼克劳斯-沃思曾著过一本著名的书《数据结构十算法= 程序》,可见算法在计算机科学界与计算机应用界的地位。

1 算法复杂性分析的方法介绍 算法的复杂性是算法效率的度量,是评价算法优劣的重要依据。一个算法的复杂性的高低体现在运行该算法所需要的计算机资源的多少上面,所需的资源越多,我们就说该算法的复杂性越高;反之,所需的资源越低,则该算法的复杂性越低。 计算机的资源,最重要的是时间和空间(即存储器)资源。因而,算法的复杂性有时间复杂性和空间复杂性之分。 不言而喻,对于任意给定的问题,设计出复杂性尽可能地的算法是我们在设计算法是追求的一个重要目标;另一方面,当给定的问题已有多种算法时,选择其中复杂性最低者,是我们在选用算法适应遵循的一个重要准则。因此,算法的复杂性分析对算法的设计或选用有着重要的指导意义和实用价值。 关于算法的复杂性,有两个问题要弄清楚:用怎样的一个量来表达一个算法的复杂性;对于给定的一个算法,怎样具体计算它的复杂性。 让我们从比较两对具体算法的效率开始。 1.1比较两对算法的效率 考虑问题1:已知不重复且已经按从小到大排好的m个整数的数组A[1..m](为简单起见。还设m=2 k,k是一个确定的非负整数)。对于给定的整数c,要求寻找一个下标i,使得A[i]=c;若找不到,则返回一个0。 问题1的一个简单的算法是:从头到尾扫描数组A。照此,或者扫到A的第i个分量,经检测满足A[i]=c;或者扫到A的最后一个分量,经检测仍不满足A[i]=c。我们用一个函数Search来表达这个算法: Function Search (c:integer):integer; Var J:integer; Begin J:=1; {初始化} {在还没有到达A的最后一个分量且等于c的分量还没有找到时, 查找下一个分量并且进行检测} While (A[i]

51单片机PID算法程序

51单片机PID算法程序(二)位置式PID控制算法 由51单片机组成的数字控制系统控制中,PID控制器是通过PID控制算法实现的。51单片机通过AD对信号进行采集,变成数字信号,再在单片机中通过算法实现PID运算,再通过DA把控制量反馈回控制源。从而实现对系统的伺服控制。 位置式PID控制算法 位置式PID控制算法的简化示意图 上图的传递函数为: (2-1) 在时域的传递函数表达式 (2-2)

对上式中的微分和积分进行近似 (2-3)式中n是离散点的个数。 于是传递函数可以简化为: (2-4)其中 u(n)——第k个采样时刻的控制; K P ——比例放大系数; K i ——积分放大系数; K d ——微分放大系数; T ——采样周期。 如果采样周期足够小,则(2-4)的近似计算可以获得足够精确的结果,离散控制过程与连续过程十分接近。 (2-4)表示的控制算法直接按(2-1)所给出的PID控制规律定义进行计算的,所以它给出了全部控制量的大小,因此被称为全量式或位置式PID控制算法。 缺点: 1)由于全量输出,所以每次输出均与过去状态有关,计算时要对e(k)(k=0,1,…n)进行累加,工作量大。 2)因为计算机输出的u(n)对应的是执行机构的实际位置,如果计算机出现故障,输出u(n)将大幅度变化,会引起执行机构的大幅度变化,有可能因此造成严重的生产事故,这在实际生产中是不允许的。 位置式PID控制算法C51程序 具体的PID参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算 到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位

算法设计与分析课程论文

算法设计与分析课程论文 1.引言 算法设计与分析是数据结构的有力补充,从中可以了解到算法设计的奥妙以及对数据结构中的数据存储结构更深层次的运用。计算机算法设计与分析是面向设计的、处于核心地位的一门学科。算法是一组有穷的规则,它规定了解决某一特定类型问题的一系列运算。算法设计是一件非常困难的工作,常用的算法设计方法有:分治法、贪心方法、动态规划、回溯法、分枝-限界法、基本检索与周游方法、遗传算法等。 本文主要对算法设计与分析中的递归算法以及动态规划算法进行了总结、分析以及对具体问题的编程实现。 2.递归算法分析 2.1递归算法简介与特点 递归就是在函数或子过程的内部,直接或间接地调用自己的算法;递归算法是从下往上进行思维,需要对问题有全局的了解;在使用递归算法时,必须至少测试一个可以终止递归的条件,并且还必须对在合理的递归调用次数内未满足此类条件的情况进行处理,如果没有一个在正常情况下可以满足的条件,则过程将陷入执行无限循环的高度危险之中;递归算法的描述非常简洁而易于理解,但因重复计算和较大的堆栈消耗使递归算法的解题的运行效率较低;并不是所有的语言都支持递归,在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等不利编程的因素,所以一般不提倡用递归算法设计程序。 2.2递归过程 递归过程是直接调用自己或通过一系列的过程调用语句间接调用自己的过程。在一个过程的运行期间调用另一个过程时,在执行被调用过程之前,系统要先把所有的实在参数返回地址等信息传递给被调用的过程保存,为被调用过程的局部变量分配存储空间,将控制转移到被调用入口。接下来从被调过程返回调用过程要保存被调用过程的计算结果,释放被调用过程的数据区,依照被调过程保存的返回地址将控制转移到调用过程。该过程服从后调用先返回的原则。

51单片机PID的算法实现程序

51单片机PID的算法实现程序 用整型变量来实现PID算法,由于是用整型数来做的,所以也不是很精确,但是对于很多的使用场合,这个精度也够了,关于系数和采样电压全部是放大10倍处理的.所以精度不是很高. 但是也不是那么低,大部分的场合都够了. 实在觉得精度不够, 可以再放大10倍或者100倍处理,但是要注意不超出整个数据类型的范围就可以了.本程序包括PID计算和输出两部分.当偏差>10度全速加热,偏差在10度以内为PID计算输出. 具体的参考代码参见下面:*/ //================================================================ // pid.H // Operation about PID algorithm procedure // C51编译器Keil 7.08 //================================================================ // 作者:zhoufeng // Date :2007-08-06 // All rights reserved. //================================================================ #include #include typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long int uint32; /**********函数声明************/ void PIDOutput (); void PIDOperation (); /*****************************/ typedef struct PIDValue { uint32 Ek_Uint32[3]; //差值保存,给定和反馈的差值 uint8 EkFlag_Uint8[3]; //符号,1则对应的为负数,0为对应的为正数uint8 KP_Uint8; uint8 KI_Uint8; uint8 KD_Uint8; uint16 Uk_Uint16; //上一时刻的控制电压 uint16 RK_Uint16; //设定值 uint16 CK_Uint16; //实际值 }PIDValueStr; PIDValueStr PID; uint8 out ; // 加热输出 uint8 count; // 输出时间单位计数器 /********************************* PID = Uk + KP*[E(k)-E(k-1)]+KI*E(k)+KD*[E(k)-2E(k-1)+E(k-2)];(增量型PID算式) 函数入口: RK(设定值),CK(实际值),KP,KI,KD 函数出口: U(K) //PID运算函数

数字PID的补偿算法的设计..

数字PID调节器纯滞后的补偿算法设计 摘要 对于无滞后或滞后比较小的系统,通常采用PID控制。对于纯滞后系统,PID控制效果并不好,需要另加补偿,因此提出了Smith预估补偿控制系统。而 Smith 预估算法则在模型匹配时具有好的性能指标 ,但是由于这种算法严重依赖模型的精确匹配 ,而在实际中这是很难做到的。 本文研究的重点是设计与实现纯滞后系统的控制过程的控制规律和控制算法,并比较传统的数字PID控制算法与加入Smith预估器的控制算法的不同。具体讨论了纯滞后系统的Smith预估器的实现方法,着重对这种控制算法进行了较深入的讨论,而且还通过仿真对设计和改进的结果进行了分析。仿真实验中,若采用PID控制算法,系统会出现较大的超调量,采用史密斯预估器补偿控制超调量大大较少,系统更加稳定。 关键字:Matlab;纯滞后;数字PID;Smith 预估控制器;Simulink

Abstract For the system with no or less delay, usually adopts PID control. For pure delay system, PID control effect is not good, need additional compensation, so the proposed Smith predictor control system. But Smith pre estimation algorithm has good performance index in the model matching, but because an exact match this algorithm heavily depends on the model, but in fact it is very difficult to do. This paper is focused on the control and implementation of rules and the control algorithm to control the process of pure lag system design, and compare the traditional digital PID control algorithm with the addition of Smith predictive control algorithm for different. Discussed the specific time delay system Smith prediction method is, focuses on the control algorithm are discussed in depth, but also analyzed through simulation design and improvement of the results. The simulation experiment, if the PID control algorithm, the system will have a large overshoot, Smith predictor is used to compensate control overshoot is greatly reduced, the system more stable. Keywords: Matlab; delay; digital PID; Smith controller; Simulink

计算机算法设计与分析小论文

计算机算法设计与分析小论文 摘要: 算法是一个系列解决问题的清晰指令,即在有限时间内能够对一定规范的输入,能够得到所需要的输出。如果一个算法本身是有缺陷的!那么他往往不是这个问题的最佳解决方法,可见一个算法的优劣是通过一定的准则来规定的。通过这学期的对《计算机算法分析设计》这门课程的学习让我们充分的了解到了计算机算法的多样性和复杂性,让我们更加细心和耐心的去对待这门课程。例如甲某要去某个地方旅游,他有很多种方案到旅游地,但是不见的每种方案都是合理最优的!这时就是需要考虑透过一定的算法来得到自己的最优路线。所以可见算法就是以最少的成本、最快的速度、最好的质量开发出合适各种各样应用需求的软件,必须遵循软件工程的原则,设计出高效率的程序。一个高效的程序不仅需要编程技巧,更需要合理的数据组织和清晰高效的算法。目前我们将进行常见的算法分析设计策略介绍: 1.递归算法 1.1递归算法介绍: 直接或间接的调用自身的算法称为递归算法。或者说就是用自己来定义自己,不断调用自己的某一种状态。 1.2递归算法满足的条件 (1)递归满足2个条件: 1)有反复执行的过程(调用自身) 2)有跳出反复执行过程的条件(递归出口) 1.3递归例子 递归例子:阶乘问题 n! = n * (n-1) * (n-2) * ...* 1(n>0) //阶乘 intresult(int i) { int sum = 0; if (0 == i) return (1); else sum = i * result(i-1); return sum; }

可见一个递归算法都有一个比较特殊的特点,那就是要先处理一些比较特殊的情况再处理递归关系。如上例中如果是0!的话!那么他的阶乘就是1,所以先处理0!这个特殊情况,然后再调用其他的递归关系得到自己想要的阶乘。比如当我们想要求出4!的结果那么我们就需要调用result(3)的结果而result(3)又要调用result(2)的结果!就这样直到得出答案为止。 在我们日常,递归算法的出现可以帮助我们解决很多问题,正因为它的:结构清晰,可读性强,而且容易用数学归纳法来证明算法的正确性,因此它为设计算法、调试程序带来很大方便。 2.分治算法 2.1分治算法介绍: 一个分治算法把问题实例划分成若干子实例(多数情况是分成两个),并分别递归地解决每个子实例,然后把这些子实例的解组合起来,得到原问题实例的解。 2.2 分治算法的特性 1)规模小,则很容易解决 2)大问题可以分为若干规模小的相同问题 3)利用子问题的解可以合并成该问题的解 2.3分治算法的遇到问题 为了阐明这个方法,考虑这样一问题:在一个整数组A[1...n]中,同时寻找最大值和最小值。下面我们来看一下用分治策略:将数组分割成两半,A[1...n/2]和A[(n/2)+1...n],在每一半中找到最大值和最小值,并返回这两个最小值中的最小值及这两个最大值中的最大值。 过程 Min-Max ⅰ输入 n个整数元素的数组A[1...n]n为2的幂 ⅱ输出 (x,y), A中的最大元素和最小元素

(完整版)基于单片机的PID温度控制毕业设计

以下文档格式全部为word格式,下载后您可以任意修改编辑。 前言 温度是表征物体冷热程度的物理量。在很多生产过程中,特别是在冶金、化工、建材、食品、机械、石油等工业中,温度的测量和控制都直接和安全生产、提高生产效率、保证产品质量、节约能源等重大技术经济指标相联系。因此,温度的测量与控制在国民经济各个领域中均受到了相当程度的重视。 单片机系统的开发应用给现代工业测控领域带来了一次新的技术革命,自动化、智能化均离不开单片机的应用。将单片机控制方法运用到温度控制系统中,可以克服温度控制系统中存在的严重滞后现象,同时在提高采样频率的基础上可以很大程度的提高控制效果和控制精度。现代自动控制越来越朝着智能化发展,在很多自动控制系统中都用到了工控机,小型机、甚至是巨型机处理机等,当然这些处理机有一个很大的特点,那就是很高的运行速度,很大的内存,大量的数据存储器。但随之而来的是巨额的成本。在很多的小型系统中,处理机的成本占了系统成本的比例高达20%,而对于这些小型的系统来说,配置一个如此高速的处理机没有任何必要,因为这些小系统追求经济效益,而不是最在乎系统的快速性,所以用成本低廉的单片机控制小型的,而又不是很复杂,不需要大量复杂运算的系统中是非常适合的。 随着电子技术以及应用需求的发展,单片机技术得到了迅速的发展,在高集成度,高速度,低功耗以及高性能方面取得了很大的进展。现在完

全可以运用单片机和电子温度传感器对某处进行温度检测,而且可以很容易地做到多点的温度检测,如果对此原理图稍加改进,还可以进行不同地点的实时温度检测和控制。

1绪论 1.1研究的目的和意义 温度是工业生产中主要被控参数之一,温度控制自然是生产的重要控制过程。工业生产中温度很难控制,对于要求严格的的场合,温度过高或过低将严重影响工业生产的产质量及生产效率,降低生产效益。这就需要设计一个良好温度控制器,随时向用户显示温度,而且能够较好控制。单片机具有和普通计算机类似的强大数据处理能力,结合PID,程序控制可大大提高控制效力,提高生产效益[9]。 例如钢铁生产过程中,按照工艺条件的规定保持一定的温度才能保证产品质量和设备的安全。对电气设备进行温度的监控,例如高压开关、变压器的出线套管等,判断可能存在的热缺陷,进而能及时发现、处理、预防重大事故的发生。因此研究温度控制仪具有重要的意义[10]。 在单片机温度测量系统中的关键是测量温度、控制温度和保持温度,温度测量是工业对象中主要的被控参数之一。因此,单片机温度测量则是对温度进行有效的测量,并且能够在工业生产中得到了广泛的应用,尤其在电力工程、化工生产、机械制造、冶金工业等重要工业领域中,担负着重要的测量任务。在日常生活中,也可广泛实用于地热、空调器、电加热器等各种家庭室温测量及工业设备温度测量场合[16]。 目前市场上热水器的控制系统大多存在功能单一、操作复杂、控制不方便等问题,很多控制器只具有温度和水位显示功能,不具有温度控制功能.即使热水器具有辅助加热功能。也可能由于加热时间不能控制而产生过烧,从而浪费电能。本文设计的热水器控制系统以51单片机为检测控制中心单元,具有温度设定与控制功能。该控制器和以往显示仪相比具有性

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

电子科技大学 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)控制

数字PID控制算法

计算机测控系统 读书笔记 《数字PID控制算法》 2017年10月

一、参考文献 《计算机测控系统设计与应用》李正军机械工业出版社 百度文库 二、知识目录 1、主要内容: 数字PID控制算法 对标准PID算法的改进 PID调节器的参数选择 2、重点内容: 为什么要用PID调节器 数字PID控制算法的比例、积分、微分的作用特点和不足 PID控制算法数字化前提条件 两种算法表达式及相互比较 对标准PID算法的改进——“饱和”作用的抑制 采样周期的选择依据 三、主要内容学习 1、数字PID控制算法 P(比例)I(积分)D(微分) 位置式PID算法 由于计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,因此式子

中的计分和微分项不能直接准确计算,只能用数值计算的方法逼近。在采样时刻t=iT(T为采样周器),模拟PID调节规律可通过下数值公式近似计算 上式的控制算法提供了执行机构的位置U i(如阀门开度),所以称之为位置式PID控制算法。 增量式PID算法 相减就可以导出下面的公式 上式称为增量式PID控制算法。也可以将其进行进一步改写。 其中 图1给出了位置式与增量式PID算法的结构比较。 图1 位置式与增量式PID控制算法的简化示意图 (a)位置式(b)增量式

增量式PID算法与位置式相比,存在下列优点: ①位置式算法每次输出与整个过去状态有关,计算式中要用到过去偏差的累加值,容易产生较大的累计误差。而增量式只需计算增量,当存在计算误差或精度不足时,对控制量计算的影响较小。 ②控制从手动切换到自动时,必须首先将计算机的输出值设置为原始阀门开度u0,才能保证无冲击切换。如果采用增量算法,则由于算式中不出现u0项,易于实现手动到自动的无冲击切换。此外,在计算机发生故障时,由于执行装置本身有寄存作用,故可仍然保持在原位。 因此,在实际控制中,增量式算法要比位置式算法应用更为广泛。图2给出了增量式PID控制算法子程序的流程。在初始化时,应在内存固定单元置入调节参数d0,d1,d2和设定值w,并设置误差初值ei=ei-1=ei-2=0。

算法设计与分析基础论文

算法设计与分析论文 回溯法 回溯法有“通用的解题法”之称。 应用回溯法解问题时,首先应该明确问题的解空间。 一个复杂问题的解决往往由多部分构成,即,一个大的解决方案可以看作是由若干个小的决策组成。很多时候它们构成一个决策序列。 解决一个问题的所有可能的决策序列构成该问题的解空间。解空间中满足约束条件的决策序列称为可行解。一般说来,解任何问题都有一个目标,在约束条件下使目标达到最优的可行解称为该问题的最优解。 回溯法概述 回溯法可以系统的搜索一个问题的所有解或任一个解 它在包含问题的所有解的解空间树中,按照深度优先的策略,从根结点出发搜索解空间树。算法搜索到某一结点时,如果断定该结点肯定不包含问题的解,则跳过以该结点为根的子树的搜索,逐层向其祖先结点回溯 这种以深度优先方式搜索问题的解的方法称为回溯法 回溯算法的形式描述 假设回溯算法要找出所有的答案结点而不是仅仅只找出一个。 ①设(x 1,x 2 ,…,x i-1 )是状态空间树中由根到一个结点(问题状态)的路径。 ②T(x 1,x 2 ,…,x i-1 )是下述所有结点的x i 的集合,它使得对于每一个x i , (x 1 ,x 2 ,…,x i )是一 条由根到结点x i 的路径 ③存在一些限界函数B i (可以表示成一些谓词),如果路径(x 1 ,x 2 ,…,x i )不可能延伸到一个 答案结点,则B i (x 1 ,x 2 ,…,x i )取假值,否则取真值。 因此,解向量X(1:n)中的第i个分量就是那些选自集合T(x 1,x 2 ,…,x i-1 )且使B i 为真的 x i 。 回溯法思想 第一步:为问题定义一个状态空间(state space),这个空间必须至少包含问题的一个解

相关文档
相关文档 最新文档