基于FPGA的PID控制在液浮陀螺回路中的应用

2018-03-10 05:12卢雍卿李剑文吴勇李建勋
软件导刊 2018年2期
关键词: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;endprint

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所示。endprint

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.endprint

猜你喜欢
PID控制
内模控制在火电厂主汽温系统中的应用
常规PID控制和常规模糊控制的比较
基于模糊控制理论的PID闭环控制系统的研究与设计
四旋翼无人机设计与滑模控制仿真