原创 (多图) PID算法的FPGA实现

2015-3-24 11:48 4633 22 3 分类: FPGA/CPLD
1.引言 在许多现代化的工业生产如冶金、电力等,实现对温度的精度控制至关重要的,不仅直接影响着产品的质量,而且还关系到生产安全、能源节约等一系列重大经济指标。 PID控制由于其鲁棒性好,可靠性高,在常规的温度控制中应用非常广泛。目前工程的实际应用中,大多数模糊PID控制器都利用单片机软件编程来实现,然而单片机的指令是按顺序执行的,实时性不强,加上软件实现容易受外界的干扰,抗干扰性能力差,对于实时性要求很高和外界干扰比较严重的系统不太适宜。本文选取FPGA(现场可编程门阵列)作为系统的主控制芯片,FPGA所有的信号都是时钟驱动的,对于程序的执行具有并行运算的能力,显著的提高了系统控制的实时性,在FPGA内部硬件实现还可以防止像单片机程序一样,在恶劣的环境条件下发生程序跑飞的问题。尤其是现在FPGA器件有越来越多的参考设计方案以及IP(知识产权)核心库方面的支持。利用FPGA设计的PID控制器一方面可以将实现PID算法的模块单独作为控制模块来使用,直接去实现对控制对象的调节,另一方面,基于FPGA的PID控制算法也可以将其作为系统内的IP核,以便在多路或复杂的系统上直接调用,加快研发设计速度。 2.PID算法分析 2.1 离散PID算法 PID控制系统是一个简单的闭环系统,如图1所示,PID系统框图中,整个系统主要包括比较器、PID控制器和控制对象,其中PID包括三个环节,即比例、积分和微分。

图1 PID系统框图
图1 PID系统框图

图1中的r(t)作为系统的给定值,y(t)作为系统的输出值,e(t)是给定值与输出值的偏差,所以系统的偏差可以求得: e(t)=r(t)-y(t) (1) u(t)作为控制系统中的中间便量,既是偏差e(t)通过PID控制算法处理后的输出量,又是被控对象的输入量,因此模拟PID控制器的控制规律为:

pidbonfpga02.JPG

其中,KP为模拟控制器的比例增益,TI为模拟控制器的积分时间常数,TD为模拟控制器的微分时间常数。 2.2 离散PID算法 为了用微处理器实现PID算法,我们需要将模拟PID离散化,根据采样时刻的偏差来实现PID算法,因此式(3.2)中的微分和积分项两项内容作离散化处理。 假设T为采样周期,则积分项可作如下变换:

pidbonfpga03.JPG

采样周期的时间非常短,故微分可以近似的表示为:

pidbonfpga04.JPG

将式(3)和式(4)带入式(2)后,可得到离散PID算法为(限于篇幅,推导过程省略):

pidbonfpga05.JPG

这个等式被叫做增量式PID控制算法。其中,乘积因子由PID控制参数KP、KI、KD确定:

pidbonfpga06.JPG

3.PID算法的FPGA实现 由公式(5)知,增量式PID控制算法的具体实现步骤为:先通过误差计算模块求出偏差值e(k)、e(k-1)、e(k-2),再通过乘积模块求出三个信号分别与乘积因子的相乘,最后对乘积项求和得到最后的控制量。图2所示为增量式PID算法结构图。 3.1 误差计算模块 误差计算模块的目的是为了求出三次相邻的偏差采样值,即公式(3.8)中提到的e(k)、e(k-1)、e(k-2),输入的给定值r(t)与实际输出值y(t)相减得到误差值。Verilog HDL程序代码如下,其中,ek0、ek1、ek2、rt、yt分别对应偏差值e(k)、e(k-1)、e(k-2)、r(t)、y(t)。

pidbonfpga07.JPG

将上述程序在Quartus II软件环境里完成编译后,其仿真结果如图3所示。

图2 增量式PID算法结构图
图2 增量式PID算法结构图

图3 误差模块仿真图
图3 误差模块仿真图

3.2 乘积和求和模块 通过误差计算模块求出e(k)、e(k-1)、e(k-2)后,由公式(5)知,要计算出控制量还必须将其分别与乘积因子做乘法运算,通过硬件描述语言来实现乘法运算的功能:

pidbonfpga10.JPG

按照上述程序,在Quartus II完成编译后,其仿真结果如图4所示。

图4 乘法器仿真图
图4 乘法器仿真图

现在可计算出α0e(k)、α1e(k-1)、α2e(k-2)三个乘积项的计算结果,将上面三个乘积项求和就可以得出控制量△u(k)。程序代码如下所示,其中输入val0[15..0]、val1[15..0]、val2[15..0] 分别对应α0e(k)、α1e(k-1) 、α2e(k-2)乘积的结果,输出val[15..0]就是控制量△u(k)的值。

pidbonfpga12.JPG

按照上述程序,在Quartus II完成编译后,其仿真结果如图5所示。

图5 PID求和模块仿真波形图
图5 PID求和模块仿真波形图

3.3 温度检测及输出控制电路设计 本文用到的温度测量器件是K型热电偶,温度测量范围为0~1200℃。热电偶输出的是模拟电压信号,必须进行A/D转换,同时还需对热电偶进行冷端补偿和非线形校正。为了解决上面的问题,本文采用的是K型热电偶专用数字转换器MAX6675芯片,MAX6675芯片内部集成了热电偶放大器,内置高达12位的模数转换器。还包括了非线性矫正、冷端补偿、断线检测等功能模块。MAX6675的工作温度范围为-20~85℃,温度的测量范围为0~1024℃,温度分辨率可以达到0.25℃。假设D为A/D转换后得到的数字量对应的十进制数值,那么测量温度值T可以通过如下公式算出:

pidbonfpga14.JPG

输出控制电路采用的是PWM(脉宽调制)方式,实现对电阻炉的温度控制。光耦芯片选用MOC3061,用于对强弱电路的隔离,双向导通可控硅选用的是BT137_600E。如果占空比越高,那么相对可控硅导通的时间也就越长,电阻炉加热温度也就越高,反之温度也就会慢慢散热降低,从而达到控制炉温的目的。 4.结语 本文分析了PID算法,给出了在FPGA内部硬件实现增量式PID控制的主要设计思路。在电阻炉为控制对象的温控系统中,系统工作稳定,在整个过程没有出现震荡和较大波动,并且温度控制精度在始终保持在5%以内;系统的抗干扰能力增强,对现场的各种噪声和干扰具有较好的抑制作用。

文章评论0条评论)

登录后参与讨论
我要评论
0
22
关闭 站长推荐上一条 /2 下一条