标题 | 基于FPGA的PID控制在液浮陀螺回路中的应用 |
范文 | 卢雍卿+李剑文+吴勇+李建勋 摘 要:PID 控制器的可靠性及实时性,是实现运动控制系统精确定位或跟踪的重要环节。利用PID控制液浮陀螺再平衡回路,在分析PID 控制算法的基础上,采用FPGA(现场可编程逻辑门阵列)对增量型PID控制器进行设计及仿真实验,使陀螺输出能及时响应角增量的变化。程序采用VHDL语言编写,使用软件Libero v9.0完成PID控制器的设计、编译和仿真,仿真结果表明该方法有效可行。 关键词:PID控制;可编程逻辑器件;液浮陀螺回路 DOIDOI:10.11907/rjdk.172232 中图分类号:TP319 文献标识码:A 文章编号:1672-7800(2018)002-0140-03 0 引言 PID控制器结构清晰,控制参数可调,响应速度快,能够广泛运用于各种控制变量,可在现场根据实际情况调节参数而得到较好的控制效果,在动态控制系统应用广泛。其核心设计思想是通过分析被控对象的控制需求,建立被控对象动态特征的数学模型,采用调整比例、积分、微分参数的控制策略达到最佳的控制效果和系统响应。此类动态控制系统的被控量一般为模拟量,例如速度、角度、水位等。利用目标值和输入值之间的差值,经过离散化后仅有数字PID控制器经过运算处理,将运算结果由数模转换变为模拟量,反馈给被控对象,这就是PID控制中常用的近似逼近原理。随着现场可编程逻辑门阵列(FPGA)的兴起,数字PID控制器的设计得到了新的发展。FPGA集成度高、可靠性高、体积小、功耗低、设计方法灵活,可进行反复编程、调试、烧写,能适应嵌入式系统应用。 1 液浮陀螺回路设计 液浮陀螺利用刚体旋转时具有定轴性的原理,当旋转的转子感到角动量时,会产生一个和角动量成比例的敏感器信号,通过处理敏感器信号后输出加矩信号,便可得到陀螺的运动角速度。离散化的数字再平衡回路如图1所示。 图1中AD转换器用于采集模拟信号,并将其离散化变为数字量信号。在FPGA中固化的PID算法用于信号的运算处理,DA转换器将经过处理的数字量信号转化为模拟量信号反馈给力矩器,这样便构成了一个完整的数字量控制的液浮陀螺再平衡回路。 2 PID控制器设计 PID是工业控制中应用最广泛、技术最成熟的一种控制方法,其基本控制原理如图2所示。 PID控制器是一种线性控制器,它根据给定值r(t)与实际输出值y(t)构成控制偏差: 将偏差进行比例、积分、微分运算并通过一定规律的线性组合构成控制量u(t),对被控量进行控制,满足: 式(2)中,KP为比例放大系数;K1为积分时间常数;KD为微分时间常数。数字PID控制算法的实现必须用数值逼近方法。当采样周期相当短时,用求和代替积分,用差商代替微商,使PID算法离散化。将PID算法的微分方程离散化、差分、归并处理后可得: 根据递推原理得到: 从式(4)可以看出,增量式数字PID算法,只要储存最近3个误差采样值e(k)、e(k-1)、e(k-2)就足够了。 将式(3)减去式(4)可得: 3 FPGA源程序设计 典型的数字PID控制系统由A/D转换、PID控制算法和D/A转换3个关键环节构成。为了协调3个环节之间的工作流程,系统工作控制部件必不可少。这里使用状态机来完成不同运算步骤之间的协调,在高速运算和运动控制方面,有限状态机有着独特的优势。 有限状态机从信号输出方式上分,有Moore型和Mealy型兩类。前者的输出状态只和当前状态有关,而后者的输出不仅与当前状态有关还与输入量有关。Moore型状态机的输出则仅为当前状态的函数,这类状态机在输入发生变化时必须等待时钟的到来。时钟使状态发生变化时才导致输出变化,所以比Mealy机要多等待一个时钟周期,但是能有效避免毛刺现象。Mealy型状态机的输出是当前状态和所有输入信号的函数,它的输出是在输入变化后立即发生的,不依赖于时钟的同步。从输出时序上看,前者属于同步输出状态机,后者属于异步输出状态机。本设计所用的状态机为单进程Moore型状态机。 对数模转化的控制算法如下: circulation:process(state) begin case state is when s1=>ado<=”00000”; addr<=0000; next_state<=s2; when s2=>ado<=”11000”; addr<=0001; next_state<=s3; when others=>ado<=”00000”; next_state<=s1; end process Circulation; control:process(clk,dir) begin if dir=1then state<=s1; elsif clk event and clk+1then state<=next_state; end if; end process control; 这里给出了一段式状态机设计,硬件语言设计简洁,便于快速实现功能架构。 PID控制的硬件语言程序如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity pid_regulator_verl is port (clk: in std_logic; sample: in std_logic; reset: in std_logic; rk: in std_logic_vector(7 downto 0); yk: in std_logic_vector(7 downto 0); kp:in std_logic_vector(3 downto 0); ki: in std_logic_vector(3 downto 0); kd:in std_logic_vector(3 downto 0); out:out std_logic_vector(7 downto 0); end pid_regulator_verl architecture behavioral of pid_regulator_verl is signal error: integer range -65535 to 65535:=0; signal prev_error: integer range -65535 to 65535:=0; signal integrator: std_logic_vector(17 downto 0):=(others=>0); alias integ: std_logic_vector(15 downto 0) is integrator(17 downto 2); signal int_integ: integer range -65535 to 65535:=0; signal actuator: integer range -65535 to 65535:=0; signal p_bidrag: integer range -65535 to 65535:=0; signal i_bidrag: integer range -65535 to 65535:=0; signal d_bidrag: integer range -65535 to 65535:=0; signal saturation:std_logic; begin int_integ<=conv_integer(integ); integration: process(sample) variable err:integer; begin if rising_edge(sample) then if reset=1 then integrator<=(others=>0); error<=0; else err:=(conv_integer(ref)-conv_integer(act)); if abs(err)>1 then if saturation=0 then integrator<= integrator+err/2; end if; if conv_integer(integrator)<0 then integrator<=(others=>0); enf if; prev_error<=error; error<=err; end if; end if; end if; end process; p_bidrag<=conv_integer(kp)*error; i_bidrag<=conv_integer(ki)*int_integ; d_bidrag<=conv_integer(kd)*(error-prev_error); regulator: process(p_bidrag, i_bidrag, d_bidrag) variable yact:integer; begin yact:=p_bidrag+i_bidrag,+d_bidrag; actuator<=yact; saturation<=0; if yact<0 then yact:=0; elsif yact>255 then yact:=255; saturation<=1; end if; out<=conv_std_logic_vector(yact,8); end process; end behavioral; 4 綜合仿真 PID控制器系统设计围绕算法实现,即先由PTD控制器的硬件语言描述得到VHDL的控制算法描述,然后对系统分解为误差模数变换、选通控制部件、PID运算部件、控制状态机模块。 Actel公司专用EDA软件Libero支持原理图与VHDL语言混合输入设计方式,除PID运算部件采用原理图输入设计方式外,其余3个部件均采用VHDL输入设计方式。系统仿真时,将系统的最高工作速率设定为22.1184MHz。功能仿真波形如图3所示。 PID控制原理能够运用于大量闭环回路控制系统设计中,使得力矩器输出量能及时反映陀螺角速度变化,以高响应速度完成对陀螺传感器输出变化量的跟踪。 5 结语 以FPGA为代表的高速系统已经在数字信号处理领域表现出独特的优势,尤其是极高的稳定性和可靠性,使其在嵌入式系统发挥越来越大的作用。本文以FPGA为载体,PID控制为手段,实现了液浮陀螺再平衡回路控制。通过仿真验证,在保持原有响应速度的前提下,解决了原有模拟电路无法避免的、由于器件温度漂移导致的信号失真问题。 参考文献: [1] ACTEL INC.FPGA data book[EB/OL]. http://noel.feld.cvut.cz/vyu/apo/actel/s04_01.pdf 1994. [2] ALTERA INC.Data book[EB/OL]. http://ebook.pldworld.com/_Semiconductors/Altera/literature/_nv/98nvq1.pdf 1996. [3] 康华光.电子技术基础(数字部分)[M].北京:高等教育出版社,2006. [4] 姜雪松.VHDL设计实例与仿真[M].北京:机械工业出版社,2007. [5] 程佩青.数字信号处理教程[M].北京:清华大学出版社,2007. [6] 侯伯亨,顾新.VHDL硬件描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,2009. [7] 张春生.FPGA数字信号处理与工程应用实践[M].北京:中国铁道出版社,2013. [8] 杨毅明.数字信号处理[M].北京:机械工业出版社,2008. [9] 谭晓.数字PID控制器的实验研究[J].武汉纺织工学院学报,1999,12(3):68-72. [10] MOHAMED ABDELATI.FPGA-Based PID controller implementation[D].Gaza:University of Gaza,2005. [11] 陆重阳,卢东华.FPGA技术及其发展趋势[J].微电子技术,2003,31(1):5-7. [12] 张焱,余海龙,罗进川.超高速数据采集系统设计与实现[J].安徽大學学报,2006,30(4):44-47. |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。