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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC單片機的熱能表研制

          PIC單片機的熱能表研制

          作者: 時間:2011-08-22 來源:網(wǎng)絡(luò) 收藏

          2.2 系統(tǒng)工作過程

          該系統(tǒng)的工作流程圖如圖3所示。每次加電時,一般先設(shè)備系統(tǒng)信息,然后CPU進入休眠狀態(tài),并等待處理各種中斷。在CPU進入休眠狀態(tài)前,需關(guān)閉溫度傳感器、A/D轉(zhuǎn)換器和顯示器的電源以減小系統(tǒng)功耗。處理完中斷后,CPU再次進入休眠狀態(tài)以等待下一次中斷。水表中斷表示已經(jīng)有一定體積的熱水流水采暖設(shè)備,需要計算一次熱耗。鍵盤中斷表示應(yīng)處理各種顯示,而故障中斷則表示系統(tǒng)某個部分出現(xiàn)故障,此時CPU應(yīng)將故障類型和此時的有關(guān)信息寫入EEPROM。


          3 注意事項

          3.1 溫度測量誤差和傳感器配對誤差

          從熱耗計算公式可以看出,溫度測量誤差和傳感器配對誤差均會引起測量誤差。鑒于這種情況,設(shè)計時一方面必須選用性能良好的溫度傳感器;另一方面應(yīng)使溫度傳感器的特性呈線性關(guān)系且兩只傳感器的溫度特性曲線應(yīng)當一致。但是,常常溫度傳感器特性在0℃~100℃并非線性,每只傳感器的特生曲線又不盡相同。因此,除了采用性能比較好的鉑電阻作為溫度傳感器外,還必須對每只表通過硬件或軟件校正。由于硬件校正會增加成本,因而多采用軟件校正。具體做法是將整個測溫范圍根據(jù)允許的測量誤差分為若干段,校正時測出各校正點的誤差并存儲到EEPROM。而實際工作時,先測出水溫,然后采用查表的辦法從誤差中查出修正值來對所測的溫度進行修正。如果測出的水溫不是正好在校正點上,則可采用插值估算的辦法予以修正。這樣處理不僅可以解決溫度測量誤差,同時也可以解決傳感器的配對誤差。

          3.2 功耗和抗電磁干擾

          由于表長期處于無人看守狀態(tài),且只能使用電池供電,因此,設(shè)計時,要求系統(tǒng)功耗應(yīng)非常低,且抗電磁干擾的性能要好。

          正是為了降低系統(tǒng)功耗,設(shè)計時除顯示器外,所有的器件都采用3.3V的低功耗器件。比如,作控制核心,16C64具有功耗低、運行速度快等特點,其工作電流只有1mA(3.3V@32kHz時),進入休眠狀態(tài)后只有幾微安且可以用中斷將其從休眠狀態(tài)喚醒。溫度傳感器、A/D轉(zhuǎn)換器和顯示器是系統(tǒng)的主要耗能器件,因此在不使用時應(yīng)將它們的電源切斷,以進一步降低功耗。另外,由于16C64的數(shù)據(jù)總線和地址總線都埋在芯片內(nèi)部,因此,具有良好的抗電磁干擾性能。


          4 結(jié)束語

          本文設(shè)計的表具有結(jié)構(gòu)簡單,計量準確的特點,可用于住宅小區(qū)或單元住戶的采暖計量。檢測結(jié)果表明:溫度測量誤差不大于±+0.15℃,傳感器配對誤差不大于±0.09℃。


          上一頁 1 2 下一頁

          關(guān)鍵詞: 研制 熱能 單片機 PIC

          評論


          相關(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); })();