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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于ATmgea8單片機(jī)設(shè)計(jì)的加熱控制系統(tǒng)

          基于ATmgea8單片機(jī)設(shè)計(jì)的加熱控制系統(tǒng)

          作者: 時(shí)間:2012-06-09 來源:網(wǎng)絡(luò) 收藏

          1 引言

          溫度是工業(yè)生產(chǎn)中主要的被控參數(shù)之一,與之相關(guān)的各種溫度控制系統(tǒng)廣泛應(yīng)用于冶金、化工、機(jī)械、食品等領(lǐng)域。文中介紹的文化測量及以 ATmega8型AVR系列為核心部件,通過對(duì)系統(tǒng)軟件和硬件設(shè)計(jì)的合理規(guī)劃,發(fā)揮自身集成眾多系統(tǒng)級(jí)功能單元的優(yōu)勢,在不減少功能的前提下有效降低了硬件成本,系統(tǒng)操控簡便。實(shí)驗(yàn)證明該溫控系統(tǒng)具有很高的可靠性和穩(wěn)定性。

          2 系統(tǒng)結(jié)構(gòu)及控制算法

          2.1系統(tǒng)總體結(jié)構(gòu)

          溫度測量及加熱系統(tǒng)控制的總體結(jié)構(gòu)如圖1所示。系統(tǒng)主要包括現(xiàn)場溫度采集、實(shí)時(shí)溫度顯示、加熱控制參數(shù)設(shè)置、加熱電路控制輸出、與上位機(jī)串行通信和系統(tǒng)核心ATmega8型等。

          溫度采集電路以模擬電壓形式將現(xiàn)場溫度傳至單片機(jī)。單片機(jī)通過自身集成的 A/D轉(zhuǎn)換器將模擬電壓轉(zhuǎn)化為控制系統(tǒng)可用的數(shù)字量。單片機(jī)結(jié)合現(xiàn)場溫度與用戶設(shè)定的目標(biāo)溫度,按照已經(jīng)編程固化的增量式PID控制算法計(jì)算出實(shí)時(shí)控制量。以此控制量使能光電隔離驅(qū)動(dòng)電路,決定加熱電路的工作狀態(tài),使?fàn)t溫逐步穩(wěn)定于用戶設(shè)定的目標(biāo)值。系統(tǒng)運(yùn)行過程中的各種狀態(tài)參量均由數(shù)碼管實(shí)時(shí)顯示,并通過RS232串口與上位計(jì)算機(jī)進(jìn)行全雙工通信。用戶直接在上位機(jī)完成溫度測量和加熱控制的全部操作。

          點(diǎn)擊在新窗口中瀏覽產(chǎn)品

          2.2系統(tǒng)控制算法

          系統(tǒng)采用基于增量式 PID算法的脈寬調(diào)制(PWM)控制方法,即PWM方波的占空比由增量式PID算法求得。增量式PID算法的輸出量為

          Δ Un=Kp[(en-en-1)+(T/Ti)en+(Td/T)(en-2 en-1+en-2)] (1)

          式中, en、en-1、en-2分別為第n次、n-1次和n-2次的偏差值,Kp、Ti、Td分別為比例系數(shù)、積分系數(shù)和微分系數(shù),T為采樣周期。

          單片機(jī)每隔固定時(shí)間 T將現(xiàn)場溫度與用戶設(shè)定目標(biāo)溫度的差值帶入增量式PID算法公式,由公式輸出量決定PWM方波的占空比,后續(xù)加熱電路根據(jù)此PWM方波的占空比決定加熱功率?,F(xiàn)場溫度與目標(biāo)溫度的偏差大則占空比大,加熱電路的加熱功率大,使溫度的實(shí)測值與設(shè)定值的偏差迅速減少;反之,二者的偏差小則占空比減小,加熱電路加熱功率減少,直至目標(biāo)值與實(shí)測值相等,達(dá)到自動(dòng)控制的目的。

          3 硬件設(shè)計(jì)

          3.1 ATmega8單片機(jī)[1]

          ATmega8型單片機(jī)是ATMEL公司推出的基于AVR RISC結(jié)構(gòu)的高檔Flash型單片機(jī)。其核心將32個(gè)工作寄存器和指令集連接在一起,所有工作寄存器都與ALU(算術(shù)邏輯單元)直接相連,實(shí)現(xiàn)了1個(gè)時(shí)鐘周期執(zhí)行1條指令同時(shí)訪問(讀寫)二個(gè)獨(dú)立寄存器的操作。這種結(jié)構(gòu)提高了代碼效率,使得大部分指令的執(zhí)行時(shí)間僅為一個(gè)時(shí)鐘周期。因此,ATmega8具有接近1 MI /s/MHz的性能,運(yùn)行速度比普通CISC單片機(jī)高10倍。

          ATmega8型單片機(jī)內(nèi)集成了執(zhí)行速度為二個(gè)時(shí)鐘周期的硬件乘法器、8KB的Flash程序存儲(chǔ)器、512字節(jié)的E2PROM、2個(gè)具有比較模式的8位定時(shí)器、1個(gè)具有比較和捕獲模式的16位定時(shí)器、3路最大精度為16位的PWM輸出、8通道10位A/D轉(zhuǎn)換器,SPI/TWI同步串口及USART異步串口。ATmega8片內(nèi)集成的眾多系統(tǒng)級(jí)功能單元為控制系統(tǒng)的開發(fā)提供了很大的便利。設(shè)計(jì)的過程中,盡量通過軟件編程簡化硬件電路,有效縮短了開發(fā)周期。

          3.2 現(xiàn)場溫度采集

          現(xiàn)場溫度由溫度傳感器獲得。在本系統(tǒng)中,溫度傳感器選用 Pt100鉑電阻器,利用鉑金屬自身阻值隨溫度變化的特性測溫。鉑電阻經(jīng)變送器放大及線性化處理,輸出4mA—20mA的標(biāo)準(zhǔn)直流信號(hào),對(duì)應(yīng)用于現(xiàn)場溫度0℃— 400℃ ,通過 150Ω高精度金屬膜電阻轉(zhuǎn)化為0.6V—3V直流電壓信號(hào)。此模擬電壓信號(hào)符合ATmega8自帶A/D轉(zhuǎn)換器輸入要求,連接至ATmega8的PC0即可進(jìn)行A/D轉(zhuǎn)換。

          ATmega8內(nèi)部集成有8通道10位高速A/D轉(zhuǎn)換器。本系統(tǒng)只選用通道PC0作為A/D轉(zhuǎn)換的模擬電壓輸入。A/D轉(zhuǎn)換的參考電壓使用系統(tǒng)自帶的Vcc?;谇笆?,輸入10位A/D轉(zhuǎn)換器的模擬電壓0.6V—3V代表 0℃ — 400℃ ,則現(xiàn)場溫度 T可以表示為:

          T=400[(3.0-Vcc)(AD_Data/AD_Max)]/(3.0-0.6)] (2)

          式中,A/D_Data是A/D轉(zhuǎn)換后得到的10位數(shù)字量,AD_Max是10位A/D轉(zhuǎn)換器參考電壓對(duì)應(yīng)的數(shù)字量,此處為0x03ff。溫度測量絕對(duì)誤差為400/210℃,相對(duì)誤差小于0.1%,符合系統(tǒng)精度要求。

          至此,溫度值由非電模擬量轉(zhuǎn)換為數(shù)字量,可以直接用于單片機(jī)內(nèi)部加熱控制算法的運(yùn)算。實(shí)際編程時(shí),為了降低采樣過程瞬態(tài)誤差的干擾,運(yùn)用了算術(shù)均值濾波的方法,即最終參與控制運(yùn)算的溫度值 T通過10次采樣的溫度值求算術(shù)平均取得。

          3.3 數(shù)碼管顯示電路

          加熱過程中,被控對(duì)象的實(shí)際溫度,用戶設(shè)定的目標(biāo)爐溫等參量通過數(shù)碼管顯示電路實(shí)時(shí)顯示。數(shù)碼管顯示電路的原理如圖2所示。


          上一頁 1 2 下一頁

          評(píng)論


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