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

下載本文檔

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

文檔簡介

1、選 修 課 設(shè) 計(jì) (論 文) 題題 目目 開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計(jì) 專專 業(yè)業(yè) 電子信息工程 班班 級級 111 112 班 姓姓 名名 鄧逸博 孫浙飛 汪超 指導(dǎo)教師指導(dǎo)教師 王章權(quán) 所在學(xué)院所在學(xué)院 信息學(xué)院 完成時間:2014 年 5 月 開關(guān)電源模塊并聯(lián)供電系統(tǒng)設(shè)計(jì) 電子信息工程專業(yè) 鄧逸博 孫浙飛 汪超 摘摘 要:要:本設(shè)計(jì)設(shè)計(jì)制作的是開關(guān)電源模塊并聯(lián)供電系統(tǒng),能夠廣泛應(yīng)用在小功 率及各種電子設(shè)備領(lǐng)域,能夠輸出 8V 定壓,功率可達(dá)到 16W,并根據(jù)要求對兩路電 流進(jìn)行按比例分配。本系統(tǒng)由 DC/DC 模塊,均流、分流模塊,保護(hù)電路組成。 DC/DC 模塊以 IRF9530 芯

2、片為開關(guān),配以 BUCK 的外圍電路實(shí)現(xiàn) 24V-8V 的降壓與穩(wěn) 壓。采用 LM328 比較電路實(shí)現(xiàn)電流和電壓的檢測,控制由 DC/DC 模塊構(gòu)成的并聯(lián)供 電系統(tǒng)均流與分流工作模式,通過比較器電路實(shí)現(xiàn)過流保護(hù)。同時進(jìn)行 LCD1602 液 晶同步顯示、獨(dú)立鍵盤輸入控制。輸入的值經(jīng)過單片機(jī)處理程序來控制輸出電壓, 且輸出電壓和電流可實(shí)時顯示。 關(guān)鍵詞關(guān)鍵詞: DC/DC 模塊,BUCK,電流分流 目 錄 一、緒論 .1 二、設(shè)計(jì)的目標(biāo)與基本要求 .1 (一) 、設(shè)計(jì)目標(biāo).1 (二) 、基本要求.2 三、系統(tǒng)設(shè)計(jì) .2 (一) 、系統(tǒng)框圖.2 (二) 、硬件設(shè)計(jì)與方案選擇.3 1、單片機(jī)選擇 .

3、3 2、主電路選擇 .3 3、驅(qū)動電路圖 .4 4、輔助電源 .5 5、電流、電壓采樣 .6 6、顯示、按鍵 .7 (三)、軟件設(shè)計(jì).7 1、主程序 .7 2、按鍵程序 .8 3、液晶程序 .9 4、采樣程序 .10 5、中斷、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)單臺

4、直 流開關(guān)電源故障會導(dǎo)致整個系統(tǒng)的故障,而分布式電源系統(tǒng)由若干電源模塊并聯(lián)組 成,某個電源模塊故障不會導(dǎo)致整個電源故障;(3)可根據(jù)實(shí)際負(fù)荷的變化,自動 確定需要投入運(yùn)行的模塊數(shù)量或者解列退出的模塊數(shù)量,對變負(fù)荷運(yùn)行很有意義; (4)由于多個電源模塊并聯(lián)運(yùn)行,使每個電源模塊承受的電應(yīng)力較小,具有較高的 運(yùn)行效率,且具有較好的動態(tài)和靜態(tài)特性。分布式電源系統(tǒng)需要解決的主要問題是 實(shí)現(xiàn)多個并聯(lián)運(yùn)行的模塊輸出相同的功率。隨著通信電源技術(shù)的高速發(fā)展,電力電 子設(shè)備與人們的工作、生活的關(guān)系日益密切,而通信電子設(shè)備都離不開可靠的電源。 進(jìn)入 20 世紀(jì) 80 年代,計(jì)算機(jī)電源全面實(shí)現(xiàn)了開關(guān)電源化,率先完成計(jì)

5、算機(jī)的電源 換代;進(jìn)入 20 世紀(jì) 90 年代,開關(guān)電源相繼進(jìn)入各種電子、電氣設(shè)備領(lǐng)域,程控交 換機(jī)、通信、電力檢測設(shè)備電源、控制設(shè)備電源等都已廣泛使用了開關(guān)電源,更促 進(jìn)了開關(guān)電源技術(shù)的迅速發(fā)展。 二、設(shè)計(jì)的目標(biāo)與基本要求 (一) 、設(shè)計(jì)目標(biāo) 設(shè)計(jì)并制作一個由兩個額定輸出功率均為 16W 的 8V DC/DC 模塊構(gòu)成的并聯(lián)供電 系統(tǒng)(見圖 2.1) 圖 2.1 兩路 buck 電路并聯(lián)供電 (二) 、基本要求 (1)調(diào)整負(fù)載電阻至額定輸出功率工作狀態(tài),供電系統(tǒng)的直流輸出電壓 UO=8.00.4V。在額定輸出功率工作狀態(tài)下,供電系統(tǒng)的效率不低于 60% 。 (2)調(diào)整負(fù)載電阻,保持輸出電壓

6、UO=8.00.4V,使兩個模塊輸出電流之和 IO =1.0A 且按 I1:I2=1:1 模式自動分配電流,調(diào)整負(fù)載電阻,保持輸出電壓 UO=8.00.4V,使兩個模塊輸出電流之和 IO =1.5A 且按 I1:I2= 1:2 模式自動分配 電流,每個模塊輸出電流的相對誤差絕對值不大于 5%。調(diào)整負(fù)載電阻,保持輸出電 壓 UO=8.00.4V,使兩個模塊輸出電流之和 IO =4.0A 且按 I1:I2=1:1 模式自動分 配電流,每個模塊的輸出電流的相對誤差的絕對值不大于 2%。 (3)調(diào)整負(fù)載電阻,保持輸出電壓 UO=8.00.4V,使負(fù)載電流 IO 在 1.53.5A 之間 變化時,兩個模

7、塊的輸出電流可在(0.52.0)范圍內(nèi)按指定的比例自動分配,每個 模塊的輸出電流相對誤差的絕對值不大于 2%。 (4)具有負(fù)載短路保護(hù)及自動恢復(fù)功能,保護(hù)閾值電流為 4.5A(調(diào)試時允許有 0.2A 的偏差) 。在額定輸出功率工作狀態(tài)下,進(jìn)一步提高供電系統(tǒng)效率。 三、系統(tǒng)設(shè)計(jì) (一) 、系統(tǒng)框圖 圖 3.1 系統(tǒng)框圖 系統(tǒng)說明:以單片機(jī)為核心處理元件,DC-DC 變換器為主電路。按鍵、顯示便于 人機(jī)交互。驅(qū)動電路將單片機(jī)和 DC-DC 變換器隔離,輔助電源給單片機(jī)和采樣電路 供電。單片機(jī)將電壓電流通過采樣電路,運(yùn)放采樣回來在內(nèi)部進(jìn)行 A/D 處理,然后 將數(shù)據(jù)輸出液晶顯示。在內(nèi)部進(jìn)行算法調(diào)整。

8、使整個系統(tǒng)穩(wěn)定,并達(dá)到基本要求。 整個系統(tǒng)設(shè)計(jì)如上圖 3.1 所示。 (二) 、硬件設(shè)計(jì)與方案選擇 1、單片機(jī)選擇 方案一:使用 89C51 單片機(jī)指令簡單,易學(xué)易懂,外圍電路簡單,硬件設(shè)計(jì)方 便,IO 口操作簡單,無方向寄存器,資源豐富, ,價格便宜、容易購買,資料豐富容 易查到,程序燒寫簡單,但要外接 A/D、D/A 芯片,來實(shí)現(xiàn)對整個供電系統(tǒng)的控制, 需要占用較多的 I/O 接口,會使普通單片機(jī)承載過大的數(shù)據(jù)處理任務(wù),功耗較大。 方案二:使用 ATmega16,ATmega16外設(shè)特點(diǎn):兩個具有獨(dú)立的預(yù)分頻器和比較 器功能的8位定時器/計(jì)數(shù)器,兩個具有預(yù)分頻器、比較功能和撲捉功能的16位

9、定時 器/計(jì)數(shù)器,具有獨(dú)立預(yù)分頻器的實(shí)時時鐘計(jì)數(shù)器,兩路8位 PWM,4路分辨率可編程 (216位)的 PWM,輸出比較調(diào)制器,8路10位 ADC,面向字節(jié)的兩線接口 I2C 總線, 兩個可編程的串行 USART,可工作于主機(jī)/從機(jī)模式的 SPI 串行接口,具有獨(dú)立片內(nèi)振 蕩器的的可編程看門狗定時器,片內(nèi)模擬比較器。特殊的處理器特點(diǎn):上電復(fù)位以 及可編程的掉電檢測,片內(nèi)經(jīng)過標(biāo)定的 RC 振蕩器,片內(nèi)/片外中斷源,6種睡眠模式, 可以通過軟件進(jìn)行選擇的時鐘頻率,通過熔絲位可以選擇兼容模式,全局上拉禁止 功能。 結(jié)合前兩個方案優(yōu)點(diǎn),經(jīng)過方案比較與論證,最終確定使用方案二,因?yàn)?ATmega16 速

10、度快 自帶 PWM ,自帶 AD,而用 89C51 會使電路更加復(fù)雜與不穩(wěn)定所以, 用 ATmega16 單片機(jī)和其它控制器電路同實(shí)現(xiàn)整個系統(tǒng)的控制。 2、主電路選擇 方案一:有一種型號為 LM2956 的降壓開關(guān)電壓調(diào)節(jié)器,能夠輸出 3A 的驅(qū)動電流, 同時具有很好的線性和負(fù)載調(diào)節(jié)特性,該器件內(nèi)部集成頻率補(bǔ)償和固定頻率發(fā)生器, 極大地簡化了開關(guān)電源電路的設(shè)計(jì)。 方案二:采用 SG3525 自帶脈寬調(diào)制電源芯片來設(shè)計(jì) DC-DC 降壓轉(zhuǎn)換電路, SG3525 簡單可靠及使用方便靈活,輸出驅(qū)動為推拉輸出形式,增加了驅(qū)動能力;內(nèi) 部含有欠壓鎖定電路,死區(qū)時間可調(diào)、軟啟動控制電路、PWM 鎖存器,有

11、過流保護(hù)功 能,頻率可調(diào),同時能限制最大占空比。由此設(shè)計(jì)而成的電路易于實(shí)現(xiàn)脈寬調(diào)制, 然而在真正使用時會發(fā)現(xiàn),為得到要求的電壓輸出值,開關(guān)管 S 的參數(shù)選取相當(dāng)不 易。 方案三:將經(jīng)過隔離變壓器,整流濾波后得到的 24VDC 通過 BUCK 降壓電路進(jìn)行 DC-DC 轉(zhuǎn)換,由 ATmega16 單片機(jī)產(chǎn)生 PWM 控制其占空比,從而得到要求的直流電壓。 此方案僅用一塊控制芯片不但可以實(shí)現(xiàn)對 BUCK 電路的控制,而且可以結(jié)合 A/D 和 D/A 對輸出電壓進(jìn)行調(diào)整與顯示。由于 ATmega16 單片機(jī)自帶能夠產(chǎn)生脈寬調(diào)制所需 的 PWM 信號的端口,在實(shí)際制作中用起來比較方便。ATmega16

12、 單片機(jī)自帶 8 路 10 位 A/D 轉(zhuǎn)換。 結(jié)合前兩個方案優(yōu)點(diǎn),經(jīng)過方案比較與論證,最終確定使用方案三如圖 3.2,因 為 ATmega16 單片機(jī),自帶 PWM 模塊,可以輸出 PWM 方波控制電路,節(jié)約芯片成本, 也可實(shí)現(xiàn) AD 轉(zhuǎn)換。用單片機(jī)和其它控制器電路同實(shí)現(xiàn)整個系統(tǒng)的控制。 3.2 主電路圖 3、驅(qū)動電路圖 方案一:單片機(jī)輸出 PWM,采用 IR2101 驅(qū)動 DC-DC 電路中的 IRF9530,控制輸 出電壓。 方案二:先采用光耦 TLP250 和單片機(jī)進(jìn)行隔離,有效保護(hù)單片機(jī),之后用 IRF3205 去驅(qū)動 MOS 管 IRF9530,控制輸出電壓。 結(jié)合兩種方案的對比選

13、擇方案二如圖 3.3,因?yàn)榉桨付胁捎霉怦睿瑢纹瑱C(jī)與 主電路隔離,能夠有效保護(hù)單片機(jī),而且也能使正常使電路工作。 圖 3.3 驅(qū)動電路圖 4、輔助電源 方案一:采用集成的三端穩(wěn)壓集成芯片,7815 和 7805 分別給光耦和運(yùn)放,還有 單片機(jī)供電,7815 內(nèi)含過流,過熱,過載保護(hù)電路。 方案二:采用 LM2575 開關(guān)穩(wěn)壓集成芯片,它內(nèi)部集成了一個固定的振蕩器,是 一種高效的穩(wěn)壓芯片,大多數(shù)情況下無需加散熱片。內(nèi)部有完善的保護(hù)電路,包括 電流限制及熱關(guān)斷電路等。它可以根據(jù)用戶要求選擇輸出電壓,可輸出 3.3V,5V,12V,15V。然后再經(jīng)過 7805 產(chǎn)生 5V 電壓。 結(jié)合兩種方案的對

14、比選擇方案二如圖 3.4,因?yàn)榉桨付械?LM2575 的是可調(diào)節(jié) 輸出電壓的芯片,方便調(diào)控,而且它內(nèi)部有電壓基準(zhǔn)比較,使輸出的電壓能夠準(zhǔn)確 并穩(wěn)定,比 7815 要精確,且性能好。 圖 3.4 輔助電源電路圖 5、電流、電壓采樣 采樣模塊是輸出電壓經(jīng)過采樣回來,形成一個負(fù)反饋.經(jīng)過單片機(jī)內(nèi)部 A/D 進(jìn) 行處理,然后使輸出更加穩(wěn)定和準(zhǔn)確。電壓采樣模塊直接采用 LM358 運(yùn)放如圖 3.5, 將輸出的電壓縮小一定倍數(shù)后,然后送給單片機(jī)處理判斷。電流采樣是經(jīng)過 0.1 歐 /4 瓦的采樣電阻后,縮小一定倍數(shù),然后經(jīng)過一個差分電路,將電壓值送入單片機(jī) 進(jìn)行處理如圖 3.6。 圖 3.5 電壓采樣電

15、路圖 圖 3.6 電流采樣電路圖 6、顯示、按鍵 顯示部分采用字符型液晶 1602,能夠同時顯示 16x02 即 32 個字符。16 個引腳,3 個 控制引腳,8 位雙向數(shù)據(jù)端引腳。具有微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧的 特點(diǎn)。用戶可以對 EN、RW、RS 的數(shù)據(jù)進(jìn)行編程,然后通過 D0D7 輸出顯示數(shù)據(jù)。其 引腳功能圖見下表 6.1 表 6.1 1602 引腳功能圖 按鍵部分采用四個獨(dú)立的按鍵,分別控制占空比的加和減,對輸出的電壓和電流進(jìn) 行控制,使輸出能夠達(dá)到期望的要求,其按鍵功能表如表 6.2。 表 6.2 按鍵功能表 鍵名 S1S2S3S4 功能PWM1 加 0.2%PWM1 減

16、 0.2%PWM2 加 0.2%PWM2 減 0.2% CPU 端口號 PD0PD1PD2PD3 (三)、軟件設(shè)計(jì) 1、主程序 如圖 3.7 為主程序流程圖,一開始給系統(tǒng)各部分初始化,包括按鍵初始化,液晶初 始化,PWM 初始化,AD 采樣初始化,中斷初始化,然后在進(jìn)入大循環(huán),在循環(huán)內(nèi)進(jìn) 行數(shù)據(jù)的顯示,包括當(dāng)前輸入的占空比為多少,當(dāng)前采樣回來的數(shù)字量和實(shí)際的電 壓值為多少。還有按鍵程序,和 AD 采樣。同時每 10 毫秒進(jìn)入定時器 0 中斷進(jìn)行調(diào) 整。 開始 系統(tǒng)各初始 化 顯示PWM 顯示AD數(shù)據(jù) AD采樣 按鍵 定時器0中斷 進(jìn)行PID調(diào)整 結(jié)束 定時器0中斷 定時10毫秒 定時器0中斷1

17、0 毫秒? 電壓比較反 饋 定時器0中斷 Y N 主程序 圖 3.7 主程序流程圖 2、按鍵程序 按鍵程序流程圖如圖 3.8 所示。按鍵采用四個獨(dú)立的按鍵,分別控制 PWM1,PWM2 的 加和減,當(dāng)有鍵按下時,掃描按鍵,然后進(jìn)入判斷。判斷當(dāng)前寄存器對應(yīng)的值是否 大于了設(shè)定的上限值,如果沒有則數(shù)值加 1,如果達(dá)到了則鉗位在最大的上限值。然 后返回?cái)?shù)據(jù)。通過按鍵程序,可以控制占空比的調(diào)節(jié)。 按鍵 開始 PD0是否按下? OCR1A+1 OCR1B+1 OCR1A265 /停止定時器 TCNT0 = 0 x64;/初始值,每 10 毫秒進(jìn)一次中斷 TIMSK = 0 x01; /允許中斷 SREG

18、 |= BIT(7); /允許全局中斷 /*外中斷 0 函數(shù)*/ void timer0_ovf_isr(void) TCNT0 = 0 x64; pid1_calculating(); /PID 調(diào)整 OCR1A pid2_calculating(); /PID 調(diào)整 OCR1B com_vol(); /電壓反饋 /*PWM 設(shè)置輸出*/ void KPWM(void) PORTD|=BIT(4)|BIT(5); DDRD|=BIT(4)|BIT(5); TCCR1A = 0 xA2; /兩路 PWM,匹配清零 TCCR1B = 0 x11; /相位修正 PWM 模式,位數(shù)可調(diào),預(yù)分頻 1

19、ICR1 = 800; /此數(shù)為 16 位 PWM,16M 晶振,clk/(2*N*TOP),頻率為 10K OCR1A = 255; /占空比 31.8% OCR1B = 255; /占空比 31.8% void main() 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

20、 的模擬量和數(shù)字量 /*1602.h*/ #ifndef _1602_H_ #define _1602_H_ #define uchar unsigned char #define uint unsigned int void delay(uint MS); void write_com(uint com); void write_dat(uint dat); void LCD_init(); void Display_PWM(); void calculate_AD0(); #endif /*1602.c*/ #include #include #include1602.h #define

21、uchar unsigned char #define uint unsigned int /*顯示固定數(shù)組 PWM:*/ const uchar tab=PWM:; /*延時函數(shù)*/ void delay(uint MS) /約為 1MS 的延時函數(shù) uint i,j; for(i=0;iMS;i+) for(j=0;j2282;j+); /2282 是在 16MHz 晶振下為 MS 毫秒 /*1602 寫地址*/ void write_com(uint com) PORTA /RS=0 PORTA /RW=0 PORTB=com; /送地址 delay(5); PORTA|=BIT(7);

22、 /EN=1 delay(5); PORTA /EN=0 /*1602 寫數(shù)據(jù)*/ void write_dat(uint dat) PORTA|=BIT(5); /RS=1 PORTA /RW=0 PORTB=dat; /送數(shù)據(jù) delay(5); PORTA|=BIT(7); /EN=1 delay(5); PORTA /EN=0 /*1602 初始化*/ void LCD_init() DDRA=0XFF; DDRB=0 xFF; delay(5); write_com(0X38); /設(shè) 8 位數(shù)據(jù)線,雙行,5*7 點(diǎn)陣 delay(5); write_com(0X0c); /開顯示,

23、不顯示光標(biāo) delay(5); write_com(0X06); /輸入地址自加,屏幕不移動 delay(5); write_com(0X01); /清屏 delay(5); /*顯示 PWM 占空比*/ void Display_PWM() uchar i; uint shi,ge,xiaoshu,beichu; uint shi1,ge1,xiaoshu1; shi=OCR1A/100; /將 OCR1A 百位拆分 ge=OCR1A/10%10; /將 OCR1A 十位拆分 xiaoshu=OCR1A%10; /將 OCR1A 個位拆分 beichu=ICR1/10; /將 ICR1 變?yōu)?/p>

24、兩位數(shù) shi1=OCR1B/100; /將 OCR1B 百位拆分 ge1=OCR1B/10%10; /將 OCR1B 十位拆分 xiaoshu1=OCR1B%10; /將 OCR1B 個位拆分 write_com(0 x80); for(i=0;tabi!=0;i+) write_dat(tabi); write_com(0 x84); write_dat(shi*100+ge*10+xiaoshu)*100/beichu/100+0 x30); /顯示十位 write_dat(shi*100+ge*10+xiaoshu)*100/beichu/10%10+0 x30); /顯示個位 wri

25、te_dat(.); write_dat(shi*100+ge*10+xiaoshu)*100/beichu%10+0 x30); /顯示小數(shù)點(diǎn) write_dat(%); write_com(0 x8a); write_dat(shi1*100+ge1*10+xiaoshu1)*100/beichu/100+0 x30); /顯示十位 write_dat(shi1*100+ge1*10+xiaoshu1)*100/beichu/10%10+0 x30); /顯示個位 write_dat(.); write_dat(shi1*100+ge1*10+xiaoshu1)*100/beichu%10

26、+0 x30); /顯示小數(shù)點(diǎn) write_dat(%); /*AD.H*/ #ifndef _AD_H_ #define _AD_H_ void adcport_init(); void ADC0INIT(void); void ADC1INIT(void); void ADC2INIT(void); int get_ADCdata(void); float get_ave(int a8); float get_ADC0data(void); float get_ADC1data(void); float get_ADC2data(void); void display_AD0(); #en

27、dif /*AD.C*/ #include #include #include1602.h #define uchar unsigned char #define uint unsigned int /參考電壓 #define REF 5.12 /*ADC 端口初始化*/ void adcport_init() DDRA PORTA DDRA PORTA DDRA PORTA /*ADC0 初始化*/ void ADC0INIT(void) ADMUX=0 x40; /AREF 基準(zhǔn)壓,結(jié)果右對齊,通道為 ADC0 ADCSRA=0 x87; /使能 ADC,單次轉(zhuǎn)換,預(yù)分頻為 128 ADC

28、SRA|=(1ADSC); /啟動首次轉(zhuǎn)換 while(!(ADCSRA /等待轉(zhuǎn)換結(jié)束 ADCSRA|=(1ADIF); /清除 ADIF 位 /*ADC1 初始化*/ void ADC1INIT(void) ADMUX=0 x41; /AREF 基準(zhǔn)壓,結(jié)果右對齊,通道為 ADC1 ADCSRA=0 x87; /使能 ADC,單次轉(zhuǎn)換,預(yù)分頻為 128 ADCSRA|=(1ADSC); /啟動首次轉(zhuǎn)換 while(!(ADCSRA /等待轉(zhuǎn)結(jié)束循環(huán) ADCSRA|=(1ADIF); /清除 ADIF 位 /*ADC2 初始化*/ void ADC2INIT(void) ADMUX=0 x4

29、2; /AREF 基準(zhǔn)壓,結(jié)果右對齊,通道為 ADC2 ADCSRA=0 x87; /使能 ADC,單次轉(zhuǎn)換,預(yù)分頻為 128 ADCSRA|=(1ADSC); /啟動首次轉(zhuǎn)換 while(!(ADCSRA /等待轉(zhuǎn)結(jié)束循環(huán) ADCSRA|=(1ADIF); /清除 ADIF 位 /*獲取 ADC 的采樣值*/ int get_ADCdata(void) int a,b; a=b=0; b=ADCL; /讀高位后數(shù)據(jù)更新 a=ADCH; /再讀取 ADCH 數(shù)據(jù) a=(a8); /右對齊,左移八位 a=(a|b); /組成 10 位二進(jìn)制數(shù)據(jù) return a; /*去頭去尾,獲取平均值*/

30、float get_ave(int a8) float v; unsigned char i; float sum=0; for(i=1;i7;i+) /從第 2 次到第 6 次數(shù)據(jù) sum=sum+ai; v=sum/6; return v; /*獲取 ADC0 采樣 8 次的平均值*/ float get_ADC0data(void) unsigned char i=0; float v; int buf8=0; for(i=0;i8;i+) ADC0INIT(); /AD 初始化一次 bufi=get_ADCdata(); /將數(shù)據(jù)放入數(shù)組 v=get_ave(buf); return

31、v; /*獲取 ADC1 采樣 8 次的平均值*/ float get_ADC1data(void) unsigned char i=0; float v; int buf8=0; for(i=0;i8;i+) ADC1INIT(); /AD 初始化一次 bufi=get_ADCdata(); /將數(shù)據(jù)放入數(shù)組 v=get_ave(buf); return v; /*獲取 ADC2 采樣 8 次的平均值*/ float get_ADC2data(void) unsigned char i=0; float v; int buf8=0; for(i=0;i8;i+) ADC2INIT(); /A

32、D 初始化一次 bufi=get_ADCdata(); /將數(shù)據(jù)放入數(shù)組 v=get_ave(buf); return v; /*將數(shù)據(jù)拆分送顯示*/ void display_AD0() int a,b; uchar s6,k6; uchar i,j,m; a=get_ADC0data()*REF/1024*1000; /將數(shù)據(jù)轉(zhuǎn)化為十進(jìn)制 b=get_ADC0data(); /數(shù)字量 s0=a/1000+0; s1=.; s2=a%1000/100+0; s3=a%100/10+0; s4=a%10+0; s5=V; k0=D; k1=:; k2=b/1000+0; k3=b%1000/1

33、00+0; k4=b%100/10+0; k5=b%10+0; write_com(0 xC0); for(i=0;i6;i+) write_dat(si); write_com(0 xC7); for(j=0;j=360) /實(shí)際電壓值大于 8.4V OCR1A=265; /鉗位到 8.4V OCR1B=265; if(get_ADC2data()=310) /實(shí)際電壓值小于 7.6V OCR1A=240; /鉗位到 7.6V OCR1B=240; /*KEY.H*/ #ifndef _KEY_H_ #define _KEY_H_ void key_init(); void press();

34、 uchar key(); #endif /*KEY.C*/ #include #include #include1602.h #define uchar unsigned char #define uint unsigned int uint count_pwm=255; uint count_pwm1=255; /*按鍵初始化函數(shù)*/ void key_init() DDRD /獨(dú)立鍵盤接口置高電平 PORTD|=BIT(0); DDRD /獨(dú)立鍵盤接口置高電平 PORTD|=BIT(1); DDRD /獨(dú)立鍵盤接口置高電平 PORTD|=BIT(2); DDRD /獨(dú)立鍵盤接口置高電平

35、PORTD|=BIT(3); DDRD /獨(dú)立鍵盤接口置高電平 PORTD|=BIT(7); /*按鍵函數(shù)*/ void press() uchar m; m=PIND; m 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=0 x0e); OCR1A=count_pwm; /OCR1A 賦新值 OCR1B=count_pwm; /OCR1B 賦新值 if(OCR1A=265 OCR1B=265;

36、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=0 x0d); OCR1A=count_pwm; /OCR1A 賦新值 OCR1B=count_pwm; /OCR1B 賦新值 if(OCR1A=240 OCR1B=251; if(m=0X07) count_pwm=OCR1A; /讀取當(dāng)前 PWM 值 count_pwm-=1; count_pwm1=OCR1B; /讀取當(dāng)前 PWM 值 coun

37、t_pwm1+=1; delay(1); /按鍵消抖 while(PIND=0 x07); OCR1A=count_pwm; /OCR1A 賦新值 OCR1B=count_pwm1; /OCR1B 賦新值 if(OCR1A=260) OCR1A=250; OCR1B=260; /*PID.H*/ #ifndef _PID_H_ #define _PID_H_ void pid1_calculating(); void pid2_calculating(); #endif /*PID.H*/ #include #include #include #includead.h #define uchar unsigned char #define uint unsigned i

溫馨提示

  • 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

提交評論