曹银萍,张祖琪,窦益华
(西安石油大学 机械工程学院,陕西 西安 710000)
在高产深气井油管内过高的介质流动速度和压力易对管柱产生附加作用力,从而使油管发生高频低载荷受迫振动或低频高载荷受迫振动。油管振动不仅会导致接箍螺纹松动、漏气和脱扣,而且会对油管本体产生疲劳破坏,影响井筒生产安全。针对高产深气井油管柱因载荷发生振动后产生的安全隐患,需要设计出智能可调油管抑振系统,对高产深气井油管柱进行抑振。
为了动态控制井下管柱振动,本设计采用模糊控制与PID控制器相结合的方式对油管柱的所有频域振动进行抑振控制[1]。系统中主控制器需要高速采集加速度计输出大小,为进一步减小测控系统电路体积以及增加测量精度,要求控制器片内外设可扩展多通道高速AD转换器及高速缓存,这样可以同时获得多片加速度计读数,保证测量有效性;其次,计算中涉及到高速乘加运算以及重复性的积分微分运算,所以需要进行高速浮点运算并且具有硬件乘法器;最后考虑到井下管柱工作环境限制,要求主控制器具有高性能低功耗的特点。Altera公司的Cyclone 10LP系列FPGA芯片强调更低的功耗和成本,并针对I/O口扩展、传感器融合,芯片到芯片控制等低静态功耗低成本应用进行了优化,所以本设计采用Cyclone 10LP芯片实现该应用需求[2]。
磁流变抑振器是基于磁流变液在磁场作用下粘塑性发生变化的特性而设计的。通过控制磁场强度,可以产生随不同的磁场强度而连续变化的粘度值,从而获得连续可调的输出阻尼力,在本系统中,通过安装于测试器仓内的测振传感器实时监测振动情况,当管柱实际振动偏离控制期望时,主控制器FPGA运行模糊PID控制算法对线圈电流进行实时调节,线圈磁场随电流改变而改变,进而实时调节磁流变液提供的阻尼力,保证实时抑振[3-5]。智能抑振测控系统结构框图如图1所示,系统功能包括:主控芯片实时调节磁流变抑振器线圈电流大小,与测振传感器构成闭环系统,实现管柱抑振;工作时,测控抑振短节安装于待抑振油管之间,其中主控芯片FPGA、LIS2DH测振传感器等构成测控系统,线圈、磁流变液、抑振器结构组成执行机构。
模糊自适应PID控制是将模糊理论与PID控制相结合,利用模糊控制规则在线对PID参数进行修改。该控制系统主要由模糊推理模块、PID控制器、磁流变抑振器以及测振传感器组成[6-8],其结构如图2所示。
模糊控制设计的步骤分为如下4步。
1)模糊化:总结设计人员的知识经验,并将其作为输入量模糊化,将系统误差e和误差变化率ec变化范围定义为模糊集上的论域。模糊子集为e,ec={NB,NM,NS,PS,PM,PB}中的元素分别代表负大、负中、负小、正小、正中以及正大。
2)选择隶属度函数:假设e、ec和kp、ki、kd均服从正态分布,可得出各模糊子集的隶属度。
3)建立模糊规则表:根据各模糊子集的隶属度复制表和各参数模糊控制模型,建立kp、ki、kd这3个参数整定的模糊规则表。
4)解模糊化输出:需要通过解模糊转化模糊量为精确值,根据步骤进行kp、ki、kd的自适应校正,应用模糊合成推理设计PID参数模糊矩阵表,查出修正参数代入式1~式3进行计算。
(1)
(2)
(3)
抑振测控系统中测振传感器需要测量油管轴向的加速度,加速度大小为5~50 m/s2,频率为2~100 Hz,为了实现x、y和z三轴加速度数据的同时采集,选用LIS2DH三轴加速度计模块。该模块具有数字SPI串行接口标准输出,能够以1 Hz~5.3 kHz的输出数据速率测量加速度,保证在-40~+85 ℃的扩展温度范围内运行,可以有效地采集三轴加速度数据并存储在寄存器中。LIS2DH模块内部结构如图3所示。
LIS2DH模块采用SPI总线协议与控制器(FPGA)进行通信,因此通过SPI协议实现对该模块相关寄存器的配置和采集数据的读取。LIS2DH模块的SPI串行接口是一个总线从机,其工作时序如图4所示。
SPI是允许写入和读取设备的寄存器。串行接口通过CS、SPC、SDI和SDO这4条线与外部交互。CS是串行端口使能,由SPI主机控制。SPC是串行端口时钟,它是由SPI主机控制。当CS处于高位(无数据传输)时,将停止在高位。SDI和SDO分别是串行端口数据输入和输出,SDI和SDO都在SPC的下降沿驱动,并在SPC的上升沿捕获。
本系统设计采用自顶向下的设计思路,图5所示为FPGA模块划分及硬件电路图。系统主要由主控芯片FPGA运行模糊PID算法,由LIS2DH模块采集并发送振动加速度信号。FPGA内部主要包含模糊PID算法模块、SPI串行接口模块、LIS2DH数据采集模块和FIFO缓存等模块。LIS2DH数据采集模块通过SPI驱动模块与LIS2DH器件进行通信,并将采集到的加速度信号送入PID控制模块进行处理,SPI控制模块负责控制读取LIS2DH传感器输出的加速度数据,并将加速度数据传入FPGA中的FIFO缓冲区等待模糊PID控制模块处理,最后模糊PID控制模块完成信号调节后将PID调节信号输出到驱动电路,完成磁流变抑振器抑振功能[9]。
FPGA内部顶层模块例化了SPI驱动模块、LIS2DH数据采集模块、FIFO数据缓存模块、PID运算模块和模糊控制模块,完成了各模块之间的数据交互。顶层模块部分代码如下:
module lis2dh_top(clk,rst_n,spi_scl,spi_sda);
//例化lis2dh数据采集模块
lis2dh lis2dh_u(
.clk(clk),//时钟信号
.rst_n(rst_n),//复位信号
.spi_rh_wl((spi_rh_wl),//SPI读写控制信号
.spi_exec((spi_exec),//SPI触发执行信号
.spi_addr((spi_addr),//SPI器件内地址
.spi_data_w((spi_data_w),//SPI要写的数据
.spi_data_r((spi_data_r),//SPI读出的数据
.spi_done((spi_done),//SPI一次操作完成);
end
模糊PID算法模块通过有限状态机来实现,start_flag是模块工作的使能信号,idle状态为初始状态,检测到start_flag为高电平时进入fuzzy状态,fuzzy状态为模糊控制计算状态,将模糊化后的值送入lookup查找地址模块,检测到fuzzy_done为高电平时进入lookup状态,lookup状态为查找地址模块,得到kp、ki、kd的存储地址,该状态检测到look_done为高电平时进入def状态,def状态为解模糊状态,对PID参数进行解模糊处理,并将3个参数输入到PID控制器中进行运算。模糊化模块的状态迁移图如图6所示。
PID运算控制模块的计算过程如下:对各个变量进行初始赋值,并将初值输出到误差模块计算PID控制器的误差e,当接收到控制模块的信号init_flag时进行误差计算,输出ek0、ek1、ek2,计算完成后将输出完成信号done_flag置为高电平并送入控制模块,在接收到控制模块的信号out_flag后,对各个参数进行pid增量计算,在计算过pid增量后与上一时刻的输出值进行相加,得到实际的输出yt,输出引脚pid_y将此时刻的数值送入寄存器中,其在数值上与输出yt相同,计算完成功能。实现PID控制的部分代码如下:
module pid(clk,rst_n,e,de,kp,ki,kd,yt);
wire signed[15:0] ek0;
reg signed[15:0] ek1;
reg signed[15:0] ek2;
wire signed[15:0] d_uk;//pid增量
reg signed[15:0] uk1;//上一时刻u(k-1)的值
reg signed[15:0] pid_y_reg=15'd0;
assign ek0={(target - y),16'd0};//计算e(k)
assign d_uk=(ek0-ek1)/kp+ek0/ki+((ek0-ek1)- (ek1-ek2))/kd;//计算pid增量
assign pid_y=pid_y_reg[15:0];
LIS2DH数据采集模块通过调用SPI驱动模块来实现对LIS2DH采集数据的读取。将读到的加速度数值a_data传递给FIFO模块缓存,再将FIFO缓存的值传递给模糊PID控制模块,用于控制加速度信号的大小。spi_rh_wl为SPI读写控制信号,spi_exec为SPI触发执行信号,spi_addr为SPI器件内地址,spi_data_w为SPI要写的数据,spi_data_r为SPI读出的数据,spi_done为SPI一次操作完成信号,flow_cnt为状态流控制寄存器,wait_cnt为计数等待寄存器,a_data_t为加速度的临时数据,a_done为加速度值采集完成信号,LIS2DH数据采集模块的代码如下:
module LIS2DH_ctrl(clk,rst_n,spi_rh_wl,
spi_exec,spi_addr,spi_data_w,spi_data_r,spi_done);
4'd1:begin//配置LIS2DH的功能模式
spi_exec<=1'b1;
spi_rh_wl<=1'b0;
spi_addr<=8'h00;//配置系统寄存器
spi_data_w<=8'h03;//激活功能
flow_cnt<=flow_cnt+1'b1;
end
4'd2:begin//配置完成
if(spi_done)
flow_cnt<=flow_cnt+1'b1;
end
LIS2DH包含一个10bit32级FIFO。在FIFO工作模式下,x、y和z轴测量的加速度检测数据存储在FIFO中。本模块调用QuartusII软件中的FIFO ip core。fifo_my为调用的ip core。wrclk为100 MHz的写时钟信号,wren为写使能信号,wrdata为写数据信号,wrempty为写空标志,wrfull为写满标志,wrusedw为写使用量信号,rdclk为50 MHz的读时钟信号,rden为读使能信号,rdata表示读数据信号,rdempty表示读空标志信号,rdfull表示读满标志信号,rdusedw表示读使用量信号。FIFO数据缓存模块的部分代码如下:
fifo_my fifo_my_inst(
.data (wrdata),
.rdclk (rdclk),
.rdreq (rden),
.wrclk (wrclk),
.wrreq (wren),
.q (rdata),
.rdempty(rdempty),
.rdfull (rdfull);
由于LIS2DH采用SPI协议与FPGA进行通信,FPGA作为主机,LIS2DH作为从机,所以需要用SPI驱动模块实现FPGA与LIS2DH信号的交互。根据SPI的工作时序图,将SPI的时钟的频率定为5 MHz。本模块负责将8 bit的并行数据按照SPI协议接收,将接收的数据并行传输给FPGA。spi_en为接收数据使能信号(脉冲信号),spi_data为所接收的数据,spi_done为接收完成信号。在接收逻辑中,全部的信号采用上升沿驱动。利用外部给予的spi_en作为启动信号,启动rec_en,经过移位接收数据。在spi_sclk输出时,采用组合逻辑设计。SPI驱动模块的部分代码如下:
module spi_8bit_drive(clk,rst_n,spi_en,spi_ data, spi_done,spi_sclk,spi_mosi,spi_miso);
always@(posedge clk,negedge rst_n)
if(rst_n==1'b0)
spi_done<=1'b0;
else
if(rec_cnt==4'd8)
spi_done<=1'b1;
else
spi_done<=1'b0;
end
本系统采用了FPGA Cyclone 10LP作为控制核心,系统硬件部分采用Verilog HDL语言编写,经过Quartus II9.1开发平台编译后在Modelsim Altera6.5下进行仿真,PID模块的仿真时序图如图7所示。从仿真波形来看,波形符合预期,所以该智能控制系统可以得到满意的抑振效果。图8所示为磁流变抑振器实物图。
本文针对常规单片机控制井下磁流变抑振器抑振过程中存在的数据信号传输困难、难以实现实时抑振的问题,设计了以FPGA为主控芯片的磁流变抑振器智能控制系统,该智能控制系统采用模糊自适应原理与PID控制器相结合的方式,控制LIS2DH模块的数据采集与传输。试验结果表明,基于FPGA的磁流变抑振器智能控制系统,满足井下管柱抑振控制系统的各项性能指标,具有易于智能算法升级、集成度高、自动控制等优点,有效解决了该技术在井下的应用和推广问题。