FPGA為核心的多功能輸液系統(tǒng)的設(shè)計
今朝醫(yī)護(hù)人員一般不能全程陪護(hù),會給病人和醫(yī)務(wù)人員帶來良多平安隱患和未便。本文設(shè)計了一種集輸液節(jié)制、顯示、報警、語音通信等多種 功能的輸液節(jié)制系統(tǒng)。
本文引用地址:http://www.ex-cimer.com/article/199729.htm1 系統(tǒng)總體設(shè)計
輸液監(jiān)控系統(tǒng)原理如圖1所示,包括FPGA控制器、點滴速度檢測、余液體積檢測、執(zhí)行機(jī)構(gòu)、鍵盤控制、LCD顯示、語音通信(發(fā)送與接收)以及RS232總線轉(zhuǎn)換等部分。
輸液控制與語音通信是本文的主要研究內(nèi)容,也是本系統(tǒng)穩(wěn)定性和可靠性的根本保證。根據(jù)系統(tǒng)要求,設(shè)計中以FPGA為控制器,以光纖傳感器和容柵傳感器為檢測機(jī)構(gòu),以步進(jìn)電機(jī)為執(zhí)行機(jī)構(gòu)。為了安全和方便,利用RS232總線增設(shè)了語音通信和輸液完成自動報警等功能。
2 硬件部分
2.1 控制器硬件設(shè)計
控制器主芯片采用Altera公司的型號為APEX系列的FPGA芯片,芯片型號為 Cyclone II EP2C35F672C6。FPGA芯片采用90 nm的低功耗設(shè)計、672-Pin FineLine BGA封裝,內(nèi)置35個內(nèi)嵌18×18乘法器、475個用戶管腳、4PLLs、205個差分通道(比c8高出一倍的主頻,可以達(dá)到400 MHz)典型值100萬門,最大值約160萬門。主處理器采用Altera公司的32位Nios軟核處理器,與傳統(tǒng)的嵌入式處理器相比,NiosⅡ處理器更加靈活。該芯片具有定制特性,可以根據(jù)自身的系統(tǒng)要求、性能要求和成本要求進(jìn)行定制。系統(tǒng)總線采用AVALON總線標(biāo)準(zhǔn)。另外系統(tǒng)具有RS232串行通信口、鍵盤PIO、LCD顯示等外圍擴(kuò)展功能,便于系統(tǒng)的進(jìn)一步開發(fā),縮短系統(tǒng)的開發(fā)周期,降低系統(tǒng)的開發(fā)成本[6]。
Altera 公司簡介
Altera 的可編程解決方案幫助系統(tǒng)和半導(dǎo)體公司快速高效的實現(xiàn)創(chuàng)新,突出產(chǎn)品優(yōu)勢,贏得市場競爭。自二十年前發(fā)明世界上第一個可編程邏輯器件開始,Altera 公司秉承了創(chuàng)新的傳統(tǒng),是世界上可編程芯片系統(tǒng) (SOPC) 解決方案倡導(dǎo)者。Altera 公司總部位于美國加州的圣何塞,并在全球的14個國家中擁有近2000名員工,其2005年度的年收入高達(dá)11.23億美元。Altera 將其早在1983年發(fā)明的可編程邏輯技術(shù)與軟件工具、IP 和設(shè)計服務(wù)相結(jié)合,向全世界近14,000家客戶提供超值的可編程解決方案。
Altera 一直在可編程系統(tǒng)級芯片,領(lǐng)域中處于前沿和領(lǐng)先的地位,結(jié)合帶有軟件工具的可編程邏輯技術(shù)、知識產(chǎn)權(quán) (IP) 和技術(shù)服務(wù),在世界范圍內(nèi)為14,000多個客戶提供高質(zhì)量的可編程解決方案。我們新產(chǎn)品系列將可編程邏輯的內(nèi)在優(yōu)勢 —— 靈活性、產(chǎn)品及時面市 —— 和更高級性能以及集成化結(jié)合在一起,專為滿足當(dāng)今大范圍的系統(tǒng)需求而開發(fā)設(shè)計。Altera 可編程解決方案包括:業(yè)內(nèi)最先進(jìn)的 FPGA、CPLD 和結(jié)構(gòu)化 ASIC 技術(shù) 全面內(nèi)嵌的軟件開發(fā)工具 最佳的 IP 內(nèi)核 可定制嵌入式處理器 現(xiàn)成的開發(fā)包 專家設(shè)計服務(wù)
2.2 鍵盤控制
為了操作方便,系統(tǒng)采用鍵盤操作。設(shè)備履行一種雙向同步串行協(xié)議,接口中最重要的4根線是數(shù)據(jù)線、地線 、電源線和時鐘線。在鍵盤內(nèi)部,有一個專門負(fù)責(zé)掃描按鍵的處理器,它能檢測出某個鍵被按下或者按下后被釋放,并根據(jù)按鍵的類型產(chǎn)生相應(yīng)的掃描碼。鍵盤發(fā)送的掃描碼有通碼(Make)和斷碼(Break)兩種類型。當(dāng)鍵盤上的一個鍵被按下時,鍵盤會根據(jù)按鍵類型產(chǎn)生一段通碼;當(dāng)鍵盤上的一個鍵按下后被釋放時,鍵盤會根據(jù)按鍵類型再產(chǎn)生一段斷碼。此處理器為每個按鍵分配了唯一的通碼和斷碼,這樣主機(jī)通過查找唯一的掃描碼就可以測定是哪個鍵被按下或釋放。具體方法是啟動QuartusⅡ,建立一個名為ps2_keyboard.qpf的工程,選擇器件,創(chuàng)建文本文件并編寫代碼,以接收來自鍵盤的掃描碼,要求對不同的按鍵做出響應(yīng),為器件進(jìn)行輸入輸出管腳分配,完成后對工程進(jìn)行編譯。
如圖2所示,鍵盤總是產(chǎn)生時鐘信號,從鍵盤發(fā)送到主機(jī)的數(shù)據(jù)在時鐘信號的下降沿被讀取。鍵盤的掃描碼發(fā)送給FPGA,這些掃描碼包含在鍵盤發(fā)送給主機(jī)的數(shù)據(jù)幀中。每個數(shù)據(jù)幀包括1位起始位(總是低電平)、8位數(shù)據(jù)位(即掃描碼,從低位開始發(fā)送)、1位奇偶校驗位(奇校驗)和1位結(jié)束位(總是高電平)。
2.3 傳感器
點滴速度檢測采用在茂菲氏滴管的中部外側(cè)安裝一個光纖傳感器。因為光電傳感器的紅外接收管很容易受到外界光線的干擾,并且它的直徑一般在2 mm以上,體積較大,安裝不方便。光纖傳感器測量端口面積小,可以做到直徑1 mm以內(nèi),藥液點滴時分辨率高。液滴經(jīng)過時利用液滴對光線的“遮擋”使光纖接收管的接收的光束發(fā)生變化,再經(jīng)過電路處理得到點滴的速度脈沖,再將這種速度脈沖采集信息發(fā)送給控制器。為了防止輸液速度過快而產(chǎn)生點滴連續(xù)流,設(shè)計了上下分別安裝兩個檢測光纖,從而避免了少計脈沖數(shù)而產(chǎn)生錯誤的處理結(jié)果。如圖3所示,電路X為光纖輸出電壓波形,Y為光纖輸出電壓波形。一般情況下,點滴離散時只有X計數(shù),點滴連續(xù)時XY同時計數(shù),這種方法既安全又穩(wěn)定可靠。點滴離散時,XY只有一個高電平,或門C1產(chǎn)生的信號作為D鎖存器Q1的控制端只允許X產(chǎn)生的正脈沖通過,而D鎖存器Q2因為C1作用時Y信號尚在低電平,信號被屏蔽,Q2輸出低電平,門電路在計數(shù)器中作加法運算。點滴連續(xù)時XY同時輸出高電平,D鎖存器Q2也在計數(shù)。OUT0是輸出,OUT1是進(jìn)位,Z是控制端輸入。
余液體積檢測采用直線式容柵傳感器,安裝位置如圖4所示。固定容柵安裝在輸液系統(tǒng)底座上,滑動容柵安裝在輸液系統(tǒng)步進(jìn)電機(jī)帶動的絲杠的螺絲母上,絲杠轉(zhuǎn)動使螺母產(chǎn)生水平移動,測量原理如同游標(biāo)卡尺,這種傳感器響應(yīng)速度快、量程可以達(dá)到1 m,誤差小于0.01 mm[7]。余液體積檢測通過滑動容柵移動的距離乘以容器室的截面積而得出。
2.4 執(zhí)行機(jī)構(gòu)
輸液速度控制采用的控制機(jī)構(gòu)由步進(jìn)電機(jī)、絲杠、螺絲母、壓縮支架、容器室組成。步進(jìn)電機(jī)在FPGA的控制下進(jìn)行正反轉(zhuǎn)動,絲杠轉(zhuǎn)動使螺母產(chǎn)生水平移動,壓縮支架安裝在螺絲上,壓縮架壓縮容器室,藥液包因容器室體積變小而收縮,藥液從輸液管輸出,通過調(diào)整步進(jìn)電機(jī)的步進(jìn)速度,達(dá)到控制輸液速度的目的。
2.5 語音通信
立體聲CODEC芯片WM8731是一個高性能、低功耗的24位音頻立體聲接口,被廣泛應(yīng)用于各種便攜式音樂播放器中。該芯片可以分別設(shè)置音頻ADC和DAC的采樣率,包含microphone-in、line-in和line-out接口,WM8731用I2C接口與FPGA連接。
語音發(fā)送接收要有一個合適的波段,本文選定為15.6 MHz。讓軟件生成一個鎖相環(huán)變頻模塊,AUDIO_DAC_ADC.v需要一個15.6 MHz的時鐘,調(diào)用FPGA上的鎖相環(huán)(PLL)資源,讓軟件生成這個模塊的。v文件,然后在de2_top.v中添加這個模塊。
添加AUDIO_DAC_ADC模塊過程為:
reg signed [15:0] audio_outR;
wire signed [15:0] audio_outL;
wire signed [15:0] audio_inL, audio_inR;
AUDIO_DAC_ADC u2 (//Audio Side
.oAUD_BCK(AUD_BCLK),
.oAUD_DATA(AUD_DACDAT),
.oAUD_LRCK(AUD_DACLRCK),
.oAUD_inL(audio_inL),/audio left data from ADC
.oAUD_inR(audio_inR),//audio right data from ADC
.iAUD_ADCDAT(AUD_ADCDAT),
.iAUD_extL(audio_outL),//audio left data to DAC
iAUD_extR(audio_outR),//audio right data to DAC
//Control Signals
.iCLK_15_6(AUD_CTRL_CLK),
.iRST_N(1′b1));
評論