您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > PID算法的FPGA实现
PID算法的FPGA实现【摘要】PID控制器作为一种传统的控制方法在现代工业现场应用仍然非常广泛,实际工程中使用的PID控制系统多为基于单片机技术的软件实现,其实时性与抗干扰性能并不理想。本文采用现场可编程逻辑门阵列(FPGA)来设计一款硬件PID控制器,很好地克服了软件实现方案的上述缺点。实际运行结果表明,采用该方法可明显改善效果,在简化设计的同时可以提高系统的实时性和抗干扰性。【关键词】FPGA;PID算法;VerilogHDLAbstract:satraditionalcontrolmethod,PIDcontrollerisappliedtomanyfieldsinindustrialcontrol.However,themethodofPIDcontrollerismainlybasedonSCMsoftware.itsreal-timeandanti-jammingperformanceisnotsatisfactory.FieldProgrammableGateArray(FPGA)ispresentedtorealizeahardwarePIDcontrollerinthispaper.Itcanovercometheaboveshortcomingsofthesoftwareimplementation.Thepracticaloperationresultshowsthatthismethodcansignificantlyimprovethecontroleffect,andalsoimprovethecomputationalspeedandreliabilityofsystemwhilesimplifythedesign.KeyWords:FPGA;PIDalgorithm;VerilogHDL1.引言在许多现代化的工业生产如冶金、电力等,实现对温度的精度控制至关重要的,不仅直接影响着产品的质量,而且还关系到生产安全、能源节约等一系列重大经济指标。PID控制由于其鲁棒性好,可靠性高,在常规的温度控制中应用非常广泛。目前工程的实际应用中,大多数模糊PID控制器都利用单片机软件编程来实现,然而单片机的指令是按顺序执行的,实时性不强,加上软件实现容易受外界的干扰,抗干扰性能力差,对于实时性要求很高和外界干扰比较严重的系统不太适宜。本文选取FPGA(现场可编程门阵列)作为系统的主控制芯片,FPGA所有的信号都是时钟驱动的,对于程序的执行具有并行运算的能力,显著的提高了系统控制的实时性,在FPGA内部硬件实现还可以防止像单片机程序一样,在恶劣的环境条件下发生程序跑飞的问题。尤其是现在FPGA器件有越来越多的参考设计方案以及IP(知识产权)核心库方面的支持。利用FPGA设计的PID控制器一方面可以将实现PID算法的模块单独作为控制模块来使用,直接去实现对控制对象的调节,另一方面,基于FPGA的PID控制算法也可以将其作为系统内的IP核,以便在多路或复杂的系统上直接调用,加快研发设计速度。2.PID算法分析2.1离散PID算法PID控制系统是一个简单的闭环系统,如图1所示,PID系统框图中,整个系统主要包括比较器、PID控制器和控制对象,其中PID包括三个环节,即比例、积分和微分。图1PID系统框图图1中的r(t)作为系统的给定值,y(t)作为系统的输出值,e(t)是给定值与输出值的偏差,所以系统的偏差可以求得:e(t)=r(t)-y(t)(1)u(t)作为控制系统中的中间便量,既是偏差e(t)通过PID控制算法处理后的输出量,又是被控对象的输入量,因此模拟PID控制器的控制规律为:(2)其中,KP为模拟控制器的比例增益,TI为模拟控制器的积分时间常数,TD为模拟控制器的微分时间常数。2.2离散PID算法为了用微处理器实现PID算法,我们需要将模拟PID离散化,根据采样时刻的偏差来实现PID算法,因此式(3.2)中的微分和积分项两项内容作离散化处理。假设T为采样周期,则积分项可作如下变换:(3)采样周期的时间非常短,故微分可以近似的表示为:(4)将式(3)和式(4)带入式(2)后,可得到离散PID算法为(限于篇幅,推导过程省略):(5)这个等式被叫做增量式PID控制算法。其中,乘积因子由PID控制参数KP、KI、KD确定: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)相减得到误差值。VerilogHDL程序代码如下,其中,ek0、ek1、ek2、rt、yt分别对应偏差值e(k)、e(k-1)、e(k-2)、r(t)、y(t)。将上述程序在QuartusII软件环境里完成编译后,其仿真结果如图3所示。图2增量式PID算法结构图图3误差模块仿真图3.2乘积和求和模块通过误差计算模块求出e(k)、e(k-1)、e(k-2)后,由公式(5)知,要计算出控制量还必须将其分别与乘积因子做乘法运算,通过硬件描述语言来实现乘法运算的功能:按照上述程序,在QuartusII完成编译后,其仿真结果如图4所示。图4乘法器仿真图现在可计算出、、三个乘积项的计算结果,将上面三个乘积项求和就可以得出控制量△u(k)。程序代码如下所示,其中输入val0[15..0]、val1[15..0]、val2[15..0]分别对应、、乘积的结果,输出val[15..0]就是控制量△u(k)的值。按照上述程序,在QuartusII完成编译后,其仿真结果如图5所示。图5PID求和模块仿真波形图3.3温度检测及输出控制电路设计本文用到的温度测量器件是K型热电偶,温度测量范围为0~1200℃。热电偶输出的是模拟电压信号,必须进行A/D转换,同时还需对热电偶进行冷端补偿和非线形校正。为了解决上面的问题,本文采用的是K型热电偶专用数字转换器MAX6675芯片,MAX6675芯片内部集成了热电偶放大器,内置高达12位的模数转换器。还包括了非线性矫正、冷端补偿、断线检测等功能模块。MAX6675的工作温度范围为-20~85℃,温度的测量范围为0~1024℃,温度分辨率可以达到0.25℃。假设D为A/D转换后得到的数字量对应的十进制数值,那么测量温度值T可以通过如下公式算出:(6)输出控制电路采用的是PWM(脉宽调制)方式,实现对电阻炉的温度控制。光耦芯片选用MOC3061,用于对强弱电路的隔离,双向导通可控硅选用的是BT137_600E。如果占空比越高,那么相对可控硅导通的时间也就越长,电阻炉加热温度也就越高,反之温度也就会慢慢散热降低,从而达到控制炉温的目的。4.结语本文分析了PID算法,给出了在FPGA内部硬件实现增量式PID控制的主要设计思路。在电阻炉为控制对象的温控系统中,系统工作稳定,在整个过程没有出现震荡和较大波动,并且温度控制精度在始终保持在5%以内;系统的抗干扰能力增强,对现场的各种噪声和干扰具有较好的抑制作用。参考文献[1]廖日坤.CPLD/FPGA嵌入式应用开发技术白金手册[M].北京:中国电力出版社,2005.[2]刘金琨.先进PID控制及其MATLAB仿真[M].北京:电子工业出版社,2003.[3]任爱锋,初秀琴,常存,孙肖子.基于FPGA的嵌入式系统设计[M].西安:西安电子科技大学出版社,2004.[4]陈昭明,白向林,龚晓宏.基于FPGA的数字PID控制器设计[J].重庆科技学院学报,2010,12(2):149-151.[5]张科,靖固.利用FPGA的增量式PID控制器的研究[J].现代制造工程,2009,3:112-114.[6]刘爱荣,王振成.EDA技术与CPLD/FPGA开发应用简明教程[M].北京:清华大学出版社,2007.
本文标题:PID算法的FPGA实现
链接地址:https://www.777doc.com/doc-3933040 .html