雷琳 李克儉 蔡啟仲 潘紹明
摘 要:針對醫(yī)用的微量注射需定時、定量,流量速度范圍可調(diào)節(jié)等控制問題,提出一種基于FPGA的微量注射泵設(shè)計方法:以FPGA為控制核心,以壓力傳感器和光電編碼器作為檢測裝置的微量注射泵,采用步進電機驅(qū)動器2MD320控制步進電機帶動絲桿旋轉(zhuǎn),絲桿旋轉(zhuǎn)一圈推動滑塊移動1 mm.分析研究了驅(qū)動脈沖個數(shù)、注射容量、檢測計數(shù)值之間的關(guān)系,給出了脈沖補償?shù)姆椒?,實現(xiàn)對微量藥液的智能精密注射.經(jīng)驗證,該微量泵能按需設(shè)定注射時間,控制設(shè)定注射流量速度范圍為0.001 mL/min~0.999 mL/min,可匹配不同容量的注射器.
關(guān)鍵詞:微量注射泵;FPGA;步進電機;光電編碼器
中圖分類號:TP332;R197.39 文獻標志碼:A
0 引言
微量注射泵是應(yīng)用于工業(yè)生產(chǎn)、實驗室以及醫(yī)院的一種微流量供給裝置,主要用于精密流體傳輸,可避免人為操作的誤差和不確定性[1].微量注射泵操作便捷、定時、定量,可準確、安全、有效地配合醫(yī)生搶救,亦可用于獸藥注射;因此,注射泵的市場前景廣闊[2].
國內(nèi)外微量注射泵,面臨的難點是精度不夠和成本比較高.市面上微量泵的基本功能有:快速推注功能,總量查詢功能,報警提示功能,流速選擇功能[3-4].技術(shù)指標為:以容量為10 mL注射器為例,最大流速為200 mL/h,注射速率為0.1 mL/h~199.9 mL/h,流速精確度1%以內(nèi).本文應(yīng)用FPGA研究與開發(fā)的微量注射泵的技術(shù)指標:以10 mL注射器為例,最大流速為642.85 mL/h,可設(shè)定的注射速率為0.001 mL/min~0.999 mL/min(0.06 mL/h~59.94 mL/h),誤差小于1%.本文設(shè)計的微量注射泵滿足市面上微量泵的基本功能,并且增加了定時注射功能,通過定時可方便了解注射時間,定時定速可有效控制注射總量,是一種具有操作簡單,流速穩(wěn)定,定時定量精度高,速度可調(diào)節(jié)等特點的新型醫(yī)療儀器.
1 系統(tǒng)總體設(shè)計
設(shè)計的微量注射泵由輸入鍵盤,傳感器,F(xiàn)PGA控制模塊,步進電機驅(qū)動及步進電機,液晶顯示,聲光報警狀態(tài)顯示,存儲模塊和USB通信接口等組成,其整體連接如圖1所示.
圖1中,4×4鍵盤、液晶顯示和聲光報警狀態(tài)顯示模塊構(gòu)成人機界面.4×4鍵盤主要用于設(shè)定注射時長與注射流速v,選定注射器型號與時間單位,運行控制與暫停注射.暫停注射時可以更改設(shè)定速度值.可自定義10組常用的注射設(shè)定值通過鍵盤選擇快捷操作.
設(shè)定參數(shù)過程中通過液晶顯示和led燈觀測當前的設(shè)定值與系統(tǒng)的運行狀態(tài),電機運行過程中,液晶顯示已注射總量和剩余時間.注射完成后led燈亮和蜂鳴器發(fā)出蜂鳴聲予以提醒.
FPGA內(nèi)部設(shè)計一個存儲模塊,用于存儲設(shè)定的速度值和時間值.USB通信接口可以與計算機通信[5-7],用于傳輸設(shè)定的值與注射總量.
傳感器模塊包括光電編碼器[8-13]和壓力傳感器.光電編碼器與步進電機構(gòu)成閉環(huán)系統(tǒng),采用OMRON公司的E6A2-CWZ6C編碼器,光電編碼器精度為1 000脈沖/轉(zhuǎn).
壓力傳感器采用電阻應(yīng)變式壓力傳感器,應(yīng)用LM358放大調(diào)理,再經(jīng)過ADS1242進行AD采樣傳輸給FPGA主控芯片.根據(jù)不同的注射器容量設(shè)定不同的閾值,當壓力值超過閾值時觸發(fā)堵塞保護的功能,蜂鳴器報警,電機停轉(zhuǎn).
采用2MD320步進電機驅(qū)動器控制步進電機的運轉(zhuǎn),絲桿旋轉(zhuǎn)推動滑塊和壓力傳感器模塊移動.
2 FPGA控制模塊設(shè)計
2.1 注射精度控制
注射過程中要求電機勻速運轉(zhuǎn),流速穩(wěn)定,對不同容量的注射器其注射的流量速度應(yīng)與設(shè)定速度一致.
設(shè)計選用的絲桿導(dǎo)程為1 mm,步進電機轉(zhuǎn)動一圈推動滑塊水平移動1 mm. 2MD320步進電機驅(qū)動器能夠?qū)崿F(xiàn)1/128細分,步進電機每轉(zhuǎn)一圈需要25 600脈沖,一個脈沖轉(zhuǎn)動1.8°/128.
不同容量注射器長度與容量對應(yīng)關(guān)系如表1所示.根據(jù)設(shè)定的注射速度值(即流量速度)與注射器容量確定控制步進電機的期望脈沖數(shù).由于不同容量的注射器橫截面積不同,所以對于設(shè)定的流量速度v(v=橫截面積×單位時間的水平位移)對應(yīng)的單位時間脈沖數(shù)pul也不同.v的取值范圍為0~999,單位為μL/min.設(shè)定步進電機驅(qū)動模塊的基準時鐘為25.6 kHz,則對應(yīng)基準時鐘,驅(qū)動模塊每min可輸出25 600×60個脈沖,步進電機每min轉(zhuǎn)60圈,對應(yīng)的滑塊移動的水平距離為60 mm, 即滑塊移動的速度為60 mm/min, 對容量為1mL注射器,其流量速度v=(1 mL/58 mm)×60 mm/min, 即: 對應(yīng)基準時鐘的流量速度最大且vmax=60/58(mL/min), 同理, 對容量為2 mL,5 mL,10 mL注射器流量速度最大值vmax分別為60/16,60/8.4,60/5.6(mL/min),流量速度最大值即快速推注時的系統(tǒng)最大速度.在流速選擇功能下要求注射泵按照設(shè)定速度值v注射,因此需要對輸出的脈沖進行處理,每s需要的脈沖數(shù)應(yīng)該為基準時鐘的v/vmax倍,即對應(yīng)速度值v,電機驅(qū)動每秒輸出的脈沖數(shù)pul應(yīng)為:
為了保證注射流速穩(wěn)定,將 pul/s個脈沖分為25.6個周期輸出,參照基準時鐘每1 000個脈沖輸出v個脈沖.據(jù)此,設(shè)定速度值計數(shù)器cnt1,計數(shù)范圍為0~1 000,當cnt1
由于步進電動機自身及所帶負載存在慣性,電機有可能在起動時出現(xiàn)丟步,在停止時發(fā)生越步.為了監(jiān)測電機運轉(zhuǎn)情況并進行注射總量統(tǒng)計,利用光電編碼器記錄電機運轉(zhuǎn)圈數(shù),計算實際的水平位移,用來統(tǒng)計注射總量.光電編碼器精度為1 000脈沖/轉(zhuǎn),然而步進電機每轉(zhuǎn)一圈需要25 600個脈沖,有10次2 560個脈沖,根據(jù)設(shè)定的速度值v,pul每發(fā)出2 560個脈沖讀取一次編碼器的計數(shù)值y,即電機運轉(zhuǎn)1/10圈讀取一次編碼器的計數(shù)值y,理想值y=100,若讀入的值y≠100,則電機可能出現(xiàn)失步,待下一次讀入y值時判斷是否補脈沖或發(fā)出異常報警.判斷流程圖如圖2所示.
若連續(xù)2個周期采到的計數(shù)值均小于設(shè)定值,且誤差增大,則電機運轉(zhuǎn)異常,有堵轉(zhuǎn)的可能,應(yīng)發(fā)出報警;若采集的計數(shù)值不等于設(shè)定值,且誤差不大于1%,即光電編碼器計數(shù)器計數(shù)值范圍為99~101,對應(yīng)的步進電機驅(qū)動輸出脈沖誤差為±25.6個脈沖.判斷是否進行補脈沖,若下一個采樣周期累計恢復(fù)正常,則不需要補脈沖,若兩周期均值仍不等于設(shè)定值,進行補脈沖操作, 從第3個周期開始補脈沖, 因此采樣得到誤差個數(shù)的累計值應(yīng)小于3.需要補脈沖時每個采樣周期補±12.8個脈沖,約為±pul/200, 即:改變脈沖控制量v, 當v>200時,令u(k)=v±v/200,當v<200時,對每個采樣周期只在采樣周期的前1/4時間補u(k)=v±v/50,采樣周期后3/4時間內(nèi)u(k)=v.補脈沖時電機的脈沖信號pul為:
由于光電編碼器可識別的角度為0.36°,因此系統(tǒng)容許的最大累計誤差為±0.36°,補脈沖前步進電機驅(qū)動脈沖誤差為±(1~25.6)個脈沖.補脈沖之后,步進電機驅(qū)動脈沖誤差為±(1~12.8)個脈沖,對應(yīng)絲桿上的水平位移為3.9×10-5 mm~5×10-4 mm.對應(yīng)不同容量的注射器,最大誤差如表2所示.
步進電機驅(qū)動信號有pul,dir,en.根據(jù)控制模塊輸出的stop信號控制,en可控制電機的起停,當狀態(tài)機處于run狀態(tài)時,en置0,低電平使能,接收相應(yīng)脈沖即可運轉(zhuǎn).狀態(tài)為pause或idle時en置1,電機停止運行.利用按鍵選擇電機正轉(zhuǎn)或反轉(zhuǎn)實現(xiàn)注射泵的注射或抽取功能.
2.2 狀態(tài)機設(shè)計
FPGA控制模塊[14-17]是微量注射泵的控制核心,為強化系統(tǒng)穩(wěn)定性、構(gòu)成性能良好的同步時序邏輯模塊,設(shè)計狀態(tài)機控制整個系統(tǒng)的運行,根據(jù)鍵盤輸入的譯碼值設(shè)定狀態(tài)機的狀態(tài)轉(zhuǎn)移,由狀態(tài)機的狀態(tài)決定輸出的信號指示燈及電機運行的起停.狀態(tài)轉(zhuǎn)移圖如圖3所示.
狀態(tài)轉(zhuǎn)移敏感信號含義如下:
1)set_t_pro:時間設(shè)置過程標志. set_t_pro為1時進入設(shè)置時間值與時間單位的過程,為0時跳出時間設(shè)置過程;
2)set_v_pro:設(shè)置速度過程標志,set_v_pro為1時進入設(shè)置速度值與選擇注射器容量的過程,為0時跳出速度設(shè)置過程;
3)set_time:設(shè)置時間完成標志位.當時間設(shè)置完成時set_time置1,當運行結(jié)束時set_time清0;
4)set_v:設(shè)置速度完成標志位.意義與set_time相同;
5)complete:運行完成標志位.當?shù)褂嫊r結(jié)束時complete標志位置1,維持1 s后清0;
6)pressure:壓力報警標志.壓力傳感器檢測到壓力過大時pressure置1,按下報警清除鍵pressure清0;
7)pause_ flag:暫停標志.按下暫停鍵,pause_ flag取反.
開機復(fù)位時默認狀態(tài)為idle,當按下設(shè)定時間或設(shè)定速度鍵時,狀態(tài)轉(zhuǎn)移為pause,進入設(shè)定狀態(tài),時間與速度設(shè)定完成后,狀態(tài)轉(zhuǎn)移為run,電機開始運行,運行過程中按下暫?;蛴袎毫缶瘯r,狀態(tài)轉(zhuǎn)移為pause,待處理完壓力報警問題或更改運行速度后,再按下暫停鍵,注射泵繼續(xù)按照剩余注射時間運行,運行完成時狀態(tài)轉(zhuǎn)移為默認狀態(tài)idle.
狀態(tài)機的pause狀態(tài)為設(shè)定狀態(tài),設(shè)定過程流程圖如圖4所示.
控制模塊根據(jù)鍵盤譯碼的鍵值做出相應(yīng)的控制,判斷鍵值為設(shè)置時間或速度,若是設(shè)置時間,set_t_ pro置1,進入時間設(shè)置過程,根據(jù)鍵值進行設(shè)置:按鍵為設(shè)定時間功能鍵時設(shè)定時間單位,時間單位可選s,min,h,按鍵為數(shù)字鍵時設(shè)定時間數(shù)值,時間值范圍為0~999,時間設(shè)定完成時按下確定鍵set_time置1;設(shè)置速度過程與設(shè)置時間相同.當set_time與set_v都為1時,進入run狀態(tài).
在pause狀態(tài)中可進行時間單位與注射器容量的選擇.用戶可選時間單位為s,min,h,由信號燈t_st觀測. 市場上常見的注射器容量為1 mL,2 mL,5 mL,10 mL,據(jù)此,設(shè)定了4個注射器容量匹配檔位,所選注射器容量由led燈v_st觀測,t_st和v_st的含義如表3所示.
只需選定注射器容量設(shè)定注射速度與時間,微量注射泵就能按照設(shè)定的流量速度值與運行時間勻速輸出藥劑.
3 功能實現(xiàn)與驗證
采用Verilog HDL語言完成硬件描述,編寫testbench.v模擬外部輸入信號,使用ModelSim軟件進行綜合后功能仿真,觀測狀態(tài)機的變化及各個控制信號的輸出.控制模塊狀態(tài)機狀態(tài)轉(zhuǎn)移過程仿真圖如圖5所示.各端口含義如下:
set_t_pro,set_v_pro,set_time,set_v,complete,pressure,pause_ flag見2.2節(jié).
clk:系統(tǒng)時鐘,采用100 Hz,周期為10 ms;
n_rst——系統(tǒng)復(fù)位;
scan_key——鍵盤輸入的譯碼值;
c_state——狀態(tài)機狀態(tài),001:idle;010:pause;100:run;
clk_1hz——頻率為1 Hz的時鐘;
rest——剩余運行時間,用于倒計時;
stop——電機起停信號,stop=1時電機停止;
t——設(shè)置的時間值;
v——設(shè)定的注射速度值,即流量速度值.
開機狀態(tài)為idle,無按鍵按下時鍵盤譯碼值為15,采集到譯碼值為10表示當前按鍵為設(shè)置速度,進入速度設(shè)置狀態(tài),set_v_pro置1,在下個clk上升沿狀態(tài)轉(zhuǎn)移為pause.
在速度設(shè)置過程中,v_st為2b01,所選注射器容量為2 mL,鍵盤譯碼值1,3,13,將數(shù)字鍵1,3暫存到速度數(shù)值寄存器,鍵盤譯碼值13表示按鍵為確定,set_v置1,set_ v_pro清0,速度設(shè)置完成,跳出速度設(shè)置狀態(tài).鍵盤譯碼值為11表示按鍵為設(shè)置時間,進入時間設(shè)置狀態(tài),set_ t _ pro置1,在時間設(shè)置過程中,時間單位t_st為2b01,設(shè)定的時間單位為s,鍵盤譯碼值為5,13,將數(shù)字鍵5存入時間數(shù)值寄存器,鍵值13表示確定,set_t_pro清0,set_time置1,時間設(shè)置完成,此時set_v與set_time均為1,狀態(tài)轉(zhuǎn)移為run.
當狀態(tài)機進入run狀態(tài),速度數(shù)值寄存器將暫存的3個速度數(shù)字0,1,3(未滿3位時默認高位為0)計算為三位十進制數(shù)存入速度寄存器v用來控制電機運轉(zhuǎn)速度,圖中v=13;時間數(shù)值寄存器將3個時間數(shù)字0,0,5計算為三位十進制數(shù)存入t,進入倒計時和電機運行階段.t賦值完成后在clk_1hz上升沿將t賦值給rest,rest開始按設(shè)定的時間單位自減,當前設(shè)定時間單位為s,當rest減到1時,下一個clk_1hz的上升沿complete置1,信號維持1 s,狀態(tài)機檢測到運行完成,狀態(tài)轉(zhuǎn)移為idle,狀態(tài)轉(zhuǎn)移過程正常,但電機運行的時間比設(shè)定的時間長.
時間誤差分析:c_state控制stop,complete控制c_state,rest控制complete,所以狀態(tài)轉(zhuǎn)移到run時,stop清0先于rest賦值,時間誤差為0~99個clk周期.狀態(tài)由run轉(zhuǎn)移為idle時,stop置1比complete晚1個~2個clk周期,即電機在倒計時開始前啟動,倒計時結(jié)束后停止.運行時間比設(shè)定時間多2個~101個clk周期,多運行20 ms~1 010 ms.為了嚴格控制電機運行的時間,減小不同時鐘時序延時引起的時間誤差,提出改進方案:將電機運行的起停信號stop與rest用相同的時鐘clk_1hz控制.改進之后的控制模塊如圖6所示.
由圖6可知,待rest信號賦值后的一個clk_1hz周期,stop信號清0,電機開始運行;待complete置1后延時一個clk_1hz周期stop信號再置1.改進后stop為0的時長與倒計時rest時長一致,有效降低了時間誤差.
4 結(jié)論
以FPGA為核心開發(fā)的微量注射泵,整機主要技術(shù)參數(shù)為:線性速度范圍0~60 mm/min;1 mL,2 mL,5 mL,10 mL注射器快速推注速度1.03 mL/min,3.75 mL/min,7.14 mL/min,10.714 mL/min;可設(shè)定的流量速度為0.001 mL/min~0.999 mL/min,誤差小于1%.本設(shè)計充分利用了FPGA并行處理的特點,實現(xiàn)了旋轉(zhuǎn)檢測、步進電機脈沖產(chǎn)生、與時間倒計時并行處理,有效提高了采集數(shù)據(jù)的準確度.通過脈沖補償,實現(xiàn)了注射泵的精密注射.
參考文獻
[1] 劉輝,李佾正,胡強.多通道微量注射泵的設(shè)計與實現(xiàn)[J].現(xiàn)代電子技術(shù),2011,34(7):167-169.
[2] 龍燕君.便攜式自動擠壓輸液器設(shè)計研究[D].成都:西南交通大學(xué),2014.
[3] 沈亞斌,張晨東,趙濤.多通道微量注射泵控制系統(tǒng)的設(shè)計[J].計算機測量與控制,2014,22(10):3220-3222.
[4] 陳曦,王清,蔡姍姍.寬范圍注射流量的微量注射泵的設(shè)計與開發(fā)[J].自動化技術(shù)與應(yīng)用,2014, 33(6):77-81.
[5] 裴向東,陳簫,譚秋林,等.基于USB-FIFO的FPGA與上位機通信的設(shè)計與實現(xiàn)[J].計算機測量與控制,2012,20(4):1073-1075.
[6] 呂駿,王仁波,湯彬,等. 基于USB總線的多點數(shù)據(jù)采集系統(tǒng)的設(shè)計[J].電子測量技術(shù),2015, 38 (11):88-91.
[7] 李霞,蔡啟仲,陳文輝.基于CAN的嵌入式PLC和監(jiān)控系統(tǒng)通信設(shè)計[J].儀表技術(shù)與傳感器,2011(10):41-43.
[8] 陳燕,劉守山.基于CPLD的光電編碼器四倍頻電路的設(shè)計[J].國外電子測量技術(shù),2015,34(1):45-48.
[9] 何可人.醫(yī)用微量注射泵設(shè)計和仿真研究[D].上海:華東理工大學(xué),2014.
[10] 張劍霜.輸液泵/注射泵檢測系統(tǒng)的設(shè)計與實現(xiàn)[D].成都:電子科技大學(xué),2014.
[11] 周良杰,趙治國.方向盤轉(zhuǎn)角傳感器誤差成因與補償?shù)难芯縖J].儀表技術(shù)與傳感器,2013(11):7-10.
[12] 李靜,蔡啟仲,張煒,等.基于FPGA的PLC輸入存儲與讀取控制器的設(shè)計[J].儀表技術(shù)與傳感器,2014(6):33-36.
[13] 馮英翹,萬秋華.小型光電編碼器細分誤差校正方法[J].儀器儀表學(xué)報,2013,34(6):1374-1379.
[14] 張松,李筠.FPGA的模塊化設(shè)計方法[J].電子測量與儀器學(xué)報,2014,28(5):560-565.
[15] 李克儉, 付杰, 蔡啟仲, 等. 基于FPGA的串行定時器設(shè)計[J].廣西工學(xué)院學(xué)報,2012,23(3):61-65.
[16] 周曙光,李克儉,蔡啟仲, 等.基于FPGA的PLC并行數(shù)據(jù)輸出控制器設(shè)計[J].廣西工學(xué)院學(xué)報,2013,24(1):14-18.
[17] 任杰,李克儉,潘紹明, 等.雙口RAM讀寫正確性自動測試的有限狀態(tài)機控制器設(shè)計方法[J].廣西科技大學(xué)學(xué)報,2015,26(4):36-41.
Abstract:Aiming at the problems of micro-injection pump on timing, quantity and flow speed range and so on, a micro-injection pump design method based on FPGA is put forward. The design uses FPGA as the control core, pressure sensor and photoelectric encoder as detection devices, and stepping motor to drive screw rotation. When screw rotates a single revolution, slider moves 1 mm. Pulse compensation method is provided by analyzing and research on the relationship among the number of pulses, the injection capacity and the value of the detector, which realizes intelligent precision of trace liquid injection. It is verified that the trace pump can set the injection time and control flow speed with the range of 0.001 mL/min~0.999 mL/min according to the need, and the trace pump can match different capacity of the syringe.
Key words: micro-injection pump; FPGA; stepping motor; photoelectric encoder
(學(xué)科編輯:黎 婭)