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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于8051單片機(jī)的數(shù)控電源設(shè)計(jì)方案

          基于8051單片機(jī)的數(shù)控電源設(shè)計(jì)方案

          作者: 時(shí)間:2008-09-23 來(lái)源:網(wǎng)絡(luò) 收藏

          本文介紹了以8051為控制單元,以數(shù)模轉(zhuǎn)換器DAC0832輸出參考電壓,以該參考電壓控制電壓轉(zhuǎn)換模塊LM350的輸出電壓大小。該電路設(shè)計(jì)簡(jiǎn)單,應(yīng)用廣泛,精度較高等特點(diǎn).LM350系列三端可調(diào)式集成穩(wěn)壓器的方法。


            關(guān)鍵詞:),數(shù)模轉(zhuǎn)換器(DA),掉電存儲(chǔ)器(EEPROM)。


            引言
            目前所使用的直流可調(diào)電源中,幾乎都為旋紐開(kāi)關(guān)調(diào)節(jié)電壓,調(diào)節(jié)精度不高,而且經(jīng)常跳變,使用麻煩。利用數(shù)控電源,可以達(dá)到每步0.1V的精度,輸出電壓范圍0~15V,電流可以達(dá)到2A。

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

          圖1:硬件系統(tǒng)結(jié)構(gòu)圖

            對(duì)選用芯片說(shuō)明
            DAC0832是一款常用的數(shù)摸轉(zhuǎn)換器,它有兩種連接模式,一種是電壓輸出模式,另外一種是電流輸出模式,為了設(shè)計(jì)的方便,選用電壓輸出模式,如電路圖所示,Iout1和Iout2之間接一參考電壓, VREF輸出可控制電壓信號(hào)。它有三種工作方式:不帶緩沖工作方式,單緩沖工作方式,雙緩沖工作方式。該電路采用單緩沖模式,由電路圖可知,由于/WR2 =/XFER=0,DAC寄存處于直通狀態(tài)。又由于ILE=1,故只要在選中該片(/CS=0)的地址時(shí),寫入(/WR=0)數(shù)字量,則該數(shù)字信號(hào)立即傳送到輸入寄存器,并直通至DAC寄存器,經(jīng)過(guò)短暫的建立時(shí)間,即可以獲得相應(yīng)的模擬電壓,一旦寫入操作結(jié)束,/WR1和/CS立即變?yōu)楦唠娖?,則寫入的數(shù)據(jù)被輸入寄存器鎖存,直到再次寫入刷新。

            AT24C02是一款常用的可掉電保存數(shù)據(jù)的ROM,2K比特容量,采用I2C總線操作,關(guān)于它的具體操作方法參考相關(guān)資料。

          圖2:主硬件電路圖


          圖3:參考電壓電路圖

           

            硬件電路設(shè)計(jì)

            采用常用的51芯片作為控制器,P0口和 DAC0832的數(shù)據(jù)口直接相連,DA的/CS和/WR1連接后接P2.0,/WR2和/XEFR接地,讓DA工作在單緩沖方式下。DA的11腳接參考電壓,參考電壓電路如圖2所示,通過(guò)調(diào)節(jié)可調(diào)電阻調(diào)節(jié)LM336的輸出電壓為5.12V,所以在DAC的8腳輸出電壓的分辨率為5.12V/256= 0.02V,也就是說(shuō)DA輸入數(shù)據(jù)端每增加1,電壓增加0.02V。

            DA的電壓輸出端接放大器OP07的輸入端,放大器的放大倍數(shù)為 R8/(R8+R9)=1K/(1K+4K)=5,輸出到電壓模塊LM350的電壓分辨率=0.02V×5=0.1V。所以,當(dāng)輸出數(shù)據(jù)增加1的時(shí)候,最終輸出電壓增加0.1V,當(dāng)調(diào)節(jié)電壓的時(shí)候,可以以每次0.1V的梯度增加或者降低電壓。

            本電路設(shè)計(jì)三個(gè)按鍵,KEY1為翻頁(yè)按鍵,最近設(shè)置的電壓大小保存在EEROM里面,比如10個(gè)電壓,按一下KEY1,電壓變?yōu)橄乱粋€(gè),省去了反復(fù)設(shè)置電壓的麻煩,KEY2為電壓+,KEY3為電壓+,按一下KEY2,當(dāng)前電壓增加0.1V,按一下KEY3,當(dāng)前電壓減小0.1V。

            限于篇幅原因,未畫出數(shù)碼管顯示電路,該系統(tǒng)使用3個(gè)數(shù)碼管,可以顯示三位數(shù),一個(gè)小數(shù)位,比如可以顯示12.5V,采用動(dòng)態(tài)掃描驅(qū)動(dòng)方式。本主電路的原理是通過(guò)控制DA的輸出電壓大小,通過(guò)放大器放大,給電壓模塊作為最終輸出的參考電壓,真正的電壓,電流還是由電壓模塊LM350輸出。

            為了達(dá)到2A的輸出電流,LM350必須選用金屬外殼封裝,并且?guī)源竺娣e的散熱片。

            軟件流程

          軟件系統(tǒng)

           

            軟件的設(shè)計(jì)主要完成三方面的功能:

            1.設(shè)置電壓并且保存,主要是對(duì)EEROM的操作。

            2.把設(shè)置的電壓送到DA,主要是對(duì)DA的操作。

            3.中斷顯示,把設(shè)置的電壓顯示到LED數(shù)碼管上。

            該數(shù)控電壓源實(shí)現(xiàn)保存最近10電壓功能,當(dāng)打開(kāi)電源的時(shí)候,它顯示和輸出的必須是上次使用電壓大小,所以在EEROM中使用11個(gè)地址保存數(shù)據(jù),第一個(gè)地址保存當(dāng)前電壓編號(hào),大小為1~10。第2個(gè)地址~第 11個(gè)地址連續(xù)保存10個(gè)電壓大小數(shù)據(jù)。電壓編號(hào)的大小分別對(duì)應(yīng)到相應(yīng)地址電壓大小。

            對(duì)軟件流程做一下說(shuō)明:當(dāng)電源打開(kāi)的時(shí)候,MCU進(jìn)行復(fù)位,寄存器清零。接著電源應(yīng)該顯示和輸出上次關(guān)機(jī)前的電壓大小,這時(shí)候MCU先讀取EEPROM中保存的電壓編號(hào),根據(jù)電壓編號(hào)讀出對(duì)應(yīng)電壓,把該數(shù)據(jù)送到DA,在轉(zhuǎn)換成BCD碼送到顯示部分。這時(shí)候程序循環(huán)檢測(cè)是否有按鍵信號(hào),如果KEY1按下,電壓編號(hào)指向下一個(gè),保存該電壓編號(hào),讀對(duì)應(yīng)電壓,把他送到DA并且顯示。如果KEY2按下,當(dāng)前電壓數(shù)據(jù)加1,相對(duì)應(yīng)輸出電壓(POWER—OUT引腳)增加0.1V,保存設(shè)置電壓數(shù)據(jù)。如果KEY3按下,電壓數(shù)據(jù)減1,輸出電壓
          減少0.1V,保存設(shè)置電壓數(shù)據(jù)。

            結(jié)語(yǔ)

            該數(shù)控電壓源經(jīng)過(guò)時(shí)間實(shí)際使用說(shuō)明,具有精度高,使用方便,硬件電路簡(jiǎn)單等特點(diǎn)。如果要作成產(chǎn)品,還需要增加電流測(cè)量和顯示部分,對(duì)這部分電路請(qǐng)參考相關(guān)資料。本文主要對(duì)如何控制功率輸出電壓大小做出個(gè)例子,該電路對(duì)測(cè)量領(lǐng)域,以及馬達(dá)調(diào)速方面都可以擴(kuò)展使用。



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