<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 簡化微控制器與溫度傳感器之間的接口

          簡化微控制器與溫度傳感器之間的接口

          作者: 時間:2012-03-28 來源:網(wǎng)絡(luò) 收藏

          摘要:數(shù)字系統(tǒng)常常需要測量、控制和保持,而是一個模擬量。如果采用適當?shù)募夹g(shù)和元件,將模擬的量轉(zhuǎn)化為數(shù)字量并不困難。本文介紹了幾種簡單的微處理器與電路。

          本文引用地址:http://www.ex-cimer.com/article/149330.htm

          關(guān)鍵詞:溫度、、溫度控制

          原理上,微處理器對溫度值的讀取很簡單。將熱敏電阻或其它模擬溫度的輸出送入模數(shù)轉(zhuǎn)換器(ADC),微處理器只需讀取模數(shù)轉(zhuǎn)換器輸出的數(shù)字量即可。有些微處理器內(nèi)部帶ADC,在某種程度上了設(shè)計。ADC需要一個基準電壓,可由外部器件產(chǎn)生。熱敏電阻傳感器的基準電壓通常與其電阻分壓網(wǎng)絡(luò)高端上的電壓相同。這類溫度測量系統(tǒng)存在的問題是:

          · 傳感器輸出電壓范圍遠小于ADC的輸入范圍:用于溫度測量的ADC一般是8位精度,采用2.5V基準電壓,通常這也就是輸入電壓范圍。如果在溫度測量范圍內(nèi)傳感器對應(yīng)的最大輸出僅為1.25V,則有效分辨率就下降為7位。為達到8位精度,必須利用外部運算放大器增加信號增益,或者降低ADC的基準電壓(對有些ADC而言,這樣會降低轉(zhuǎn)換精度)。

          · 誤差裕量?。簾崦綦娮杈W(wǎng)絡(luò)或其它模擬溫度傳感器誤差、ADC的轉(zhuǎn)換誤差、運算放大器失調(diào)、增益設(shè)置電阻的公差、以及電壓基準誤差的總和可能已超出系統(tǒng)的容差。

          · 非線性:熱敏電阻的傳遞函數(shù)具有嚴重的非線性,許多應(yīng)用場合,在測量的很小溫度范圍之內(nèi)它近似于線性。還可以通過查表法來補償非線性,但這種方法所需要的資源可能難以獲得。

          · ADC的輸入端口有限:如果需要測量的溫度點比ADC的輸入端口多,就需要增加多路切換器,這會增加成本和開發(fā)時間。

          · 微處理器的I/O引腳有限:對于內(nèi)置ADC的微處理器這不成為問題,但是外部串行ADC就需要2到4個I/O線與微處理器進行通訊。

          如果采用數(shù)字輸出的溫度傳感器,上述設(shè)計問題就大為。當ADC輸入端口和微處理器I/O引腳不夠用時,時間或頻率輸出的溫度傳感器都可以解決問題。MAX6576溫度傳感器輸出方波的周期與絕對溫度成正比。它采用6引腳SOT-23封裝,只占很小的電路板面積。與微處理器只通過一條I/O線進行通訊。微處理器的內(nèi)部計數(shù)器測出周期后,可直接計算出溫度值。兩個邏輯輸入端分別連接到地或電源正端,可設(shè)置4種從10μs/°k到64μs/°k周期/溫度比例系數(shù)。

          芯片MAX6577輸出方波的頻率與溫度成正比,比例系數(shù)在0.06Hz/μk到4 Hz/μk可調(diào)。這兩種器件僅需一條I/O口線即可將溫度測量數(shù)據(jù)送至MPU,在需要將溫度傳感器與MPU進行隔離的場合,只需增加一個簡單的光耦即可,了溫度測量電路,節(jié)省了電路板面積、元件數(shù)量、以及模擬/數(shù)字I/O口的資源。

          對于需要測量多點溫度的應(yīng)用,方案選擇比較復雜。假設(shè)ADC有足夠多的輸入通道,可將熱敏電阻或傳統(tǒng)的模擬傳感器放置在合適的位置上,并連接到ADC。另一個方案是采用MAX6575,它可將溫度測量數(shù)據(jù)直接送到MPU,一條I/O線最多可掛8片MAX6575(圖1)。MPU只需短暫拉低I/O口線電平,即可啟動測量。經(jīng)過一定延時,第一片MAX6575拉低I/O口線,此時延長度與絕對溫度成正比,比例系數(shù)通過MAX6575的兩個引腳設(shè)置。

          圖1中,第一片MAX6575按與絕對溫度成正比的時延(5μs/°k)拉低I/O線電平后釋放I/O線,第二片MAX6575通過設(shè)置端設(shè)一個更長的時延常數(shù),經(jīng)過這個時延,拉低I/O線電平并按5μs/°k的比例系數(shù)保持一定時間。4片MAX6575可按這種方式聯(lián)在一條I/O線上。另外4片更長時延設(shè)置的MAX6575也可聯(lián)在同一I/O線上。

          MAX6575L的時延常數(shù)在55μs/°k到505μs/°k ,MAX6575H在1605μs/°k 到6405μs/°k之間。這樣,最多可有8個MAX6575放置在測量系統(tǒng)的不同位置,通過一條I/O線與MPU相連。
          有些系統(tǒng),不需要測量精確的溫度值,只需判斷溫度是否高于或低于某個溫度點。這個信號可用于風扇、空調(diào)、加熱器或其它環(huán)境控制設(shè)備。在系統(tǒng)保護應(yīng)用中,過熱信號可觸發(fā)有序的系統(tǒng)關(guān)斷狀態(tài)以避免系統(tǒng)電源切斷時丟失數(shù)據(jù)。這個過熱信號可用前面提到的測量方法獲得,但對于這種簡單應(yīng)用來說,占用了過多硬件和軟件資源。

          MAX6501/MAX6502開關(guān)型溫度傳感器可替代溫度傳感器和比較器,使系統(tǒng)簡化(圖2)。這種單芯片集成了溫度傳感器、電壓比較器和電壓基準。當溫度超過了預(yù)設(shè)的閾值時,漏極開路輸出給出一個低電平信號。同MAX6575一樣,多個MAX6501可連在同一條I/O線上,MPU可監(jiān)測一個或多個位置是否有溫度報警,如果系統(tǒng)需要監(jiān)測具體在哪個位置上有溫度告警發(fā)生,則每個開關(guān)輸出必須連到不同的MPU I/O線上。

          上述芯片監(jiān)測的是它們自身的管芯溫度,因為管芯溫度非常接近管腳溫度,所以這些芯片應(yīng)放置在合適的位置,使它們的管腳溫度與被監(jiān)測器件的溫度近似相同。

          有些情況需要監(jiān)測的溫度點無法與傳感器芯片建立熱耦合關(guān)系----例如功率ASIC,它們內(nèi)部的管芯溫度遠遠高于外部電路板的溫度。一個內(nèi)置的溫度傳感器可以在溫度過高時關(guān)斷功率ASIC自身。但這種方式的精確度不夠,很難在出現(xiàn)過熱故障之前向系統(tǒng)發(fā)出警告。

          如果在ASIC的管芯上增加一個可外部連接的P-N結(jié),就可直接測量管芯溫度。方法是使用2個或多個正向電流來驅(qū)動這個P-N結(jié),測量結(jié)電壓。兩次電壓的差值與管芯的絕對溫度成正比:V2-V1=KT/q(LnI2/I1)。I1和I2是兩次不同的驅(qū)動電流,V1和V2是測得的P-N結(jié)電壓,K是波爾茲曼常數(shù),T是P-N結(jié)的絕對溫度,單位是開爾文度,°k,q是電荷量。

          這種測量方法需要產(chǎn)生精確的驅(qū)動電流比,測量出微小的電壓差信號,同時又要盡量抑制功率ASIC的瞬變過程帶來的噪聲信號。Maxim的遠端結(jié)溫傳感器可將這些精密的模擬電路功能及一個簡單靈活的數(shù)字集成在一起。

          MAX1618,可以8位(1℃)的精度,測量遠端結(jié)溫,并通過SMBus總線將結(jié)果送入MPU(圖3)。該芯片用于監(jiān)測PC機的CPU溫度,還可減輕MPU的一些負擔。MAX1618通過一個窗口比較器檢測管芯結(jié)溫度,當溫度高于或低于MPU控制寄存器內(nèi)的設(shè)定溫度時,便中斷MPU的工作。



          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();