APP下载

基于增量式PID控制的直流电机仿真实验创新设计

2018-07-09全瑞坤

实验室研究与探索 2018年6期
关键词:闭环控制直流电机控制算法

全瑞坤, 杨 浩

(重庆大学 电工电子技术基础教学实验中心,重庆 400044)

0 引 言

PID控制算法是一种极为经典的控制算法,目前广泛应用于工业控制领域,在电机调速系统中特别是要求鲁棒性较高的场合,PID算法起着举足轻重的作用[1]。PID控制系统是由比例,微分,积分三个控制单元组成的一种控制系统,极其适合多种情形下的控制[2]。直流电机具有良好的调速性能,如可以实现无级调速、调速范围宽、低速性能好、起动转矩大、高效率等。本实验通过设计以微控制器和NMOS场效应管组成的 H 桥为硬件基础而设计的PID算法的直流电机调速系统,通过改变电源电压占空比从而达到直流电机调速的目的。速度传感器采用编码器脉冲输出和定时计数进行速度计算,然后通过中断采集传感器产生的脉冲以实现速度闭环反馈控制。

通过使用仿真软件Proteus设计一种创新型直流电机调速实验,是一种对传统实验课程的有效补充[3]。该仿真软件有非常友好的人机界面,有丰富的操作菜单与工具,能方便地完成单片机系统的硬件设计、软件设计、单片机源代码级调试与仿真[4]。

1 增量式PID原理

电机速度闭环控制就是根据编码器的脉冲获取电机的位置信息,然后对位置求微分即可得到速度信息,通过比较实际值和目标的预设值得到控制偏差,再使用比例(P),积分(I),微分(D)对偏差进行控制,从而使偏差逐步趋于零的过程[5]。

图1 基本PID控制算法的示意图

比例响应单元本身取决于目标设定值和实际过程变量之间的差值,在目标设定值和实际过程变量中称这个差值为“误差”。比例增益(KC)决定了系统的输出对误差信号的响应比例。一般而言,为了提高系统的实际响应速度,可以适当提高系统的比例响应系数,如果比例响应系数设置的过大,过程变量会有振荡[6]。此时需要调整比例响应单元参数,如果在此基础上继续增加KC,系统振荡会越来越大,以至于在实际使用中超出控制,使得系统变得不稳定,成为不稳定系统[7]。

积分响应单元在实际应用中往往作为让稳定状态时过程变量和目标设定值的差值保持为零的特定功能。它会将一段时间内的系统误差连续相加, 所以系统即便存在一个很小的误差,也会在累加的作用下让积分响应缓慢增加。如果控制器没有将误差保持在零,而此时积分操作却达到了控制器的条件,那么会产生积分饱和的误差结果。

微分响应单元在过程变量迅速增大时停止输出。增加微分响应单元时间将会使系统对误差的响应更加剧烈,同时也会增加整个控制系统的响应时间。在实际上,由于使用的系统微分响应对实际过程变量的噪声特别敏感而往往使用非常小的微分时间。 此外,如果系统的反馈信号中有噪声或微控制器速度过慢,微分响应会使整个系统变得不稳定。

基本PID控制器的理想算式为:

(1)

式中:u(t)为控制器(也称调节器)的输出;e(t)为控制器的输入(常常是设定值与被控量之差),即e(t)=r(t)-c(t);KP是控制器的比例放大系数;TI是控制器的积分时间;TD是控制器的微分时间。

相应的传递函数为:

(2)

设:u(k)为第k次采样时刻控制器的输出值,那么可以得到离散的PID计算式为:

KD[e(k)-e(k-1)]

(3)

针对增量式算法,需要注意的是增量是本次状态与上次状态的改变量,而不是现有的实际使用量。假如执行机构的累积功能使用软件实现,如利用算式u(k)=u(k-1)+Δu(k)程序化来完成,则由式(3)可得增量式PID控制算式:

Δu(k)=u(k)-u(k-1)=KPΔe(k)+

KIe(k)+KD[Δe(k)-Δe(k-1)]

(4)

式中:Δe(k)=e(k)-e(k-1)进一步可以改写成

Δu(k)=Ae(k)-Be(k-1)+Ce(k-2)

A=KP(1+T/TI+TD/T)

B=KP(1+2TD/T),C=KPTD/T

本实验通过设计使用一个固定采样周期T,在此周期之内通过前后3次的测量偏差值求出控制增量,实验中所需的控制增量可以由式(3)、(4)求得[8-9]。

增量式PID控制算法优点:①优化累加计算,控制增量不再需要累加多次之前的数值,而只需要处理最近的3次数值,进一步减小误差;②优化输出,为了保证实际输出对系统的变化影响因素最小,此处仅输出控制增量,使得故障影响最小化,即发生故障只有小范围问题不会严重影响系统过程。

2 硬件设计

PID控制是一种闭环控制系统,在仿真实验中通过使用带有编码器的直流电机作为被控元件,编码器输出的脉冲经过计算后转换为速度信号作为反馈信号输入,由此构成一个闭环反馈控制系统[10]。直流电机模型较为复杂,在常规实验中需要很多仪表进行实验。Proteus的元件库中包含有多种类型的电机,例如直流电机,步进电机,伺服电机等,是一个很好的仿真实验环境[11-12]。其中电机和编码器的参数可以在仿真环境下直接设置,而且电机元件本身具有一定的显示方法,如转速以r/min为单位显示在电机旁边,正负号表示转动方向。增量式PID要对速度进行闭环控制,需要实时获取电机的速度,微控制器通过定时器中断进行编码器脉冲计数,然后通过计算即可得到电机的实时速度。

通过对以上情况的分析,设计一种基于微控制器的闭环控制系统方案。

(1) 硬件总体设计。系统原理图如图2所示。

编码器实时测得电机的实际速度,微控制器先通过比较设定速度和实际速度计算出速度差值,接着使用PID算法得出控制量,然后改变脉冲输出占空比,最后经H桥驱动电路进行功率放大输出,从而达到改变电机速度的目的。

图2 系统原理图

(2) 驱动电路,此电路采用NMOS场效应管作为功率输出器件,设计并实现了直流电机的H 桥驱动电路,可以实现对直流电机进行闭环控制。许多半导体公司推出了直流电机专用驱动芯片, 用这些专用的电机驱动芯片多数更为适合,但是Proteus软件目前还没有进行支持,所以此处使用场效应管作为驱动电路。电机驱动电路如图3所示。

图3 电机驱动电路图

3 软件设计

软件PID算法一般可以通过C语言或者汇编语言实现,此处使用C语言编程实现控制算法[13]。程序中通过比较设定值和真实值得到误差,再经过PID计算实现一个闭环控制仿真实验[14]。

软件设计总体思路为:通过改变电机电枢的等效电压来达到调整电机转速的目的,具体步骤为先设置微控制器相应的寄存器和工作模式,实现定时和中断功能,再结合CCP硬件控制模块输出脉宽可调的PWM。

程序设计操作步骤如下:

(1) 读取当前指定的值Set_point;

(2) 读取测量值Previous_value;

(3) Error=Set_point-Previous_value,并将偏差值转换为有效的Current_value值输出,用于调节当前值,使之接近Set_point值;

(4) 重复前面的步骤。

程序设计伪代码实现:

Loop

Previous_value=GetMotorSpeed()

Isum=Isum+Error //累积偏差

Error=Set_point-Previous_value //得到偏差值

LastError=Error //暂存偏差值

Speed=Error-LastError //得到偏差变化量

Current_value=Error*Kprop+Krate*Speed +Kint*Isum

Setpwm(Current_value) //输出增量

Goto Loop //继续下一次循环

具体通过C语言实现的代码如下:当数据采样时间很短的情况下,我们可以使用差分计算代替微分计算,用累加计算代替积分计算(实验中设定采样周期为10 ms)。

int Calculate_PID (int Encoder,int Target)

{

float Kp,Ki,Kd; //参数由电机类型和负载决定

static int iError, LastError, PrevError, Pwm;

iError =Encoder-Target; //计算偏差

Pwm+=Kp* iError + Ki* LastError + Kd* PrevError; //增量式PID控制器

PrevError = LastError;

LastError = iError;

return Pwm; //增量输出

}

其中函数的参数为编码器的实际速度值和速度控制的期望值,函数返回值为PID输出的增量PWM。

4 实验仿真分析

在仿真环境中通过使用以上的软件和硬件,具体包括微控制器的软件代码,电机编码器的脉冲计数和速度计算,其中还选取了适合人机交互的的按键和显示屏,以及通过示波器观察PID的增量输出[15]。通过观察可以发现,当设置速度增加时,输出增量也跟着增加,在即将达到预定值时会有一定的震荡过程,这是PID在进行运算造成的,震荡过后会稳定在一个预定值,这符合我们对电机速度控制的要求,说明设计的PID控制系统是合理的。调节设定速度值(增大)后的PWM输出如图4所示。

图4 调节设定速度值(增大)后的PWM输出

5 结 语

随着仿真技术与自动控制技术的不断成熟,实验室也可以使用鲁棒性强的控制算法在仿真软件环境中进行仿真实验。通过实际使用发现,本文设计的实验可以作为实验课程的一种有益补充,通过本实验,不仅能获取PID控制算法在电机控制的具体方法,而且可以突破学生在实验室做常规实验的局限性。

参考文献(References):

[1] 秦娟英, 关军明, 王荣铸,等. 参数自整定模糊PID直流电机调速系统研究[J]. 机电设备, 2004, 21(2):38-41.

[2] 刘海珊, 陈宇晨. 无刷直流电机PID控制系统仿真及实验研究[J]. 系统仿真学报, 2009, 21(16):5157-5160.

[3] 孙晓旭, 王劲松, 安志勇. 基于Proteus和AVR单片机的无刷直流电机控制系统仿真[J]. 电子设计工程, 2015(19):174-176.

[4] 班永鑫, 贾英民. 基于Proteus的嵌入式系统开发方法研究[J]. 控制工程, 2008, 15(6):692-695.

[5] 方红庆, 陈 龙, 李训铭. 基于线性与非线性模型的水轮机调速器PID参数优化比较[J]. 中国电机工程学报, 2010, 30(5):100-106.

[6] 霍 炬, 曹贵奇, 杨 明. 基于预测控制的PID调节位置跟踪系统的设计[J]. 电机与控制学报, 2004, 8(2):127-129.

[7] 宋乐鹏, 陈勇刚, 胡大勇,等. 模糊自整定PID在电机调速系统中仿真研究[J]. 微计算机信息, 2010, 26(7):185-187.

[8] 仇 韬, 丁艳军, 吴占松,等. 基于预测模型的多PID控制器模糊加权控制[J]. 中国电机工程学报, 2006, 26(24):121-124.

[9] 郑雪钦, 郭东辉. 一种实时自适应步进电机PID控制器设计[J]. 控制工程, 2009, 16(5):643-646.

[10] 王传峰, 李东海, 姜学智. 基于概率鲁棒的PID控制器设计方法研究[J]. 中国电机工程学报, 2007, 27(32):92-97.

[11] 卢 超. 基于Proteus的步进电机控制系统仿真设计[J]. 实验室研究与探索, 2010, 29(6):54-57.

[12] 潘万平, 徐 刚, 张劲松. 基于Proteus的步进电机闭环控制的仿真[J]. 煤矿机械, 2010, 31(2):46-48.

[13] 海 涛. 基于C语言的正弦逆变器的软件设计[J]. 微计算机信息, 2000(4):45-46.

[14] 历风满. 数字PID控制算法的研究[J]. 辽宁大学学报(自然科学版), 2005, 32(4):367-370.

[15] 刘树东, 潘万平, 代金凤. 基于步进电机的阀门闭环控制的仿真[J]. 煤炭技术, 2010, 29(5):47-49.

猜你喜欢

闭环控制直流电机控制算法
基于模糊PID的无刷直流电机速度控制系统的设计与仿真
基于LMI的过渡态主控回路闭环控制律优化设计
适用于厚度在线测量的水压闭环控制系统
智能车竞赛中的闭环控制算法应用分析
基于ARM+FPGA的模块化同步控制算法研究
基于FPGA的双绕组无刷直流电机软件设计
一种优化的基于ARM Cortex-M3电池组均衡控制算法应用
SSSC的双闭环控制策略及仿真分析
基于模糊神经网络PID的无刷直流电机控制系统研究
一种改进的无刷直流电机控制方法