找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 17472|回復(fù): 10
收起左側(cè)

基于51單片機數(shù)控直流數(shù)控電源的設(shè)計論文下載

  [復(fù)制鏈接]
ID:308869 發(fā)表于 2018-4-15 21:42 | 顯示全部樓層 |閱讀模式
基于51單片機數(shù)控直流電源的設(shè)計
摘要
本文主要論述了一種基于51單片機為核心控制器的數(shù)控直流穩(wěn)壓電源的設(shè)計原理和實現(xiàn)方法。該電源具有電壓可預(yù)置、可步進調(diào)整、輸出的電壓信號和電流信號可同時顯示功能。文章介紹了系統(tǒng)的總體設(shè)計方案,其主要有微控制器模塊、穩(wěn)壓控制模塊、電壓/電流采樣模塊、顯示模塊、鍵盤模塊、電源模塊五部分構(gòu)成。該系統(tǒng)原理是以STC89C52單片機為控制單元,利用數(shù)模轉(zhuǎn)換芯片DAC0832輸出參考電壓驅(qū)動功率管穩(wěn)壓輸出,同時輸出穩(wěn)壓、恒流采用模數(shù)轉(zhuǎn)換芯片ADC0804對采樣的電壓、電流轉(zhuǎn)換為數(shù)字信號,再由程序?qū)?shù)據(jù)通過單片機處理后送LCD1602顯示當(dāng)前電流。文章最后對數(shù)控直流穩(wěn)壓電源的主要性能參數(shù)進行了測定和總結(jié),并對其發(fā)展前景進行了展望。

第1章 前言
1.1研究背景及意義
1.2國內(nèi)外研究現(xiàn)狀
1.3課題的主要內(nèi)容
1.4論文的總體結(jié)構(gòu)
第2章 方案與設(shè)計基礎(chǔ)知識
2.1方案設(shè)計與論證
2.2主控單片機(MCU)
2.2.1 AT89S51簡介
2.2.2 主要特征及引腳說明
2.3液晶顯示屏(1602)
2.3.1 LCD1602簡介
2.3.2引腳接口說明
2.4固定三端穩(wěn)壓器
2.4.1固定三端穩(wěn)壓器簡介
2.4.2固定三端穩(wěn)壓器的類別
2.4.3三端穩(wěn)壓器(78、79系列)管腳序號判斷技巧
2.5通用型低功耗集成四運放LM324
2.5.1 LM324四運放的特點:
2.5.2 LM324四運放的應(yīng)用
2.6 數(shù)模轉(zhuǎn)換芯片
2.7模數(shù)轉(zhuǎn)換芯片
2.7.1 ADC0804簡介
2.7.2 ADC0804的引腳及其功能
第3章 系統(tǒng)電路原理及硬件實現(xiàn)
3.1系統(tǒng)總體框圖
3.2系統(tǒng)模塊電路設(shè)計
3.2.1 單片機控制模塊
3.2.2 穩(wěn)壓控制模塊
3.2.3 電壓與電流采樣模塊
3.2.4 顯示模塊
3.2.5 鍵盤模塊
3.2.6 電源模塊
3.3系統(tǒng)整體原理圖
第4章 系統(tǒng)的軟件設(shè)計
4.1軟件設(shè)計思路
4.2系統(tǒng)軟件流程
4.2.1 主程序模塊
第5章 系統(tǒng)測試與誤差分析
5.1系統(tǒng)測試
5.1.1 軟件測試
5.1.2 硬件測試
5.1.3 系統(tǒng)整體測試
5.2誤差分析
第6章 設(shè)計總結(jié)和展望
6.1總結(jié)
6.2展望
參考文獻
附錄1 系統(tǒng)整體原理圖
附錄2 系統(tǒng)源程序


第1章 前言1.1研究背景及意義
電源技術(shù)尤其是數(shù)控電源技術(shù)是一門實踐性很強的工程技術(shù),服務(wù)于各行各業(yè)。當(dāng)今電源技術(shù)融合了電氣、電子、系統(tǒng)集成、控制理論、材料等諸多學(xué)科領(lǐng)域。直流穩(wěn)壓電源是電子技術(shù)常用的儀器設(shè)備之一,廣泛的應(yīng)用于教學(xué)、科研等領(lǐng)域,是電子實驗員、電子設(shè)計人員及電路開發(fā)部門進行實驗操作和 研究不可缺少的電子儀器。在電子電路中,通常都需要電壓穩(wěn)定的直流電源來供電。而整個穩(wěn)壓過程是由電源變壓器、整流、濾波、穩(wěn)壓等四部分組成。然而這種傳統(tǒng)的直流穩(wěn)壓電源功能簡單、不好控制、可靠性低、干擾大、精度低且體積大、復(fù)雜度高。普通的直流穩(wěn)壓電源品種有很多,但均存在以下兩個問題:輸出電壓是通過粗調(diào)(波段開關(guān))及細(xì)調(diào)(電位器)來調(diào)節(jié)。這樣,當(dāng)輸出電壓需要精確輸出,或需要在一個小范圍內(nèi)改變時,困難就較大。另外,隨著使用時間的增加,波段開關(guān)及電位器難免接觸不良,對輸出會有影響。穩(wěn)壓方式均是采用串聯(lián)型穩(wěn)壓電路,對過載進行限流或截流型保護,電路構(gòu)成復(fù)雜,穩(wěn)壓精度也不高。在家用電器和其他各類電子設(shè)備中,通常都需要電壓穩(wěn)定的直流電源供電。但在實際生活中,都是有220V的交流電網(wǎng)供電。這就需要通過變壓、整流、濾波、穩(wěn)壓電路將交流電轉(zhuǎn)換成穩(wěn)定的直流電。濾波器用于濾去整流輸出電壓中的紋波,一般傳統(tǒng)電路由濾波扼流圈和電容器組成,若由晶體管濾波器來替代,則可縮小直流電源的體積,減輕其重量,且晶體管濾波直流電源不需直流穩(wěn)壓器就能用作家用電器的電源,這既降低了家用電器的成本,有縮小了其體積,使家用電器小型化。傳統(tǒng)的直流穩(wěn)壓電源通常采用電位器和波段開關(guān)來實現(xiàn)電壓的調(diào)節(jié),并有電壓表指示電壓值的大小。因此,電壓的調(diào)整精度不高,讀數(shù)欠直觀,電位器也易磨損。而基于單片機控制的直流穩(wěn)壓電源能較好地解決以上傳統(tǒng)穩(wěn)壓電源的不足。
隨著科學(xué)技術(shù)的不斷發(fā)展,特別是計算機技術(shù)的突飛猛進,現(xiàn)代工業(yè)應(yīng)用的工控產(chǎn)品均需要有低紋波、寬調(diào)整范圍的高壓電源,而在一些高能物理領(lǐng)域,更是急需電腦或單片機控制的低紋波、寬調(diào)整范圍的電源。
1.2國內(nèi)外研究現(xiàn)狀
從十九世紀(jì)90年代末起,隨著對系統(tǒng)更高效率和更低功耗的需求,電信與數(shù)據(jù)通訊設(shè)備的技術(shù)更新推動電源行業(yè)中交流/直流電源行業(yè)正面臨著新的挑戰(zhàn),即如何在現(xiàn)有系統(tǒng)加入嵌入式電源智能系統(tǒng)和數(shù)字控制。隨著科學(xué)技術(shù)的迅速發(fā)展,人們對物質(zhì)需求也越來越高,特別是一些高新技術(shù)產(chǎn)品。如今隨著直流電源技術(shù)的飛躍發(fā)展,整流系統(tǒng)有一千的分立元件和集成電路控制發(fā)展為微機控制,從而使直流電源智能化,具有遙控測、遙信、遙控的三控功能,基本實現(xiàn)了直流電源的無人值守。并且,當(dāng)今科技快速發(fā)展過程中,模塊化是直流電源的發(fā)展趨勢,并聯(lián)運行是電源產(chǎn)品大容量話的一個有效手段,可以通過設(shè)計N+1冗電源系統(tǒng),實現(xiàn)容量擴展,提高電源系統(tǒng)的可靠性、可用性,縮短維修、維護時間,從而使企業(yè)產(chǎn)生更大的效益。如:揚州鼎華公司近些年來結(jié)合美國Sorensen Amrel等公司的先進技術(shù),成功開發(fā)了單機最大功率120KW智能模塊電源,可以并聯(lián)32臺(可擴展到64臺),使最大輸出功率可以達(dá)到7600KW以上。智能模塊電源采用電流型控制模式,集中式散熱技術(shù),實時多任務(wù)監(jiān)控,具有高效、高可靠、超低輻射,維護快捷等優(yōu)點,跡象結(jié)構(gòu)緊湊,防腐與散熱也作了多方面的加強。它的應(yīng)用將會克服大功率電源的制造、運輸及維修等困難。而且和傳統(tǒng)可控硅電源相比節(jié)電20%-30%節(jié)能優(yōu)勢,奠定了它將是未來大功率直流電源的首選。
1.3課題的主要內(nèi)容
  • 如何實現(xiàn)對電源的輸出控制
系統(tǒng)設(shè)計的目的是要用微處理器來替代傳統(tǒng)直流穩(wěn)壓電源中手動旋轉(zhuǎn)電位器,實現(xiàn)輸出電壓在電源量程范圍內(nèi)步進可調(diào),精度要求高。實現(xiàn)的途徑很多,可以用DAC的模擬輸出控制電源的基準(zhǔn)電壓或分壓電阻,或者用其它更有效地方法,因此如何選擇簡單有效地方法是本課題余姚解決的首要問題。
  • 數(shù)控直流電源功能的完備
數(shù)控直流穩(wěn)壓電源要實現(xiàn)電壓的鍵盤化控制,同時要具備輸出、過壓過流保護及數(shù)組存貯與預(yù)置等功能。另外,根據(jù)要求電源還應(yīng)該可以通過按鍵選擇一些特殊的功能。如何有效地實現(xiàn)這些功能也是本課題所需研究解決的問題。
  • 性能指標(biāo)
輸出最大電壓:25V
輸出最大電流:2.5A
電壓步進:0.1V
電壓分辨率:0.02V
1.4論文的總體結(jié)構(gòu)
第一部分簡要介紹課題的背景、意義、國內(nèi)外研究現(xiàn)狀,介紹本文的主要研究內(nèi)容,包括實現(xiàn)的目標(biāo)、功能的完備和性能指標(biāo)。
第二部分提出了數(shù)控直流電源的總的設(shè)計思路和實現(xiàn)方案,以及相關(guān)系統(tǒng)實現(xiàn)的功能,選擇了一種基于51單片機系統(tǒng)的數(shù)控直流電源的方案,并對該方案運用的基本知識和使用的器件作出扼要的介紹。
第三部分模塊化闡述了基于51單片機數(shù)控直流電源的系統(tǒng)整體結(jié)構(gòu)和設(shè)計框圖,包括數(shù)據(jù)單片機控制模塊、穩(wěn)壓控制模塊、電壓/電流采樣模塊、電源模塊及鍵盤模塊。
第四部分主要闡述了數(shù)控直流電源的軟件系統(tǒng)的設(shè)計思路和軟件設(shè)計流程。
第五部分對數(shù)控直流穩(wěn)壓電源的性能參數(shù)進行測量與評估,以及對誤差進行分析。
第六部分針對本數(shù)控直流電源給出了本課題的 ,并對其發(fā)展前景進行了展望。
第2章 方案與設(shè)計基礎(chǔ)知識2.1方案設(shè)計與論證
根據(jù)設(shè)計的要求:
  • 最高輸出電壓25V,最大輸出電流2.5A
  • 電壓步進0.1V。
  • 紋波系數(shù)盡可能小,輸出穩(wěn)定。
  • 有限按鍵操作方便,LCD顯示界面。
特色及基本技術(shù)路線:
  • 低成本解決方案。
  • 直觀的實驗效果。
  • 經(jīng)典理論驗證平臺先硬件后軟件,先局部后整體。
我設(shè)計出以下方案:
              用D/A和運算放大器做電流源,即采用D/A輸出調(diào)節(jié)晶體管的偏置電流(電壓);使用電壓/電流采樣電路,通過A/D轉(zhuǎn)換實現(xiàn)閉環(huán)控制。能有效的縮短調(diào)節(jié)時間,進一步提高輸出精度。設(shè)計方案,其主要有微控制器模塊、穩(wěn)壓控制模塊、電壓/電流采樣模塊、顯示模塊、鍵盤模塊、電源模塊五部分構(gòu)成。液晶屏顯示電路,該系統(tǒng)使用LCD1602液晶顯示屏,可以清晰地顯示分別組成顯示電路的十位、個位、小數(shù)點位,同時還能顯示英文名稱和電壓/電流單位。
方案原理示意圖見圖2-1:
圖2-1
2.2主控單片機(MCU)2.2.1 AT89S51簡介
              AT89S51是一個低功耗,高性能CMOS 8位單片機,片內(nèi)含4k Bytes ISP(In-system programmable)的可反復(fù)擦寫1000次的Flash只讀程序存儲器,器件采用ATMEL公司的高密度、非易失性存儲技術(shù)制造,兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng)及80C51引腳結(jié)構(gòu),芯片內(nèi)集成了通用8位中央處理器和ISP Flash存儲單元,功能強大的微型計算機的AT89S51可為許多嵌入式控制應(yīng)用系統(tǒng)提供高性價比的解決方案。
  AT89S51具有如下特點:40個引腳,4k Bytes Flash片內(nèi)程序存儲器,128 bytes的隨機存取數(shù)據(jù)存儲器(RAM),32個外部雙向輸入/輸出(I/O)口,5個中斷優(yōu)先級2層中斷嵌套中斷,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,看門狗(WDT)電路,片內(nèi)時鐘振蕩器。
此外,AT89S51設(shè)計和配置了振蕩頻率可為0Hz并可通過軟件設(shè)置省電模式。空閑模式下,CPU暫停工作,而RAM定時計數(shù)器,串行口,外中斷系統(tǒng)可繼續(xù)工作,掉電模式凍結(jié)振蕩器而保存RAM的數(shù)據(jù),停止芯片其它功能直至外中斷激活或硬件復(fù)位。同時該芯片還具有PDIP、TQFP和PLCC等三種封裝形式,以適應(yīng)不同產(chǎn)品的需求。
2.2.2 主要特征及引腳說明
 1.主要特性:
  • 8031 CPU與MCS-51 兼容
  • 4K字節(jié)可編程FLASH存儲器(壽命:1000寫/擦循環(huán))
  • 全靜態(tài)工作:0Hz-24KHz
  • 三級程序存儲器保密鎖定
  • 128*8位內(nèi)部RAM
  • 32條可編程I/O線
  • 兩個16位定時器/計數(shù)器
  • 6個中斷源
  • 可編程串行通道
  • 低功耗的閑置和掉電模式
  • 片內(nèi)振蕩器和時鐘電路
2.管腳說明:


VCC:供電電壓。
  GND:接地。
  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進行校驗時,P0輸出原碼,此時P0外部必須被拉高。
  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。
  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。
  P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,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(外部數(shù)據(jù)存儲器寫選通)
  P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)
  P3口同時為閃爍編程和編程校驗接收一些控制信號。
  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。
  ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。
  /EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
2.3液晶顯示屏(1602)2.3.1 LCD1602簡介
LCD1602可以在LCD顯示屏上完整顯示32個英文字符和日文等一些字符,適合顯示英文文字信息量較小的地方?梢詰(yīng)用在計算器、頻率計、信號發(fā)生器、時鐘等產(chǎn)品上。
  • 顯示容量:16*2個字符
  • 芯片工作電壓:4.5-5.5V
  • 工作電流2MA5.0V)部包括背光電流
  • 模塊最佳工作電壓為5V
  • 字符尺寸:2.95*4.35WXHmm
  • 帶有英文和日文字庫,使用方便
2.3.2引腳接口說明
腳號
符號
引腳功能
腳號
符號
引腳功能
1
GND
電源地
9
D2


數(shù)據(jù)I/O

2
VDD
電源正
10
D3
3
V0
顯示偏壓信號
11
D4
4
RS
數(shù)據(jù)/命令控制,H/L
12
D5
5
R/W
讀/寫控制,H/L
13
D6
6
E
使能信號
14
D7
7
D0
數(shù)據(jù)I/O

15
BL1
背光源正
8
D1
16
BL2
背光源負(fù)

2.4固定三端穩(wěn)壓器2.4.1固定三端穩(wěn)壓器簡介
  三端穩(wěn)壓器,主要有兩種,一種輸出電壓是固定的,稱為固定輸出三端穩(wěn)壓器,另一種輸出電壓是可調(diào)的,稱為可調(diào)輸出三端穩(wěn)壓器,其基本原理相同,均采用串聯(lián)型穩(wěn)壓電路。在線性集成穩(wěn)壓器中,由于三端穩(wěn)壓器只有三個引出端子,具有外接元件少,使用方便,性能穩(wěn)定,價格低廉等優(yōu)點,因而得到廣泛應(yīng)用。
2.4.2固定三端穩(wěn)壓器的類別
  三端穩(wěn)壓器的通用產(chǎn)品有78系列(下電源)和79系列(負(fù)電源),輸出電壓由具體型號中的后面兩個數(shù)字代表,有5V,6V,8V,9V,12V,15V,18V,24V等檔次。輸出電流以78(或79)后面加字母來區(qū)分L表示0.1;AM表示0.5A,無字母表示1.5A,如78L05表求5V 0.1A。
1、使用注意事項:
  在使用時必須注意:(VI)和(Vo)之間的關(guān)系,以7805為例,該三端穩(wěn)壓器的固定輸出電壓是5V,而輸入電壓至少大于7V,這樣輸入/輸出之間有2-3V及以上的壓差。使調(diào)整管保證工作在放大區(qū)。但壓差取得大時,又會增加集成塊的功耗,所以,兩者應(yīng)兼顧,即保證在最大負(fù)載電流時調(diào)整管不進入飽和,又不致于功耗偏大。
  另外一般在三端穩(wěn)壓器的輸入輸出端接一個二極管,用來防止輸入端短路時,輸出端存儲的電荷通過穩(wěn)壓器,而損壞器件。
2、用途:
一般穩(wěn)壓管和穩(wěn)壓三級管的用途是一樣的,都用于控制板電路的穩(wěn)壓.以防止電壓過高燒毀電路.
2.4.3三端穩(wěn)壓器(78、79系列)管腳序號判斷技巧
                 在78**、79**系列三端穩(wěn)壓器中最常應(yīng)用的是TO-220和TO-202兩種封裝。這兩種封裝的圖形以及引腳序號、引腳功能如附圖所示。
                 圖中的引腳號標(biāo)注方法是按照引腳電位從高到底的順序標(biāo)注的。這樣標(biāo)注便于記憶。引腳①為最高電位,③腳為最低電位,②腳居中。從圖中可以看出,不論正壓還是負(fù)壓,②腳均為輸出端。對于78**正壓系列,輸入是最高電位,自然是①腳,地端為最低電位,即③腳,如附圖所示。對與79**負(fù)壓系列,輸入為最低電位,自然是③腳,而地端為最高電位,即①腳,如附圖所示。

用萬用表判斷三端穩(wěn)壓器的方法與三極管的判斷方法相同,三端穩(wěn)壓器相當(dāng)于大功率三極管。
此外,還應(yīng)注意,散熱片總是和最低電位的第③腳相連。這樣在78**系列中,散熱片和地相連接,而在79**系列中,散熱片卻和輸入端相連接。
2.5通用型低功耗集成四運放LM324
LM324是四運放集成電路,它采用14腳雙列直插塑料封裝,外形如圖2所示。它的內(nèi)部包含四組形式完全相同的運算放大器,除電源共用外,四組運放相互獨立。每一組運算放大器可用圖1所示的符號來表示,它有5個引出腳,其中“+”、“-”為兩個信號輸入端,“V+”、“V-”為正、負(fù)電源端,“Vo”為輸出端。兩個信號輸入端中,Vi-(-)為反相輸入端,表示運放輸出端Vo的信號與該輸入端的位相反;Vi+(+)為同相輸入端,表示運放輸出端Vo的信號與該輸入端的相位相同。

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



、(引腳1、2、3):是數(shù)字控制輸入端,滿足標(biāo)準(zhǔn)TTL邏輯電平。其中用來控制A/D轉(zhuǎn)換的啟動信號。、用來讀A/D轉(zhuǎn)換的結(jié)果,當(dāng)它們同時為低電平時,輸出數(shù)據(jù)鎖存器DB0~DB7各端上出現(xiàn)8位并行二進制數(shù)碼。
CLK(引腳4)、CLKR(引腳19):ADC0801~0805片內(nèi)有時鐘電路,只要在外部“CLKR”和“CLK”兩端外接一對電阻電容即可產(chǎn)生轉(zhuǎn)換所需要的時鐘,其振蕩頻率為RC。其典型應(yīng)用參數(shù)為:R=10kΩ,C=150pF,≈640kHz,每秒鐘可轉(zhuǎn)換1萬次。若采用外部時鐘,則外部可從CLK端送入,此時不接R、C。允許的時鐘頻率范圍為100KHZ~1460KHZ。
(引腳5):轉(zhuǎn)換結(jié)束信號輸出端,輸出電平高跳到低表示本次轉(zhuǎn)換已經(jīng)完成,可作為中斷或查詢信號。如果端與端相連,則ADC0804就處于自動循環(huán)轉(zhuǎn)換狀態(tài)。
(引腳6)和(引腳7):被轉(zhuǎn)換的電壓信號從輸入,允許此信號是差動的或不共地的電壓信號。如果輸入電壓的變化范圍從0V到,則芯片的端接地,輸入電壓加到端。對于差動輸入,輸入電壓可以從非零開始,即。此時端應(yīng)接至等于的恒定電壓上,而輸入電壓仍加到端上。
AGND(引腳8)、DGND(引腳10):A/D轉(zhuǎn)換器一般都有這兩個引腳。模擬地AGND和數(shù)字地DGND分別設(shè)置引入端,使數(shù)字電路的地電流不影響模擬信號回路,一防止寄生耦合造成的干擾。
VREF/2(引腳9):參考電壓VREF/2可以有外部電路供給,從“VREF/2”端直接送入,VREF/2端的電壓值應(yīng)是輸入電壓范圍的二分之一。所以輸出電壓的范圍可以通過調(diào)整VREF/2引腳處的電壓加以改變,轉(zhuǎn)換器的零點無需調(diào)整。
第3章 系統(tǒng)電路原理及硬件實現(xiàn)3.1系統(tǒng)總體框圖
系統(tǒng)的總體設(shè)計方案主要由微控制器模塊、穩(wěn)壓控制模塊、電壓/電流采樣模塊、顯示模塊、鍵盤模塊、電源模塊五部分構(gòu)成。
3.2系統(tǒng)模塊電路設(shè)計3.2.1 單片機控制模塊
              MCU模塊即為單片機部分,整個控制都是依靠單片機完成。從功能和價位以及本題目要求來看,我選擇51系列AT89S51作為本方案的控制核心,P0口接液晶顯示LCD1602作為輸出數(shù)據(jù)顯示傳輸,同時P25/P26/P27是液晶LCD控制端口;P3口接DAC0832作為輸出數(shù)據(jù)傳輸;P20、P21、P22接三個獨立按鍵作為輸入數(shù)據(jù)傳輸;P36/P37接容量為2K的數(shù)據(jù)存儲器24C02,可以實現(xiàn)掉電數(shù)據(jù)貯存和預(yù)置數(shù)據(jù)貯存;P1口接ADC0804作為輸入/輸出數(shù)據(jù)傳輸。如圖所示:

                                                                     
3.2.2 穩(wěn)壓控制模塊
              通過鍵盤控制MCU產(chǎn)生8位數(shù)字信號(0-255),通過P3口送至8位數(shù)模轉(zhuǎn)換芯片(DAC0832)轉(zhuǎn)換成模擬電流信號,再經(jīng)運放作I/U轉(zhuǎn)換,得到控制穩(wěn)壓電源輸出部分的基準(zhǔn)電壓;
3.2.3 電壓與電流采樣模塊
電壓與電流采樣模塊是系統(tǒng)的重要組成部分,對ADC的說明:以輸入電壓為標(biāo)準(zhǔn),如果輸入電壓大于設(shè)定的電壓值,則減小DA輸出電壓一位數(shù)值,再采樣比較,如此循環(huán),直到輸入的電壓等于設(shè)定的電壓值或者接近設(shè)定的電壓值(有事不可能完全相等)。同理,如果輸入電壓小于設(shè)定的電壓,則增大DA輸出電壓一位數(shù)值,再采樣比較,如此循環(huán),直到輸入的電壓等于設(shè)定的電壓值或者接近設(shè)定的電壓值。這樣,就能達(dá)到閉環(huán)反饋的目的。




    • 電壓采樣電路
利用DAC0832控制的基準(zhǔn)電壓驅(qū)動功率管穩(wěn)壓輸出,反饋部分是通過電阻R3,VR2將取樣電壓輸入運放的反相端比較,VR2可作小范圍調(diào)整;如圖所示:


    • 電流采樣電路
采用8位模數(shù)轉(zhuǎn)換芯片(ADC0804)作為顯示電流的模數(shù)轉(zhuǎn)換器件,ADC0804的取樣電壓由串聯(lián)在電源輸出電路的電流取樣電阻(0.1Ω)分壓取得,并由運放按一定倍數(shù)放大后送至Vin(+),ADC0804把轉(zhuǎn)換結(jié)果送至單片機的P1口,再由程序?qū)?shù)據(jù)處理后送LCD1602顯示當(dāng)前電流;

3.2.4 顯示模塊
              顯示的方式很多,主要分為兩類:LED顯示,LCD顯示。前者顯示高,制作成本低,適合做遠(yuǎn)距離顯示,但由于其耗電較大,所以端口隨顯示的數(shù)據(jù)位數(shù)增加而增加。如果采用動態(tài)掃描方式顯示,則占用CPU的時間,如果采用靜態(tài)顯示則需要加鎖存器,耗費硬件制作時間,就該題目要求來說,需要設(shè)定電壓顯示,又與實際電壓比較再顯示,LCD顯示更為清晰、直觀,從上面諸多因素來看,采用LCD顯示比較理想。LCD最常用的就是1602液晶模塊。LCD1602可以在LCD顯示屏上完整顯示32個英文字符和日文等一些字符,適合顯示英文文字信息量較小的地方,可以清晰顯示出英文名稱和電壓/電流單位,電壓(三位數(shù)字:十位、個位、小數(shù)位),電流(三位數(shù)字:個位,兩位小數(shù))。通過單片機編程控制第4腳RS數(shù)據(jù)/命令選擇端,第5腳R/W讀/寫選擇端,第6腳E使能信號,從而實現(xiàn)顯示效果。它的顯示運行原理如下:
讀狀態(tài):輸入:RS=0,RW=1,E=1;輸出:D0~D7=狀態(tài)字
寫指令:輸入:RS=0,RW=0,D0~D7=指令碼,E=高脈沖;輸出:無
讀指令:輸入:RS=1,RW=1,E=1;輸出:D0~D7=數(shù)據(jù)
寫數(shù)據(jù):輸入:RS=0,RW=0,D0~D7=數(shù)據(jù),E=高脈沖;輸出:無
如圖所示:
                                          

3.2.5 鍵盤模塊
系統(tǒng)中鍵盤模塊設(shè)計四個按鍵S1、S2、S3、S4,分別由單片機RST端、P20、P21、P21口輸入。S1為復(fù)位鍵;S4為翻頁按鍵,最近設(shè)置的電壓大小保存在EEPROM里面,比如5個電壓,按一下S2,電壓變?yōu)橄乱粋,省去了反復(fù)設(shè)置電壓的麻煩;S3為電壓+,S2為電壓-,按一下S3,當(dāng)前電壓增加0.1V,按一下S2,當(dāng)前電壓減小0.1V。如圖所示:
3.2.6 電源模塊
電源模塊是讓AC220V電源通過變壓器降壓,整流濾波后得到要調(diào)節(jié)電壓輸入端;降壓為AC15V整流濾波后經(jīng)過三端穩(wěn)壓7812、7912得到DC±12V電壓為運算放大器供電;同時,又經(jīng)過三端穩(wěn)壓7805、7905得到DC±5V為ADC0804、DAC0832D等芯片提供工作電源。如圖所示:

3.3系統(tǒng)整體原理圖
系統(tǒng)整體原理圖(見附錄1)。

第4章 系統(tǒng)的軟件設(shè)計4.1軟件設(shè)計思路
當(dāng)系統(tǒng)上電,立即進行初始化,分別是端口初始化,D/A、A/D初始化,定時器初始化;然后系統(tǒng)默認(rèn)電壓,默認(rèn)電流;舅悸罚喊存I掃描 — D/A轉(zhuǎn)換、電壓/電流數(shù)值顯示 — 讀A/D轉(zhuǎn)換并比較糾正電壓/電流數(shù)值顯示 —    按鍵掃描,按前述循環(huán)。
4.2系統(tǒng)軟件流程4.2.1 主程序模塊
              流程圖如圖4-1所示,負(fù)責(zé)與個子程序模塊的接口和檢查鍵盤功能號。程序運行后,開始檢測是否有鍵按下,若有則進入設(shè)定按鍵功能。液晶LCD1602直接顯示CPU設(shè)定的數(shù)值,使CPU資源得到充分利用。同時系統(tǒng)不斷采集外部數(shù)據(jù),經(jīng)過相關(guān)運算、分析,然后發(fā)出命令對實際值進行相應(yīng)的修正,控制輸出電壓可調(diào)、穩(wěn)定。
                                                                                                                              主程序流程圖
第5章 系統(tǒng)測試與誤差分析5.1系統(tǒng)測試5.1.1 軟件測試
1、測試軟件
程序編輯器keil uvision2
程序燒制器STC-ISP V35
2、編譯結(jié)果
在編制完C語言后,即keil uvision2界面下,進行了調(diào)試,根據(jù)提示,我找到了程序在編寫上的錯誤,加以改正,再次驚醒調(diào)試。通過上述簡單的測試,證明此次設(shè)計的程序基本上正確無誤。然后,將燒錄了程序的單片機AT89S51接到系統(tǒng)電路中,查看系統(tǒng)電路的運行情況;如果程序邏輯有問題可進一步修改,直到系統(tǒng)正常運行。
5.1.2 硬件測試
1、電源部分提供整個電路所需各種電壓(包括DAC芯片所需的基準(zhǔn)穩(wěn)壓-5V和89S51的+5V),由電源變壓器和整流濾波電路及兩個輔助穩(wěn)壓輸出構(gòu)成,電源變壓器的功率由需要輸出的電流大小決定,確保有充足的功率余量。
2、電流取樣電阻R1要選擇大功率的電阻(5W或10W)。也可使用廢舊萬用表上拆下來的電阻線。檢查電路連接無誤后,即可試機。找一塊數(shù)字表將其并聯(lián)在輸出電路上,按S1或S2設(shè)定一個電壓,此時LCD1602第一行顯示的電壓可能會有誤差,適當(dāng)微調(diào)反饋電路的VR2,使其與數(shù)字表讀數(shù)一致,再將數(shù)字表串聯(lián)在電源的輸出電路上,選擇適當(dāng)?shù)碾娏鳈n,接上一定的負(fù)載。此時,LCD1602第二行會顯示出電流值,適當(dāng)?shù)恼{(diào)節(jié)VR3改變ADC0804參考電壓,直至顯示的電流值與萬用表顯示的電流值一致為止,校正完成后即可使用。
注意事項:電流取樣電阻發(fā)熱量大不能貼PCB板安裝,應(yīng)該將其適當(dāng)升高再安裝;運放TL084可用LM324代換,功率管建議用TO-3金屬封裝的2N3055,可用TIP3055或C3182等大功率NPN管代換,功率調(diào)整管工作時發(fā)熱量較大,散熱片要盡可能大些或采用CPU風(fēng)扇散熱。
5.1.3 系統(tǒng)整體測試
1、測試工具
開關(guān)電源T-50系列
雙蹤示波器
數(shù)字萬用表
  • 測試結(jié)果
表5-1 電壓測試表
系統(tǒng)理論值
系統(tǒng)測量值

誤差
顯示電壓值(V)
理論碼值
(bit)
實測碼值
(bit)
實測電壓值(V)
3.0
00011110
00011110
3.2
0.2
4.5
00101101
00101100
4.6
0.1
5.0
00110010
00110001
5.1
0.1
5.5
00110111
00110110
5.6
0.1
6.0
00111100
00111011
6.0
0
6.5
01000001
01000000
6.6
0.1
7.0
01000110
01000101
7.2
0.2
7.5
01001011
01001010
7.6
0.1
8.0
01010000
01001111
8.0
0.
8.5
01010101
01010100
8.5
0
9.0
01011010
01011001
9.2
0.2
10.0
01100100
01100011
9.8
-0.2

              系統(tǒng)由于剛啟動在電壓方面不穩(wěn)定,存在一定誤差,但是單片機會對其進行控制,使系統(tǒng)再次穩(wěn)定。
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誤差分析
從電路的原理框圖可以看出,系統(tǒng)的誤差來源于四個方面:
  • DAC0832的量化誤差。
  • 基準(zhǔn)電壓溫漂引入的誤差。
  • 三端穩(wěn)壓器的電路引起的誤差。
  • 其它器件和線路由于溫漂、不穩(wěn)定等原因引起的誤差。
第6章 設(shè)計總結(jié)和展望6.1總結(jié)
              經(jīng)過幾十天的艱苦奮戰(zhàn),我最終完成了畢業(yè)設(shè)計的基本要求。雖然過程是艱苦的,但最終成功的喜悅同樣令我快樂!
              此設(shè)計用D/A和運算放大器做電源,及采用D/A輸出調(diào)節(jié)晶體管的偏值電流{電壓}。采用此方案能有效地縮短調(diào)節(jié)時間,并能提高輸出精度,經(jīng)計算需要采用8位的D/A芯片。
              為了爭取時間,降低成本,我的解決方案是采用51單片機。改變電壓的大小,當(dāng)單片機通過閉環(huán)負(fù)反饋調(diào)節(jié)回路的A/D轉(zhuǎn)換檢測到電壓達(dá)到設(shè)定值時,將再次對輸出電壓進行調(diào)制,直到輸出電壓達(dá)到設(shè)定值;電壓值理論上是象形變化的,不會產(chǎn)生高次諧波,基本實現(xiàn)了任務(wù)書中的各項要求和目標(biāo),達(dá)到了此次畢業(yè)設(shè)計的預(yù)期目的。但更重要的是培養(yǎng)了我的動手能力,使我進一步了解畢業(yè)設(shè)計的基本知識,能零花和靈活運用畢業(yè)設(shè)計中的目標(biāo)任務(wù)、計劃、過程控制、總結(jié)反饋等各個環(huán)節(jié)所涉及的內(nèi)容,并且具備了迅速接受新知識的能力,對新的挑戰(zhàn)具有一定的適應(yīng)能力。
  • 收集相關(guān)資料。一方面利用學(xué)校圖書館資源,另一方面利用網(wǎng)上資源。
  • 提高涉及效率,遇到不解的疑惑與老師、其他同學(xué)及時溝通,以迅速解決設(shè)計中遇到的問題。
  • 盡早落實工作,剩下時間專心致志做好畢業(yè)設(shè)計。
  • 同學(xué)之間相互學(xué)習(xí)、溝通、鼓勵、支持。
本次設(shè)計過程中,對紋波也沒有提出嚴(yán)格的要求,所以常用的穩(wěn)壓集成電路就可以滿足要求。本設(shè)計輸出的電壓穩(wěn)壓精度高,可以用在對直流電壓要求較高的設(shè)備上,或在實驗室中當(dāng)作實驗電源使用。在本次設(shè)計的過程中,我發(fā)現(xiàn)很多的問題,給我的感覺就是很難,很不順手,看似原理比較簡單的電路,要動手把它給設(shè)計出來時很難的一件事,主要原因是我們沒有經(jīng)常動手設(shè)計過電路,還有資料的查找也是一大難題,這就要求我們在以后的學(xué)習(xí)中,應(yīng)該注意到這一點,更重要的是我們要學(xué)會把從書本中學(xué)到的知識和實際的電路聯(lián)系起來,這不論是對我們以后的就業(yè)還是學(xué)習(xí),都會起到很大的促進和幫助,我相信,通過這次的畢業(yè)設(shè)計,在下一階段的學(xué)習(xí)中我會更加努力,力爭把功課學(xué)好,學(xué)精。同時,通過本次畢業(yè)設(shè)計,鞏固了我們學(xué)習(xí)過的專業(yè)知識,也使我們把理論與實踐從真正意義上相結(jié)合了起來;考驗了我們借助互聯(lián)網(wǎng)搜集、查閱相關(guān)文獻資料,和組織材料的綜合能力;從中可以自我測驗,認(rèn)識到自己哪方面有欠缺、不足,以便于在日后的學(xué)習(xí)中得到改進、提高。
6.2展望
放眼今后,直流穩(wěn)壓電源今后的發(fā)展方向之一是以微處理器為核心的數(shù)控直流穩(wěn)壓電源,它將利用最新的計算機技術(shù)、網(wǎng)絡(luò)技術(shù)及數(shù)字化技術(shù),充分發(fā)揮微處理器強大的信息處理能力,使其突破傳統(tǒng)直流穩(wěn)壓電源的概念,傳統(tǒng)直流穩(wěn)壓電源的高穩(wěn)定性輸出僅是這種數(shù)控直流穩(wěn)壓電源其眾多功能之一。它的功能包括:控制的智能化,即控制電路采用全數(shù)字化,控制手段用微處理器和單片機組成的軟件控制方式,達(dá)到了較高的智能化程度,并且進一步提高了電路設(shè)備的可靠性;將隨著微處理器和監(jiān)控軟件的引入,電源的自我監(jiān)控能力普遍增強,可以實時地監(jiān)控設(shè)備本身的各種運行參數(shù)和狀態(tài),預(yù)警功能和故障診斷功能,有效地實現(xiàn)了實驗電源的無人值守;隨著胡兩旺技術(shù)應(yīng)用日益普及和信息處理技術(shù)的不斷發(fā)展,在管理上達(dá)到網(wǎng)絡(luò)化,電源設(shè)備數(shù)據(jù)處理和通信能力,通過其智慧型人機界面,使網(wǎng)路技術(shù)人員可以隨時監(jiān)視電源設(shè)備運行狀態(tài),各項技術(shù)參數(shù);具有遠(yuǎn)程開關(guān)機功能,使網(wǎng)絡(luò)技術(shù)人員可定時開關(guān)電源。
隨著科學(xué)技術(shù)的發(fā)展,直流穩(wěn)壓電源等儀表數(shù)字化、智能化、網(wǎng)絡(luò)化將是發(fā)展方向。高精度數(shù)控直流穩(wěn)壓電源的研制對準(zhǔn)了這個發(fā)展方向,加上計算機技術(shù)的迅速發(fā)展,使之具有非常廣闊的發(fā)展空間。
              附錄1 系統(tǒng)整體原理圖
             附錄2 系統(tǒng)源程序

單片機源程序如下:
  1. #include <reg52.h> //52系列頭文件
  2. #define Disdata P0 //液晶數(shù)據(jù)端口
  3. #define uchar unsigned char //無符號字符8位
  4. #define uint unsigned int //無符號整數(shù)8位
  5. uint data dis[4]={0x00,0x00,0x00,0x00};//4個數(shù)據(jù)單元和一個
  6. uchar code table[]="OUTPUT: . V "; //定義初始上電液晶默認(rèn)顯示狀態(tài)
  7. uchar code table1[]="designed by :";
  8. uchar code table3[]=" Li Xiaojun";
  9. uchar code table2[]="INPUT: . V ";
  10. sbit lcden=P2^7; //定義液晶使能端
  11. sbit lcdrs=P2^5; //定義液晶RS端
  12. sbit rw=P2 ^6; //定義液晶RW端
  13. sbit cs_ad=P2^4;
  14. sbit dout=P2^3;
  15. sbit clk=P2^2; //轉(zhuǎn)換結(jié)束標(biāo)志位
  16. sbit da_wr=P2^1;
  17. sbit da_cs=P2^0;
  18. sbit beep=P1^7;//蜂鳴器
  19. data int result;//測量變量暫存地址
  20. uchar num,num1,num2,num3,num4,num5;
  21. uchar shii,gei;
  22. uchar shuru;
  23. uchar dagg,dass;
  24. uchar key,temp;
  25. uchar cvc,mma,mmb;
  26. uchar ddf;
  27. uint ddt;
  28. //********延時函數(shù)************
  29. void delay(uint z)
  30. {
  31. uint x,y;
  32. for(x=z;x>0;x--)
  33. for(y=110;y>0;y--);
  34. }
  35.  
  36. //*************
  37. void di()
  38. {
  39. beep=0;
  40. delay(100);
  41. beep=1;
  42. }void write_com(uchar com) //液晶寫命令函數(shù)
  43. {
  44. lcdrs=0;
  45. P0=com;
  46. delay(5);
  47. lcden=1;
  48. delay(5);
  49. lcden=0;
  50. }
  51. void write_data(uchar date) //液晶寫數(shù)據(jù)函數(shù)
  52. {
  53. lcdrs=1;
  54. P0=date;
  55. delay(5);
  56. lcden=1;
  57. delay(5);
  58. lcden=0;
  59. }
  60. void write_sg(uchar add,uchar date) //寫整數(shù)位和小數(shù)位函數(shù)
  61. {
  62. uint shi,ge;
  63. shi=date/10; //分解出一個2位數(shù)的十位
  64. ge=date%10;
  65. write_com(0x80+0x40+add); //設(shè)置顯示位置
  66. write_data(0x30+shi); //送去液晶顯示十位
  67. write_data(0x30+ge); //送去液晶顯示個位
  68. }
  69. //void write_da(uchar sps,uchar uru)
  70. //{ uchar yuy,rur;
  71. // yuy=uru;
  72. // rur=0;
  73. // write_com(0x80+sps); //設(shè)置顯示位置
  74. //if(cvc==8)
  75. // {
  76. // write_data(0x30+yuy); //送去液晶顯示十位
  77. // write_data(0x30+rur); //送去液晶顯示個位
  78. // }
  79. /// else
  80. // write_data(0x30+rur); //送去液晶顯示十位
  81. // write_data(0x30+yuy);
  82. //}void init()
  83. {
  84. shuru=0;
  85. rw=0;
  86. lcden=0;
  87. shii=0;
  88. gei=0;
  89. dagg=0;
  90. dass=0;
  91. write_com(0x38); //初始化1602液晶
  92. write_com(0x0c);
  93. write_com(0x06);
  94. write_com(0x01);
  95. write_com(0x80); //設(shè)置顯示初始坐標(biāo) for(num2=0;num2<13;num2++)
  96. {
  97. write_data(table1[num2]);
  98. delay(5);
  99. }
  100. write_com(0x80+40);
  101. for(num3;num3<16;num3++)
  102. {
  103. write_data(table3[num3]);
  104. delay(5);
  105. }
  106. delay(3000);
  107.  
  108. } //*******************************
  109. void scan1()
  110. {
  111. write_com(0x80);
  112. for(num1;num1<16;num1++)
  113. {
  114. write_data(table2[num1]);
  115. delay(5);
  116. }
  117. // write_da(8,dass);
  118. //write_da(11,dagg); write_com(0x80+0x40); //設(shè)置顯示初始坐標(biāo)
  119. for(num=0;num<16;num++)
  120. {
  121. write_data(table[num]);
  122. delay(5);
  123. }
  124. write_sg(8,shii);
  125. write_sg(11,gei);
  126.  
  127. }
  128.  
  129. //****TLC1549轉(zhuǎn)換處理子函數(shù)********void test()
  130. {
  131.  
  132. data uchar i;
  133.  
  134. cs_ad=1; //禁止i/o clock
  135. cs_ad=0; //開啟控制電路,使能data out和i/o clock
  136. result=0; //清轉(zhuǎn)換變量
  137. for(i=0;i<10;i++) //采集10次 ,即10bit
  138. {
  139. clk=0;
  140. result*=2;
  141. if(dout) result++;
  142. clk=1;
  143. }
  144. delay(590);
  145. cs_ad=1; ;;;; //data out 返回到高阻狀態(tài)而終止序列
  146. //****數(shù)據(jù)轉(zhuǎn)換處理**********
  147. result=result*2;
  148. dis[2]=result/205; //計算整數(shù)位
  149. dis[3]=result%205; //余數(shù)暫存
  150. dis[3]=dis[3]*10; //計算小數(shù)第一位
  151. dis[1]=dis[3]/205;
  152. dis[3]=dis[3]%205;
  153. dis[3]=dis[3]*10; //計算小數(shù)第二位
  154. dis[0]=dis[3]/205;
  155. shii=dis[2];
  156. gei=dis[1]*10+dis[0];
  157. write_sg(8,shii);
  158. write_sg(11,gei);
  159.  
  160. }
  161. //***********************
  162. void test_da()
  163. {
  164.  
  165.  
  166. ddf=mma+mmb*0.1-0.7;
  167. ddf=ddf*25.6;
  168. ddt=ddf;
  169. da_wr=0;
  170. da_cs=0;
  171. P3=ddt;
  172. delay(1);
  173. }//*************************
  174. void markey()
  175. {
  176.  
  177. P1=0xfe;
  178. temp=P1;
  179. temp=temp&0xf0;
  180. if(temp!=0xf0)
  181. {
  182. delay(10);
  183. temp=P1;
  184. temp=temp&0xf0;
  185. if(temp!=0xf0);
  186. {
  187. temp=P1;
  188. switch(temp)
  189. {
  190. case 0xee:
  191. if(cvc==0)
  192. {
  193. write_com(0x80+8);
  194. write_data(0x30+0);
  195. write_data(0x30+1);
  196. di();
  197. cvc++;
  198. key=1;
  199. mma=key;
  200. break;
  201. }
  202. else
  203. write_com(0x80+11);
  204. write_data(0x30+1);
  205. write_data(0x30+0);
  206. key=1;
  207. cvc=0;
  208. di();
  209. mmb=key;
  210. test_da();
  211. break;
  212. case 0xde:
  213. if(cvc==0)
  214. {
  215. write_com(0x80+8);
  216. write_data(0x30+0);
  217. write_data(0x30+2);
  218. di();
  219. cvc++;
  220. key=2;
  221. mma=key;
  222. break;
  223. }
  224. else
  225. write_com(0x80+11);
  226. write_data(0x30+2);
  227. write_data(0x30+0);
  228. key=2;
  229. cvc=0;
  230. di();
  231. mmb=key;
  232. test_da();
  233. break;
  234.  
  235.  
  236. case 0xbe:
  237. if(cvc==0)
  238. {
  239. write_com(0x80+8);
  240. write_data(0x30+0);
  241. write_data(0x30+3);
  242. di();
  243. cvc++;
  244. key=3;
  245. mma=key;
  246. break;
  247. }
  248. else
  249. write_com(0x80+11);
  250. write_data(0x30+3);
  251. write_data(0x30+0);
  252. key=3;
  253. cvc=0;
  254. di();
  255. mmb=key;
  256. test_da();
  257. break;
  258. }
  259. while(temp!=0xf0)
  260. {
  261. temp=P1;
  262. temp=temp&0xf0;
  263. }
  264.  
  265. }
  266.  
  267.  
  268. } P1=0xfd;
  269. temp=P1;
  270. temp=temp&0xf0;
  271. if(temp!=0xf0)
  272. {
  273. delay(10);
  274. temp=P1;
  275. temp=temp&0xf0;
  276. if(temp!=0xf0);
  277. {
  278. temp=P1;
  279. switch(temp)
  280. {
  281. case 0xed:
  282. if(cvc==0)
  283. {
  284. write_com(0x80+8);
  285. write_data(0x30+0);
  286. write_data(0x30+4);
  287. di();
  288. cvc++;
  289. key=4;
  290. mma=key;
  291. break;
  292. }
  293. else
  294. write_com(0x80+11);
  295. write_data(0x30+4);
  296. write_data(0x30+0);
  297. key=4;
  298. cvc=0;
  299. di();
  300. mmb=key;
  301. test_da();
  302. break;
  303. case 0xdd:
  304. if(cvc==0)
  305. {
  306. write_com(0x80+8);
  307. write_data(0x30+0);
  308. write_data(0x30+5);
  309. di();
  310. cvc++;
  311. key=5;
  312. mma=key;
  313. break;
  314. }
  315. else
  316. write_com(0x80+11);
  317. write_data(0x30+5);
  318. write_data(0x30+0);
  319. key=5;
  320. cvc=0;
  321. di();
  322. mmb=key;
  323. test_da();
  324. break;
  325. case 0xbd:
  326. if(cvc==0)
  327. {
  328. write_com(0x80+8);
  329. write_data(0x30+0);
  330. write_data(0x30+6);
  331. di();
  332. cvc++;
  333. key=6;
  334. mma=key;
  335. break;
  336. }
  337. else
  338. write_com(0x80+11);
  339. write_data(0x30+6);
  340. write_data(0x30+0);
  341. key=6;
  342. cvc=0;
  343. di();
  344. mmb=key;
  345. test_da();
  346. break;
  347. }
  348. while(temp!=0xf0)
  349. {
  350. temp=P1;
  351. temp=temp&0xf0;
  352. }
  353.  
  354. }
  355. } P1=0xfb;
  356. temp=P1;
  357. temp=temp&0xf0;
  358. if(temp!=0xf0)
  359. {
  360. delay(10);
  361. temp=P1;
  362. temp=temp&0xf0;
  363. if(temp!=0xf0);
  364. {
  365. temp=P1;
  366. switch(temp)
  367. {
  368. case 0xeb:
  369. if(cvc==0)
  370. {
  371. write_com(0x80+8);
  372. write_data(0x30+0);
  373. write_data(0x30+7);
  374. di();
  375. cvc++;
  376. key=7;
  377. mma=key;
  378. break;
  379. }
  380. else
  381. write_com(0x80+11);
  382. write_data(0x30+7);
  383. write_data(0x30+0);
  384. key=7;
  385. cvc=0;
  386. di();
  387. mmb=key;
  388. test_da();
  389. break;
  390. case 0xdb:
  391. if(cvc==0)
  392. {
  393. write_com(0x80+8);
  394. write_data(0x30+0);
  395. write_data(0x30+8);
  396. di();
  397. cvc++;
  398. key=8;
  399. mma=key;
  400. break;
  401. }
  402. else
  403. write_com(0x80+11);
  404. write_data(0x30+8);
  405. write_data(0x30+0);
  406. key=8;
  407. cvc=0;
  408. di();
  409. mmb=key;
  410. test_da();
  411. break;
  412. case 0xbb:
  413. if(cvc==0)
  414. {
  415. write_com(0x80+8);
  416. write_data(0x30+0);
  417. write_data(0x30+9);
  418. di();
  419. cvc++;
  420. key=9;
  421. mma=key;
  422. break;
  423. }
  424. else
  425. write_com(0x80+11);
  426. write_data(0x30+9);
  427. write_data(0x30+0);
  428. key=9;
  429. cvc=0;
  430. di();
  431. mmb=key;
  432. test_da();
  433. break;
  434.  
  435. }
  436. while(temp!=0xf0)
  437. {
  438. temp=P1;
  439. temp=temp&0xf0;
  440. }
  441.  
  442. }
  443.  
  444. }
  445.  
  446. P1=0xf7;
  447. temp=P1;
  448. temp=temp&0xf0;
  449. if(temp!=0xf0)
  450. {
  451. delay(10);
  452. temp=P1;
  453. temp=temp&0xf0;
  454. if(temp!=0xf0);
  455. {
  456. temp=P1;
  457. switch(temp)
  458. {
  459. case 0xe7:
  460. if(cvc==0)
  461. {
  462. write_com(0x80+8);
  463. write_data(0x30+0);
  464. write_data(0x30+0);
  465. di();
  466. cvc++;
  467. key=0;
  468. ……………………

  469. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
基于51單片機數(shù)控直流電源的設(shè)計.docx (330.6 KB, 下載次數(shù): 206)


回復(fù)

使用道具 舉報

ID:84147 發(fā)表于 2018-4-20 16:19 | 顯示全部樓層
謝謝,最近正在找51數(shù)控電源的資料
回復(fù)

使用道具 舉報

ID:160658 發(fā)表于 2018-11-30 20:47 | 顯示全部樓層
void delay(uint z)
{
        uint x, y;

        for(x=z; x&gt; 0; x--)
                for(y=110; y&gt; 0; y--);
}
gt沒有定義
        temp = temp & amp; 0xf0; 這句是什么意思?
回復(fù)

使用道具 舉報

ID:160658 發(fā)表于 2018-11-30 20:51 | 顯示全部樓層
for(num3; num3&lt; 16; num3++) 這句是什么意思?沒有這樣的for語句吧
回復(fù)

使用道具 舉報

ID:227607 發(fā)表于 2020-3-1 10:30 | 顯示全部樓層
感謝樓主分享
回復(fù)

使用道具 舉報

ID:303894 發(fā)表于 2020-3-11 11:43 | 顯示全部樓層
程序這里展示的是全的嗎 樓主
回復(fù)

使用道具 舉報

ID:435715 發(fā)表于 2020-4-5 12:06 | 顯示全部樓層
非常需要這個。
回復(fù)

使用道具 舉報

ID:742075 發(fā)表于 2020-4-30 23:20 | 顯示全部樓層
樓主這個資料有仿真下載嗎
回復(fù)

使用道具 舉報

ID:742075 發(fā)表于 2020-4-30 23:20 | 顯示全部樓層
這個資料哪里可以下載仿真
回復(fù)

使用道具 舉報

ID:128989 發(fā)表于 2020-5-4 12:28 | 顯示全部樓層
看看數(shù)控電源
回復(fù)

使用道具 舉報

ID:1068816 發(fā)表于 2023-3-29 16:46 | 顯示全部樓層
你好,有沒有這個仿真軟件呀?急
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表