基于DS18B20的自動調(diào)溫醫(yī)用光療系統(tǒng)的設(shè)計
1 引言
本文引用地址:http://2s4d.com/article/199144.htm自動調(diào)溫光療系統(tǒng)是一種醫(yī)用理療儀器,其原理是采用單片機對可控硅的控制來控制高壓下的激光輸出器進行理療,在激光輸出器工作的同時對其進行實時溫度檢測,利用檢測到的溫度狀況決定可控硅的導(dǎo)通狀態(tài),達到改變激光輸出器輸出功率的目的,得到最佳的療效。
根據(jù)上述特點,本文選擇了單總線數(shù)字溫度傳感器DS18B20進行溫度采集,介紹了使用DS18B20的程序代碼。為了使可控硅的輸出功率連續(xù)均勻變化,本文設(shè)計了一種利用外部中斷和定時器中斷實現(xiàn)可控硅移相觸發(fā)的編程方法,滿足治療光的強度均勻靈敏變化的需要。
2 調(diào)溫光療系統(tǒng)介紹
2.1系統(tǒng)結(jié)構(gòu)介紹
本系統(tǒng)由5部分組成:CUP處理單元,鍵盤輸入單元,LCD顯示單元,測量溫度單元,可控硅控制激光器輸出單元。
CUP處理單元運行系統(tǒng)程序調(diào)度所有任務(wù),鍵盤用于輸入系統(tǒng)設(shè)定參數(shù)及控制狀態(tài)模式選擇,LCD為系統(tǒng)提供了良好的操作界面,測量溫度單元負責(zé)對激光輸出器的溫度進行實時檢測,可控硅控制輸出單元針對設(shè)定參數(shù)及檢測到的溫度來控制激光輸出器的輸出。本文將詳細介紹測量溫度單元和可控硅控制單元的軟硬件設(shè)計。
2.2 系統(tǒng)程序流程介紹
本醫(yī)療系統(tǒng)的程序流程為:系統(tǒng)首先數(shù)據(jù)進行初始化,這里的初始化主要包括定時器和外部中斷的設(shè)置,初始化完成后開外部中斷,然后系統(tǒng)進行溫度采集,根據(jù)采集的溫度及系統(tǒng)的設(shè)置參數(shù)來決定定時器定時參數(shù),該定時參數(shù)直接決定移相觸發(fā)可控硅時導(dǎo)通角的大小。接著系統(tǒng)再進行溫度采集,選擇定時器定時時間參數(shù),依次循環(huán)下去。
在系統(tǒng)循環(huán)工作過程中,人工可以通過按鍵改變系統(tǒng)的各種工作參數(shù),工作參數(shù)直接影響控制可控硅導(dǎo)通角的定時器參數(shù)的選擇。系統(tǒng)的主流程框圖如圖1(a)所示意。當(dāng)系統(tǒng)循環(huán)執(zhí)行時,外部過零脈沖信號會使系統(tǒng)進入外部中斷服務(wù)程序,進而控制可控硅的的導(dǎo)通。
圖1:系統(tǒng)程序流程圖
3 測量溫度單元介紹
熱電偶或鉑電阻,需放大電路和A/D轉(zhuǎn)換實現(xiàn)溫度信號采集。為簡化系統(tǒng)硬件設(shè)計,選用了DALLAS公司生產(chǎn)的單總線數(shù)字溫度傳感器DS18B20。
DS18B20提供的“一線”總線接口只需一個端口進行通訊;測溫范圍為-55~+125℃,在-10~+85℃的范圍內(nèi),精度為±0.5℃;溫度以9~12位數(shù)字量讀出,分辨率為0.0625℃,該精度滿足本醫(yī)用光療系統(tǒng)的要求;同時DS18B20采用超小型的μSOP封裝,體積很小,可以直接敷貼在激光器的前端。由于DS18B20提供的“一線”總線接口只需一個端口與CPU通訊,因此在硬件上,利用單片機AT89C52的一個端口P2.0與DS18B20的DQ引腳相連。
3.1 DS18B20工作原理及程序
在對DS18B20進行讀寫操作之前,CPU首先發(fā)出一個復(fù)位脈沖,最小脈沖寬度為480μs的低電平信號;然后CPU釋放單總線,使之處于接收狀態(tài)。單總線經(jīng)過上拉電阻被拉至高電平。當(dāng)DS18B20檢測測到I/0端的上升沿時,就等待15—60μs,再向主CPU發(fā)出應(yīng)答脈沖(60一240μs的低電平信號)。初始化子程序為:
bit init_18b20(void);
{ bit presence; //用于保存DS18b20對CPU的應(yīng)答信號
DQ = 0; //復(fù)位脈沖低電平
delay_20us(25); // 延時500us
DQ = 1; //復(fù)位脈沖高電平
delay_20us(4); //延時80us
presence = DQ; //保存DQ的狀態(tài)
delay_20us(20); //延時400us
return(presence);//返回DQ的狀態(tài) }
當(dāng)主CPU將I/O線從高電平拉至低電平時,且保持時間大于1μs,就作為一個讀周期的開始。DS18B20的輸出數(shù)據(jù)在讀時序下降沿過后的15μs內(nèi)有效,在此期間,主CPU應(yīng)釋放I/O線,使之處于讀入狀態(tài)以便讀取DS18B20的輸出數(shù)據(jù)。15μs后讀時序結(jié)束,I/O線經(jīng)上拉電阻變?yōu)楦唠娖?。通常讀取一位數(shù)據(jù)至少要60μs,并且在兩位數(shù)據(jù)之間至少要有1μs的恢復(fù)期。讀溫度字節(jié)的子程序為:
byte read_byte(void)
{byte i; //變量用于循環(huán)自加
byte value = 0;//用于移位操作的臨時變量
for (i=8;i>0;i--)
{value>>=1;
DQ = 0;
NOP_1uS; //延時1us的空操作宏的空操作宏
DQ = 1;
NOP_1uS; NOP_1uS; NOP_1uS;
if(DQ)value|=0x80;
delay_20us(3); // 延時60us
}return(value);//返回對到的字節(jié) }
CPU把I/O線從高電平拉至低電平時,作為—個寫周期的開始。寫時序包括兩種類型:寫1時序和寫0時序,寫1或?qū)?必須保持至少60μs,在兩個寫周期之間至少有1μs的恢復(fù)期。DS18B20在I/O線變低電平后的15—6Oμs的時間內(nèi)進行采樣。
若I/O線為高電平,即認為寫入了一位1;反之,則認為寫入了一位0。主CPU在開始寫1周期時,必須將I/O線拉至低電平,然后釋放,15μs內(nèi)將I/O線拉至高電平。主CPU在開始寫0時,也將I/O拉至低電平,并保持60us的時間。寫字節(jié)的子程序為:
void write_byte(char val)//“val”用語傳遞需要寫的字節(jié)
{unsigned char i;// 變量用于循環(huán)自加
for (i=8; i>0; i--)
{DQ = 0; NOP_1uS; NOP_1uS;
DQ = val0x01;
delay_20us(5); //延時間100us
DQ = 1;val=val/2; //右移一位
}delay_20us(5); //延時間100us }
每次訪問DS18B20的操作都是以初始化器件開始,然后發(fā)出ROM命令和功能命令。初始化器件會使主機接到應(yīng)答信號,ROM 命令與各個從機設(shè)備的惟一64位ROM 代碼相關(guān),允許主機在1一Wire總線上連接多個從機設(shè)備時,指定操作某個從機設(shè)備。這些命令還允許主機能夠檢測到總線上有多少個從機設(shè)備以及其設(shè)備類型,或者有沒有設(shè)備處于報警狀態(tài)。
本系統(tǒng)是只有一個溫度傳感器的單點系統(tǒng),利用跳過ROM(SKIP ROM)命令,主機不必發(fā)送64 b序列號,從而節(jié)約了大量時間。ROM命令后,主機就可以發(fā)出指定功能命令(溫度轉(zhuǎn)換、讀暫存器等)來完成操作。本系統(tǒng)中讀取溫度的程序為:
unsigned int Read_Temperature(void)
{ unsigned char a,b;// 用于存儲溫度數(shù)據(jù)的變量
if(init_18b20()==0)
{write_byte(0xCC); //發(fā)送Skip ROM指令
write_byte(0x44); // 發(fā)送溫度轉(zhuǎn)換指令
delay_20us(1);
if(init_18b20()==0)
{write_byte(0xCC); //發(fā)送Skip ROM指令
write_byte(0xBE); //發(fā)送讀取暫存寄存器指令
a=read_byte(); //讀出低八位溫度數(shù)據(jù)
b=read_byte(); //讀出高八位溫度數(shù)據(jù)
temperature=((b*256+a)/16);//計算出10進制溫度值
}}return(temperature);}
4 可控硅控制輸出單元
4.1 可控硅控制單元硬件設(shè)計
圖2:可控硅控制輸出單元原理圖
本系統(tǒng)利用MOC3021光電隔離電路來觸發(fā)可控硅。AT89C52利用P21引腳與MOC3021的2腳相連。圖2(a)為觸發(fā)電路原理圖。MOC3021是雙向晶閘管輸出型的光電耦合器,其作用是隔離單片機系統(tǒng)和外部的雙向晶閘管。
4.2 過零檢測電路設(shè)計
利用過零檢測電路捕捉交變電壓的零點信號。以便在過零點啟動定時器,當(dāng)計時時間到達后觸發(fā)可控硅。過零檢測電路如圖2(b)所示,利用兩個TIL117與18V的交流電相連,兩個TIL117分別在交流電的正負周期當(dāng)電壓達到0.3V使三極管T導(dǎo)通,進而使三極管T的集電極在交流電的零點附近產(chǎn)生脈沖信號。
4.3 可控硅移相觸發(fā)程序設(shè)計
過零檢測電路在交變電壓每個周期產(chǎn)生兩個過零點電壓脈沖信號,使AT89C52產(chǎn)生外部中斷。 在中斷服務(wù)程序中開始定時器計時。定時器的定時時間小于兩個過零脈沖信號間隔,即10ms,這樣可以使定時器中斷在下一個外部中斷來到之前工作。
在定時器中斷服務(wù)程序中,觸發(fā)可控硅,并裝入新的定時器定時時間常數(shù)。等待下一個過零脈沖信號到來引發(fā)的外部中斷,進而開始新一個周期的可控硅觸發(fā)周期。程序流程圖如圖1(b)。
利用過零檢測電路產(chǎn)生的下降沿作為外部中斷信號,在中斷程序中根據(jù)系統(tǒng)此時功率輸出判斷是否啟動定時器,如果功率輸出為非零則啟動定時器進行計時。
void guicontrol(void) interrupt 2
{ if(power!=0) //判斷負載功率輸出是否為零時,非零則進入
{ DT=1;//關(guān)斷可控硅輸出,DT為AT89C52的P21引腳
TR0=1;//啟動定時器 } }
當(dāng)定時器中斷產(chǎn)生時,停止定時器計時,并且在中斷函數(shù)中裝入在程序主控制流程中根據(jù)檢測到的溫度及系統(tǒng)的功率設(shè)定而實時變化的新定時時間常數(shù),觸發(fā)可控硅導(dǎo)通??煽毓鑼?dǎo)通時間會持續(xù)到負載電流每個半周的終點。
void time0(void) interrupt 1
{ TR0=0;//停止定時器計時
TH0=timehigh;//裝入新的定時器定時時間常數(shù)
TL0=timelow;
DT=0;//觸發(fā)可控硅導(dǎo)通,DT為AT89C52的P21引腳
TF0=0; //清除定時器溢出標(biāo)志位 }
5 結(jié)束語
本文闡述了醫(yī)療系統(tǒng)的溫度測控設(shè)計原理,選用了單總線數(shù)字傳感器DS18B20作為溫度傳感器,簡化電路。設(shè)計了一種實現(xiàn)可控硅移相觸發(fā)的編程方法,給出了具體應(yīng)用電路和軟件設(shè)計。 所采用設(shè)計方案使該醫(yī)療系統(tǒng)硬件簡單實用,可靠性增加。
更多醫(yī)療電子信息請關(guān)注:21ic醫(yī)療電子頻道
評論