開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計_第1頁
開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計_第2頁
開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計_第3頁
開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計_第4頁
開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

/選修課設(shè)計(論文)題目開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計專業(yè) 電子信息工程 班級111112班姓名鄧逸博孫浙飛汪超 指導(dǎo)老師 王章權(quán) 所在學(xué)院信息學(xué)院 完成時間:2014年5月開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計電子信息工程專業(yè)鄧逸博孫浙飛汪超摘要:本設(shè)計設(shè)計制作的是開關(guān)電源模塊并聯(lián)供電系統(tǒng),能夠廣泛應(yīng)用在小功率及各種電子設(shè)備領(lǐng)域,能夠輸出8V定壓,功率可達(dá)到16W,并依據(jù)要求對兩路電流進(jìn)行按比例支配。本系統(tǒng)由DC/DC模塊,均流、分流模塊,愛惜電路組成。DC/DC模塊以IRF9530芯片為開關(guān),配以BUCK的外圍電路實現(xiàn)24V-8V的降壓和穩(wěn)壓。接受LM328比較電路實現(xiàn)電流和電壓的檢測,限制由DC/DC模塊構(gòu)成的并聯(lián)供電系統(tǒng)均流和分流工作模式,通過比較器電路實現(xiàn)過流愛惜。同時進(jìn)行LCD1602液晶同步顯示、獨立鍵盤輸入限制。輸入的值經(jīng)過單片機處理程序來限制輸出電壓,且輸出電壓和電流可實時顯示。關(guān)鍵詞:DC/DC模塊,BUCK,電流分流目錄TOC\o"1-3"\h\u一、緒論 1二、設(shè)計的目標(biāo)和基本要求 1(一)、設(shè)計目標(biāo) 1(二)、基本要求 2三、系統(tǒng)設(shè)計 2(一)、系統(tǒng)框圖 2(二)、硬件設(shè)計和方案選擇 31、單片機選擇 32、主電路選擇 33、驅(qū)動電路圖 44、幫助電源 55、電流、電壓采樣 66、顯示、按鍵 7(三)、軟件設(shè)計 71、主程序 72、按鍵程序 83、液晶程序 94、采樣程序 105、中斷、PID流程圖 11四、調(diào)試過程 12(一)、遇到的問題及解決方法 12(二)、數(shù)據(jù)分析 13五、體會和展望 14參考文獻(xiàn) 15附錄 15附錄1.整體電路圖 15附錄2.程序代碼 16一、緒論分布式直流開關(guān)電源系統(tǒng)取代傳統(tǒng)的集中式直流開關(guān)電源系統(tǒng)已成為大功率電源系統(tǒng)的發(fā)展方向:(1)單臺大功率電源簡潔受技術(shù)、成本的限制;(2)單臺直流開關(guān)電源故障會導(dǎo)致整個系統(tǒng)的故障,而分布式電源系統(tǒng)由若干電源模塊并聯(lián)組成,某個電源模塊故障不會導(dǎo)致整個電源故障;(3)可依據(jù)實際負(fù)荷的變更,自動確定須要投入運行的模塊數(shù)量或者解列退出的模塊數(shù)量,對變負(fù)荷運行很有意義;(4)由于多個電源模塊并聯(lián)運行,使每個電源模塊承受的電應(yīng)力較小,具有較高的運行效率,且具有較好的動態(tài)和靜態(tài)特性。分布式電源系統(tǒng)須要解決的主要問題是實現(xiàn)多個并聯(lián)運行的模塊輸出相同的功率。隨著通信電源技術(shù)的高速發(fā)展,電力電子設(shè)備和人們的工作、生活的關(guān)系日益密切,而通信電子設(shè)備都離不開牢靠的電源。進(jìn)入20世紀(jì)80年頭,計算機電源全面實現(xiàn)了開關(guān)電源化,領(lǐng)先完成計算機的電源換代;進(jìn)入20世紀(jì)90年頭,開關(guān)電源相繼進(jìn)入各種電子、電氣設(shè)備領(lǐng)域,程控交換機、通信、電力檢測設(shè)備電源、限制設(shè)備電源等都已廣泛運用了開關(guān)電源,更促進(jìn)了開關(guān)電源技術(shù)的快速發(fā)展。二、設(shè)計的目標(biāo)和基本要求(一)、設(shè)計目標(biāo)設(shè)計并制作一個由兩個額定輸出功率均為16W的8VDC/DC模塊構(gòu)成的并聯(lián)供電系統(tǒng)(見圖2.1)圖2.1兩路buck電路并聯(lián)供電(二)、基本要求(1)調(diào)整負(fù)載電阻至額定輸出功率工作狀態(tài),供電系統(tǒng)的直流輸出電壓UO=8.0±0.4V。在額定輸出功率工作狀態(tài)下,供電系統(tǒng)的效率不低于60%。(2)調(diào)整負(fù)載電阻,保持輸出電壓UO=8.0±0.4V,使兩個模塊輸出電流之和IO=1.0A且按I1:I2=1:1模式自動支配電流,調(diào)整負(fù)載電阻,保持輸出電壓UO=8.0±0.4V,使兩個模塊輸出電流之和IO=1.5A且按I1:I2=1:2模式自動支配電流,每個模塊輸出電流的相對誤差確定值不大于5%。調(diào)整負(fù)載電阻,保持輸出電壓UO=8.0±0.4V,使兩個模塊輸出電流之和IO=4.0A且按I1:I2=1:1模式自動支配電流,每個模塊的輸出電流的相對誤差的確定值不大于2%。(3)調(diào)整負(fù)載電阻,保持輸出電壓UO=8.0±0.4V,使負(fù)載電流IO在1.5~3.5A之間變更時,兩個模塊的輸出電流可在(0.5~2.0)范圍內(nèi)按指定的比例自動支配,每個模塊的輸出電流相對誤差的確定值不大于2%。(4)具有負(fù)載短路愛惜及自動復(fù)原功能,愛惜閾值電流為4.5A(調(diào)試時允許有±0.2A的偏差)。在額定輸出功率工作狀態(tài)下,進(jìn)一步提高供電系統(tǒng)效率。三、系統(tǒng)設(shè)計(一)、系統(tǒng)框圖圖3.1系統(tǒng)框圖系統(tǒng)說明:以單片機為核心處理元件,DC-DC變換器為主電路。按鍵、顯示便于人機交互。驅(qū)動電路將單片機和DC-DC變換器隔離,幫助電源給單片機和采樣電路供電。單片機將電壓電流通過采樣電路,運放采樣回來在內(nèi)部進(jìn)行A/D處理,然后將數(shù)據(jù)輸出液晶顯示。在內(nèi)部進(jìn)行算法調(diào)整。使整個系統(tǒng)穩(wěn)定,并達(dá)到基本要求。整個系統(tǒng)設(shè)計如上圖3.1所示。(二)、硬件設(shè)計和方案選擇1、單片機選擇方案一:運用89C51單片機指令簡潔,易學(xué)易懂,外圍電路簡潔,硬件設(shè)計便利,IO口操作簡潔,無方向寄存器,資源豐富,,價格便宜、簡潔購買,資料豐富簡潔查到,程序燒寫簡潔,但要外接A/D、D/A芯片,來實現(xiàn)對整個供電系統(tǒng)的限制,須要占用較多的I/O接口,會使一般單片機承載過大的數(shù)據(jù)處理任務(wù),功耗較大。方案二:運用ATmega16,ATmega16外設(shè)特點:兩個具有獨立的預(yù)分頻器和比較器功能的8位定時器/計數(shù)器,兩個具有預(yù)分頻器、比較功能和撲捉功能的16位定時器/計數(shù)器,具有獨立預(yù)分頻器的實時時鐘計數(shù)器,兩路8位PWM,4路辨別率可編程(2~16位)的PWM,輸出比較調(diào)制器,8路10位ADC,面對字節(jié)的兩線接口I^2C總線,兩個可編程的串行USART,可工作于主機/從機模式的SPI串行接口,具有獨立片內(nèi)振蕩器的的可編程看門狗定時器,片內(nèi)模擬比較器。特殊的處理器特點:上電復(fù)位以及可編程的掉電檢測,片內(nèi)經(jīng)過標(biāo)定的RC振蕩器,片內(nèi)/片外中斷源,6種睡眠模式,可以通過軟件進(jìn)行選擇的時鐘頻率,通過熔絲位可以選擇兼容模式,全局上拉禁止功能。結(jié)合前兩個方案優(yōu)點,經(jīng)過方案比較和論證,最終確定運用方案二,因為ATmega16速度快自帶PWM,自帶AD,而用89C51會使電路更加困難和不穩(wěn)定所以,用ATmega16單片機和其它限制器電路同實現(xiàn)整個系統(tǒng)的限制。2、主電路選擇方案一:有一種型號為LM2956的降壓開關(guān)電壓調(diào)整器,能夠輸出3A的驅(qū)動電流,同時具有很好的線性和負(fù)載調(diào)整特性,該器件內(nèi)部集成頻率補償和固定頻率發(fā)生器,極大地簡化了開關(guān)電源電路的設(shè)計。方案二:接受SG3525自帶脈寬調(diào)制電源芯片來設(shè)計DC-DC降壓轉(zhuǎn)換電路,SG3525簡潔牢靠及運用便利靈敏,輸出驅(qū)動為推拉輸出形式,增加了驅(qū)動實力;內(nèi)部含有欠壓鎖定電路,死區(qū)時間可調(diào)、軟啟動限制電路、PWM鎖存器,有過流愛惜功能,頻率可調(diào),同時能限制最大占空比。由此設(shè)計而成的電路易于實現(xiàn)脈寬調(diào)制,然而在真正運用時會發(fā)覺,為得到要求的電壓輸出值,開關(guān)管S的參數(shù)選取相當(dāng)不易。方案三:將經(jīng)過隔離變壓器,整流濾波后得到的24VDC通過Buck降壓電路進(jìn)行DC-DC轉(zhuǎn)換,由ATmega16單片機產(chǎn)生PWM限制其占空比,從而得到要求的直流電壓。此方案僅用一塊限制芯片不但可以實現(xiàn)對Buck電路的限制,而且可以結(jié)合A/D和D/A對輸出電壓進(jìn)行調(diào)整和顯示。由于ATmega16單片機自帶能夠產(chǎn)生脈寬調(diào)制所需的PWM信號的端口,在實際制作中用起來比較便利。ATmega16單片機自帶8路10位a/D轉(zhuǎn)換。結(jié)合前兩個方案優(yōu)點,經(jīng)過方案比較和論證,最終確定運用方案三如圖3.2,因為ATmega16單片機,自帶PWM模塊,可以輸出PWM方波限制電路,節(jié)約芯片成本,也可實現(xiàn)AD轉(zhuǎn)換。用單片機和其它限制器電路同實現(xiàn)整個系統(tǒng)的限制。3.2主電路圖3、驅(qū)動電路圖方案一:單片機輸出PWM,接受IR2101驅(qū)動DC-DC電路中的IRF9530,限制輸出電壓。方案二:先接受光耦TLP250和單片機進(jìn)行隔離,有效愛惜單片機,之后用IRF3205去驅(qū)動MOS管IRF9530,限制輸出電壓。結(jié)合兩種方案的對比選擇方案二如圖3.3,因為方案二中接受光耦,將單片機和主電路隔離,能夠有效愛惜單片機,而且也能使正常使電路工作。圖3.3驅(qū)動電路圖4、幫助電源方案一:接受集成的三端穩(wěn)壓集成芯片,7815和7805分別給光耦和運放,還有單片機供電,7815內(nèi)含過流,過熱,過載愛惜電路。方案二:接受LM2575開關(guān)穩(wěn)壓集成芯片,它內(nèi)部集成了一個固定的振蕩器,是一種高效的穩(wěn)壓芯片,大多數(shù)狀況下無需加散熱片。內(nèi)部有完善的愛惜電路,包括電流限制及熱關(guān)斷電路等。它可以依據(jù)用戶要求選擇輸出電壓,可輸出3.3V,5V,12V,15V。然后再經(jīng)過7805產(chǎn)生5V電壓。結(jié)合兩種方案的對比選擇方案二如圖3.4,因為方案二中的LM2575的是可調(diào)整輸出電壓的芯片,便利調(diào)控,而且它內(nèi)部有電壓基準(zhǔn)比較,使輸出的電壓能夠精確并穩(wěn)定,比7815要精確,且性能好。圖3.4幫助電源電路圖5、電流、電壓采樣采樣模塊是輸出電壓經(jīng)過采樣回來,形成一個負(fù)反饋.經(jīng)過單片機內(nèi)部A/D進(jìn)行處理,然后使輸出更加穩(wěn)定和精確。電壓采樣模塊干脆接受LM358運放如圖3.5,將輸出的電壓縮小確定倍數(shù)后,然后送給單片機處理推斷。電流采樣是經(jīng)過0.1歐/4瓦的采樣電阻后,縮小確定倍數(shù),然后經(jīng)過一個差分電路,將電壓值送入單片機進(jìn)行處理如圖3.6。圖3.5電壓采樣電路圖圖3.6電流采樣電路圖6、顯示、按鍵顯示部分接受字符型液晶1602,能夠同時顯示16x02即32個字符。16個引腳,3個限制引腳,8位雙向數(shù)據(jù)端引腳。具有微功耗、體積小、顯示內(nèi)容豐富、超薄靈活的特點。用戶可以對EN、RW、RS的數(shù)據(jù)進(jìn)行編程,然后通過D0~D7輸出顯示數(shù)據(jù)。其引腳功能圖見下表6.1表6.11602引腳功能圖按鍵部分接受四個獨立的按鍵,分別限制占空比的加和減,對輸出的電壓和電流進(jìn)行限制,使輸出能夠達(dá)到期望的要求,其按鍵功能表如表6.2。表6.2按鍵功能表鍵名S1S2S3S4功能PWM1加0.2%PWM1減0.2%PWM2加0.2%PWM2減0.2%CPU端口號PD0PD1PD2PD3(三)、軟件設(shè)計1、主程序如圖3.7為主程序流程圖,一起先給系統(tǒng)各部分初始化,包括按鍵初始化,液晶初始化,PWM初始化,AD采樣初始化,中斷初始化,然后在進(jìn)入大循環(huán),在循環(huán)內(nèi)進(jìn)行數(shù)據(jù)的顯示,包括當(dāng)前輸入的占空比為多少,當(dāng)前采樣回來的數(shù)字量和實際的電壓值為多少。還有按鍵程序,和AD采樣。同時每10毫秒進(jìn)入定時器0中斷進(jìn)行調(diào)整。圖3.7主程序流程圖2、按鍵程序按鍵程序流程圖如圖3.8所示。按鍵接受四個獨立的按鍵,分別限制PWM1,PWM2的加和減,當(dāng)有鍵按下時,掃描按鍵,然后進(jìn)入推斷。推斷當(dāng)前寄存器對應(yīng)的值是否大于了設(shè)定的上限值,假如沒有則數(shù)值加1,假如達(dá)到了則鉗位在最大的上限值。然后返回數(shù)據(jù)。通過按鍵程序,可以限制占空比的調(diào)整。圖3.8按鍵程序流程圖3、液晶程序圖3.8為1602液晶屏的程序框圖,1602由3個限制引腳,8位雙向數(shù)據(jù)端引腳限制顯示的內(nèi)容和位置。因此,這部分程序主要有初始化函數(shù),寫叮囑函數(shù)和寫數(shù)據(jù)函數(shù)組成。初始化函數(shù)主要對液晶屏的顯示模式進(jìn)行設(shè)定,寫叮囑函數(shù)主要是對顯示的位置和顯示的方式進(jìn)行設(shè)置,寫數(shù)據(jù)函數(shù)是確定顯示的內(nèi)容。圖3.81602程序流程圖4、采樣程序如圖3.9是采樣程序流程圖。一起先配置AD寄存器,然后啟動AD寄存器,然后將采樣回來的數(shù)據(jù)組合成10位的數(shù)據(jù),然后采樣8次,去頭去尾后,對其求平均值。將數(shù)據(jù)處理后,給液晶顯示。然后進(jìn)行電壓推斷,是否小于要求的最小值,假如是的話進(jìn)行鉗位,然后是否小于設(shè)定的最大值,是的話,就是在要求范圍內(nèi),那就進(jìn)行PID算法的調(diào)整,進(jìn)行電流的分流。假如大于最大值的話,就進(jìn)行鉗位。圖3.9AD采樣程序流程圖5、中斷、PID流程圖如圖3.10和3.11分別是中斷流程圖和PID算法程序流程圖。定時器0中斷定時10毫秒溢出中斷,在中斷中進(jìn)行PID調(diào)整,和電壓反饋調(diào)整。PID算法是依據(jù)公式,對采樣電阻采樣回來的電壓進(jìn)行反饋計算。依據(jù)對P,I,D三個參數(shù)的設(shè)置,然后結(jié)合算法公式,對輸出的數(shù)據(jù)進(jìn)行不斷的調(diào)整,達(dá)到要求的值。圖3.10定時器0中斷圖3.11PID算法流程圖四、調(diào)試過程(一)、遇到的問題及解決方法(1)、在對電路板進(jìn)行設(shè)計,做板子的時候,經(jīng)過封塑機出來后的板子,然后用腐蝕劑進(jìn)行腐蝕,得到了一塊單面板,當(dāng)我們把器件焊上去的時候發(fā)覺,跟我們預(yù)期的反了一下,全部的器件都反了一下,這樣子,整個電路就不能用了。經(jīng)過我們的探討和思索,我們認(rèn)為是我們在打印出油印紙的時候沒有將它鏡像,使整塊板子就是依據(jù)反面的印了出來,經(jīng)過我們鏡像后,發(fā)覺和我們所須要的板子是一樣的了,全部的元器件都能依據(jù)原來的位置進(jìn)行裝配。而且板子也能正常工作。(2)、在整個電路都做出來以后,進(jìn)行模塊調(diào)試的時候發(fā)覺方波的波形并不是很好,有一點的曲線,經(jīng)過老師上課的講解指導(dǎo)了是,柵極旁邊的電阻阻值太大,因為有分布電容,全部會充放電,使波形不是很志向。經(jīng)過計算后選取了一個合適的阻值,使波形能夠達(dá)到電路的要求。還有在整體調(diào)試的時候,發(fā)覺上面一路的測試點,始終是0,下面一路始終是1A左右,經(jīng)過主電路排查后,發(fā)覺沒有問題,然后對測試點進(jìn)行排查,發(fā)覺測試點的夾子松掉了,使電流都往下去了。將夾子焊好后,電路正常工作。(3)、在進(jìn)行程序調(diào)試的時候,始終在運用內(nèi)部的1M晶振,所以始終精度上不去,調(diào)整都是很粗的調(diào)整,電流始終達(dá)不到指標(biāo)。還有液晶刷新很慢,按鍵要按很久才能用。后來查閱了資料,發(fā)覺在燒寫程序的時候要勾上熔絲位,假如運用的是8M以上的外部晶振的話,那就要把熔絲位全部勾上。這樣才是在運用外部的16M晶振。將熔絲位勾上后,調(diào)整程序后,發(fā)覺精度大大的提升了。能夠達(dá)到基本的要求。還有在對PID參數(shù)設(shè)置的時候,一起先沒有頭緒,隨意調(diào),后來看論壇和同學(xué)談?wù)?,發(fā)覺要一個一個參數(shù)的調(diào),在經(jīng)過多次試驗后,將PID參數(shù)調(diào)整好了,是指標(biāo)達(dá)到了要求。(二)、數(shù)據(jù)分析表4.1和表4.2是在電流1:1狀況下,比例調(diào)整和PI調(diào)整的數(shù)據(jù)對比。表4.1負(fù)載為8.9Ω,兩模塊電流按1:1支配(比例反饋)I1(A)I2(A)I總(A)Uo(V)給定值0.50.51.08.0測量值0.5050.5151.0028.24確定誤差1%3%0.2%3%表4.2負(fù)載為8.5Ω,兩模塊電流按1:1支配(PI反饋)I1(A)I2(A)I總(A)Uo(V)給定值0.50.51.08.0測量值0.4940.5081.0078.08確定誤差1.2%1.7%0.7%1%表4.3和表4.4是在電流1:2狀況下,比例調(diào)整和PI調(diào)整的數(shù)據(jù)對比。表4.3負(fù)載為7.0Ω,兩模塊電流按1:2支配狀況(比例反饋)I1(A)I2(A)I總(A)Uo(V)給定值0.51.01.58.0測量值0.4620.9301.4977.71確定誤差7.6%7%0.2%3.6%表4.4負(fù)載為5.9Ω,兩模塊電流按1:2支配狀況(PI反饋)I1(A)I2(A)I總(A)Uo(V)給定值0.51.01.58.0測量值0.5080.9811.5027.60確定誤差1.6%1.9%0.2%5%對比表4.1和表4.2可以看出,同樣是1:1的電流支配狀況下,比例調(diào)整的誤差在5%以內(nèi),達(dá)到了基本的要求,但是在PI調(diào)整下,可以看出誤差精度已經(jīng)達(dá)到了2%的要求。對比表4.3和表4.4可以看出,同樣是1:2的電流支配狀況下,比例調(diào)整的誤差已經(jīng)超出了5%的要求,而在PI調(diào)整下精度達(dá)到了2%以內(nèi)。對比著兩組數(shù)據(jù),可以看出了在PI的調(diào)整下精度大大的提升,說明白PID算法在限制方面的優(yōu)勢,使整個系統(tǒng)更加完善。五、體會和展望通過這次選修課的學(xué)習(xí),學(xué)到了專業(yè)學(xué)問方面的一些學(xué)問。整個學(xué)習(xí)的過程是很重要的。由于這個學(xué)期在學(xué)習(xí)《電力電子》這門課,而課題又正好和電力電子相關(guān)學(xué)問有關(guān),所以對于這次的課程,通過對整個系統(tǒng)的設(shè)計,測試,調(diào)整。更好的了解了電力電子和開關(guān)電源相關(guān)的學(xué)問,也更深化的學(xué)習(xí)到了一些課堂上無法學(xué)習(xí)到的東西。將課堂的理論學(xué)問和實踐想結(jié)合,將學(xué)習(xí)到的東西更加印象深刻,不用去死記硬背,能夠靈敏運用。對于編寫程序,整體的邏輯性還要加強。流程圖要寫好再寫程序。對于展望,希望能夠在以后的學(xué)習(xí)中把硬件方面學(xué)的更好,能夠把不足給彌補。在程序方面多學(xué)習(xí)一下別人的算法。學(xué)的更好,希望一次比一次有進(jìn)步。參考文獻(xiàn)[1]程漢湘,武小梅.電力電子技術(shù).其次版.科學(xué)出版社.[2]譚浩強.C程序設(shè)計.第三版,北京:清華高校出版社,2008.11.[3]童詩白,華成英.模擬電子技術(shù),第四版.北京:高等教化出版社,2006.5.[4]閻石.?dāng)?shù)字電子技術(shù)基礎(chǔ),第五版.北京:高等教化出版社,2006.5.[5]蔣燕君.自動限制原理.重慶高校出版社,2008.1附錄附錄1.整體電路圖附錄2.程序代碼//******************main.c*************//#include<iom16v.h>#include<macros.h>#include"1602.h"#include"key.h"#include"ad.h"#include"pid.h"#defineucharunsignedchar#defineuintunsignedint#pragmainterrupt_handlertimer0_ovf_isr:10//**********定時器0中斷***********//voidtimer0_init(void){TCCR0=0x00;//停止定時器TCNT0=0x64; //初始值,每10毫秒進(jìn)一次中斷TIMSK=0x01;//允許中斷SREG|=BIT(7);//允許全局中斷}//***********外中斷0函數(shù)**********//voidtimer0_ovf_isr(void){TCNT0=0x64;pid1_calculating();//PID調(diào)整OCR1Apid2_calculating();//PID調(diào)整OCR1Bcom_vol();//電壓反饋}//*******PWM設(shè)置輸出********//voidKPWM(void){PORTD|=BIT(4)|BIT(5);DDRD|=BIT(4)|BIT(5);TCCR1A=0xA2;//兩路PWM,匹配清零TCCR1B=0x11;//相位修正PWM模式,位數(shù)可調(diào),預(yù)分頻1ICR1=800;//此數(shù)為16位PWM,16M晶振,clk/(2*N*TOP),頻率為10KOCR1A=255;//占空比31.8%OCR1B=255;//占空比31.8%}voidmain(){KPWM();//PWM函數(shù)LCD_init();//1602初始化函數(shù)key_init();//按鍵初始化函數(shù)timer0_init();//定時器0初始化adcport_init();//AD端口初始化while(1){Display_PWM();//顯示PWM函數(shù) press();//按鍵函數(shù) display_AD0();//顯示AD0的模擬量和數(shù)字量}}//****************1602.h************//#ifndef_1602_H_#define_1602_H_#defineucharunsignedchar#defineuintunsignedintvoiddelay(uintMS);voidwrite_com(uintcom);voidwrite_dat(uintdat);voidLCD_init();voidDisplay_PWM();voidcalculate_AD0();#endif//***********1602.c*************//#include<iom16v.h>#include<macros.h>#include"1602.h"#defineucharunsignedchar#defineuintunsignedint//******顯示固定數(shù)組PWM:*********//constuchartab[]="PWM:";//*******延時函數(shù)*******//voiddelay(uintMS)//約為1MS的延時函數(shù) {uinti,j;for(i=0;i<MS;i++)for(j=0;j<2282;j++);//2282是在16MHz晶振下為MS毫秒}//******1602寫地址********//voidwrite_com(uintcom){PORTA&=~BIT(5);//RS=0 PORTA&=~BIT(6);//RW=0 PORTB=com;//送地址 delay(5); PORTA|=BIT(7);//EN=1 delay(5); PORTA&=~BIT(7);//EN=0}//******1602寫數(shù)據(jù)********//voidwrite_dat(uintdat){PORTA|=BIT(5);//RS=1 PORTA&=~BIT(6);//RW=0 PORTB=dat;//送數(shù)據(jù) delay(5); PORTA|=BIT(7);//EN=1 delay(5); PORTA&=~BIT(7);//EN=0} //********1602初始化*********//voidLCD_init(){DDRA=0XFF; DDRB=0xFF; delay(5); write_com(0X38);//設(shè)8位數(shù)據(jù)線,雙行,5*7點陣 delay(5); write_com(0X0c);//開顯示,不顯示光標(biāo) delay(5); write_com(0X06);//輸入地址自加,屏幕不移動 delay(5); write_com(0X01);//清屏 delay(5);}//*******顯示PWM占空比******//voidDisplay_PWM(){uchari;uintshi,ge,xiaoshu,beichu;uintshi1,ge1,xiaoshu1;shi=OCR1A/100;//將OCR1A百位拆分ge=OCR1A/10%10;//將OCR1A十位拆分xiaoshu=OCR1A%10;//將OCR1A個位拆分beichu=ICR1/10;//將ICR1變?yōu)閮晌粩?shù)shi1=OCR1B/100;//將OCR1B百位拆分ge1=OCR1B/10%10;//將OCR1B十位拆分xiaoshu1=OCR1B%10;//將OCR1B個位拆分write_com(0x80);for(i=0;tab[i]!='\0';i++){write_dat(tab[i]);}write_com(0x84);write_dat((shi*100+ge*10+xiaoshu)*100/beichu/100+0x30);//顯示十位write_dat((shi*100+ge*10+xiaoshu)*100/beichu/10%10+0x30);//顯示個位write_dat('.');write_dat((shi*100+ge*10+xiaoshu)*100/beichu%10+0x30);//顯示小數(shù)點write_dat('%');write_com(0x8a);write_dat((shi1*100+ge1*10+xiaoshu1)*100/beichu/100+0x30);//顯示十位write_dat((shi1*100+ge1*10+xiaoshu1)*100/beichu/10%10+0x30);//顯示個位write_dat('.');write_dat((shi1*100+ge1*10+xiaoshu1)*100/beichu%10+0x30);//顯示小數(shù)點write_dat('%');}//*****************AD.H***************//#ifndef_AD_H_#define_AD_H_voidadcport_init();voidADC0INIT(void);voidADC1INIT(void);voidADC2INIT(void);intget_ADCdata(void);floatget_ave(inta[8]);floatget_ADC0data(void);floatget_ADC1data(void);floatget_ADC2data(void);voiddisplay_AD0();#endif//**************AD.C***************//#include<iom16v.h>#include<macros.h>#include"1602.h"#defineucharunsignedchar#defineuintunsignedint//參考電壓#defineREF5.12//**********ADC端口初始化**********//voidadcport_init(){DDRA&=~BIT(0);PORTA&=~BIT(0);DDRA&=~BIT(1);PORTA&=~BIT(1);DDRA&=~BIT(2);PORTA&=~BIT(2);}//******ADC0初始化********//voidADC0INIT(void){ADMUX=0x40;//AREF基準(zhǔn)壓,結(jié)果右對齊,通道為ADC0ADCSRA=0x87;//使能ADC,單次轉(zhuǎn)換,預(yù)分頻為128ADCSRA|=(1<<ADSC);//啟動首次轉(zhuǎn)換while(!(ADCSRA&(1<<ADIF)));//等待轉(zhuǎn)換結(jié)束ADCSRA|=(1<<ADIF);//清除ADIF位}//******ADC1初始化********//voidADC1INIT(void){ADMUX=0x41;//AREF基準(zhǔn)壓,結(jié)果右對齊,通道為ADC1ADCSRA=0x87;//使能ADC,單次轉(zhuǎn)換,預(yù)分頻為128ADCSRA|=(1<<ADSC);//啟動首次轉(zhuǎn)換while(!(ADCSRA&(1<<ADIF)));//等待轉(zhuǎn)結(jié)束循環(huán)ADCSRA|=(1<<ADIF);//清除ADIF位}//******ADC2初始化********//voidADC2INIT(void){ADMUX=0x42;//AREF基準(zhǔn)壓,結(jié)果右對齊,通道為ADC2ADCSRA=0x87;//使能ADC,單次轉(zhuǎn)換,預(yù)分頻為128ADCSRA|=(1<<ADSC);//啟動首次轉(zhuǎn)換while(!(ADCSRA&(1<<ADIF)));//等待轉(zhuǎn)結(jié)束循環(huán)ADCSRA|=(1<<ADIF);//清除ADIF位}//*********獲得ADC的采樣值*********//intget_ADCdata(void){inta,b;a=b=0;b=ADCL;//讀高位后數(shù)據(jù)更新a=ADCH;//再讀取ADCH數(shù)據(jù)a=(a<<8);//右對齊,左移八位a=(a|b);//組成10位二進(jìn)制數(shù)據(jù)returna;}//*********去頭去尾,獲得平均值*********//floatget_ave(inta[8]){ floatv; unsignedchari; floatsum=0; for(i=1;i<7;i++)//從第2次到第6次數(shù)據(jù) { sum=sum+a[i]; } v=sum/6; returnv;}//********獲得ADC0采樣8次的平均值**********//floatget_ADC0data(void){ unsignedchari=0; floatv; intbuf[8]={0}; for(i=0;i<8;i++) { ADC0INIT();//AD初始化一次 buf[i]=get_ADCdata();//將數(shù)據(jù)放入數(shù)組 } v=get_ave(buf); returnv;}//********獲得ADC1采樣8次的平均值**********//floatget_ADC1data(void){ unsignedchari=0; floatv; intbuf[8]={0}; for(i=0;i<8;i++) { ADC1INIT();//AD初始化一次 buf[i]=get_ADCdata();//將數(shù)據(jù)放入數(shù)組 } v=get_ave(buf); returnv;}//********獲得ADC2采樣8次的平均值**********//floatget_ADC2data(void){ unsignedchari=0; floatv; intbuf[8]={0}; for(i=0;i<8;i++) { ADC2INIT();//AD初始化一次 buf[i]=get_ADCdata();//將數(shù)據(jù)放入數(shù)組 } v=get_ave(buf); returnv;}//*********將數(shù)據(jù)拆分送顯示*******//voiddisplay_AD0(){inta,b;uchars[6],k[6]; uchari,j,m;a=get_ADC0data()*REF/1024*1000;//將數(shù)據(jù)轉(zhuǎn)化為十進(jìn)制 b=get_ADC0data();//數(shù)字量 s[0]=a/1000+'0'; s[1]='.'; s[2]=a%1000/100+'0'; s[3]=a%100/10+'0'; s[4]=a%10+'0'; s[5]='V'; k[0]='D'; k[1]=':'; k[2]=b/1000+'0'; k[3]=b%1000/100+'0'; k[4]=b%100/10+'0'; k[5]=b%10+'0'; write_com(0xC0); for(i=0;i<6;i++) { write_dat(s[i]); } write_com(0xC7); for(j=0;j<6;j++) { write_dat(k[j]); }}//*********電壓比較*******//voidcom_vol(){if(get_ADC2data()>=360)//實際電壓值大于8.4V{OCR1A=265;//鉗位到8.4V OCR1B=265;}if(get_ADC2data()<=310)//實際電壓值小于7.6V{OCR1A=240;//鉗位到7.6V OCR1B=240;}}//*************KEY.H************//#ifndef_KEY_H_#define_KEY_H_voidkey_init();voidpress();ucharkey();#endif//**************KEY.C*************//#include<iom16v.h>#include<macros.h>#include"1602.h"#defineucharunsignedchar#defineuintunsignedintuintcount_pwm=255;uintcount_pwm1=255;//**********按鍵初始化函數(shù)********//voidkey_init(){DDRD&=~BIT(0);//獨立鍵盤接口置高電平PORTD|=BIT(0);DDRD&=~BIT(1);//獨立鍵盤接口置高電平PORTD|=BIT(1);DDRD&=~BIT(2);//獨立鍵盤接口置高電平PORTD|=BIT(2);DDRD&=~BIT(3);//獨立鍵盤接口置高電平PORTD|=BIT(3);DDRD&=~BIT(7);//獨立鍵盤接口置高電平PORTD|=BIT(7);}//*********按鍵函數(shù)***********//voidpress(){ucharm;m=PIND; m&=0x0f; if(m==0X0e) { count_pwm=OCR1A;//讀取當(dāng)前PWM值 count_pwm+=1; count_pwm=OCR1B;//讀取當(dāng)前PWM值count_pwm+=1; delay(1);//按鍵消抖 while(PIND==0x0e); OCR1A=count_pwm;//OCR1A賦新值 OCR1B=count_pwm;//OCR1B賦新值 if(OCR1A>=265&&OCR1B>=265) { OCR1A=265; OCR1B=265; } } if(m==0X0d) { count_pwm=OCR1A;//讀取當(dāng)前PWM值 count_pwm-=1; count_pwm=OCR1B;//讀取當(dāng)前PWM值 count_pwm-=1; delay(1);//按鍵消抖 while(PIND==0x0d); OCR1A=count_pwm;//OCR1A賦新值 OCR1B=count_pwm;//OCR1B賦新值 if(OCR1A<=240&&OCR1B<=240) { OCR1A=240; OCR1B=240; } } if(m==0X0b) { count_pwm=OCR1A;//讀取當(dāng)前PWM值 count_pwm+=1; count_pwm1=OCR1B;//讀取當(dāng)前PWM值 count_pwm1-=1; delay(1);//按鍵消抖 while(PIND==0x0b); OCR1A=count_pwm;//OCR1A賦新值 OCR1B=count_pwm1;//OCR1B賦新值 if(OCR1A>=261||OCR1B<=251) { OCR1A=261; OCR1B=251; } } if(m==0X07) { count_pwm=OCR1A;//讀取當(dāng)前PWM值 count_pwm-=1; count_pwm1=OCR1B;//讀取當(dāng)前PWM值 count_pwm1+=1; delay(1);//按鍵消抖 while(PIND==0x07); OCR1A=count_pwm;//OCR1A賦新值 OCR1B=count_pwm1;//OCR1B賦新值 if(OCR1A<=250&&OCR1B>=260) { OCR1A=250; OCR1B=260; } }}//***********PID.H*************//#ifndef_PID_H_#define_PID_H_voidpid1_calculating();voidpid2_calculating();#endif//***********PID.H***********//#include<iom16v.h>#include<macros.h>#include<math.h>#include"ad.h"#defineucharunsignedchar#define

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論