欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7930|回復: 0
收起左側

基于單片機控制的開關電源論文資料

[復制鏈接]
ID:319275 發表于 2018-5-1 20:14 | 顯示全部樓層 |閱讀模式
引言
     許多科學實驗都離不開電,并且在這些實驗中經常會對通電時間、電壓高低、電流大小以及動態指標有著特殊的要求,因此,如果實驗電源不僅具有良好的輸出質量而且還具有多功能以及一定的智能化,那么就省去了許多不精確的人為操作,取而代之的是精確的微機控制,而我們所要做的就是在實驗開始前對一些參數進行預設。這將會給各個領域中的實驗研究帶來不同程度的便捷與高效。因此,直流電源今后的發展目標之一就是不僅要在性能上做到效率高、噪聲低、高次諧波低、既節能又不干擾環境,還要在功能上力求實現數控化、多功能化與智能化。本文所介紹的就是一個數控可調電源,這是一個高性能的直流穩壓電源。由于在該電源中引入了單片機控制,故該電源還具有一定的智能化,可實現變壓,顯示輸出電壓、電流,預置輸出電壓值等功能。
本文中研究的單片機控制的線性電源,可以通過鍵盤預置期望輸出電壓值,模/數轉換器對輸出電壓進行采樣并顯示在數碼管上。該系統還采用了溫度傳感器對輸出電壓進行校正,使得輸出電壓更穩定精確度也更高。并且該系統可以給芯片提供+12V,+5V及-12V的工作電壓。
  由單片機控制的數控電源主要由三部分所構成,主要是電源電路,控制電路和校正電路。以LM317三端電壓可調器來調節電壓,其具有輸出電壓穩定,可調范圍較大,但其缺點是輸出的電流較小,所以在設計的時候還加入了擴展電流電路。
1. 概述
1.1課題來源及意義
電源技術是一種應用功率半導體器件,綜合電力變換技術、現代電子技術、自動控制技術的多學科的邊緣交叉技術。隨著科學技術的發展,電源技術又與現代控制理論、材料科學、電機工程、微電子技術等許多領域密切相關。目前電源技術已逐步發展成為一門多學科互相滲透的綜合性技術學科。他對現代通訊、電子儀器、計算機、工業自動化、電力工程、國防及某些高新技術提供高質量、高效率、高可靠性的電源起著關鍵作用。
--  由于國內微電子技術、阻容器件生產技術以及磁性材料技術與一些技術先進國家還有一定的差距,因而造價不能進一步降低,也影響到可靠性的進一步提高。所以在我國的電子儀器以及機電一體化儀器中,開關穩壓電源還不能得到十分廣泛的普及及使用。特別是對于無工頻變壓器開關穩壓電源中的高壓電解電容器、高反壓大功率開關管、開關變壓器的磁芯材料等器件,在我國還處于研究、開發階段。在一些技術先進國家,開關穩壓電源雖然有了一定的發展,但在實際應用中也還存在一些問題,不能十分令人滿意。這暴露出開關穩壓電源的又一個缺點,那就是電路結構復雜,故障率高,維修麻煩。對此,如果設計者和制造者不予以充分重視,則它將直接影響到開關穩壓電源的推廣應用。當今,開關穩壓電源推廣應用比較困難的主要原因就是它的制作技術難度大、維修麻煩和造價成本較高。所以選擇由單片機控制的線性電源具有成本低,故障少,簡單實用等特點,適合推廣和應用。
1.2 課題基本要求
(1)設計、制作精密數控直流電源;
(2)使用單片機構成控制系統,通過鍵盤預置輸入電壓,可顯示預置電壓和輸出電壓;
(3)掌握A/D及D/A轉換及芯片使用方法;
(4)掌握數控電源的設計方法;
(5)掌握單片機軟件編程方法;
(6)掌握傳感器的基本原理和模擬電子電路基本原理等。
1.3相關背景介紹
     直流穩壓電源按習慣可分為化學電源,線性穩定電源和開關型穩定電源,它們又分別具有各種不同類型:
化學電源:
我們平常所用的干電池、鉛酸蓄電池、鎳鎘、鎳氫、鋰離子電池均屬于這一類,各有其優缺點。隨著科學技術的發展,又產生了智能化電池;在充電電池材料方面,美國研制人員發現錳的一種碘化物,用它可以制造出便宜、小巧、放電時間長,多次充電后仍保持性能良好的環保型充電電池。
線性穩壓電源 :
線性穩定電源有一個共同的特點就是它的功率器件調整管工作在線性區,靠調整管之間的電壓降來穩定輸出。由于調整管靜態損耗大,需要安裝一個很大的散熱器給它散熱。而且由于變壓器工作在工頻(50Hz)上,所以重量較大。該類電源優點是穩定性高,紋波小,可靠性高,易做成多路,輸出連續可調的成品。缺點是體積大、較笨重、效率相對較低。這類直流穩壓電源又有很多種,從輸出性質可分為穩壓電源和穩流電源及集穩壓、穩流于一身的穩壓穩流(雙穩)電源。從輸出值來看可分定點輸出電源、波段開關調整式和電位器連續可調式幾種。從輸出指示上可分指針指示型和數字顯示式型等等。
開關型直流穩壓電源:
與線性穩壓電源不同的一類穩電源就是開關型直流穩壓電源, 開關型直流穩壓電源的電路型式主要有單端反激式,單端正激式、半橋式、推挽式和全橋式。它和線性電源的根本區別在于它變壓器不工作在工頻而是工作在幾十千赫茲到幾兆赫茲。功能管不是工作在飽和及截止區即開關狀態;開關電源因此而得名。開關電源的優點是體積小,重量輕,穩定可靠;缺點相對于線性電源來說紋波較大(一般≤1%VO(P-P),好的可做到十幾mV(P-P)或更小)。
上述三種電源中,化學電源對環境會產生影響,開關電源的制作成本相對較高并且電路設計也較復雜。相對這兩種而言,線性電源實用性更高,成本也較低,輸出更穩定。下文中將會詳細介紹基于AT89C51單片機的精密數字控制直流電源設計制作。
2    基于單片機的數控直流電源方案設計
     基于單片機控制的數控直流電源主要由電源部分、控制部分和校正部分組成。其基本原理如圖2.1所示:
            圖2.1 基于單片機控制的數控直流電源系統原理圖
其基本工作原理為:電壓通過鍵盤預置后由單片機控制并調節輸出電壓,輸出電壓經過A/D采樣校正后送數碼管顯示。
基于單片機的數字控制直流電源的制作需要考慮以下兩個問題:一是制作成本及工藝。在現在的商業化中,產品的成本和工藝往往是倍受重視的,它直接決定了產品的銷售和發展;二是電源的輸出功率以及精確度。在很多實驗和領域中都需要用到精確度很高的電源,另外在民用上也需要可調節的電源。在下面的方案設計中將主要對兩種數控直流電源作詳細介紹和論證。
2.1 方案設計
2.1.1 方案一:開關穩壓電源
    開關電源就是用通過電路控制開關管進行高速的道通與截止.將直流電轉化為高頻率的交流電提供給變壓器進行變壓,從而產生所需要的一組或多組電壓!轉華為高頻交流電的原因是高頻交流在變壓器變壓電路中的效率要比50Hz高很多。
開關電源的工作原理是:
1.交流電源輸入經整流濾波成直流;
2.通過高頻PWM(脈沖寬度調制)信號控制開關管,將那個直流加到開關變壓器初級上;
3.開關變壓器次級感應出高頻電壓,經整流濾波供給負載;
4.輸出部分通過一定的電路反饋給控制電路,控制PWM占空比,以達到穩定輸出的目的。
交流電源輸入時一般要經過厄流圈一類的東西,過濾掉電網上的干擾,同時也過濾掉電源對電網的干擾;在功率相同時,開關頻率越高,開關變壓器的體積就越小,但對開關管的要求就越高;開關變壓器的次級可以有多個繞組或一個繞組有多個抽頭,以得到需要的輸出;一般還應該增加一些保護電路,比如空載、短路等保護,否則可能會燒毀開關電源。
其工作原理示意圖如圖2.2所示:
                      圖2.2 開關電源工作原理示意圖
    圖2.1畫出了開關穩壓電源的工作原理示意圖,它是由全波整流器,開關管V,激勵信號,續流二極管VD,儲能電感和濾波電容C組成。實際上,開關穩壓電源的核心部分是一個直流變壓器。
直流變換器,它是把直流轉換成交流,然后又把交流轉換成直流的裝置。這種裝置被廣泛地應用在開關穩壓電源中。采用直流變換器可以把一種直流供電電壓變換成極性、數值各不同的多種直流供電電壓。
輸入交流電壓經整流濾波后以直流方式Ui輸入開關管V中,由單片機控制開關管的通斷。當開關管以某一頻率通斷時,使得輸入的直流信號變為交流信號,再通過續流二極管VD及電感L把交流信號轉化為直流信號,經過濾波電容C后輸出到負載R上。這就是開關電源的調壓原理。
2.1.2 方案二:線性穩壓電源
    線性穩壓電源,是指調整管工作在線性狀態下的直流穩壓電源。調整管工作在線性狀態下,是連續可變的,亦即是線性的。
線性穩壓電源主要由調整管、參考電壓、取樣電路、誤差放大電路等幾個基本部分組成。另外還包括一些例如保護電路,啟動電路等部分。取樣電阻通過取樣輸出電壓,并與參考電壓比較,比較結果由誤差放大電路放大后,控制調整管的導通程度,使輸出電壓保持穩定。
常用的線性串聯型穩壓電源芯片有:78XX系列(正電壓型),79XX系列(負電壓型)(實際產品中,XX用數字表示,XX是多少,輸出電壓就是多少。例如7805,輸出電壓為5V);LM317(可調正電壓型),LM337(可調負電壓型)。
調壓原理:

圖2.3 穩壓調壓電路原理說明圖
    圖2.3為穩壓調壓電路原理說明圖。LM317的2腳于1腳之間的電壓恒定為恒定值1.25V,所以由固定電阻R1(應小于240Ω)與電位器RW組成取樣分壓電路,同時也可以作為調節輸出電壓,輸出電壓如(1)式。
                     UO=1.25V(1+RW/R1)           (2)式
     調整端1的電流極小,所以流過R1和RW的電流幾乎相等(幾mA電流)。通過改變電位器RW的阻值就能改變輸出電壓UO。此外為了保證LM317的輸出功率及正常工作,還需要添加散熱片,二極管D5的作用是防止輸出短路。
     由上面的介紹中可知,只要改變管腳1的電壓,就可以實現輸出可調。電位器RW固定在一個值后,通過單片機預置電壓,經過D/A轉化和運算放大器的電壓放大達到對控制端的電壓預置。所以由1腳作為控制電壓的輸入端,接控制部分電路。
2.2 方案論證
2.2.1 方案一分析:
開關電源的主要優點是功耗小,效率高,穩壓范圍寬,濾波效率高并且電路形式靈活。開關穩壓電源的缺點是存在較為嚴重的開關干擾。開關穩壓電源中,功率調整開關晶體管V工作在狀態,它產生的交流電壓和電流通過電路中的其他元器件產生尖峰干擾和諧振干擾,這些干擾如果不采取一定的措施進行抑制、消除和屏蔽,就會嚴重地影響整機的正常工作。此外由于開關穩壓電源振蕩器沒有工頻變壓器的隔離,這些干擾就會串入工頻電網,使附近的其他電子儀器、設備和家用電器受到嚴重的干擾。
另外用89C51對脈寬調制信號PWM進行控制還要考慮到頻率問題。由于51系列單片機的工作頻率較低,用于控制高頻率的開關電源是不顯示的,考慮到更換頻率更高的單片機會使得制作成本升高,并且在高頻下對布線要求較高也更容易產生干擾噪聲。
2.2.2       方案二分析:
     線性穩壓直流電源的特點是:輸出電壓比輸入電壓低;反應速度快,輸出紋波較小;工作產生的噪聲低。通過集成穩壓器調節可以使得輸出電壓的穩壓系數較為理想,同時工作輸出也很穩定。
     使用LM317可調穩壓器作為主要的穩壓器件,一方面可以降低制作成本,另一方面使得電路的設計更簡單,更使用。但和開關電源相比,線性電源的效率較低,這是由于調整管相當于一個電阻,電流流過電阻時會發熱,所以工作在線性狀態下的調整管,一般會產生大量的熱,導致效率不高。這是線性穩壓電源的一個最主要的一個缺點,調整管在發熱的同時會給系統帶來熱噪聲影響。另外,采用調整管的電源,其電源功耗都較小。當然在實際應用中可以加入擴流電路使得電源的輸出功率有所提高,可以為小功率電器及設備提供可靠的電源。同時可以通過使用溫度傳感器校正由于調整管的發熱導致的電壓偏差,使得電壓輸出與預置電壓相符合。
     綜上所述,使用調整管調節輸出電壓可以獲得較穩定的電壓輸出,而使用開關管調節輸出電壓可以獲得較大的電壓調節范圍,但是由于AT89C51單片機的工作頻率較低,不適用于對開關管的脈寬進行控制,而以單片機為控制系統的線性調節作用較適用于調整管的電壓調節,所以本設計采用了調整管調節電壓輸出的方式。
3         硬件電路設計
     
                 圖2.4 基于單片機系統的數控電源系統框圖
如圖2.4所示,硬件電路主要由三個部分組成:一是主電源部分,該部分提供電源輸出;二是副電源電路部分,該部分主要提供+12V、+5V、0V和-12V電源,為單片機及A/D、D/A轉換、運算放大器提供電源;三是控制部分電路,主要包括單片機、A/D和D/A轉換電路、運算放大電路及溫度傳感器校正電路,為最主要的控制電路,是整個制作的核心。      
3.1主電源電路設計
該電路由變壓器、全波整流濾波電路、集成穩壓器LM317、和電流放大電路
構成。
3.1.1 變壓器的選擇
根據各級放大器管子的工作負載線求出最大工作電壓(以變壓器或扼流圈為負載的,取工作點電壓)和最大電流,取其中電壓最高一級的電壓作為放大器供電電壓,取各級最大電流之和作為放大器供電電流。通常整流后以CLC或CRC方式濾波,會出現一定的升壓,故變壓器輸出電壓可按 放大器供電電壓+整流器電壓降+第一級放大器前的濾波器電壓降的0.8-0.9之間選取,如果整流后采取LC或RC濾波方式的,一般以0.9-0.95為宜;為使放大器有充沛的工作電流供給,變壓器輸出電流應該選得大些,可取放大器供電電流的1.4倍,一般超過2倍意義并不大。如果根據放大器供電要求已經得出了變壓器各次級繞組輸出所需要的所有電壓、電流,即可按 電壓×電流 求出各次級繞組的輸出功率,并將這些繞組的輸出功率全部相加再除以0.85-0.9的系數(功率在100W以下的系數宜在稍取大一些),這就得出了電源變壓器的總功率,計算出變壓器的所有設計參數。
本設計中的最大輸出工作電壓為10V,允許最大工作電流為1.5A,因此所能提供的最大輸出功率為15W。主電源電路中LM317穩壓器的輸入端選擇15V的電壓輸入,以保證輸出能達到10V,變壓器的功率選擇為30W,為提高輸出功率提供一定的調節余地。副電源電路作用是提供控制部分的器件正常工作電壓,因此在輸出功率上不需要太大。
變壓器選擇參數如表3.1所示:
        
        
        
        
        
        
                表3.1 變壓器選擇參數表
3.1.2 整流濾波電路
整流電路將交流電壓Ui變換成脈動的直流電壓。再經濾波電路濾除較大的紋波成分,輸出紋波較小的直流電壓U1。常用的整流濾波電路有全波整流濾波、橋式整流濾波等。本設計采用單相橋式整流電路,圖3.1是容性負載單相橋式整流電路。它的四臂是由四只二極管構成,當變壓器B次級的1端為正、2端為負時,二極管D2和D4因承受正向電壓而導通,D1和D3因承受反向電壓而截止。此時,電流由變壓器1端通過D4經RL,再經D2返回2端。當1端為正時,二極管D1、D3導通,D2、D4截止,電流則由2端通過D3流經RL,再經D1返回1端。因此,與全波整流一樣,在一個周期內的正負半周都有電流流過負載,而且始終是同一方向。
圖3.1 整流電路原理示意圖
3.1.3 穩壓調壓電路
穩壓調壓電路主要用的是LM317集成三端可調穩壓器。該元件如圖3.2示。                        
  
LM317產品介紹:
     LM317 是美國國家半導體公司的三端可調正穩壓器集成電路。我國和世界各大集成電路生產商均有同類產品可供選用,是使用極為廣泛的一類串連集成穩壓器。
LM317 的輸出電壓范圍是1.2V 至 37V,負載電流最大為 1.5A。它的使用非常簡單,僅需兩個外接電阻來設置輸出電壓。此外它的線性調整率和負載調整率也比標準的固定穩壓器好。LM317 內置有過載保護、安全區保護等多種保護電路。
通常 LM317 不需要外接電容,除非輸入濾波電容到LM317 輸入端的連線超過 6 英寸(約 15 厘米)。使用輸出電容能改變瞬態響應。調整端使用濾波電容能得到比標準三端穩壓器高的多的紋波抑制比。
LM317 能夠有許多特殊的用法。比如把調整端懸浮到一個較高的電壓上,可以用來調節高達數百伏的電壓,只要輸入輸出壓差不超過 LM117/LM317 的極限就行。當然還要避免輸出端短路。還可以把調整端接到一個可編程電壓上,實現可編程的電源輸出。
  圖3.3 穩壓調壓電路原理圖
     如圖3.3所示,LM317的控制端為1腳,通過調節1腳電壓從而達到對輸出電壓Uo的調節,通過調節電位器RP1也可以改變輸出電壓的范圍,二極管DDD用于防止電路短路。
3.1.4 擴流電路
     如圖3.4所示,為兩只不同類型管構成的NPN型管,由三極管TT1、TT2,電阻R2、R3、R4構成電流放大電路。其中TT1和TT2構成互補復合管,R2、R3、R4組成偏置電阻。
圖3.4 括流電路原理圖  
     在正確的外加電壓下每只管的電流均有合適的通路,且都工作在放大區,為了實現電流放大,應將第一只管的集電極電流作為第二只管的基極電流,由于復合管有很高的電流放大系數,所以只需要很小的輸入驅動電流就可以獲得很大的輸出集電極電流。其電流的放大系數約為兩只三極管的放大系數的乘積,這樣可以大大地改善電路的性能。
主電源電路的參數選擇
    集成穩壓器的輸出電壓Vo與穩壓電源的輸出電壓相同。穩壓器的最大允許電流Icm<Io max,輸出電壓Vi的范圍為:
      Vo max+(Vi-Vo)min≤Vi≤Vo min+(Vi-Vo)max       (3)式
式中Vo max為最大輸出電壓;Vo min為最小輸出電壓;(Vi-Vo)min為穩壓器的最小輸入、輸出電壓差;(Vi-Vo)max為穩壓器的最大輸入、輸出電壓差。
    性能指標要求 Vo=+3V-+9V,△Vop-p≤5mV,Sv≤3*10-3
         選可調式三端穩壓器LM317,其參數特性Vo=1.25V-37V,Io max=1.5A,最小輸入、輸出電壓差(Vi-Vo)min=3V,最大輸入、輸出壓差(Vi-Vo)max=40V。由(2)式知,取R1=240Ω,則RP1min=336Ω,RP1max=1.49KΩ,所以RP1取精密可調電位器,用于調節控制端誤差。
由(3)式可得輸入電壓Vi的范圍為:
        Vo max+(Vi-Vo)min≤Vi≤Vo min+(Vi-Vo)max
                       9V+3V≤Vi≤3V+40V
                         12V≤Vi≤43V
    綜上所述,變壓器應選取功率在30W以上,以保證能提供足夠的大的電流。整流濾波電容C1選取耐壓值為25V3600uF的電解電容,電容C2選取1uF的瓷片電容,輸出濾波電容C3取10uF的電解電容。三極管TT1選取型號為D669AC的NPN型的大功率管,TT2選取型號為B649AC的PNP型的大功率管。R2、R3、R4組成偏置電阻取值分別為6.2Ω、10Ω、15Ω的電阻。
    需要注意的是,在主電源電路中所選取的所有電阻均應采用2W的大功率電阻,以防止由于負載接入時產生大電流而使電阻損壞。另外在使用LM317時,要注意防管腳接錯,穩壓電路中還要接上保險絲和二極管防止短路電流過大,另外對于LM317還要加裝合適的散熱片。
3.2副電源電路設計
     副電源主要用于提供供控制部分電路使用的+12V、+5V、0V和-12V電壓。其電路結構與主電源電路結構相似,同樣采用的是穩壓器件來穩定電壓。
    圖3.4中使用的三端穩壓為CW7805、CW7812及CW7912三種型號,穩壓值分別為+5V、+12V和-12V。CW78**與CW79**系列繼承穩壓器穩壓器引腳圖如圖3.5所示。CW78**系列穩壓器1腳為電壓輸入端,2腳為地,3腳為電壓輸出端;CW79**系列穩壓器1腳接地,2腳接電壓輸入端,3腳接電壓輸出端。  
           
          圖3.5 CW78**與CW79**系列穩壓器引腳圖
     CW78**系列三端穩壓器的輸出電壓有5V、6V、、9V、12V、15V、18V和24V七個檔次。如CW7805表示的是輸出電壓為5V,最大電流為1.5A,以此類推。CW79**系列三端穩壓器和CW78**類似。這2種穩壓管內部均由穩壓電路和過流保護電路組成。副電源部分電路原理圖及調整管接法如圖3.5所示:
          圖3.5 副電源電路原理圖
副電源電路參數選擇:
     整流濾波電容C4、C5選取耐壓值為25V3600uF的電解電容,R5、R6、R7選擇20K電阻(它們的作用是使得穩壓器在開路時仍有工作電流,保證穩壓器的正常工作),C6、C7、C8選取的是耐壓值為25V10uF的電解電容用于濾波。特別要注意的是電容C5、C8的正負極不能接反,另外副電源中的電阻也采用的是2W大功率電阻。
     副電源與主電源使用不同的變壓器變壓,主要考慮的是主電源要求的輸出功率較大,所以不宜采用同一個變壓器提供電源。
3.3控制部分電路設計
     控制部分電路是整個設計中最關鍵的核心電路部分,又可以分成鍵盤部分及轉換校正部分。它的主要功能是進行輸出數值預置,顯示輸出電壓幅值、預置數,進行A/D、D/A轉換,使用溫度傳感器進行校正,上述功能采用的是AT89C51來控制實現。主要使用的芯片和元器件有AT89C51、ADC0809、DAC0832、LM324、四位七段共陽級數碼管及數字溫度傳感器DS1820。
以AT89C51單片機為核心的控制系統控制外圍電路。
    AT89C51是一種帶4K字節閃爍可編程可擦除只讀存儲器(FPEROM—Falsh Programmable and Erasable ReadOnly Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。
其主要特性有:與MCS-51 兼容;4K字節可編程閃爍存儲器;壽命:1000次寫/擦循環,數據保留時間:10年;全靜態工作:0Hz-24Hz;三級程序存儲器鎖定;128*8位內部RAM;32可編程I/O線;兩個16位定時器/計數器;5個中斷源 ;可編程串行通道;低功耗的閑置和掉電模式;片內振蕩器和時鐘電路。如圖3.5所示為AT89C51的引腳圖。
     圖3.5 AT89C51單片機引腳示意圖
3.3.1 A/D及D/A轉換電路
轉換部分主要進行A/D、D/A轉換及數字溫度傳感器的使用和校正。其電路原理圖如圖3.6所示。
                      圖3.6 轉換部分電路原理圖
設計思路:
由于鍵盤電路中的按鍵及數碼管顯示分別占用了單片機的P2口和P0口,剩余的I/O口只有P1口和P3口,同時考慮到節約制作成本這一因素,所以轉換部分仍然采用的是鍵盤部分電路中的同一塊單片機,兩塊轉換芯片采用并行接入法,通過單片機的控制片選信號選通。
A/D轉換部分:
如圖3.15所示,ADC0809的D7~D0口與DAC0832的D7~D0口按順序并聯,然后按順序接到AT89C51的P1口作為轉換數據的輸入輸出端口。
ADC0809的作用是采集最后的電壓輸出信號,并轉化為8位數字信號,通過單片機的P1口送到單片機做處理并送數碼管上顯示。其6腳(START)和22腳(ALE)直接與單片機的14腳(P3.4)相連,用于控制A/D轉換啟動;7腳(EOC)與單片機的15腳(P3.5)相連,用于輸入A/D轉換結束信號。
ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接接口。其引腳功能如圖3.6所示。
圖3.6ADC0809引腳示意圖
主要特性:8路8位A/D轉換器,即分辨率8位;具有轉換起停控制端;轉換時間為100μs;單個+5V電源供電;模擬輸入電壓范圍0~+5V,不需零點和滿刻度校準。;工作溫度范圍為-40~+85攝氏度;低功耗,約15mW。
引腳功能:
ADC0809芯片有28條引腳,采用雙列直插式封裝,如圖13.23所示。下面說明各引腳功能。
IN0~IN7:8路模擬量輸入端。
2-1~2-8(D7~D0):8位數字量輸出端。
ADDA、ADDB、ADDC:3位地址輸入線,用于選通8路模擬輸入中的一路。如表13.2所示。
ALE:地址鎖存允許信號,輸入,高電平有效。
START: A/D轉換啟動信號,輸入,高電平有效。
EOC: A/D轉換結束信號,輸出,當A/D轉換結束時,此端輸出一個高電平(轉換期間一直為低電平)。
OE:數據輸出允許信號,輸入,高電平有效。當A/D轉換結束時,此端輸入一個高電平,才能打開輸出三態門,輸出數字量。
CLK:時鐘脈沖輸入端。要求時鐘頻率不高于640KHZ。
REF(+)、REF(-):基準電壓。
Vcc:電源,單一+5V。
GND:地。
ADC0809的工作過程是:首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經譯碼選通8路模擬輸入之一到比較器。START上升沿將逐次逼近寄存器復位。下降沿啟動 A/D轉換,之后EOC輸出信號變低,指示轉換正在進行。直到A/D轉換完成,EOC變為高電平,指示A/D轉換結束,結果數據已存入鎖存器,這個信號可用作中斷申請。當OE輸入高電平時,輸出三態門打開,轉換結果的數字量輸出到數據總線上。
D/A轉換部分:
DAC0832的作用是通過單片機把預置數字信號轉換為模擬信號,輸出到主電源的控制端,對輸出電壓進行調節。其2腳(WR1)和18腳(WR2)與單片機的12腳(P3.2)相連,用于控制D/A轉換的寄存器的選通;1(CS)腳和17腳(XFER)與單片機的13腳(P3.3)相連,用于控制D/A轉換的片選信號和數據傳送信號。
DAC0832是采用先進的CMOS工藝制成的雙列直插式單片8位D/A轉化器。轉換速度為1uF。該芯片采用8位DAC寄存器兩次緩沖方式,這樣可以在D/A輸出的同時,送入下一個數據,以便提高轉換速度;也可以實現多片D/A轉換器的同步輸出。其引腳圖如圖3.7所示。
圖3.7 DAC0832引腳圖
其各引腳的功能定義如下:
DI7~DI0 :8位的數據輸入端,DI7為最高位。
IOUT1 :模擬電流輸出端1,當DAC寄存器中數據全為1時,輸出電流最大,當DAC寄存器中數據全為0時,輸出電流為0。
IOUT2 :模擬電流輸出端2, IOUT2與IOUT1的和為一個常數,即IOUT1+IOUT2=常數。
RFB :反饋電阻引出端,DAC0832內部已經有反饋電阻,所以RFB端可以直接接到外部運算放大器的輸出端,這樣相當于將一個反饋電阻接在運算放大器的輸出端和輸入端之間。
VREF :參考電壓輸入端,此端可接一個正電壓,也可接一個負電壓,它決定0至255的數字量轉化出來的模擬量電壓值的幅度,VREF范圍為(+10~-10)V。VREF端與D/A內部T形電阻網絡相連。
Vcc :芯片供電電壓,范圍為(+5~ 15)V。
AGND :模擬量地,即模擬電路接地端。
DGND :數字量地。
      要注意的是DAC0832是電流輸出型的,在設計時要求的是電壓輸出控制,因此需要在D/A轉換結果轉化為電壓輸出,可在DAC0832的IOUT2與IOUT1輸出端接一個運算放大器,接法如圖3.8所示。
圖3.8 DAC0832電壓轉換示意圖
輸出電壓放大部分:
LM324是四運放集成電路,它采用14腳雙列直插塑料封裝。它的內部包含四組形式完全相同的運算放大器,除電源共用外,四組運放相互獨立。
每一組運算放大器可用圖1所示的符號來表示,它有5個引出腳,其中“+”、“-”為兩個信號輸入端,“V+”、“V-”為正、負電源端,“Vo”為輸出端。兩個信號輸入端中,Vi-(-)為反相輸入端,表示運放輸出端Vo的信號與該輸入端的相位相反;Vi+(+)為同相輸入端,表示運放輸出端Vo的信號與該輸入端的相位相同。LM324的引腳圖如圖3.9所示。
另外在使用集成運算放大器,要注意引腳的連接是否正確,使用前要看是否需要做偏置電壓調零以及防止電路中產生自激震蕩。
  圖3.9  LM324芯片引腳圖
3.3.2 校正部分電路
美國DALLAS公司生產的單線數字溫度傳感器DS182,可把溫度信號直接轉換成串行數字信號供微機處理。由于每片DS1820含有唯一的硅串行數所以在一條總線上可掛接任意多個DS1820芯片。從DS1820讀出的信息或寫入DS1820的信息,僅需要一根口線(單線接口)。讀寫及溫度變換功率來源于數據總線,總線本身也可以向所掛接的DS1820供電,而無需額外電源。DS1820提供九位溫度讀數,構成多點溫度檢測系統而無需任何外圍硬件。其引腳排列如圖3.10所示。
       圖3.10  DS1820芯片引腳圖
DS1820引腳及功能:DS1820的引腳見圖3.1.3(PR35封裝)。GND:地;DQ:數據輸入/輸出腳(單線接口,可作寄生供電);VDD:電源電壓。
DS1820的測溫原理:內部計數器對一個受溫度影響的振蕩器的脈沖計數,低溫時振蕩器的脈沖可以通過門電路,而當到達某一設置高溫時振蕩器的脈沖無法通過門電路。計數器設置為-55℃時的值,如果計數器到達0之前,門電路未關閉,則溫度寄存器的值將增加,這表示當前溫度高于-55℃。同時,計數器復位在當前溫度值上,電路對振蕩器的溫度系數進行補償,計數器重新開始計數直到回零。如果門電路仍然未關閉,則重復以上過程。溫度表示值為9bit,高位為符號位。
對DS1820的使用,多采用單片機實現數據采集。處理時,將DS1820信號線與單片機一位口線相連,單片機可掛接多片DS1820,從而實現多點溫度檢測系統。系統對DS1820的操作以ROM命令和存儲器命令形式出現。
3.3.3 鍵盤及數碼管顯示電路
     在對鍵盤電路進行介紹之前,首先對鍵盤的功能和原理進行說明。
鍵盤是若干按鍵的集合,是向系統提供操作人員干預命令的接口設備.鍵可分為編碼鍵盤和非編碼鍵盤兩種類型.前者能自動識別按下的鍵并產生相應代碼,以并行或串行方式送給CPU。它使用方便,接口簡單,響應速度快,但價格高.后者則通過軟件來確定按鍵并計算鍵值.這種方法雖然沒有編碼鍵盤速度快,但它價格便宜,組態靈活,因此得到廣泛的應用.
鍵盤是計算機應用系統中一個很重要的組成部分,設計時必須解決下述一些問題。
按鍵的確認:
     鍵盤實際上是一組按鍵開關的集合,其每一個按鍵就是一個開關量輸入裝置.鍵的閉合與否,取決于彈性開關的合,斷兩個狀態,反應在電壓上就是呈現出高電平或低電平,若高電平表示斷開,則低電平表明鍵閉合.所以,通過電平狀態(高或低)的檢測,便可確定相應按鍵是否已被按下.鍵盤中有無按鍵按下是通過列選線讀入掃描字及行線讀入行選線的狀態進行判斷的。判斷的過程是:將列選線的所有I/O線均置成低電平,然后將行線的狀態讀入累加器中。如果有鍵按下,則至少會有一根行線被拉至低電平,從而使行輸入不全為1。
判斷按下的是哪一個鍵的方法是:將列選線依次置為低電平,然后檢查所有行線狀態,如果不全為1,則按下的鍵在這一列,而且是在與低電平行線相交交點上的那個鍵;如果全為1,則按下的鍵不在此列。因為鍵盤在按下過程中會產生抖動,單片機可能錯誤地認為是按下幾次,這樣會造成誤操作,因此在鍵盤處理程序中要加延時去抖動程序。
鍵盤抖動的防止:
     由于鍵盤本身的構造或者不規范的操作都會導致鍵盤抖動,鍵盤抖動會影響數值的正確輸入,造成錯誤的操作,要防止。
     很多實際應用系統均采用較少幾個按鍵組成非編碼鍵盤,也稱為開關式鍵盤,它們與單片機連接,當按鍵數比較多的時候,為節省I/O口線和減少引線,常將其按矩陣的方式連接。
如圖3.11,本設計中采用的8個按鍵的鍵盤,以2×4的方式連接,即2根行線和4根列線,每個行線和列線交叉點處即為一個鍵位。行線和列線一共需要6個I/O口。當某一鍵按下時,該按鍵所對應的電平發生變化,單片機通過對I/O口電平的查詢來判斷是哪一鍵按下。
           圖3.11  2×4按鍵鍵位圖
     鍵盤電路部分由按鍵,發光二極管、四位七段共陽級數碼管、三極管及單片機組成。2×4按鍵與單片機P2口的6個I/O口相連接。數碼管的接口與單片機P0口連接,發光二極管作為操作指示燈。
系統預置及輸出顯示部分:
本系統中采用4位數碼管顯示,動態掃描,軟件譯碼實現預置電壓、輸出電壓的實時顯示。數碼管有共陰和共陽的區分,單片機都可以進行驅動,但是驅動的方法卻不同,并且相應的0~9的顯示代碼也正好相反。
共陰極LED數碼管的發光二極管的陰極共地,某個發光二極管的陽極電壓為高電平時,二極管發光;而此陽極LED數碼管是發光二極管的陽極共接,當某個二極管的陰極電壓為低電平時,二極管發光。在設計中選擇的是共陽極四位七端數碼管。其引腳圖如圖3.10所示。
         圖3.10 四位七段共陽級數碼管引腳圖
部分電路參數選擇:三極管采用9015PNP型,電阻均采用的是1K,由于轉化部分的ADC0809不需要太高的轉換頻率,故單片機的石英晶振選取為6M。為方便調試,在單片機的P0口和P2口上都裝上插針。
4.軟件設計
               圖4.1 軟件設計總流程圖
    軟件設計總流程圖如圖4.1所示,開始執行程序后,系統等待鍵盤鍵入預置電壓數,當預制置完成后程序轉入D/A轉換及數碼管顯示子程序,完成D/A轉換后調校正子程序進行輸出電壓校正,完成校正后送控制端口輸出電壓,若有指令要求系統顯示輸出數值時,系統調用A/D轉換子程序及數碼管顯示子程序,把最終結果輸出到數碼管上顯示并返回程序。
4.1 軟件介紹
在設計過程中,主要應用到兩種軟件。一是用于PCB電路板布線的Protel 99SE;另外一個就是用于調試程序的Keil uVision2。下面將對這兩種軟件進行簡單的介紹。
4.1.1 Protel 99SE
一般來說,設計電路板最基本的過程可以分為4個主要步驟。
1. 電路原理圖的設計
電路原理圖的設計主要是利用Protel 99SE的原理圖設計系統(Advanced Schematic)來繪制一張電路原理圖。
2.  生成網絡表
網絡表是電路原理圖設計(Sch)與印制電路板設計(PCB)之間的一座橋梁。網絡表可以從電路原理圖中獲得,也可以從印制電路板中提取。
3.印制電路板的設計
印制電路板的設計主要是針對Protel 99SE的另外一個重要的部分PCB而言的,在這個過程中,借助Protel 99SE提供的強大功能,可以實現電路板的板面設計,完成高難度的布線工作。
4.生成電路板報表
     設計印制電路板后,還需生成印制電路板有關報表,并打印印制電路圖。
     整個電路板的設計過程首先是編輯電路原理圖,然后由電路原理圖文件產生網絡表,最后再根據網絡表進行線路板的布線工作。
4.1.2  Keil uVision2
Keil Software 的8051開發工具可以用它們來編譯C源碼,匯編匯編源程序連接和重定位你的目標文件和庫文件創建HEX文件等。
μVision2是KeilSoftware的一個新的IDE,它結合了項目管理、生成工具、源代碼編輯、程序調試和在一個強大的環境中完全模擬。μVision2提供了一個簡單易用的開發平臺幫助您使程序運行得比以前更快。編輯器和調試器集成到一個應用程序中,并提供一個無縫的嵌入式項目開發環境。
μVision2提供了像下面這些獨特的功能:器件數據庫:自動選擇的芯片設置匯編器、編譯器和連接器選項。這就節省了配置工具的時間,并更快地編寫代碼。項目管理器:可以在一個項目文件中對目標創建幾個不同的配置。只有Keil μVision2IDE允許創建一個用于模擬的輸出文件、一個用于仿真器調試的輸出文件和一個向EPROM編程的輸出文件,上面的這些文件都來自于同一個項目文件。with automatic dependency generation的集成生成工具。不用指出哪個頭文件和包含文件由哪個源文件使用。Keil編譯器和匯編器會自動完成這項工作。交互的錯誤糾正。在編譯項目時,錯誤和警告信息在輸出窗口顯示。當μVision2仍然在后臺編譯時,就可以糾正項目文件中的錯誤。錯誤和警告相關的行號在對源文件作了修改后會自動重新同步。
uVision2源代碼級調試器是一個理想的,快速的程序調試器。此調速器包含一個高速模擬器,能夠模擬整個8051系統,包括片上外圍器件和外部硬件。
它的應用步驟如下:
1.  啟動軟件并創建一個項目,從器件庫中選擇所使用的CPU的型號,并保存到相應的目錄下。
2.   創建源文件。創建一個源文件,以擴展名為.C或.ASM的方式保存,用于編譯C語言或匯編語言程序。
3.     生成HEX十六進制文件。在源程序語言通過編譯后,在OUTPUT窗口中選擇生成HEX十六進制文件。
Keil uVision2編譯界面如圖4.2所示。
                 圖4.2 Keil uVision2編譯界面
4.2 編程思想
    單片機控制系統軟件設計思路:系統掃描鍵盤輸入,當鍵盤輸入預置數,系統立即會做出響應,根據預置電壓值,通過DAC0832轉換成電壓,輸出用戶期望的電壓,隨后系統仍掃描鍵盤,看是否有其他指令輸入。當鍵盤輸入指令要求顯示輸出電壓值時,通過片選選中ADC0809,把輸出電壓顯示在數碼管上。DS1820的作用是采集電壓變化時溫度的變化,通過單片機的把應校正的數值通過DAC0832轉化成電壓校正輸出。
軟件子程序包括:(1)鍵盤和數碼管掃描子程序,(2)ADC0809轉換子程序,(3)DAC0832轉換子程序,(4)中斷定時處理程序設計,(5)數碼顯示子程序,(6)溫度傳感器DS1820校正子程序。
4.2.1 鍵盤和數碼管掃描子程序
八個按鍵的定義分別是:加1、加10、減1、減10、D/A轉換控制、A/D轉換顯示控制、顯示預置值和輸出值切換控制、預置值返回零控制。鍵盤和數碼管掃描流程如圖4.3所示。
                        圖4.3 鍵盤和數碼管掃描流程圖
     系統上電后,首先等待鍵盤輸入預置電壓數,鍵入數值后顯示于數碼管上,并等待確認信息,當確認后系統自動對信息進行數字處理,并送數碼管顯示,同時程序從中斷返回。
4.2.2 ADC0809轉換子程序
     該芯片用于八位A/D轉換,由于輸出最大值為9.9V,所以可以由下面的式子(4)算出可采集到的最小幅值為:
                幅值÷精確度             (4)式
=9.99V÷28
=0.04V                  
      由于ADC0809只能采樣0-5V的電壓,超過會損壞芯片,在輸出端,通過電阻分壓,使得采樣的電壓總是小于5V,為了顯示輸出電壓值,在程序中采樣的電壓乘以一個分壓系數后在進行顯示,這樣顯示值代表輸出電壓。A/D轉換流程如圖4.4所示。
  
        


圖4.4 A/D轉化流程圖
      當鍵入命令開始進行A/D轉換時,程序轉入轉換程序入口,并選擇ADC0809的IN0口輸入模擬量,在第4個時鐘CLK下降沿到來之前,采樣數據,數據經轉換后輸入到AT89C51的P0口,待轉換結束信號發出后,停止數據轉換并把最終的輸出電壓顯示在數碼管上,程序返回。
4.2.3 DAC0832轉換子程序
      DAC0832能轉換的精確度計算方式與ADC0809相同,能輸出最小幅值為0.04V。其轉換流程與A/D轉換流程基本相似,選通信號打開后,預置數被送入DAC0832進行D/A轉換,轉換結束后返回程序。
4.2.4中斷定時處理程序設計
      當從鍵盤輸入命令時,使得單片機產生中斷,程序轉向數碼顯示子程序,使數碼管顯示出單片機內部寄存器的數值。定時主要作用是設定數碼管的顯示頻率。
   89C51系列單片機內部有兩個16位的可編程定時器和,分別由和兩個8位計數器構成。T0和T1的定時功能是通過對單片機內部計數脈沖的計數實現的。因為每個機器周期產生一個計數脈沖,因此根據單片機的晶振頻率就可以計算出定時器的計數頻率。這樣如果確定了計數值,就能計算出定時時間,而知道了定時時間也可計算出計數器的預置值。定時器控制寄存器(TCON)和工作方式控制寄存器(TMOD)分別控制定時控制定時器的運行和工作方式。計算預置計數值在工作方式1的定時時間計算公式為
定時時間=(65536—計數初值)×機器周期
   如本設計中采用6MHz晶振,一個機器周期為2us。設計數初值為x,則有:
                 TS= (65536—x) × 2us
   如程序中設置的定時為:#definetim 65536-2000
4.2.5 數碼顯示子程序
   由于外界有可能產生的噪聲和溫度變化產生的波動,使得采樣電壓發生抖動或波動,顯示輸出可能會不夠穩定(在一定范圍內抖動),所以需要采樣幾組數值,對其去平均值作為最后的顯示值輸出。數據處理程序如下:
s[0]=s[1];
       s[1]=s[2];
       s[2]=s[3];
       s[3]=s[4];
       s[4]=P1;
       temp=(s[0]+s[1]+s[2]+s[3]+s[4])/5;
       return temp;
上式中,S[]數組取的是P1口的數據,當產生抖動時P1口會產生多組數據,建立一個數組用于存放數據,并去平均值作為輸出。
4.2.6 溫度傳感器的電壓校正
DS1820測溫原理為:在低溫度系數晶振的振蕩頻率受溫度影響很小,用于產生固定頻率的脈沖信號送給計數器1。高溫度系數晶振隨溫度變化其振蕩率明顯改變,所產生的信號作為計數器2的脈沖輸入。計數器1和溫度寄存器被預置在-55℃所對應的一個基數值。計數器1對低溫度系數晶振產生的脈沖信號進行減法計數,當計數器1的預置值減到0時,溫度寄存器的值將加1 ,計數器1的預置將重新被裝入,計數器1重新開始對低溫度系數晶振產生的脈沖信號進行計數,如此循環直到計數器2計數到0時,停止溫度寄存器值的累加,此時溫度寄存器中的數值即為所測溫度。內部斜率累加器用于補償和修正測溫過程中的非線性,其輸出用于修正計數器1的預置值。
AT89C51的內部寄存器中存放了一組數組,該數組用于校正不同溫度下需要校正的電壓值。當溫度寫入單片機后,通過對寄存器的訪問,選擇出對應的電壓,補償到控制端輸出,以達到校正電壓的作用。
5. 系統調試
5.1 硬件模塊調試
     硬件模塊主要的調試內容是主電源及副電源的技術性能指標,包括紋波值及穩壓系數等。
5.1.1 電源部分技術指標測試
穩壓電源的技術指標分為兩種:一種是特性指標,包括允許的輸入電壓、輸出電壓、輸出電流及輸出電壓調節范圍等;另一種是質量指標,用來衡量輸出直流電壓的穩定程度,包括穩壓系數、輸出電阻、溫度系數及紋波電壓等。這些質量指標的含義,可簡述如下。
最大輸出電流:指穩壓電源正常工作時能輸出的最大電流,用Io max表示。一般情況下的工作電流I<Io max。穩壓電路內部應有保護電路,以防止I>Io max時損壞電路。
輸出電壓:指穩壓電源的輸出電壓,用Vo表示。其測試過程是:輸出端接負載電阻RL,輸入端接220V的交流電壓,數字電壓表的測量值即為Vo。再使RL逐漸減小,直到Vo的值下降5%,此時流經負載RL的電流即為Io max。
紋波電壓:指疊加在輸出電壓Vo上的交流分量,一般為mV級。可將其放大后,用示波器觀察出其峰-峰值△Vo p-p。也可以用交流電壓表測量其有效值。由于紋波電壓不是正弦波,所以用有效值衡量存在一定的誤差。一般為毫伏數量級,它表示輸出電壓的微小波動。
應當指出的是,穩壓系數g  較小的穩壓電路,它的輸出紋波電壓也較小。
紋波電壓測量方法為:
紋波的測量方法是用示波器觀察輸出電壓波動的峰峰值。注意此時不能簡單的用高頻電壓表測量,因為高頻電壓表是根據正弦波有效值標定的,對非正弦波的響應,因波形形狀的不同,會使高頻電壓表的指示有所不同, 為簡單計,往往以輸出電壓波動的峰峰值來代表紋波的大小。紋波一般在不同的負載電流條件下測量, 負載電流最大時測得的數值也最大。注意此時須用示波器的交流(AC)耦合方式。只要求大家測出在RL=100Ω條件下的紋波電壓的峰峰值。
穩壓系數:指在負載電流Io、環境溫度T不變的情況下,輸入電壓相對變化引起輸出電壓相對變化,即穩壓系數。
                    Sv=(△Vo/Vo)÷(△Vi/Vi)       (4)式
硬件調試主要工作在電源部分,主要分析內容是主電源、副電源的輸出電壓紋波值、輸出功率及誤差等。
Sv的測量電路如圖4.4所示。測試過程是:先調節自耦變壓器使輸入電壓增加10%,即Vi=242V,測量此時對應的輸出電壓Vo1;再調節自耦變壓器使輸入電壓減少10%,即198V,測量這時的輸出電壓Vo2,然后在測出Vi=220V時對應的輸出電壓Vo,則穩壓系數
          Sv=(△Vo/Vo)÷(△Vi/Vi)  
=[220/(242-198)]*(Vo1-Vo2)÷Vo
                      圖4.4 穩壓系數測量原理圖
主電源技術指標如表4.1所示。
  
   
                 0.58%
           表4.1 主電源電路技術指標測量
    測量時,首先斷開控制部分電路,在220V交流輸入下調節LM317 1腳的可調電阻,使得輸出電壓固定在14.5V。接著調節自耦變壓器,分別讀出當交流輸入在242V和198V時的輸出電壓,并根據4式求出主電源電路的穩壓系數。
從表中數據分析知,主電源電路的電壓調整率及穩壓系數都較小,符合電源的性能指標要求,用示波器測量觀察紋波值,輸出的紋波峰值為32mV左右,說明輸出電壓穩定。
副電源技術指標如表4.2所示。
  

                表4.2 副電源電路技術指標測量
     副電源電路技術指標測量步驟與主電源電路測量步驟基本相同。從表4.2分析知副電源電壓也較穩定,-12V的穩壓系數更低,說明-12V的穩壓系數較理想,另外兩個電壓輸出的輸出也較穩定。在測試中,輸入電壓發生變化時,輸出基本保持不變,說明副電源電路穩壓系數性能較好。用示波器測量輸出電壓紋波值,+5V、+12V、-12V分別為25mV、49mV和42mV,三個輸出端的紋波值較小,符合電源技術要求,可以向控制電路提供合格的電源。
5.1.2 電源輸出電壓、電流范圍測試
調節交流調壓器,使電源電路輸入電壓為Vmin=220×(1-10%)=198v,從鍵盤預置最小的電壓,使輸出電壓為最小值,取負載電阻為2歐姆,使得輸出電流達到最大值1.5A,測量此時電壓為3.0v,然后,斷開和接通負載,分別觀察輸出電壓的變化情況,當負載從斷開到接通時,測得的輸出電壓沒有明顯的變化,仍為3.1v左右,由此判斷電源可以輸出這樣的最大電流約為1.5A。
若在測試中發現輸出電壓有明顯的變化,則需要適當限制輸出電流或者輸出電壓。測試方法如圖4.4所示。
                   圖4.4 最大電流測試連接電路
    控制電壓的輸出范圍只能在12V以內,所以輸出電壓的變化也在12V以內。由于數碼管顯示只有3位,若要精確到0.1mV,所以預置電壓可以從3V到10V的范圍內變化。輸出的電壓穩定,無大波動,且紋波值較小,是較理想電壓輸出,符合線行電源要求指標。
5.1.3 硬件模塊調試小結
     硬件測試中主要針對的是主電源和副電源的輸出穩定性做測試,即對調整管的工作狀態和穩定性做調試,因為調整管的工作狀態和穩定性直接關系到電壓的輸出。通過調試發現,LM317、7805、7812及7912都能正常的工作,并且穩壓系數較為理想。主電源的輸出功率也基本達到了預期的數值。
     不足之處在于最大的輸出電流還偏小,未能達到2A,還要加以改進。另外在副電源電路的變壓器選擇上,原來選擇的電壓器副邊電壓偏小,導致副電源輸出電壓偏小,在提高副邊電壓后很好的解決了這個問題。
電源測試結果為:
輸出電壓范圍為3.0v—10.01v;
最大輸出電流為1.5A;
電壓調整率1.53%;
紋波電壓峰峰值32mv。
5.2 軟件模塊調試
軟件調試內容主要是鍵盤的按鍵控制和數碼管的顯示,A/D、D/A的轉換控制和溫度傳感器的數值校正。
5.2.1 鍵盤按鍵控制及數碼管顯示
LED七段共陽極數碼管是將所有發光二極管的陽極連在一起,作為公共端,如果公共端接高電平,當某個發光二極管的陰極為低電平時,對應字段點亮。如圖4.5所示,a、b、c、d、e、f、g為7段數碼顯示,dp為小數點顯示。
                  
                  圖4.5 LED顯示外型圖
本設計采用了4位LED數碼顯示,圖4.5顯示了其中一位LED的結構圖。設計中數碼管的顯示端接單片機的P0的8個I/O口,有8個I/O口控制顯示輸出。P0口的P0.7~P0.0分別與數碼管的e、d、dp、c、g、a、f、d相連接,另外的位選與按鍵驅動的三極管連接。
數碼管顯示說明:如當顯示數字1的時候,只有b和c發光,當發光時b和c接低電平,其他管腳為高電平,因此用十六進制可以表示為:
   P0.7  P0.6  P0.5 P0.4  P0.3  P0.2 P0.1  P0.0
     e    d     dp   c    g     a    f     d
     1    1      1   0    1     1    1     0
則用十六進制表示此時的I/O口P0的輸出為:0xee。其他的數值也按此方法計算類推。
數碼管數值代碼顯示程序如下:
ucharcode distab[16]={0x28,0xee,0x32,0xa2,
0xe4,0xa1,0x21,0xea,
0x20,0xa0,0x60,0x25,
0x39,0x26,0x31,0x71};
0x28~0x71分別表示了數碼管顯示的十六位數值,1、2、3、4、5、6、7、8、9、A、B、C、D、E、F及G。
     十六進制數數碼管顯示各數值真值如表4.3所示。其中在實際使用中只用了0~9這10個數字。
  
  
                       表4.3 數碼管數值顯示真值表
小數點顯示設置:要求數碼管總是顯示個位數之后的小數點,即數碼管的個位數后的dp總是置0。當dp位發光(dp置低電平)而其他位不發光(其他位置高電平)時,要求個位數要按位與十六進制數0xDF相與,既與0x1101 1111相與,把個位數的dp置0。
鍵盤及數碼管掃描子程序為:
void display ()      
{    P2=0xff;
      P0=disp[dis];
      P2=~numtab[dis];
      key0=1;key1=1;
      if(!key0) keyx=dis;
      if(!key1) keyx=dis+4;
      dis=(dis+1)%5;
}
P2口的鍵盤按鍵輸入置1,從P0口中讀入數字控制信息。
由電路按鍵定義可知:
sbit dis0 =P2^4;
sbit dis1 =P2^5;
sbit dis2 =P2^6;
sbit dis3 =P2^7;
sbit dis4 =P2^1;
sbit key1 =P2^3;
sbit key0 =P2^2;
上述為2×4鍵盤各按鍵定義。定義具體見作品使用說明。
5.2.2       A/D、D/A轉換控制
ADC0809用于讀取輸出電壓值并轉換為數字信號送入單片機內并在數碼管上顯示。ADC0809的控制端口為其6腳(START)和22腳(ALE)用于控制A/D轉換啟動;7腳(EOC)用于輸入A/D轉換結束信號。當有按鍵鍵入指令要求啟動A/D轉換時,單片機向6腳和22腳發送選通開啟A/D轉換信號,進行A/D轉換,當7腳向單片機報告轉換結束時,程序自動停止A/D轉換,并把采樣結果在數碼管上顯示出來。
其啟動子程序為:
char get0809()
{  int temp;
    delay(80);
    start=1;
    delay(8);
    start=0;
    delay(50);
    oe=1;
    P1=0xff;
    oe=0;
    s[0]=s[1];
    s[1]=s[2];
    s[2]=s[3];
    s[3]=s[4];
    s[4]=P1;
    temp=(s[0]+s[1]+s[2]+s[3]+s[4])/5;
    return temp;
}
S數組在上文中解釋過是用于對取樣電壓發生抖動時取其5次采樣均值。oe定義為單片機的P3.5口,用于發送A/D轉換是否結束的信號。
DAC0832用于單片機把預置數字信號轉換為模擬信號,輸出到主電源的控制端,對輸出電壓進行調節。其2腳(WR1)和18腳(WR2)用于控制D/A轉換的寄存器的選通;1(CS)腳和17腳(XFER)用于控制D/A轉換的片選信號和數據傳送信號。當有按鍵鍵入指令是,單片機向1腳和17腳發送低電平選通DAC0832,使其開始工作。
D/A轉換子程序為:
void put0832(unsigned char a)
{    cs0832=0;
      P1=a;
      cs0832=1;
}
其中cs0832為片選信號,接單片機的P3.3口,選通DAC0832后,P1口的數據自動存放到DAC0832的內部積存器內,進行轉換,轉換結束后,cs片選信號置高電平停止轉換,等待指令。
A/D、D/A轉換結果送數碼管顯示,其子程序為:
void timer1() interrupt 3   
{para[0]=get0809();   
      if(para[0]>para[3])er--;
      put0832(er);
      TH1=tim1>>8;  TL1=tim1;
      display();
}
display()為數碼管顯示子程序入口。數組para讀入A/D轉換數據后等待指令,有按鍵鍵入時,數據送數碼管顯示;put0832(er)用于顯示預置電壓值。
5.2.3       數字溫度傳感器DS1820的電壓校正
     DS1820的2腳接單片機的17腳(P3.7)。當輸出電壓變化時溫度會發生變化,溫度傳感器檢測出變化的溫度,把數據輸入到單片機中進行處理,以消除由溫度變化而產生的誤差。溫度變化使得電壓變化需校正的數值由數組存放,通過對數組的查詢校正電壓。
      DS1820的數據讀入子程序為:
unsignedint Read_Temperature(void)
{    bytec[2];
     unsigned int x;
     ow_reset();
write_byte(0xCC);         
write_byte(0xbe);        
c[1]=read_byte();      //先讀出低8位
c[0]=read_byte();      //再讀出高8位
if(c[1]&0x08){x=c[1]>>4;x++;}
else x=c[1]>>4;
c[0]&=0x07;
x|=(c[0]<<4);
x=x*100+(c[1]&0x0f)*100/16;
ow_reset();
write_byte(0xCC);
write_byte(0x44);      
return(x);
}
其中write_byte(0xCC); write_byte(0xbe);的作用分別是跳過ROM及讀可擦寫芯片,DS1820的溫度是串行方式輸入的,依次溫度讀入時分低8位和高8位依次讀入。
5.2.4 軟件模塊調試小結
     軟件調試是整個電路調試的重點,在調試過程中分別對鍵盤顯示部分、轉換部分及校正部分進行調節,在每個部分都確定能正常工作后,進行總體的軟件調試,包括線性化和校正等。
      鍵盤調試主要是分清每個鍵的鍵位功能設置,當有鍵按下時系統是如何反應的,這是整個控制部分最難調的。顯示部分主要是預置數、進位及小數點的顯示要求正確。轉換部分的調節要相對簡單,只要在按鍵按下時片選及控制信號到位就完成了。校正部分的調試主要是溫度數據的寫入調試,這是在調試過程中遇到的又一個困難。另外線性化處理及利用數組校正都需要進行大量的數據測試和模擬。
6. 技術指標及使用方法
    本作品為精密數控直流電源,主要以線性電源作調節,由數字控制方式調節輸出電壓。具有可預置輸出電壓,顯示輸出電壓值的功能,輸出電流大而且穩定,能為小功率電器和儀器提供電源,其主要技術指標如下:
     輸入交流電壓:220V左右
輸出直流電壓范圍為3.0V—10.01V可調;
電壓輸出精確度:±0.04mV;
最大輸出電流為1.5A;
電壓調整率1.53%;
紋波電壓峰峰值32mv。
     使用方法:所有功能均由八個按鍵控制,按鍵編號從1到8的功能依次是①十分位加一計數;②百分位加一計數;③預置電壓確認輸出;④啟動A/D轉換并顯示輸出電壓;⑤十分位減一計數;⑥百分位減一計數;⑦預置數與輸出電壓值顯示切換;⑧預置數置零。
7  結論
   本文描述了用單片機可以實現對電源的數字控制,實現數字化線性電源的制作。通過鍵盤預置電壓,溫度傳感器的電壓校正,以達到使輸出電壓更準確穩定性更高。控制電路中使用的八位A/D、D/A轉換使得輸出電壓更準確。由于使用了集成穩壓器來穩壓,也使得誤差能盡可能的減小,同時使得制作的成本也大為降低,輸出的電源線性度更好。不足之處就是輸出電壓的調節范圍還不夠大,還要加以改進
     隨著電源技術的發展和應用,要求精確度更高,穩壓性能更出色,調節范圍更廣,輸出的功率更大的電源使用在研究領域。單片機在智能化以及可實現的用戶友好界面,擴展性強等等方面的優勢使其成為未來數控電源重要的發展方向。
謝  辭
在本次設計、調試以及論文撰寫過程中,得到了龍老師的熱心指導,老師嚴謹的治學態度,使我深受教育,在此要非常的感謝老師,同時也要感謝所有熱心相助的同學們。謝謝你們。
本次設計過程中,從資料準備,方案設計,調試的整個過程當中,查閱了許多的資料,學到了許多寶貴的知識,并在設計實踐的過程中,不斷驗證,對知識有更加正確的理解,掌握了正確的實踐研究方法,為日后繼續的學習和進步,打下了良好的基礎。當然,某些方面的知識準備的不夠,許多知識還要在以后的工作、學習當中不斷的積累,學無止鏡。
在設計過程中,遇到了許多的難題,經過老師的精心指導,都得以一一解決,也正是在解決這些困難的過程中,才慢慢的掌握了合理的研究方法,合理的設計思想,這是本次畢業設計一個很大的收獲。
參考文獻
[1]  楊旭.裴元慶.王兆安.開關電源技術[M].北京:機械工業出版社,2004.1
[2]  徐德鴻.沈旭.楊成林.譯.開關電源設計指南[M].北京:機械工業出版社,2004.1
[3]  鄭國川.李洪英.實用開關電源技術[M].福州:福建科學技術出版社,2004.1
[4]  童詩白.華成英.模擬電子技術基礎[M].北京: 高等教育出版社,2001. 5
[5]  閻石. 數字電子技術基礎[M]. 北京:高等教育出版社,2001.5
[6]  薛永毅.王淑英.何希才.新型電源電路應用實例[M].北京:電子工業出版社,2001.10
[7]  葉慧貞.楊興洲.新穎開關穩壓電源[M].北京:國防工業出版社,1999.1
[8]  劉勝利.現代高頻開關電源實用技術[M].北京:電子工業出版社,2001.9
[9]  趙效敏.開關電源的設計與應用[M].上海:上海科學普及出版社,1995.9
[10]  王水平.付敏江.開關穩壓電源--原理.設計與實驗電路[M].西安:西安電子科技大學出版社,1997.1
[11]  趙學泉.張國華.新型電子電路應用指南[M].北京:電子工業出版社,1995.3
[12] BrownLaszlo , Practical Considerations for MOSFET Gate Drive Techniques in highSpeed ,Switch-mode Application ,Seminar APEC99 .March 1999 .
   附  錄
主電源電路原理圖:
副電源電路原理圖:
鍵盤電路原理圖:
A/D、D/A轉換電路及傳感器電路原理圖:
電源電路PCB圖:
鍵盤及A/D、D/A轉換電路PCB圖:
空載時輸出電壓紋波:
帶負載時輸出電壓紋波值:
控制電路程序:
#include<reg51.h>            
#include<absacc.h>
#defineuint unsigned int
#defineuchar unsigned char
#definetim1 65536-4000     // 定時器2的定時時間 2ms   
sbitdis0 =P2^7;
sbitdis1 =P2^6;
sbitdis2 =P2^5;
sbitdis3 =P2^4;
sbitkey1 =P2^3;
sbitkey0 =P2^2;
sbitstart=P3^4;
sbitcs0832 =P3^3;
sbitoe=P3^5;
int r,kp ,kd ,para[8] ,ts ,e2 ,e1 ,e0 ,u ,u0 ,ptr ;
ucharkey ,keyx ,disp[4] ,dis ;
uintpwmh,pwml;
ucharcode numtab[4]={0x80,0x40,0x20,0x10};  
ucharcode distab[16]={0x28,0xee,0x32,0xa2,0xe4,0xa1,0x21,0xea,
                        0x20,0xa0,0x60,0x25,0x39,0x26,0x31,0x71} ;
ucharcode ledtab[8]={0x08,0x10,0x20,0x40,0x88,0x90,0xa0,0xc0} ;
int  codeparam[8]={300,255,300,255,255,255,255,8};
uchars[5];
ucharer;
//  延時子程序
voiddelay(uint t)   
{
  uint i;
  for ( i=0 ; i<t ; i++ );
}
//  顯示數據放入緩沖區子程序
voiddistran ()     
{
  disp[0]=distab[para[ptr]%10];
  disp[1]=distab[(para[ptr]/10)%10]  & 0xdf;
  disp[2]=distab[(para[ptr]/100)%10];
  disp[3]=~ledtab[ptr];
}
//  鍵盤及數碼管掃描子程序
voiddisplay ()      
{
  dis= (dis+1)%4;
  P2=0xff;
  P0=disp[dis];
  P2=~numtab[dis];
  key0=1; key1=1;                                             
  if (!key0) keyx=dis+1;
  if (!key1) keyx=dis+5;
  }
//  鍵盤處理子程序 ( 設定各個鍵功能分別為減1,加1,減10,加10
voidkeyproc ()              
{                          
       if (key>0)
       {  
              switch (key)
              {     case1:if( ptr != 0 ) {para[ptr]--; }   break;
                     case 5: para[ptr]++;    break;
                     case 2: para[ptr]-=10;   break;
                     case 6: para[ptr]+=10;  break;   
                     case 3:para[ptr]-=100;  break;
                     case 7:para[ptr]+=100;  break;
                     case 4: ptr--;           break;
                     case 8: ptr++;          break;  
              }
              if (ptr>7)   ptr=0;
              if (ptr<0)   ptr=7;
              if (para[ptr]<0)  para[ptr]=0;
              if (para[ptr]>param[ptr])   para[ptr]=param[ptr];
       }
       key=0;
}
charget0809()
{     int temp;
       //delay(80);
       start=1;//f=(double)((fxx*200000000)/(fcc*16));
       delay(8);
       start=0;
       delay(50);
       oe=1;
       P1=0xff;
       oe=0;
       s[0]=s[1];
       s[1]=s[2];
       s[2]=s[3];
       s[3]=s[4];
       s[4]=P1;
       temp=(s[0]+s[1]+s[2]+s[3]+s[4])/5;
       return temp;
}
voidput0832(unsigned char a)
{     cs0832=0;
       P1=a;
       cs0832=1;
}
//  定時數碼管顯示、數據處理、調用PID算法、修改占空比值子程序
voidtimer1() interrupt 3   
{
       para[0]=get0809();
      
       if(para[0]>para[3])er--;
       put0832(er);
       TH1=tim1>>8;  TL1=tim1;
       display ();
}
unsignedint Read_Temperature(void)  //溫度傳感器的數據讀入
{
      byte c[2];
     unsigned int x;
      ow_reset();
write_byte(0xCC);         //跳過ROM
write_byte(0xbe);         //讀可檫寫芯片
c[1]=read_byte();         //先讀出低八位
c[0]=read_byte();         //高八位
if(c[1]&0x08){x=c[1]>>4;x++;}
elsex=c[1]>>4;
c[0]&=0x07;
x|=(c[0]<<4);
x=x*100+(c[1]&0x0f)*100/16;
ow_reset();
write_byte(0xCC);
write_byte(0x44);        //開始翻轉
return(x);
}
// 主程序 :設定定時器/計數器方式、給定各個參數的初始值、鍵盤處理
voidmain()           
{
chari;
   TMOD=0x11; IE=0x8a;  IP=0x02;
   TH1=tim1>>8; TL1=tim1;
   TR1=1;
   dis=0; ptr=0; P1=0xff;
   for (i=0;i<7;i++)   para=0;
   para[2]=150; para[3]=8; para[6]=10;
   para[4]=18; para[5]=11; para[7]=3;
   distran();
   for (;;)
  {
     if (keyx>0)
   {
     key=keyx;  
     while (keyx!=0) {keyx=0;  delay(1000);}
     keyproc ();
    }
   delay (400);
  }
}


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表