1 引言
自動調溫光療係統是一種醫用理療儀(yi) 器,其原理是采用單片機對可控矽的控製來控製高壓下的激光輸出器進行理療,在激光輸出器工作的同時對其進行實時溫度檢測,利用檢測到的溫度狀況決(jue) 定可控矽的導通狀態,達到改變激光輸出器輸出功率的目的,得到最佳的療效。
根據上述特點,本文選擇了單總線數字溫度傳(chuan) 感器DS18B20進行溫度采集,介紹了使用DS18B20的程序代碼。為(wei) 了使可控矽的輸出功率連續均勻變化,本文設計了一種利用外部中斷和定時器中斷實現可控矽移相觸發的編程方法,滿足治療光的強度均勻靈敏變化的需要。
2 調溫光療係統介紹
2.1係統結構介紹
本係統由5部分組成:CUP處理單元,鍵盤輸入單元,LCD顯示單元,測量溫度單元,可控矽控製激光器輸出單元。
CUP處理單元運行係統程序調度所有任務,鍵盤用於(yu) 輸入係統設定參數及控製狀態模式選擇,LCD為(wei) 係統提供了良好的操作界麵,測量溫度單元負責對激光輸出器的溫度進行實時檢測,可控矽控製輸出單元針對設定參數及檢測到的溫度來控製激光輸出器的輸出。本文將詳細介紹測量溫度單元和可控矽控製單元的軟硬件設計。
2.2 係統程序流程介紹
本醫療係統的程序流程為(wei) :係統首先數據進行初始化,這裏的初始化主要包括定時器和外部中斷的設置,初始化完成後開外部中斷,然後係統進行溫度采集,根據采集的溫度及係統的設置參數來決(jue) 定定時器定時參數,該定時參數直接決(jue) 定移相觸發可控矽時導通角的大小。接著係統再進行溫度采集,選擇定時器定時時間參數,依次循環下去。
在係統循環工作過程中,人工可以通過按鍵改變係統的各種工作參數,工作參數直接影響控製可控矽導通角的定時器參數的選擇。係統的主流程框圖如圖1(a)所示意。當係統循環執行時,外部過零脈衝(chong) 信號會(hui) 使係統進入外部中斷服務程序,進而控製可控矽的的導通。

圖1:係統程序流程圖
3 測量溫度單元介紹
熱電偶或鉑電阻,需放大電路和A/D轉換實現溫度信號采集。為(wei) 簡化係統硬件設計,選用了DALLAS公司生產(chan) 的單總線數字溫度傳(chuan) 感器DS18B20。
DS18B20提供的“一線”總線接口隻需一個(ge) 端口進行通訊;測溫範圍為(wei) -55~+125℃,在-10~+85℃的範圍內(nei) ,精度為(wei) ±0.5℃;溫度以9~12位數字量讀出,分辨率為(wei) 0.0625℃,該精度滿足本醫用光療係統的要求;同時DS18B20采用超小型的μSOP封裝,體(ti) 積很小,可以直接敷貼在激光器的前端。由於(yu) DS18B20提供的“一線”總線接口隻需一個(ge) 端口與(yu) CPU通訊,因此在硬件上,利用單片機AT89C52的一個(ge) 端口P2.0與(yu) DS18B20的DQ引腳相連。
3.1 DS18B20工作原理及程序
在對DS18B20進行讀寫(xie) 操作之前,CPU首先發出一個(ge) 複位脈衝(chong) ,最小脈衝(chong) 寬度為(wei) 480μs的低電平信號;然後CPU釋放單總線,使之處於(yu) 接收狀態。單總線經過上拉電阻被拉至高電平。當DS18B20檢測測到I/0端的上升沿時,就等待15—60μs,再向主CPU發出應答脈衝(chong) (60一240μs的低電平信號)。初始化子程序為(wei) :
bit init_18b20(void);
{ bit presence; //用於(yu) 保存DS18b20對CPU的應答信號
DQ = 0; //複位脈衝(chong) 低電平
delay_20us(25); // 延時500us
DQ = 1; //複位脈衝(chong) 高電平
delay_20us(4); //延時80us
presence = DQ; //保存DQ的狀態
delay_20us(20); //延時400us
return(presence);//返回DQ的狀態 }
當主CPU將I/O線從(cong) 高電平拉至低電平時,且保持時間大於(yu) 1μs,就作為(wei) 一個(ge) 讀周期的開始。DS18B20的輸出數據在讀時序下降沿過後的15μs內(nei) 有效,在此期間,主CPU應釋放I/O線,使之處於(yu) 讀入狀態以便讀取DS18B20的輸出數據。15μs後讀時序結束,I/O線經上拉電阻變為(wei) 高電平。通常讀取一位數據至少要60μs,並且在兩(liang) 位數據之間至少要有1μs的恢複期。讀溫度字節的子程序為(wei) :
byte read_byte(void)
{byte i; //變量用於(yu) 循環自加
byte value = 0;//用於(yu) 移位操作的臨(lin) 時變量
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);//返回對到的字節 }
CPU把I/O線從(cong) 高電平拉至低電平時,作為(wei) —個(ge) 寫(xie) 周期的開始。寫(xie) 時序包括兩(liang) 種類型:寫(xie) 1時序和寫(xie) 0時序,寫(xie) 1或寫(xie) 0必須保持至少60μs,在兩(liang) 個(ge) 寫(xie) 周期之間至少有1μs的恢複期。DS18B20在I/O線變低電平後的15—6Oμs的時間內(nei) 進行采樣。
若I/O線為(wei) 高電平,即認為(wei) 寫(xie) 入了一位1;反之,則認為(wei) 寫(xie) 入了一位0。主CPU在開始寫(xie) 1周期時,必須將I/O線拉至低電平,然後釋放,15μs內(nei) 將I/O線拉至高電平。主CPU在開始寫(xie) 0時,也將I/O拉至低電平,並保持60us的時間。寫(xie) 字節的子程序為(wei) :
void write_byte(char val)//“val”用語傳(chuan) 遞需要寫(xie) 的字節
{unsigned char i;// 變量用於(yu) 循環自加
for (i=8; i》0; i--)
{DQ = 0; NOP_1uS; NOP_1uS;
DQ = val&0x01;
delay_20us(5); //延時間100us
DQ = 1;val=val/2; //右移一位
}delay_20us(5); //延時間100us }
每次訪問DS18B20的操作都是以初始化器件開始,然後發出ROM命令和功能命令。初始化器件會(hui) 使主機接到應答信號,ROM 命令與(yu) 各個(ge) 從(cong) 機設備的惟一64位ROM 代碼相關(guan) ,允許主機在1一Wire總線上連接多個(ge) 從(cong) 機設備時,指定操作某個(ge) 從(cong) 機設備。這些命令還允許主機能夠檢測到總線上有多少個(ge) 從(cong) 機設備以及其設備類型,或者有沒有設備處於(yu) 報警狀態。
本係統是隻有一個(ge) 溫度傳(chuan) 感器的單點係統,利用跳過ROM(SKIP ROM)命令,主機不必發送64 b序列號,從(cong) 而節約了大量時間。ROM命令後,主機就可以發出指定功能命令(溫度轉換、讀暫存器等)來完成操作。本係統中讀取溫度的程序為(wei) :
unsigned int Read_Temperature(void)
{ unsigned char a,b;// 用於(yu) 存儲(chu) 溫度數據的變量
if(init_18b20()==0)
#p#分頁標題#e#
{write_byte(0xCC); //發送Skip ROM指令
write_byte(0x44); // 發送溫度轉換指令
delay_20us(1);
if(init_18b20()==0)
{write_byte(0xCC); //發送Skip ROM指令
write_byte(0xBE); //發送讀取暫存寄存器指令
a=read_byte(); //讀出低八位溫度數據
b=read_byte(); //讀出高八位溫度數據
temperature=((b*256+a)/16);//計算出10進製溫度值
}}return(temperature);}
4 可控矽控製輸出單元
4.1 可控矽控製單元硬件設計

圖2:可控矽控製輸出單元原理圖
本係統利用MOC3021光電隔離電路來觸發可控矽。AT89C52利用P21引腳與(yu) MOC3021的2腳相連。圖2(a)為(wei) 觸發電路原理圖。MOC3021是雙向晶閘管輸出型的光電耦合器,其作用是隔離單片機係統和外部的雙向晶閘管。
4.2 過零檢測電路設計
利用過零檢測電路捕捉交變電壓的零點信號。以便在過零點啟動定時器,當計時時間到達後觸發可控矽。過零檢測電路如圖2(b)所示,利用兩(liang) 個(ge) TIL117與(yu) 18V的交流電相連,兩(liang) 個(ge) TIL117分別在交流電的正負周期當電壓達到0.3V使三極管T導通,進而使三極管T的集電極在交流電的零點附近產(chan) 生脈衝(chong) 信號。
4.3 可控矽移相觸發程序設計
過零檢測電路在交變電壓每個(ge) 周期產(chan) 生兩(liang) 個(ge) 過零點電壓脈衝(chong) 信號,使AT89C52產(chan) 生外部中斷。在中斷服務程序中開始定時器計時。定時器的定時時間小於(yu) 兩(liang) 個(ge) 過零脈衝(chong) 信號間隔,即10ms,這樣可以使定時器中斷在下一個(ge) 外部中斷來到之前工作。
在定時器中斷服務程序中,觸發可控矽,並裝入新的定時器定時時間常數。等待下一個(ge) 過零脈衝(chong) 信號到來引發的外部中斷,進而開始新一個(ge) 周期的可控矽觸發周期。程序流程圖如圖1(b)。
利用過零檢測電路產(chan) 生的下降沿作為(wei) 外部中斷信號,在中斷程序中根據係統此時功率輸出判斷是否啟動定時器,如果功率輸出為(wei) 非零則啟動定時器進行計時。
void guicontrol(void) interrupt 2
{ if(power!=0) //判斷負載功率輸出是否為(wei) 零時,非零則進入
{ DT=1;//關(guan) 斷可控矽輸出,DT為(wei) AT89C52的P21引腳
TR0=1;//啟動定時器 } }
當定時器中斷產(chan) 生時,停止定時器計時,並且在中斷函數中裝入在程序主控製流程中根據檢測到的溫度及係統的功率設定而實時變化的新定時時間常數,觸發可控矽導通。可控矽導通時間會(hui) 持續到負載電流每個(ge) 半周的終點。
void time0(void) interrupt 1
{ TR0=0;//停止定時器計時
TH0=timehigh;//裝入新的定時器定時時間常數
TL0=timelow;
DT=0;//觸發可控矽導通,DT為(wei) AT89C52的P21引腳
TF0=0; //清除定時器溢出標誌位 }
5 結束語
本文闡述了醫療係統的溫度測控設計原理,選用了單總線數字傳(chuan) 感器DS18B20作為(wei) 溫度傳(chuan) 感器,簡化電路。設計了一種實現可控矽移相觸發的編程方法,給出了具體(ti) 應用電路和軟件設計。 所采用設計方案使該醫療係統硬件簡單實用,可靠性增加。
轉載請注明出處。







相關文章
熱門資訊
精彩導讀



















關注我們

