此类控制系统是由输出量直接控制执行机构的,控制输入和执行机构的输出是一一对应的,通常称此类控制算法为位置式PID控制算法。由于是控制量的全量输入,当输入变化时,其输出端均与过去的状态有关,计算时要对e(k)进行累加,计算机运算量较大。另外,输入u(k)的大幅度变化会引起输出的大幅度变化,这种情况在实际工程实施中要尽量加以避免。因为有发生事故的可能性,因此提出了增量式PID控制算法。
所谓增量式PID指的是数字控制器的输出只是控制量的增量。根据递推原理可得:
u(k?1)?KPe(k?1)?KI?e(i)?KD[e(k?1)?e(k?2)] (4.9)
i?0k?1用公式4.7减去公式4.9则有:
?u(k)?KP[e(k)?e(k?1)]?KIe(k)KD[e(k)?2e(k?1)?e(k?2)]
?Ae(k)?Be(k?1)?Ce(k?2)
?KP?e(k)?KIe(k)?KD[e(k)?e(k?1)] (4.10)
TTT式中?e(k)?e(k)?e(k?1)、A?KP(1??D)、B?KP(1?2D)其中A、
TITTB、C都是与采样周期、比例系数、积分时间常数、微分时间有关的系数。
就整个控制系统而言,增量式与位置式控制算法并无本质的区别。但是增量式控制的输出是增量,误动作对系统影响小,算式中不需要累加;不足之处是积分截断效应大,有静态误差。 4.3.3 速度闭环控制程序设计
速度程序设计时采用增量PID算法。具体算法执行如下: interrupt void Real_Time_Interrupt(void) //实时中断 { lv=nv; //lv为上一速度,nv为当前速度
nv=PACN32; // PACN32光电码盘的速度测量值 PACN32=0; //清零
CRGFLG=0x80; //清实时中断标志位
31
dv=nv-lv;
pwmv2=(vwnt-nv)*cp-dv*cd; //vwnt为期望速度值,PID控制 pwmv+=pwmv2;
if(pwmv>10000){pwmv=10000; } else if(pwmv<-10000){pwmv=-10000; } if(pwmv>=0){ PWMDTY01=0; PWMDTY45=pwmv;
}else{
PWMDTY01=-pwmv; PWMDTY45=0; }
} else{
PWMDTY01=600; PWMDTY45=0; }
程序设计的关键是对增量PID算法的了解,通过对当前速度值与期望速度值进行比较作差,差值作为负反馈因子。PID调节器是工业控制中理想的调节器,其中起主导作用的是P(比例)调节,因此对比例项的改进要慎重。
增量式PID控制输出的是控制量增量,并无积分作用,而在小车调速系统中为了增加动态响应速度,放弃了积分作用,单片机出现故障时,误动作影响较小,而执行机构本身有记忆功能,可仍保持原位,不会严重影响系统的工作能达到很好的性能要求。 4.3.4 具体程序设计
本次设计中采用的凌阳超声波测距模组,重心侧重于程序设计。 首先让单片机发出40KHZ方波,这里的程序采用的是写延迟函数,设定B口1通道为输出口,通过多次更改延时时间系数,使方波稳定在40KHz。
32
1、40KHz方波延时程序与发射程序
void delay() { //通过软件方式进行延时程序设计 int ii;
for(ii=0;ii<12;ii++){} }产生的波形具体频率为38.8KHz。
由于每次测距需要5个周期,这里定义的40KHz方波发射程序如下所示: void fashe(){
char temp; //定义变量 DDRB=0XF7; //定义B口输出 time0=TCNT; //读取计数器初始值
for(temp=0;temp<10;temp++){ //发射周期数为10/2 PORTB_BIT1=~PORTB_BIT1; //B1口发射超声波 delay(); //延迟产生40KHz超声波 }
2、报警器程序
通过超声波测距程序将障碍物离小车的距离测量后,进行报警器的设计,设计思想是:通过单片机B口2通道来驱动发光二极管,编写相应的驱动程序,控制发光二加管的闪烁频率,当小车向障碍物逼近时,发光二极管闪烁的频率显著增加,以此来达到报警效果。程序设计如下:
if(shanshuo>time)
shanshuo=0; //闪烁参数清零 if(shanshuo
相关推荐: