PID实际应用于小车恒速笔记.docx
- 文档编号:24758230
- 上传时间:2023-06-01
- 格式:DOCX
- 页数:14
- 大小:87.52KB
PID实际应用于小车恒速笔记.docx
《PID实际应用于小车恒速笔记.docx》由会员分享,可在线阅读,更多相关《PID实际应用于小车恒速笔记.docx(14页珍藏版)》请在冰豆网上搜索。
PID实际应用于小车恒速笔记
PID原理及程序
引言:
开始我接触PID的时候很不理解,周围的人也没有多少懂得PID的,尤其是程序设计及具体实际应用。
随着对PID的了解,也渐渐的知道是怎么回事了。
要想学会应用PID首先要知道,提出PID这个概念或者PID理论存在的价值,或者直接说他是用来干什么的:
工业生产过程中,对于生产装置的温度、压力、流量、液位等工艺变量常常要求维持在一定的数值上,或按一定的规律变化,以满足生产工艺的要求。
PID控制器是根据PID控制原理对整个控制系统进行偏差调节,从而使被控变量的实际值与工艺要求的预定值一致。
应用于恒速,就是说被控物理量(车速)经传感器(测速码盘)检测到的反馈信号对速度进行调整,从而达到设定的速度。
下面将从原理和程序设计来解析PID。
控制原理:
在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制:
比例(P)控制:
比例控制是一种最简单的控制方式。
其控制器的输出与输入误差信号成比例关系。
当仅有比例控制时系统输出存在稳态误差(Steady-stateerror)。
积分(I)控制:
在积分控制中,控制器的输出与输入误差信号的积分成正比关系。
对一个自动控制系统,如果在进入稳态后存在稳态误差,则称这个控制系统是有稳态误差的或简称有差系统(SystemwithSteady-stateError)。
为了消除稳态误差,在控制器中必须引入“积分项”。
积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。
这样,即便误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。
因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。
微分(D)控制:
在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
自动控制系统在克服误差的调节过程中可能会出现振荡甚至失稳。
其原因是由于存在有较大惯性组件(环节)或有滞后(delay)组件,具有抑制误差的作用,其变化总是落后于误差的变化。
解决的办法是使抑制误差的作用的变化“超前”,即在误差接近零时,抑制误差的作用就应该是零。
这就是说,在控制器中仅引入“比例”项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是“微分项”,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。
所以对有较大惯性或滞后的被控对象,比例+微分(PD)控制器能改善系统在调节过程中的动态特性。
模拟PID控制原理
在模拟控制系统中,控制器最常用的控制规律是PID控制。
常规的模拟PID控制系统原理框图如图所示。
+
r(t)+e(t)+u(t)y(t)
-+
模拟PID控制系统原理图
该系统由模拟PID控制器和被控对象组成。
图中,r(t)是给定值,y(t)是系统的实际输出值,给定值与实际输出值构成控制偏差e(t)
(te)=r(t)−y(t)(式1-1)
e(t)作为PID控制的输入,u(t)作为PID控制器的输出和被控对象的输入。
所以模拟PID控制器的控制规律为
u(t)=Kp[e(t)+
dt+Td
](式1-2)
其中:
Kp――控制器的比例系数
Ti--控制器的积分时间,也称积分系数
Td――控制器的微分时间,也称微分系数
1、比例部分
比例部分的数学式表示是:
Kp*e(t)
在模拟PID控制器中,比例环节的作用是对偏差瞬间作出反应。
偏差一旦产生控制器立即产生控制作用,使控制量向减少偏差的方向变化。
控制作用的强弱取决于比例系数Kp,比例系数Kp越大,控制作用越强,则过渡过程越快,控制过程的静态偏差也就越小;但是Kp越大,也越容易产生振荡,破坏系统的稳定性。
故而,比例系数Kp选择必须恰当,才能过渡时间少,静差小而又稳定的效果。
2、积分部分
积分部分的数学式表示是:
从积分部分的数学表达式可以知道,只要存在偏差,则它的控制作用就不断的增加;只有在偏差e(t)=0时,它的积分才能是一个常数,控制作用才是一个不会增加的常数。
可见,积分部分可以消除系统的偏差。
积分环节的调节作用虽然会消除静态误差,但也会降低系统的响应速度,增加系统的超调量。
积分常数Ti越大,积分的积累作用越弱,这时系统在过渡时不会产生振荡;但是增大积分常数会减慢静态误差的消除过程,消除偏差所需的时间也较长,但可以减少超调量,提高系统的稳定性。
当Ti较小时,则积分的作用较强,这时系统过渡时间中有可能产生振荡,不过消除偏差所需的时间较短。
所以必须根据实际控制的具体要求来确定Ti。
3、微分部分
微分部分的数学式表示是:
Kp*Td
实际的控制系统除了希望消除静态误差外,还要求加快调节过程。
在偏差出现的瞬间,或在偏差变化的瞬间,不但要对偏差量做出立即响应(比例环节的作用),而且要根据偏差的变化趋势预先给出适当的纠正。
为了实现这一作用,可在PI控制器的基础上加入微分环节,形成PID控制器。
微分环节的作用使阻止偏差的变化。
它是根据偏差的变化趋势(变化速度)进行控制。
偏差变化的越快,微分控制器的输出就越大,并能在偏差值变大之前进行修正。
微分作用的引入,将有助于减小超调量,克服振荡,使系统趋于稳定,特别对髙阶系统非常有利,它加快了系统的跟踪速度。
但微分的作用对输入信号的噪声很敏感,对那些噪声较大的系统一般不用微分,或在微分起作用之前先对输入信号进行滤波。
微分部分的作用由微分时间常数Td决定。
Td越大时,则它抑制偏差e(t)变化的作用越强;Td越小时,则它反抗偏差e(t)变化的作用越弱。
微分部分显然对系统稳定有很大的作用。
适当地选择微分常数Td,可以使微分作用达到最优。
数字式PID控制算法可以分为位置式PID和增量式PID控制算法。
这里只介绍增量式PID算法:
当执行机构需要的不是控制量的绝对值,而是控制量的增量(例如去驱动步进电动机)时,需要用PID的“增量算法”。
增量式PID控制算法可以通过(2-4)式推导出。
由(2-4)可以得到控制器的第k-1个采样时刻的输出值为:
(2-5)
将(2-4)与(2-5)相减并整理,就可以得到增量式PID控制算法公式为:
(2-6)
其中
由(2-6)可以看出,如果计算机控制系统采用恒定的采样周期T,一旦确定A、B、C,只要使用前后三次测量的偏差值,就可以由(2-6)求出控制量。
增量式PID控制算法与位置式PID算法(2-4)相比,计算量小得多,因此在实际中得到广泛的应用。
位置式PID控制算法也可以通过增量式控制算法推出递推计算公式:
(2-7)
(2-7)就是目前在计算机控制中广泛应用的数字递推PID控制算法。
程序设计:
通过对上述原理的理解,PID的概念渐渐清晰起来。
要想构建PID系统,首先要有一个反馈系统,所以小车必须有一个测速装置,这里选用的是光电开关和100孔的码盘。
其次是要想构建一个稳定的PID系统,必须确定合理的P、I、D常数,通过经验及多次试验慢慢修改。
第一步:
获得速度
思路:
行驶一定的距离,测量所用总时间T,轮子所产生的总得脉冲N与行驶距离S,那么距离与脉冲的关系K=S/N;平均速度V=S/T;获得这个参数后,程序就可以根据码盘所返回的脉冲数算出速度,v=n*K/tt为定时器定时中断的时间n是t时间内所产生的脉冲数
数据记录与分析:
delay(12000)行走了2738mm左轮脉冲为1887那么K=2738/1887=1.450
delay(10000)行走了2230mm左轮脉冲为1541那么K=2230/1541=1.447
delay(8000)行走了1820mm左轮脉冲为1262那么K=1820/1262=1.442
综上述实验,取K=1.45
“算速度”的程序采样率为50ms/次(即每50ms取一次脉冲数算速度)连续4次采样取平均,所得速度单位cm/s
由串口上显示的数据023023024023023024023022023024023023025023024023024024023023023023024023024023023024024023023023023024023023023023
看,其数据本身就有浮动,获得的不是一个稳定的当前值。
结束语:
50ms的采样间隔,对于单片机是一个相当长得时间,但是在这50毫秒内只产生8或者9个脉冲。
轮子转一圈是100个脉冲,就相当与一个采样的时间内只转了0.08圈,这是个相当无语的结果。
。
。
。
。
也由此导致上述的浮动。
究其浮动的根源可能来自电源的震荡,可能是码盘装得不对称、不均匀。
第二步:
构建系统
思路:
给定的速度预想速度,测量的速度是反馈信号,输入PID系统,来计算控制量u从而控制占空比,所以选择增量式PID,,
由于测得的速度不是一个稳定的量,所以输入PID系统会产生震荡。
需要加限制处理对于这个测速系统,限幅D_speed的绝对值小于等于2
附程序:
/************************************************
文件:
PID.h
用途:
PID算法,提高控制精度
用法:
************************************************/
#ifndef__PID_H__
#define__PID_H__
#include
floatKp=2;//PID调节的比例常数
floatTi=0.4;//PID调节的积分常数
floatT=0.2;//采样周期
floatTd=0.01;//PID调节的微分时间常数
floata0;
floata1;
floata2;
floatek;//偏差e[k]
floatek1;//偏差e[k-1]
floatek2;//偏差e[k-2]
floatuk;//u[k]
intPIDCalc(floatek)
{
if(fabs(ek)<3)//设定阀值
return(0);
else
{
uk=a0*ek+a1*ek1+a2*ek2;
ek2=ek1;
ek1=ek;
return(ceil(uk));
}
}
#endif
/************************************************
用途:
主程序
************************************************/
#include
#include
#include"delay.h"
#include"T3_counter.h"
#include"T1_counter.h"
#include"INT.h"
#include"car.h"
#include"USART.h"
#include"PID.h"
#defineucharunsignedchar
#defineuintunsignedint
uintcount,speed[5],Avr_speed,i;
#pragmainterrupt_handlerINT0_isr:
2
voidINT0_isr(void)
{
count++;//计数脉冲
}
unsignedcharNumber[6]={'','0','0','0','0','\0'};
voidData_convert(uinttemp)//整数转换成字符串
{
Number[1]='0'+temp/1000;
Number[2]='0'+(temp%1000)/100;
Number[3]='0'+(temp%100)/10;
Number[4]='0'+temp%10;
}
intset_speed,D_speed,adjust,Uk;
#pragmainterrupt_handlertimer3_ovf_isr:
30//定时采样
voidtimer3_ovf_isr(void)
{
TCNT3=15535;
i++;
speed[i]=count*2.9/i;
if(i==4)
{
i=0;
count=0;
Avr_speed=(speed[1]+speed[2]+speed[3]+speed[4])/4;//取平均
Data_convert(Avr_speed);USARTTransmitString(Number);//传到串口
D_speed=set_speed-Avr_speed;//差值
Uk=PIDCalc(D_speed);//计算增量
if(Uk!
=0)
{
adjust+=Uk;
if(adjust>1023)
adjust=1023;
OCR1A=adjust;//调整PWM
OCR1B=adjust;
}
}
}
voidmain(void)
{
carport_init();
T1_10KPWM_init();
INT0_init();
USARTInit();
EN_T3_interrupt();
SEI();
TCNT3=15535;
car_go_ahead();
T3_ON();
a0=Kp*(1+T/Ti+Td/T);
a1=-Kp*(1+2*Td/T);
a2=Kp*Td/T;
set_speed=15;
adjust=OCR1A;
while
(1)
{
}
}
取Kp=2;Ti=0.4;T=0.2;Td=0.01;所得1cm/s的速度差对应4个PWM值也就是说如果设定的速度为10,测得的速度为0,那么PWM每次加40,如果测得的速度始终为0,那么每200msOCR1A就加40,即使初值为0,经过(1030/40)*200ms也就是5200ms后PWM加满1023
对于这个结果相当满意,虽然PWM值从0加满需要5秒多,但是一旦有过速度,那么速度的零点就不是PWM的零,实际观察的响应也特别快
对于PID的研究到此结束,该系统的增量式PID,也就是获得反馈速度,然后与设定的速度做差值,再代入公式,算出PWM增量,最后修正PWM。
PID参数调节的方法:
比例系数的调节
比例系数P的调节范围一般是:
0.1--100.
如果增益值取0.1,PID调节器输出变化为十分之一的偏差值。
如果增
益值取100,PID调节器输出变化为一百倍的偏差值。
可见该值越大,比例产生的增益作用越大。
初调时,选小一些,然后慢
慢调大,直到系统波动足够小时,再该调节积分或微分系数。
过大的P值会
导致系统不稳定,持续振荡;过小的P值又会使系统反应迟钝。
合适的值应
该使系统由足够的灵敏度但又不会反应过于灵敏,一定时间的迟缓要靠积分
时间来调节。
积分系数的调节
积分时间常数的定义是,偏差引起输出增长的时间。
积分时间设为1秒则输出变化100%所需时间为1秒。
初调时要把积分时间设置长些,然后慢
慢调小直到系统稳定为止。
微分系数的调节
微分值是偏差值的变化率。
例如,如果输入偏差值线性变化,则在调节
器输出侧叠加一个恒定的调节量。
大部分控制系统不需要调节微分时间。
因
为只有时间滞后的系统才需要附加这个参数。
如果画蛇添足加上这个参数反而会使系统的控制受到影响。
如果通过比例、积分参数的调节还是收不到理想的控制要求,就可以调节微分时间。
初调时把这个系数设小,然后慢慢调大,直到系统稳定。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PID 实际 应用于 小车 笔记