曹銀萍,張祖琪,竇益華
(西安石油大學(xué) 機(jī)械工程學(xué)院,陜西 西安 710000)
在高產(chǎn)深氣井油管內(nèi)過(guò)高的介質(zhì)流動(dòng)速度和壓力易對(duì)管柱產(chǎn)生附加作用力,從而使油管發(fā)生高頻低載荷受迫振動(dòng)或低頻高載荷受迫振動(dòng)。油管振動(dòng)不僅會(huì)導(dǎo)致接箍螺紋松動(dòng)、漏氣和脫扣,而且會(huì)對(duì)油管本體產(chǎn)生疲勞破壞,影響井筒生產(chǎn)安全。針對(duì)高產(chǎn)深氣井油管柱因載荷發(fā)生振動(dòng)后產(chǎn)生的安全隱患,需要設(shè)計(jì)出智能可調(diào)油管抑振系統(tǒng),對(duì)高產(chǎn)深氣井油管柱進(jìn)行抑振。
為了動(dòng)態(tài)控制井下管柱振動(dòng),本設(shè)計(jì)采用模糊控制與PID控制器相結(jié)合的方式對(duì)油管柱的所有頻域振動(dòng)進(jìn)行抑振控制[1]。系統(tǒng)中主控制器需要高速采集加速度計(jì)輸出大小,為進(jìn)一步減小測(cè)控系統(tǒng)電路體積以及增加測(cè)量精度,要求控制器片內(nèi)外設(shè)可擴(kuò)展多通道高速AD轉(zhuǎn)換器及高速緩存,這樣可以同時(shí)獲得多片加速度計(jì)讀數(shù),保證測(cè)量有效性;其次,計(jì)算中涉及到高速乘加運(yùn)算以及重復(fù)性的積分微分運(yùn)算,所以需要進(jìn)行高速浮點(diǎn)運(yùn)算并且具有硬件乘法器;最后考慮到井下管柱工作環(huán)境限制,要求主控制器具有高性能低功耗的特點(diǎn)。Altera公司的Cyclone 10LP系列FPGA芯片強(qiáng)調(diào)更低的功耗和成本,并針對(duì)I/O口擴(kuò)展、傳感器融合,芯片到芯片控制等低靜態(tài)功耗低成本應(yīng)用進(jìn)行了優(yōu)化,所以本設(shè)計(jì)采用Cyclone 10LP芯片實(shí)現(xiàn)該應(yīng)用需求[2]。
磁流變抑振器是基于磁流變液在磁場(chǎng)作用下粘塑性發(fā)生變化的特性而設(shè)計(jì)的。通過(guò)控制磁場(chǎng)強(qiáng)度,可以產(chǎn)生隨不同的磁場(chǎng)強(qiáng)度而連續(xù)變化的粘度值,從而獲得連續(xù)可調(diào)的輸出阻尼力,在本系統(tǒng)中,通過(guò)安裝于測(cè)試器倉(cāng)內(nèi)的測(cè)振傳感器實(shí)時(shí)監(jiān)測(cè)振動(dòng)情況,當(dāng)管柱實(shí)際振動(dòng)偏離控制期望時(shí),主控制器FPGA運(yùn)行模糊PID控制算法對(duì)線(xiàn)圈電流進(jìn)行實(shí)時(shí)調(diào)節(jié),線(xiàn)圈磁場(chǎng)隨電流改變而改變,進(jìn)而實(shí)時(shí)調(diào)節(jié)磁流變液提供的阻尼力,保證實(shí)時(shí)抑振[3-5]。智能抑振測(cè)控系統(tǒng)結(jié)構(gòu)框圖如圖1所示,系統(tǒng)功能包括:主控芯片實(shí)時(shí)調(diào)節(jié)磁流變抑振器線(xiàn)圈電流大小,與測(cè)振傳感器構(gòu)成閉環(huán)系統(tǒng),實(shí)現(xiàn)管柱抑振;工作時(shí),測(cè)控抑振短節(jié)安裝于待抑振油管之間,其中主控芯片F(xiàn)PGA、LIS2DH測(cè)振傳感器等構(gòu)成測(cè)控系統(tǒng),線(xiàn)圈、磁流變液、抑振器結(jié)構(gòu)組成執(zhí)行機(jī)構(gòu)。
模糊自適應(yīng)PID控制是將模糊理論與PID控制相結(jié)合,利用模糊控制規(guī)則在線(xiàn)對(duì)PID參數(shù)進(jìn)行修改。該控制系統(tǒng)主要由模糊推理模塊、PID控制器、磁流變抑振器以及測(cè)振傳感器組成[6-8],其結(jié)構(gòu)如圖2所示。
模糊控制設(shè)計(jì)的步驟分為如下4步。
1)模糊化:總結(jié)設(shè)計(jì)人員的知識(shí)經(jīng)驗(yàn),并將其作為輸入量模糊化,將系統(tǒng)誤差e和誤差變化率ec變化范圍定義為模糊集上的論域。模糊子集為e,ec={NB,NM,NS,PS,PM,PB}中的元素分別代表負(fù)大、負(fù)中、負(fù)小、正小、正中以及正大。
2)選擇隸屬度函數(shù):假設(shè)e、ec和kp、ki、kd均服從正態(tài)分布,可得出各模糊子集的隸屬度。
3)建立模糊規(guī)則表:根據(jù)各模糊子集的隸屬度復(fù)制表和各參數(shù)模糊控制模型,建立kp、ki、kd這3個(gè)參數(shù)整定的模糊規(guī)則表。
4)解模糊化輸出:需要通過(guò)解模糊轉(zhuǎn)化模糊量為精確值,根據(jù)步驟進(jìn)行kp、ki、kd的自適應(yīng)校正,應(yīng)用模糊合成推理設(shè)計(jì)PID參數(shù)模糊矩陣表,查出修正參數(shù)代入式1~式3進(jìn)行計(jì)算。
(1)
(2)
(3)
抑振測(cè)控系統(tǒng)中測(cè)振傳感器需要測(cè)量油管軸向的加速度,加速度大小為5~50 m/s2,頻率為2~100 Hz,為了實(shí)現(xiàn)x、y和z三軸加速度數(shù)據(jù)的同時(shí)采集,選用LIS2DH三軸加速度計(jì)模塊。該模塊具有數(shù)字SPI串行接口標(biāo)準(zhǔn)輸出,能夠以1 Hz~5.3 kHz的輸出數(shù)據(jù)速率測(cè)量加速度,保證在-40~+85 ℃的擴(kuò)展溫度范圍內(nèi)運(yùn)行,可以有效地采集三軸加速度數(shù)據(jù)并存儲(chǔ)在寄存器中。LIS2DH模塊內(nèi)部結(jié)構(gòu)如圖3所示。
LIS2DH模塊采用SPI總線(xiàn)協(xié)議與控制器(FPGA)進(jìn)行通信,因此通過(guò)SPI協(xié)議實(shí)現(xiàn)對(duì)該模塊相關(guān)寄存器的配置和采集數(shù)據(jù)的讀取。LIS2DH模塊的SPI串行接口是一個(gè)總線(xiàn)從機(jī),其工作時(shí)序如圖4所示。
SPI是允許寫(xiě)入和讀取設(shè)備的寄存器。串行接口通過(guò)CS、SPC、SDI和SDO這4條線(xiàn)與外部交互。CS是串行端口使能,由SPI主機(jī)控制。SPC是串行端口時(shí)鐘,它是由SPI主機(jī)控制。當(dāng)CS處于高位(無(wú)數(shù)據(jù)傳輸)時(shí),將停止在高位。SDI和SDO分別是串行端口數(shù)據(jù)輸入和輸出,SDI和SDO都在SPC的下降沿驅(qū)動(dòng),并在SPC的上升沿捕獲。
本系統(tǒng)設(shè)計(jì)采用自頂向下的設(shè)計(jì)思路,圖5所示為FPGA模塊劃分及硬件電路圖。系統(tǒng)主要由主控芯片F(xiàn)PGA運(yùn)行模糊PID算法,由LIS2DH模塊采集并發(fā)送振動(dòng)加速度信號(hào)。FPGA內(nèi)部主要包含模糊PID算法模塊、SPI串行接口模塊、LIS2DH數(shù)據(jù)采集模塊和FIFO緩存等模塊。LIS2DH數(shù)據(jù)采集模塊通過(guò)SPI驅(qū)動(dòng)模塊與LIS2DH器件進(jìn)行通信,并將采集到的加速度信號(hào)送入PID控制模塊進(jìn)行處理,SPI控制模塊負(fù)責(zé)控制讀取LIS2DH傳感器輸出的加速度數(shù)據(jù),并將加速度數(shù)據(jù)傳入FPGA中的FIFO緩沖區(qū)等待模糊PID控制模塊處理,最后模糊PID控制模塊完成信號(hào)調(diào)節(jié)后將PID調(diào)節(jié)信號(hào)輸出到驅(qū)動(dòng)電路,完成磁流變抑振器抑振功能[9]。
FPGA內(nèi)部頂層模塊例化了SPI驅(qū)動(dòng)模塊、LIS2DH數(shù)據(jù)采集模塊、FIFO數(shù)據(jù)緩存模塊、PID運(yùn)算模塊和模糊控制模塊,完成了各模塊之間的數(shù)據(jù)交互。頂層模塊部分代碼如下:
module lis2dh_top(clk,rst_n,spi_scl,spi_sda);
//例化lis2dh數(shù)據(jù)采集模塊
lis2dh lis2dh_u(
.clk(clk),//時(shí)鐘信號(hào)
.rst_n(rst_n),//復(fù)位信號(hào)
.spi_rh_wl((spi_rh_wl),//SPI讀寫(xiě)控制信號(hào)
.spi_exec((spi_exec),//SPI觸發(fā)執(zhí)行信號(hào)
.spi_addr((spi_addr),//SPI器件內(nèi)地址
.spi_data_w((spi_data_w),//SPI要寫(xiě)的數(shù)據(jù)
.spi_data_r((spi_data_r),//SPI讀出的數(shù)據(jù)
.spi_done((spi_done),//SPI一次操作完成);
end
模糊PID算法模塊通過(guò)有限狀態(tài)機(jī)來(lái)實(shí)現(xiàn),start_flag是模塊工作的使能信號(hào),idle狀態(tài)為初始狀態(tài),檢測(cè)到start_flag為高電平時(shí)進(jìn)入fuzzy狀態(tài),fuzzy狀態(tài)為模糊控制計(jì)算狀態(tài),將模糊化后的值送入lookup查找地址模塊,檢測(cè)到fuzzy_done為高電平時(shí)進(jìn)入lookup狀態(tài),lookup狀態(tài)為查找地址模塊,得到kp、ki、kd的存儲(chǔ)地址,該狀態(tài)檢測(cè)到look_done為高電平時(shí)進(jìn)入def狀態(tài),def狀態(tài)為解模糊狀態(tài),對(duì)PID參數(shù)進(jìn)行解模糊處理,并將3個(gè)參數(shù)輸入到PID控制器中進(jìn)行運(yùn)算。模糊化模塊的狀態(tài)遷移圖如圖6所示。
PID運(yùn)算控制模塊的計(jì)算過(guò)程如下:對(duì)各個(gè)變量進(jìn)行初始賦值,并將初值輸出到誤差模塊計(jì)算PID控制器的誤差e,當(dāng)接收到控制模塊的信號(hào)init_flag時(shí)進(jìn)行誤差計(jì)算,輸出ek0、ek1、ek2,計(jì)算完成后將輸出完成信號(hào)done_flag置為高電平并送入控制模塊,在接收到控制模塊的信號(hào)out_flag后,對(duì)各個(gè)參數(shù)進(jìn)行pid增量計(jì)算,在計(jì)算過(guò)pid增量后與上一時(shí)刻的輸出值進(jìn)行相加,得到實(shí)際的輸出yt,輸出引腳pid_y將此時(shí)刻的數(shù)值送入寄存器中,其在數(shù)值上與輸出yt相同,計(jì)算完成功能。實(shí)現(xiàn)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;//上一時(shí)刻u(k-1)的值
reg signed[15:0] pid_y_reg=15'd0;
assign ek0={(target - y),16'd0};//計(jì)算e(k)
assign d_uk=(ek0-ek1)/kp+ek0/ki+((ek0-ek1)- (ek1-ek2))/kd;//計(jì)算pid增量
assign pid_y=pid_y_reg[15:0];
LIS2DH數(shù)據(jù)采集模塊通過(guò)調(diào)用SPI驅(qū)動(dòng)模塊來(lái)實(shí)現(xiàn)對(duì)LIS2DH采集數(shù)據(jù)的讀取。將讀到的加速度數(shù)值a_data傳遞給FIFO模塊緩存,再將FIFO緩存的值傳遞給模糊PID控制模塊,用于控制加速度信號(hào)的大小。spi_rh_wl為SPI讀寫(xiě)控制信號(hào),spi_exec為SPI觸發(fā)執(zhí)行信號(hào),spi_addr為SPI器件內(nèi)地址,spi_data_w為SPI要寫(xiě)的數(shù)據(jù),spi_data_r為SPI讀出的數(shù)據(jù),spi_done為SPI一次操作完成信號(hào),flow_cnt為狀態(tài)流控制寄存器,wait_cnt為計(jì)數(shù)等待寄存器,a_data_t為加速度的臨時(shí)數(shù)據(jù),a_done為加速度值采集完成信號(hào),LIS2DH數(shù)據(jù)采集模塊的代碼如下:
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;//配置系統(tǒng)寄存器
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包含一個(gè)10bit32級(jí)FIFO。在FIFO工作模式下,x、y和z軸測(cè)量的加速度檢測(cè)數(shù)據(jù)存儲(chǔ)在FIFO中。本模塊調(diào)用QuartusII軟件中的FIFO ip core。fifo_my為調(diào)用的ip core。wrclk為100 MHz的寫(xiě)時(shí)鐘信號(hào),wren為寫(xiě)使能信號(hào),wrdata為寫(xiě)數(shù)據(jù)信號(hào),wrempty為寫(xiě)空標(biāo)志,wrfull為寫(xiě)滿(mǎn)標(biāo)志,wrusedw為寫(xiě)使用量信號(hào),rdclk為50 MHz的讀時(shí)鐘信號(hào),rden為讀使能信號(hào),rdata表示讀數(shù)據(jù)信號(hào),rdempty表示讀空標(biāo)志信號(hào),rdfull表示讀滿(mǎn)標(biāo)志信號(hào),rdusedw表示讀使用量信號(hào)。FIFO數(shù)據(jù)緩存模塊的部分代碼如下:
fifo_my fifo_my_inst(
.data (wrdata),
.rdclk (rdclk),
.rdreq (rden),
.wrclk (wrclk),
.wrreq (wren),
.q (rdata),
.rdempty(rdempty),
.rdfull (rdfull);
由于LIS2DH采用SPI協(xié)議與FPGA進(jìn)行通信,F(xiàn)PGA作為主機(jī),LIS2DH作為從機(jī),所以需要用SPI驅(qū)動(dòng)模塊實(shí)現(xiàn)FPGA與LIS2DH信號(hào)的交互。根據(jù)SPI的工作時(shí)序圖,將SPI的時(shí)鐘的頻率定為5 MHz。本模塊負(fù)責(zé)將8 bit的并行數(shù)據(jù)按照SPI協(xié)議接收,將接收的數(shù)據(jù)并行傳輸給FPGA。spi_en為接收數(shù)據(jù)使能信號(hào)(脈沖信號(hào)),spi_data為所接收的數(shù)據(jù),spi_done為接收完成信號(hào)。在接收邏輯中,全部的信號(hào)采用上升沿驅(qū)動(dòng)。利用外部給予的spi_en作為啟動(dòng)信號(hào),啟動(dòng)rec_en,經(jīng)過(guò)移位接收數(shù)據(jù)。在spi_sclk輸出時(shí),采用組合邏輯設(shè)計(jì)。SPI驅(qū)動(dòng)模塊的部分代碼如下:
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
本系統(tǒng)采用了FPGA Cyclone 10LP作為控制核心,系統(tǒng)硬件部分采用Verilog HDL語(yǔ)言編寫(xiě),經(jīng)過(guò)Quartus II9.1開(kāi)發(fā)平臺(tái)編譯后在Modelsim Altera6.5下進(jìn)行仿真,PID模塊的仿真時(shí)序圖如圖7所示。從仿真波形來(lái)看,波形符合預(yù)期,所以該智能控制系統(tǒng)可以得到滿(mǎn)意的抑振效果。圖8所示為磁流變抑振器實(shí)物圖。
本文針對(duì)常規(guī)單片機(jī)控制井下磁流變抑振器抑振過(guò)程中存在的數(shù)據(jù)信號(hào)傳輸困難、難以實(shí)現(xiàn)實(shí)時(shí)抑振的問(wèn)題,設(shè)計(jì)了以FPGA為主控芯片的磁流變抑振器智能控制系統(tǒng),該智能控制系統(tǒng)采用模糊自適應(yīng)原理與PID控制器相結(jié)合的方式,控制LIS2DH模塊的數(shù)據(jù)采集與傳輸。試驗(yàn)結(jié)果表明,基于FPGA的磁流變抑振器智能控制系統(tǒng),滿(mǎn)足井下管柱抑振控制系統(tǒng)的各項(xiàng)性能指標(biāo),具有易于智能算法升級(jí)、集成度高、自動(dòng)控制等優(yōu)點(diǎn),有效解決了該技術(shù)在井下的應(yīng)用和推廣問(wèn)題。