AVR32的便攜式無線醫(yī)療點滴監(jiān)控系統(tǒng)
2.1.3 無線通信模塊nRF24L01[3]
無線通信部分采用單片射頻收發(fā)芯片,其工作頻段為世界通用的ISM頻段(2.4~2.5 GHz),是一款真正的GFSK單收發(fā)芯片。內置鏈路層,具有自動應答及自動重發(fā)功能,支持地址及CRC檢驗功能。它具有極低的電流消耗,掉電和待機模式下電流消耗更低;數(shù)據傳輸速率最高可達2 Mbps,內置標準的SPI接口可與MCU進行數(shù)據傳輸,速率最高可達8 Mbps;可工作在125個可選頻道,在接收模式下,可同時接收工作在同一頻道的6個數(shù)據通道的數(shù)據,相互通信的收發(fā)器的數(shù)據通道設置為同一個地址?! ?P style="MARGIN-TOP: 24px">通過對nRF24L01內部寄存器的讀/寫來控制其工作狀態(tài)的轉換及數(shù)據的收發(fā),當收發(fā)器數(shù)據接收/發(fā)送完成或者出現(xiàn)異常時,IRQ引腳產生中斷信號,低電平有效,對STATUS寄存器相應位寫“1”,清除中斷標志。無線通信模塊硬件連接如圖3所示。
2.2 終端監(jiān)控裝置硬件設計
終端監(jiān)控裝置采用ATmega128單片機,主要接收控制端發(fā)送的命令數(shù)據,并將采集的數(shù)據進行處理發(fā)送給控制端,完成病人呼叫、液面監(jiān)測、對點滴速度的檢測與控制,以及聲音報警等功能。
2.2.1 點滴速度控制模塊
點滴速度控制電路采用專用的步進電機控制芯片L297、雙全橋步進電機驅動芯片L298。L297內部的PWM斬波器電路在開關模式下可產生PWM波,控制電機繞組中的電流,從而控制電機的精確轉動;它產生的4相控制信號可用于控制兩相雙極性和四相單極性步進電機。L298內含HBridge高電壓、大電流雙全橋式驅動器,4路驅動電路可驅動46 V、2 A以下的兩相或四相步進電機,可實現(xiàn)步進電機的正反轉。通過精確控制電機的正反轉來控制點滴裝置的流速夾滾軸的滑動,以達到控制點滴滴落速度的目的。硬件連接圖如圖4所示。
圖3 無線模塊硬件圖
圖4 點滴速度控制電路圖
2.2.2 點滴速度和液位檢測模塊
利用紅外對管發(fā)射方法測量點滴速度。點滴檢測電路包括紅外發(fā)射、接收、脈沖整形3部分,硬件原理圖如圖5所示。ST1150是單光速直射式紅外光電傳感器,光縫寬度為1.5 mm,光軸中心為2.5 mm,紅外檢測面積較小。當無液滴通過時,接收管(ST1150內部的三極管)導通,Vin為低電平;當有液滴通過時,接收管截止,Vin處產生高電平脈沖,經過斯密特觸發(fā)器整形后在Vout處產生一串規(guī)則的方波脈沖,并送至ATmega128進行處理。
圖5 點滴速度檢測電路
液位檢測則采用反射式紅外傳感器,電路檢測原理電路和點滴速度檢測電路類似。ST198是采用高發(fā)射功率紅外光電二極管和高靈敏度光電晶體管組成的反射式光電傳感器,采用非接觸檢測方式,檢測距離為2~10 mm時可用。當液位低于設定值時,接收管接收到的是電平信號,經過反相器倒相后送至單片機,觸發(fā)中斷。當紅外對射管為ST1150時用于點滴速度檢測,為ST198時用于液位檢測。
3 系統(tǒng)軟件結構
(1) 數(shù)據幀結構
定義一個通信數(shù)據幀結構來管理控制端與設備間的通信,通過對數(shù)據幀的解析,主/從設備可以高效率地完成數(shù)據處理。按照通信傳輸?shù)南群箜樞颍瑪?shù)據幀的格式為:命令(1字節(jié))+設備ID(1字節(jié))+事件類型(1字節(jié))+數(shù)據域長度(1字節(jié))+數(shù)據域(n字節(jié))+校驗和(2字節(jié))。
(2) μC/OSII的移植
μC/OSII是一種開源、結構可裁剪的可剝奪實時內核的RTOS,其大部分代碼都是C語言,可移植性較強,已在多種系列的CPU上進行了移植。AVR Studio 5內部集成了Software Framework軟件包,包含Atmel MCU接口驅動函數(shù),在AVR Studio 5環(huán)境下,移植μC/OSII到AT32UC3A0512 MCU上,需要在Micrium官方移植實例中進行以下修改:
① 修改exception.S文件中的內容,修改如下:
_handle_Supervisor_Call:
lddpcpc,__OSCtxSw
__OSCtxSw:.
longOSCtxSw
② 修改cpu.h內容如下:
#define CPU_CRITICAL_ENTER()
{cpu_sr = CPU_SR_Save();}
#define CPU_CRITICAL_EXIT()
{CPU_SR_Restore(cpu_sr);}
#define CPU_SR_Save()cpu_irq_save()
#define CPU_SR_Restore(cpu_sr)
cpu_irq_restore(cpu_sr)
評論