第1章 前言1.1研究背景及意義電源技術尤其是數控電源技術是一門實踐性很強的工程技術,服務于各行各業。當今電源技術融合了電氣、電子、系統集成、控制理論、材料等諸多學科領域。直流穩壓電源是電子技術常用的儀器設備之一,廣泛的應用于教學、科研等領域,是電子實驗員、電子設計人員及電路開發部門進行實驗操作和 研究不可缺少的電子儀器。在電子電路中,通常都需要電壓穩定的直流電源來供電。而整個穩壓過程是由電源變壓器、整流、濾波、穩壓等四部分組成。然而這種傳統的直流穩壓電源功能簡單、不好控制、可靠性低、干擾大、精度低且體積大、復雜度高。普通的直流穩壓電源品種有很多,但均存在以下兩個問題:輸出電壓是通過粗調(波段開關)及細調(電位器)來調節。這樣,當輸出電壓需要精確輸出,或需要在一個小范圍內改變時,困難就較大。另外,隨著使用時間的增加,波段開關及電位器難免接觸不良,對輸出會有影響。穩壓方式均是采用串聯型穩壓電路,對過載進行限流或截流型保護,電路構成復雜,穩壓精度也不高。在家用電器和其他各類電子設備中,通常都需要電壓穩定的直流電源供電。但在實際生活中,都是有220V的交流電網供電。這就需要通過變壓、整流、濾波、穩壓電路將交流電轉換成穩定的直流電。濾波器用于濾去整流輸出電壓中的紋波,一般傳統電路由濾波扼流圈和電容器組成,若由晶體管濾波器來替代,則可縮小直流電源的體積,減輕其重量,且晶體管濾波直流電源不需直流穩壓器就能用作家用電器的電源,這既降低了家用電器的成本,有縮小了其體積,使家用電器小型化。傳統的直流穩壓電源通常采用電位器和波段開關來實現電壓的調節,并有電壓表指示電壓值的大小。因此,電壓的調整精度不高,讀數欠直觀,電位器也易磨損。而基于單片機控制的直流穩壓電源能較好地解決以上傳統穩壓電源的不足。
隨著科學技術的不斷發展,特別是計算機技術的突飛猛進,現代工業應用的工控產品均需要有低紋波、寬調整范圍的高壓電源,而在一些高能物理領域,更是急需電腦或單片機控制的低紋波、寬調整范圍的電源。
1.2國內外研究現狀從十九世紀90年代末起,隨著對系統更高效率和更低功耗的需求,電信與數據通訊設備的技術更新推動電源行業中交流/直流電源行業正面臨著新的挑戰,即如何在現有系統加入嵌入式電源智能系統和數字控制。隨著科學技術的迅速發展,人們對物質需求也越來越高,特別是一些高新技術產品。如今隨著直流電源技術的飛躍發展,整流系統有一千的分立元件和集成電路控制發展為微機控制,從而使直流電源智能化,具有遙控測、遙信、遙控的三控功能,基本實現了直流電源的無人值守。并且,當今科技快速發展過程中,模塊化是直流電源的發展趨勢,并聯運行是電源產品大容量話的一個有效手段,可以通過設計N+1冗電源系統,實現容量擴展,提高電源系統的可靠性、可用性,縮短維修、維護時間,從而使企業產生更大的效益。如:揚州鼎華公司近些年來結合美國Sorensen Amrel等公司的先進技術,成功開發了單機最大功率120KW智能模塊電源,可以并聯32臺(可擴展到64臺),使最大輸出功率可以達到7600KW以上。智能模塊電源采用電流型控制模式,集中式散熱技術,實時多任務監控,具有高效、高可靠、超低輻射,維護快捷等優點,跡象結構緊湊,防腐與散熱也作了多方面的加強。它的應用將會克服大功率電源的制造、運輸及維修等困難。而且和傳統可控硅電源相比節電20%-30%節能優勢,奠定了它將是未來大功率直流電源的首選。
1.3課題的主要內容系統設計的目的是要用微處理器來替代傳統直流穩壓電源中手動旋轉電位器,實現輸出電壓在電源量程范圍內步進可調,精度要求高。實現的途徑很多,可以用DAC的模擬輸出控制電源的基準電壓或分壓電阻,或者用其它更有效地方法,因此如何選擇簡單有效地方法是本課題余姚解決的首要問題。
數控直流穩壓電源要實現電壓的鍵盤化控制,同時要具備輸出、過壓過流保護及數組存貯與預置等功能。另外,根據要求電源還應該可以通過按鍵選擇一些特殊的功能。如何有效地實現這些功能也是本課題所需研究解決的問題。
輸出最大電壓:25V
輸出最大電流:2.5A
電壓步進:0.1V
電壓分辨率:0.02V
1.4論文的總體結構第一部分簡要介紹課題的背景、意義、國內外研究現狀,介紹本文的主要研究內容,包括實現的目標、功能的完備和性能指標。
第二部分提出了數控直流電源的總的設計思路和實現方案,以及相關系統實現的功能,選擇了一種基于51單片機系統的數控直流電源的方案,并對該方案運用的基本知識和使用的器件作出扼要的介紹。
第三部分模塊化闡述了基于51單片機數控直流電源的系統整體結構和設計框圖,包括數據單片機控制模塊、穩壓控制模塊、電壓/電流采樣模塊、電源模塊及鍵盤模塊。
第四部分主要闡述了數控直流電源的軟件系統的設計思路和軟件設計流程。
第五部分對數控直流穩壓電源的性能參數進行測量與評估,以及對誤差進行分析。
第六部分針對本數控直流電源給出了本課題的 ,并對其發展前景進行了展望。
第2章 方案與設計基礎知識2.1方案設計與論證根據設計的要求:
- 最高輸出電壓25V,最大輸出電流2.5A。
- 電壓步進0.1V。
- 紋波系數盡可能小,輸出穩定。
- 有限按鍵操作方便,LCD顯示界面。
特色及基本技術路線:
- 低成本解決方案。
- 直觀的實驗效果。
- 經典理論驗證平臺先硬件后軟件,先局部后整體。
我設計出以下方案:
用D/A和運算放大器做電流源,即采用D/A輸出調節晶體管的偏置電流(電壓);使用電壓/電流采樣電路,通過A/D轉換實現閉環控制。能有效的縮短調節時間,進一步提高輸出精度。設計方案,其主要有微控制器模塊、穩壓控制模塊、電壓/電流采樣模塊、顯示模塊、鍵盤模塊、電源模塊五部分構成。液晶屏顯示電路,該系統使用LCD1602液晶顯示屏,可以清晰地顯示分別組成顯示電路的十位、個位、小數點位,同時還能顯示英文名稱和電壓/電流單位。
方案原理示意圖見圖2-1:
圖2-1
2.2主控單片機(MCU)2.2.1 AT89S51簡介 AT89S51是一個低功耗,高性能CMOS 8位單片機,片內含4k Bytes ISP(In-system programmable)的可反復擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術制造,兼容標準MCS-51指令系統及80C51引腳結構,芯片內集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的AT89S51可為許多嵌入式控制應用系統提供高性價比的解決方案。
AT89S51具有如下特點:40個引腳,4k Bytes Flash片內程序存儲器,128 bytes的隨機存取數據存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優先級2層中斷嵌套中斷,2個16位可編程定時計數器,2個全雙工串行通信口,看門狗(WDT)電路,片內時鐘振蕩器。
此外,AT89S51設計和配置了振蕩頻率可為0Hz并可通過軟件設置省電模式。空閑模式下,CPU暫停工作,而RAM定時計數器,串行口,外中斷系統可繼續工作,掉電模式凍結振蕩器而保存RAM的數據,停止芯片其它功能直至外中斷激活或硬件復位。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應不同產品的需求。
2.2.2 主要特征及引腳說明 1.主要特性:
• 8031 CPU與MCS-51 兼容
• 4K字節可編程FLASH存儲器(壽命:1000寫/擦循環)
• 全靜態工作:0Hz-24KHz
• 三級程序存儲器保密鎖定
• 128*8位內部RAM
• 32條可編程I/O線
• 兩個16位定時器/計數器
• 6個中斷源
• 可編程串行通道
• 低功耗的閑置和掉電模式
• 片內振蕩器和時鐘電路
2.管腳說明:
VCC:供電電壓。
GND:接地。
P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數據存儲器,它可以被定義為數據/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
P1口:P1口是一個內部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
P2口:P2口為一個內部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當P2口被寫“1”時,其管腳被內部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內部上拉的緣故。P2口當用于外部程序存儲器或16位地址外部數據存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內部上拉優勢,當對外部八位地址數據存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
P3口:P3口管腳是8個帶內部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當P3口寫入“1”后,它們被內部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。
P3.0 RXD(串行輸入口)
P3.1 TXD(串行輸出口)
P3.2 /INT0(外部中斷0)
P3.3 /INT1(外部中斷1)
P3.4 T0(記時器0外部輸入)
P3.5 T1(記時器1外部輸入)
P3.6 /WR(外部數據存儲器寫選通)
P3.7 /RD(外部數據存儲器讀選通)
P3口同時為閃爍編程和編程校驗接收一些控制信號。
RST:復位輸入。當振蕩器復位器件時,要保持RST腳兩個機器周期的高電平時間。
ALE/PROG:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數據存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執行狀態ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數據存儲器時,這兩次有效的/PSEN信號將不出現。
/EA/VPP:當/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內部程序存儲器。注意加密方式1時,/EA將內部鎖定為RESET;當/EA端保持高電平時,此間內部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
2.3液晶顯示屏(1602)2.3.1 LCD1602簡介LCD1602可以在LCD顯示屏上完整顯示32個英文字符和日文等一些字符,適合顯示英文文字信息量較小的地方。可以應用在計算器、頻率計、信號發生器、時鐘等產品上。
- 顯示容量:16*2個字符
- 芯片工作電壓:4.5-5.5V
- 工作電流2MA(5.0V)部包括背光電流
- 模塊最佳工作電壓為5V
- 字符尺寸:2.95*4.35(WXH)mm
- 帶有英文和日文字庫,使用方便
2.3.2引腳接口說明
2.4固定三端穩壓器2.4.1固定三端穩壓器簡介 三端穩壓器,主要有兩種,一種輸出電壓是固定的,稱為固定輸出三端穩壓器,另一種輸出電壓是可調的,稱為可調輸出三端穩壓器,其基本原理相同,均采用串聯型穩壓電路。在線性集成穩壓器中,由于三端穩壓器只有三個引出端子,具有外接元件少,使用方便,性能穩定,價格低廉等優點,因而得到廣泛應用。
2.4.2固定三端穩壓器的類別 三端穩壓器的通用產品有78系列(下電源)和79系列(負電源),輸出電壓由具體型號中的后面兩個數字代表,有5V,6V,8V,9V,12V,15V,18V,24V等檔次。輸出電流以78(或79)后面加字母來區分L表示0.1;AM表示0.5A,無字母表示1.5A,如78L05表求5V 0.1A。
1、使用注意事項:
在使用時必須注意:(VI)和(Vo)之間的關系,以7805為例,該三端穩壓器的固定輸出電壓是5V,而輸入電壓至少大于7V,這樣輸入/輸出之間有2-3V及以上的壓差。使調整管保證工作在放大區。但壓差取得大時,又會增加集成塊的功耗,所以,兩者應兼顧,即保證在最大負載電流時調整管不進入飽和,又不致于功耗偏大。
另外一般在三端穩壓器的輸入輸出端接一個二極管,用來防止輸入端短路時,輸出端存儲的電荷通過穩壓器,而損壞器件。
2、用途:
一般穩壓管和穩壓三級管的用途是一樣的,都用于控制板電路的穩壓.以防止電壓過高燒毀電路.
2.4.3三端穩壓器(78、79系列)管腳序號判斷技巧 在78**、79**系列三端穩壓器中最常應用的是TO-220和TO-202兩種封裝。這兩種封裝的圖形以及引腳序號、引腳功能如附圖所示。
圖中的引腳號標注方法是按照引腳電位從高到底的順序標注的。這樣標注便于記憶。引腳①為最高電位,③腳為最低電位,②腳居中。從圖中可以看出,不論正壓還是負壓,②腳均為輸出端。對于78**正壓系列,輸入是最高電位,自然是①腳,地端為最低電位,即③腳,如附圖所示。對與79**負壓系列,輸入為最低電位,自然是③腳,而地端為最高電位,即①腳,如附圖所示。

用萬用表判斷三端穩壓器的方法與三極管的判斷方法相同,三端穩壓器相當于大功率三極管。
此外,還應注意,散熱片總是和最低電位的第③腳相連。這樣在78**系列中,散熱片和地相連接,而在79**系列中,散熱片卻和輸入端相連接。
2.5通用型低功耗集成四運放LM324LM324是四運放集成電路,它采用14腳雙列直插塑料封裝,外形如圖2所示。它的內部包含四組形式完全相同的運算放大器,除電源共用外,四組運放相互獨立。每一組運算放大器可用圖1所示的符號來表示,它有5個引出腳,其中“+”、“-”為兩個信號輸入端,“V+”、“V-”為正、負電源端,“Vo”為輸出端。兩個信號輸入端中,Vi-(-)為反相輸入端,表示運放輸出端Vo的信號與該輸入端的位相反;Vi+(+)為同相輸入端,表示運放輸出端Vo的信號與該輸入端的相位相同。
2.5.1 LM324四運放的特點:1.短路保護輸出
2.真差動輸入級
3.可單電源工作:3V-32V
4.低偏置電流:最大100nA(LM324A)
5.每封裝含四個運算放大器
6.具有內部補償的功能
7.共模范圍擴展到負電源
8.行業標準的引腳排列
9.輸入端具有靜電保護功能
2.5.2 LM324四運放的應用 由于LM324四運放電路具有電源電壓范圍寬,靜態功耗小,可單電源使用,價格低廉等優點,因此被廣泛應用在各種電路中。
反相交流放大器
電路見附圖。此放大器可代替晶體管進行交流放大,可用于擴音機前置放大等。電路無需調試。放大器采用單電源供電,由R1、R2組成1/2V+偏置,C1是消振電容。
放大器電壓放大倍數Av僅由外接電阻Ri、Rf決定:Av=-Rf/Ri。負號表示輸出信號與輸入信號相位相反。按圖中所給數值,Av=-10。此電路輸入電阻為Ri。一般情況下先取Ri與信號源內阻相等,然后根據要求的放大倍數在選定Rf。Co和Ci為耦合電容。
同相交流放大器
見附圖。同相交流放大器的特點是輸入阻抗高。其中的R1、R2組成1/2V+分壓電路,通過R3對運放進行偏置。電路的電壓放大倍數Av也僅由外接電阻決定:Av=1+Rf/R4,電路輸入電阻為R3。R4的阻值范圍為幾千歐姆到幾十千歐姆。
比較器
當去掉運放的反饋電阻時,或者說反饋電阻趨于無窮大時(即開環狀態),理論上認為運放的開環放大倍數也為無窮大(實際上是很大,如LM324運放開環放大倍數為100dB,既10萬倍)。此時運放便形成一個電壓比較器,其輸出如不是高電平(V+),就是低電平(V-或接地)。當正輸入端電壓高于負輸入端電壓時,運放輸出低電平。
附圖中使用兩個運放組成一個電壓上下限比較器,電阻R1、R1ˊ組成分壓電路,為運放A1設定比較電平U1;電阻R2、R2ˊ組成分壓電路,為運放A2設定比較電平U2。輸入電壓U1同時加到A1的正輸入端和A2的負輸入端之間,當Ui >U1時,運放A1輸出高電平;當Ui 時,運放A2輸出高電平。運放A1、A2只要有一個輸出高電平,晶體管BG1就會導通,發光二極管LED就 會點亮。若選擇U1>U2,則當輸入電壓Ui越出[U2,U1]區間范圍時,LED點亮,這便是一個電壓雙限指示器。若選擇U2 > U1,則當輸入電壓在[U2,U1]區間范圍時,LED點亮,這是一個“窗口”電壓指示器。此電路與各類傳感器配合使用,稍加變通,便可用于各種物理量的雙限檢測、短路、斷路報警等。
2.6 數模轉換芯片DAC0832芯片內有兩級輸入寄存器,使DAC0832具備雙緩沖、單緩沖和直通三種輸入方式,以便適于各種電路的需要(如要求多路D/A異步輸入、同步轉換等)。D/A轉換結果采用電流形式輸出。要是需要相應的模擬信號,可通過一個高輸入阻抗的線性運算放大器實現這個供功能。
該片邏輯輸入滿足TTL電壓電平范圍,可直接與TTL電路或微機電路相接,下面是芯片電路原理圖:
DAC0832引腳圖和內部結構電路圖
DAC0832引腳功能說明:
DI0~DI7:數據輸入線,TLL電平。
ILE:數據鎖存允許控制信號輸入線,高電平有效。
CS:片選信號輸入線,低電平有效。
WR1:為輸入寄存器的寫選通信號。
XFER:數據傳送控制信號輸入線,低電平有效。
WR2:為DAC寄存器寫選通輸入線。
Iout1:電流輸出線。當輸入全為1時Iout1最大。
Iout2: 電流輸出線。其值與Iout1之和為一常數。
Rfb:反饋信號輸入線,芯片內部有反饋電阻.
Vcc:電源輸入線 (+5v~+15v)
Vref:基準電壓輸入線 (-10v~+10v)
AGND:模擬地,摸擬信號和基準電源的參考地.
DGND:數字地,兩種地線在基準電源處共地比較好.
2.7模數轉換芯片2.7.1 ADC0804簡介ADC0804型8位全MOS A/D轉換器。它是中速廉價型產品之一。片內有三態數據輸出鎖存器,與微處理器兼容,輸入方式為單通道,轉換時間約為100µs。它的非線形誤差為±1LSB。電源電壓為單一+5V。
2.7.2 ADC0804的引腳及其功能

、

、

(引腳1、2、3):是數字控制輸入端,滿足標準TTL邏輯電平。其中

和

用來控制A/D轉換的啟動信號。

、

用來讀A/D轉換的結果,當它們同時為低電平時,輸出數據鎖存器DB0~DB7各端上出現8位并行二進制數碼。
CLK(引腳4)、CLKR(引腳19):ADC0801~0805片內有時鐘電路,只要在外部“CLKR”和“CLK”兩端外接一對電阻電容即可產生

轉換所需要的時鐘,其振蕩頻率為

≈

RC。其典型應用參數為:R=10kΩ,C=150pF,

≈640kHz,每秒鐘可轉換1萬次。若采用外部時鐘,則外部

可從CLK端送入,此時不接R、C。允許的時鐘頻率范圍為100KHZ~1460KHZ。

(引腳5):轉換結束信號輸出端,輸出電平高跳到低表示本次轉換已經完成,可作為中斷或查詢信號。如果

和

端與

端相連,則ADC0804就處于自動循環轉換狀態。

(引腳6)和

(引腳7):被轉換的電壓信號從

和

輸入,允許此信號是差動的或不共地的電壓信號。如果輸入電壓

的變化范圍從0V到

,則芯片的

端接地,輸入電壓加到

端。對于差動輸入,輸入電壓可以從非零開始,即

到

。此時

端應接至等于

的恒定電壓上,而輸入電壓

仍加到

端上。
AGND(引腳8)、DGND(引腳10):A/D轉換器一般都有這兩個引腳。模擬地AGND和數字地DGND分別設置引入端,使數字電路的地電流不影響模擬信號回路,一防止寄生耦合造成的干擾。
VREF/2(引腳9):參考電壓VREF/2可以有外部電路供給,從“VREF/2”端直接送入,VREF/2端的電壓值應是輸入電壓范圍的二分之一。所以輸出電壓的范圍可以通過調整VREF/2引腳處的電壓加以改變,轉換器的零點無需調整。
第3章 系統電路原理及硬件實現3.1系統總體框圖系統的總體設計方案主要由微控制器模塊、穩壓控制模塊、電壓/電流采樣模塊、顯示模塊、鍵盤模塊、電源模塊五部分構成。
3.2系統模塊電路設計3.2.1 單片機控制模塊 MCU模塊即為單片機部分,整個控制都是依靠單片機完成。從功能和價位以及本題目要求來看,我選擇51系列AT89S51作為本方案的控制核心,P0口接液晶顯示LCD1602作為輸出數據顯示傳輸,同時P25/P26/P27是液晶LCD控制端口;P3口接DAC0832作為輸出數據傳輸;P20、P21、P22接三個獨立按鍵作為輸入數據傳輸;P36/P37接容量為2K的數據存儲器24C02,可以實現掉電數據貯存和預置數據貯存;P1口接ADC0804作為輸入/輸出數據傳輸。如圖所示:
3.2.2 穩壓控制模塊 通過鍵盤控制MCU產生8位數字信號(0-255),通過P3口送至8位數模轉換芯片(DAC0832)轉換成模擬電流信號,再經運放作I/U轉換,得到控制穩壓電源輸出部分的基準電壓;
3.2.3 電壓與電流采樣模塊電壓與電流采樣模塊是系統的重要組成部分,對ADC的說明:以輸入電壓為標準,如果輸入電壓大于設定的電壓值,則減小DA輸出電壓一位數值,再采樣比較,如此循環,直到輸入的電壓等于設定的電壓值或者接近設定的電壓值(有事不可能完全相等)。同理,如果輸入電壓小于設定的電壓,則增大DA輸出電壓一位數值,再采樣比較,如此循環,直到輸入的電壓等于設定的電壓值或者接近設定的電壓值。這樣,就能達到閉環反饋的目的。
利用DAC0832控制的基準電壓驅動功率管穩壓輸出,反饋部分是通過電阻R3,VR2將取樣電壓輸入運放的反相端比較,VR2可作小范圍調整;如圖所示:
采用8位模數轉換芯片(ADC0804)作為顯示電流的模數轉換器件,ADC0804的取樣電壓由串聯在電源輸出電路的電流取樣電阻(0.1Ω)分壓取得,并由運放按一定倍數放大后送至Vin(+),ADC0804把轉換結果送至單片機的P1口,再由程序將數據處理后送LCD1602顯示當前電流;
3.2.4 顯示模塊 顯示的方式很多,主要分為兩類:LED顯示,LCD顯示。前者顯示高,制作成本低,適合做遠距離顯示,但由于其耗電較大,所以端口隨顯示的數據位數增加而增加。如果采用動態掃描方式顯示,則占用CPU的時間,如果采用靜態顯示則需要加鎖存器,耗費硬件制作時間,就該題目要求來說,需要設定電壓顯示,又與實際電壓比較再顯示,LCD顯示更為清晰、直觀,從上面諸多因素來看,采用LCD顯示比較理想。LCD最常用的就是1602液晶模塊。LCD1602可以在LCD顯示屏上完整顯示32個英文字符和日文等一些字符,適合顯示英文文字信息量較小的地方,可以清晰顯示出英文名稱和電壓/電流單位,電壓(三位數字:十位、個位、小數位),電流(三位數字:個位,兩位小數)。通過單片機編程控制第4腳RS數據/命令選擇端,第5腳R/W讀/寫選擇端,第6腳E使能信號,從而實現顯示效果。它的顯示運行原理如下:
讀狀態:輸入:RS=0,RW=1,E=1;輸出:D0~D7=狀態字
寫指令:輸入:RS=0,RW=0,D0~D7=指令碼,E=高脈沖;輸出:無
讀指令:輸入:RS=1,RW=1,E=1;輸出:D0~D7=數據
寫數據:輸入:RS=0,RW=0,D0~D7=數據,E=高脈沖;輸出:無
如圖所示:
3.2.5 鍵盤模塊系統中鍵盤模塊設計四個按鍵S1、S2、S3、S4,分別由單片機RST端、P20、P21、P21口輸入。S1為復位鍵;S4為翻頁按鍵,最近設置的電壓大小保存在EEPROM里面,比如5個電壓,按一下S2,電壓變為下一個,省去了反復設置電壓的麻煩;S3為電壓+,S2為電壓-,按一下S3,當前電壓增加0.1V,按一下S2,當前電壓減小0.1V。如圖所示:
3.2.6 電源模塊電源模塊是讓AC220V電源通過變壓器降壓,整流濾波后得到要調節電壓輸入端;降壓為AC15V整流濾波后經過三端穩壓7812、7912得到DC±12V電壓為運算放大器供電;同時,又經過三端穩壓7805、7905得到DC±5V為ADC0804、DAC0832D等芯片提供工作電源。如圖所示:
3.3系統整體原理圖系統整體原理圖(見附錄1)。
第4章 系統的軟件設計4.1軟件設計思路當系統上電,立即進行初始化,分別是端口初始化,D/A、A/D初始化,定時器初始化;然后系統默認電壓,默認電流。基本思路:按鍵掃描 — D/A轉換、電壓/電流數值顯示 — 讀A/D轉換并比較糾正電壓/電流數值顯示 — 按鍵掃描,按前述循環。
4.2系統軟件流程4.2.1 主程序模塊 流程圖如圖4-1所示,負責與個子程序模塊的接口和檢查鍵盤功能號。程序運行后,開始檢測是否有鍵按下,若有則進入設定按鍵功能。液晶LCD1602直接顯示CPU設定的數值,使CPU資源得到充分利用。同時系統不斷采集外部數據,經過相關運算、分析,然后發出命令對實際值進行相應的修正,控制輸出電壓可調、穩定。
主程序流程圖
第5章 系統測試與誤差分析5.1系統測試5.1.1 軟件測試1、測試軟件
程序編輯器keil uvision2
程序燒制器STC-ISP V35
2、編譯結果
在編制完C語言后,即keil uvision2界面下,進行了調試,根據提示,我找到了程序在編寫上的錯誤,加以改正,再次驚醒調試。通過上述簡單的測試,證明此次設計的程序基本上正確無誤。然后,將燒錄了程序的單片機AT89S51接到系統電路中,查看系統電路的運行情況;如果程序邏輯有問題可進一步修改,直到系統正常運行。
5.1.2 硬件測試1、電源部分提供整個電路所需各種電壓(包括DAC芯片所需的基準穩壓-5V和89S51的+5V),由電源變壓器和整流濾波電路及兩個輔助穩壓輸出構成,電源變壓器的功率由需要輸出的電流大小決定,確保有充足的功率余量。
2、電流取樣電阻R1要選擇大功率的電阻(5W或10W)。也可使用廢舊萬用表上拆下來的電阻線。檢查電路連接無誤后,即可試機。找一塊數字表將其并聯在輸出電路上,按S1或S2設定一個電壓,此時LCD1602第一行顯示的電壓可能會有誤差,適當微調反饋電路的VR2,使其與數字表讀數一致,再將數字表串聯在電源的輸出電路上,選擇適當的電流檔,接上一定的負載。此時,LCD1602第二行會顯示出電流值,適當的調節VR3改變ADC0804參考電壓,直至顯示的電流值與萬用表顯示的電流值一致為止,校正完成后即可使用。
注意事項:電流取樣電阻發熱量大不能貼PCB板安裝,應該將其適當升高再安裝;運放TL084可用LM324代換,功率管建議用TO-3金屬封裝的2N3055,可用TIP3055或C3182等大功率NPN管代換,功率調整管工作時發熱量較大,散熱片要盡可能大些或采用CPU風扇散熱。
5.1.3 系統整體測試1、測試工具
開關電源T-50系列
雙蹤示波器
數字萬用表
表5-1 電壓測試表
系統由于剛啟動在電壓方面不穩定,存在一定誤差,但是單片機會對其進行控制,使系統再次穩定。
3、精度分析
絕對誤差:ΔU=(0.2+0.1+…...+0.2+0.2)/12=0.11V
相對誤差:γA=ΔU/U=(0.2/3.0+0.1/4.0+……+0.2/9.0+0.2/10)/12=1.8%
線性度:γL=ΔLmax/YFS=0.2/15=1.3%
靈敏度:K=0.1V
5.2誤差分析從電路的原理框圖可以看出,系統的誤差來源于四個方面:
- DAC0832的量化誤差。
- 基準電壓溫漂引入的誤差。
- 三端穩壓器的電路引起的誤差。
- 其它器件和線路由于溫漂、不穩定等原因引起的誤差。
第6章 設計總結和展望6.1總結 經過幾十天的艱苦奮戰,我最終完成了畢業設計的基本要求。雖然過程是艱苦的,但最終成功的喜悅同樣令我快樂!
此設計用D/A和運算放大器做電源,及采用D/A輸出調節晶體管的偏值電流{電壓}。采用此方案能有效地縮短調節時間,并能提高輸出精度,經計算需要采用8位的D/A芯片。
為了爭取時間,降低成本,我的解決方案是采用51單片機。改變電壓的大小,當單片機通過閉環負反饋調節回路的A/D轉換檢測到電壓達到設定值時,將再次對輸出電壓進行調制,直到輸出電壓達到設定值;電壓值理論上是象形變化的,不會產生高次諧波,基本實現了任務書中的各項要求和目標,達到了此次畢業設計的預期目的。但更重要的是培養了我的動手能力,使我進一步了解畢業設計的基本知識,能零花和靈活運用畢業設計中的目標任務、計劃、過程控制、總結反饋等各個環節所涉及的內容,并且具備了迅速接受新知識的能力,對新的挑戰具有一定的適應能力。
- 收集相關資料。一方面利用學校圖書館資源,另一方面利用網上資源。
- 提高涉及效率,遇到不解的疑惑與老師、其他同學及時溝通,以迅速解決設計中遇到的問題。
- 盡早落實工作,剩下時間專心致志做好畢業設計。
- 同學之間相互學習、溝通、鼓勵、支持。
本次設計過程中,對紋波也沒有提出嚴格的要求,所以常用的穩壓集成電路就可以滿足要求。本設計輸出的電壓穩壓精度高,可以用在對直流電壓要求較高的設備上,或在實驗室中當作實驗電源使用。在本次設計的過程中,我發現很多的問題,給我的感覺就是很難,很不順手,看似原理比較簡單的電路,要動手把它給設計出來時很難的一件事,主要原因是我們沒有經常動手設計過電路,還有資料的查找也是一大難題,這就要求我們在以后的學習中,應該注意到這一點,更重要的是我們要學會把從書本中學到的知識和實際的電路聯系起來,這不論是對我們以后的就業還是學習,都會起到很大的促進和幫助,我相信,通過這次的畢業設計,在下一階段的學習中我會更加努力,力爭把功課學好,學精。同時,通過本次畢業設計,鞏固了我們學習過的專業知識,也使我們把理論與實踐從真正意義上相結合了起來;考驗了我們借助互聯網搜集、查閱相關文獻資料,和組織材料的綜合能力;從中可以自我測驗,認識到自己哪方面有欠缺、不足,以便于在日后的學習中得到改進、提高。
6.2展望放眼今后,直流穩壓電源今后的發展方向之一是以微處理器為核心的數控直流穩壓電源,它將利用最新的計算機技術、網絡技術及數字化技術,充分發揮微處理器強大的信息處理能力,使其突破傳統直流穩壓電源的概念,傳統直流穩壓電源的高穩定性輸出僅是這種數控直流穩壓電源其眾多功能之一。它的功能包括:控制的智能化,即控制電路采用全數字化,控制手段用微處理器和單片機組成的軟件控制方式,達到了較高的智能化程度,并且進一步提高了電路設備的可靠性;將隨著微處理器和監控軟件的引入,電源的自我監控能力普遍增強,可以實時地監控設備本身的各種運行參數和狀態,預警功能和故障診斷功能,有效地實現了實驗電源的無人值守;隨著胡兩旺技術應用日益普及和信息處理技術的不斷發展,在管理上達到網絡化,電源設備數據處理和通信能力,通過其智慧型人機界面,使網路技術人員可以隨時監視電源設備運行狀態,各項技術參數;具有遠程開關機功能,使網絡技術人員可定時開關電源。
隨著科學技術的發展,直流穩壓電源等儀表數字化、智能化、網絡化將是發展方向。高精度數控直流穩壓電源的研制對準了這個發展方向,加上計算機技術的迅速發展,使之具有非常廣闊的發展空間。
附錄1 系統整體原理圖
附錄2 系統源程序
單片機源程序如下:
- #include <reg52.h> //52系列頭文件
- #define Disdata P0 //液晶數據端口
- #define uchar unsigned char //無符號字符8位
- #define uint unsigned int //無符號整數8位
- uint data dis[4]={0x00,0x00,0x00,0x00};//4個數據單元和一個
- uchar code table[]="OUTPUT: . V "; //定義初始上電液晶默認顯示狀態
- uchar code table1[]="designed by :";
- uchar code table3[]=" Li Xiaojun";
- uchar code table2[]="INPUT: . V ";
- sbit lcden=P2^7; //定義液晶使能端
- sbit lcdrs=P2^5; //定義液晶RS端
- sbit rw=P2 ^6; //定義液晶RW端
- sbit cs_ad=P2^4;
- sbit dout=P2^3;
- sbit clk=P2^2; //轉換結束標志位
- sbit da_wr=P2^1;
- sbit da_cs=P2^0;
- sbit beep=P1^7;//蜂鳴器
- data int result;//測量變量暫存地址
- uchar num,num1,num2,num3,num4,num5;
- uchar shii,gei;
- uchar shuru;
- uchar dagg,dass;
- uchar key,temp;
- uchar cvc,mma,mmb;
- uchar ddf;
- uint ddt;
- //********延時函數************
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
-
- //*************
- void di()
- {
- beep=0;
- delay(100);
- beep=1;
- }void write_com(uchar com) //液晶寫命令函數
- {
- lcdrs=0;
- P0=com;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_data(uchar date) //液晶寫數據函數
- {
- lcdrs=1;
- P0=date;
- delay(5);
- lcden=1;
- delay(5);
- lcden=0;
- }
- void write_sg(uchar add,uchar date) //寫整數位和小數位函數
- {
- uint shi,ge;
- shi=date/10; //分解出一個2位數的十位
- ge=date%10;
- write_com(0x80+0x40+add); //設置顯示位置
- write_data(0x30+shi); //送去液晶顯示十位
- write_data(0x30+ge); //送去液晶顯示個位
- }
- //void write_da(uchar sps,uchar uru)
- //{ uchar yuy,rur;
- // yuy=uru;
- // rur=0;
- // write_com(0x80+sps); //設置顯示位置
- //if(cvc==8)
- // {
- // write_data(0x30+yuy); //送去液晶顯示十位
- // write_data(0x30+rur); //送去液晶顯示個位
- // }
- /// else
- // write_data(0x30+rur); //送去液晶顯示十位
- // write_data(0x30+yuy);
- //}void init()
- {
- shuru=0;
- rw=0;
- lcden=0;
- shii=0;
- gei=0;
- dagg=0;
- dass=0;
- write_com(0x38); //初始化1602液晶
- write_com(0x0c);
- write_com(0x06);
- write_com(0x01);
- write_com(0x80); //設置顯示初始坐標 for(num2=0;num2<13;num2++)
- {
- write_data(table1[num2]);
- delay(5);
- }
- write_com(0x80+40);
- for(num3;num3<16;num3++)
- {
- write_data(table3[num3]);
- delay(5);
- }
- delay(3000);
-
- } //*******************************
- void scan1()
- {
- write_com(0x80);
- for(num1;num1<16;num1++)
- {
- write_data(table2[num1]);
- delay(5);
- }
- // write_da(8,dass);
- //write_da(11,dagg); write_com(0x80+0x40); //設置顯示初始坐標
- for(num=0;num<16;num++)
- {
- write_data(table[num]);
- delay(5);
- }
- write_sg(8,shii);
- write_sg(11,gei);
-
- }
-
- //****TLC1549轉換處理子函數********void test()
- {
-
- data uchar i;
-
- cs_ad=1; //禁止i/o clock
- cs_ad=0; //開啟控制電路,使能data out和i/o clock
- result=0; //清轉換變量
- for(i=0;i<10;i++) //采集10次 ,即10bit
- {
- clk=0;
- result*=2;
- if(dout) result++;
- clk=1;
- }
- delay(590);
- cs_ad=1; ;;;; //data out 返回到高阻狀態而終止序列
- //****數據轉換處理**********
- result=result*2;
- dis[2]=result/205; //計算整數位
- dis[3]=result%205; //余數暫存
- dis[3]=dis[3]*10; //計算小數第一位
- dis[1]=dis[3]/205;
- dis[3]=dis[3]%205;
- dis[3]=dis[3]*10; //計算小數第二位
- dis[0]=dis[3]/205;
- shii=dis[2];
- gei=dis[1]*10+dis[0];
- write_sg(8,shii);
- write_sg(11,gei);
-
- }
- //***********************
- void test_da()
- {
-
-
- ddf=mma+mmb*0.1-0.7;
- ddf=ddf*25.6;
- ddt=ddf;
- da_wr=0;
- da_cs=0;
- P3=ddt;
- delay(1);
- }//*************************
- void markey()
- {
-
- P1=0xfe;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0);
- {
- temp=P1;
- switch(temp)
- {
- case 0xee:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+1);
- di();
- cvc++;
- key=1;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+1);
- write_data(0x30+0);
- key=1;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xde:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+2);
- di();
- cvc++;
- key=2;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+2);
- write_data(0x30+0);
- key=2;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
-
-
- case 0xbe:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+3);
- di();
- cvc++;
- key=3;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+3);
- write_data(0x30+0);
- key=3;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- }
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
-
- }
-
-
- } P1=0xfd;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0);
- {
- temp=P1;
- switch(temp)
- {
- case 0xed:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+4);
- di();
- cvc++;
- key=4;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+4);
- write_data(0x30+0);
- key=4;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xdd:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+5);
- di();
- cvc++;
- key=5;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+5);
- write_data(0x30+0);
- key=5;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xbd:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+6);
- di();
- cvc++;
- key=6;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+6);
- write_data(0x30+0);
- key=6;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- }
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
-
- }
- } P1=0xfb;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0);
- {
- temp=P1;
- switch(temp)
- {
- case 0xeb:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+7);
- di();
- cvc++;
- key=7;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+7);
- write_data(0x30+0);
- key=7;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xdb:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+8);
- di();
- cvc++;
- key=8;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+8);
- write_data(0x30+0);
- key=8;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
- case 0xbb:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+9);
- di();
- cvc++;
- key=9;
- mma=key;
- break;
- }
- else
- write_com(0x80+11);
- write_data(0x30+9);
- write_data(0x30+0);
- key=9;
- cvc=0;
- di();
- mmb=key;
- test_da();
- break;
-
- }
- while(temp!=0xf0)
- {
- temp=P1;
- temp=temp&0xf0;
- }
-
- }
-
- }
-
- P1=0xf7;
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0)
- {
- delay(10);
- temp=P1;
- temp=temp&0xf0;
- if(temp!=0xf0);
- {
- temp=P1;
- switch(temp)
- {
- case 0xe7:
- if(cvc==0)
- {
- write_com(0x80+8);
- write_data(0x30+0);
- write_data(0x30+0);
- di();
- cvc++;
- key=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
基于51單片機數控直流電源的設計.docx
(330.6 KB, 下載次數: 206)
2018-4-15 21:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5