2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  基于單片機的數(shù)控直流電流源的設計</p><p>  【摘要】 隨著電子技術的飛速發(fā)展,電子設備越來越多,而電子設備要工作都需要有電源能夠為其通電。性能好的電子設備,首先就離不開穩(wěn)定的電源,電源的穩(wěn)定度越高,電子設備機器外圍條件越優(yōu)越,設備的壽命就更長。而各種不同的電子設備所需要的供電電源不是統(tǒng)一的,所以,對于數(shù)控恒定電流源的研究與開發(fā)就顯得相當重要了?,F(xiàn)在數(shù)控恒壓技術已經(jīng)很成熟,但在恒流方

2、面尤其是在數(shù)控恒流方面的技術還有待發(fā)展,高性能的數(shù)控電流源的研究與開發(fā)非常重要。</p><p>  本文介紹了一種基于單片機的數(shù)控電流源的設計方法,系統(tǒng)以AT89C52單片機為中心控制器,利用按鍵設置輸出電流,單片機將該電流值送1602液晶屏顯示,同時,通過與D/A轉換器的數(shù)據(jù)通信端口將輸出電流的數(shù)字量送入D/A轉換器,D/A轉換器將數(shù)字量轉換為為模擬量后輸出,再通過壓控流電路得到輸出的電流,采樣電路把輸出的電

3、流轉換成電壓值送入AD,經(jīng)轉換后把對應的數(shù)字量送入單片機,形成閉環(huán)系統(tǒng)。A/D轉換器采用MAX1241,D/A轉換器采用AD5320。</p><p>  本文提供的數(shù)控電流源具有很高的精度值,可滿足多種電流源的試驗要求,且電路精煉、簡單易懂、成本低廉、實用價值和開發(fā)價值大。</p><p>  【關鍵字】 數(shù)控電流源 AT89C52 A/D轉換器 D/A轉換器</p>

4、<p>  Based on SCM control DC current source design</p><p>  Abstract As electronic technology in recent years, electronic devices and electronic equipment work will need to have the power of electri

5、city. the performance of electronic equipment is first and foremost from a stable source of stability, the higher the external condition, an electronic device, machine equipment of the more, it will be long. And a variet

6、y of electronic equipment needed the supply of power is not unified, so for nc constant current research and development is very important. </p><p>  This article describes a revivification of nc current des

7、ign methods and systems to AT89C52 monolithic integrated circuits to control, the button for the output, the current monolithic integrated circuits current take the tube, At the same time, and d a converter data communic

8、ations port output of the current number of tier d a converter, d a converter will be converted to numbers measure for simulating after the output, run by a constant flow of electrical a steady output of electricity. d a

9、 co</p><p>  This article provides nc current source of very high precision, a number of current trials, circuits, refining, simplicity, low cost, or useful value. Developing </p><p>  Keywords

10、 Numerical controlled current source AT89C52 Analog -To- Digital conversion Digital-To- Analog conversion</p><p><b>  目錄</b></p><p><b>  第1章 概述1</b></p><

11、;p><b>  1.1設計要求1</b></p><p><b>  1.2理論分析1</b></p><p><b>  1.3系統(tǒng)介紹1</b></p><p>  第2章 硬件設計3</p><p><b>  2.1電源模塊3</b&g

12、t;</p><p>  2.2恒流源模塊5</p><p>  2.3單片機模塊6</p><p>  2.4鍵盤模塊10</p><p>  2.4.1鍵盤電路11</p><p>  2.5顯示模塊11</p><p>  2.5.1 1602LCD顯示11</p>

13、<p>  2.5.2 LCD顯示硬件電路12</p><p>  2.6 A/D模塊14</p><p>  2.6.1芯片MAX124114</p><p>  2.6.2 A/D模塊電路15</p><p>  2.7 D/A模塊16</p><p>  2.8存儲模塊17</p&

14、gt;<p>  2.8.1C總線18</p><p>  2.8.2 芯片24C02C18</p><p>  2.8.3 存儲模塊電路18</p><p>  第3章 軟件設計24</p><p>  3.1編程語言描述24</p><p>  3.2系統(tǒng)軟件的功能模塊24</p&g

15、t;<p>  3.2.1主程序設計24</p><p>  3.2.2 中斷程序設計25</p><p>  第4章 軟件仿真及硬件調(diào)試29</p><p>  4.1 Proteus29</p><p>  4.2軟件仿真29</p><p>  4.3硬件調(diào)試31</p>

16、<p>  4.3.1單片機最小系統(tǒng)調(diào)試31</p><p>  4.3.2鍵盤及液晶顯示調(diào)試31</p><p>  4.3.3數(shù)模轉換與功放電路調(diào)試31</p><p>  4.3.4模數(shù)轉換電路調(diào)試31</p><p>  4.3.5存儲器電路調(diào)試31</p><p>  第5章 設計總結3

17、2</p><p><b>  致謝33</b></p><p><b>  參考文獻34</b></p><p>  附錄A 原理圖35</p><p>  附錄B 實物圖36</p><p><b>  第1章 概述</b></

18、p><p><b>  1.1設計要求</b></p><p> ?。?)輸出電流范圍:0—500mA (DC);</p><p>  (2)準確度:±0.05%設置值 ±1ppm滿幅 ;</p><p> ?。?)步進精度:10mA;</p><p> ?。?)有效輸出電壓0—1

19、0V 最大輸出電壓12V; </p><p>  (5)LCD1602液晶屏顯示 前面板鍵盤操作;</p><p><b>  1.2理論分析</b></p><p>  首先,在數(shù)控方面采用單片機比CPLD和FPGA等可編程邏輯器件好,因為此處只是一般用途的控制,沒有必要選用價格昂貴的CPLD和FPGA,而且他們用在此處并不合適,控制

20、起來顯得很麻煩。而單片機則不同,他有著非常成熟的技術,這方面的參考文獻也很多,而且他從來就是用于控制方面的,在這方面有著天生的優(yōu)勢。還有他價格也不貴,僅幾元人民幣。對于這樣的應用系統(tǒng)比較劃得來。其次在恒流源方面,我們方案也很好。從理論上看,運放是接成比較器的,作為模擬反饋的,這樣在只要運放的輸入不變,那么三極管的是不變的,根據(jù)三極管的共射極輸入特性可知,不變時,和也保持不變,而且,。當比較大時。當運放的輸入改變時,也改變了值,這樣也就改

21、變了和的值,而且這個變化基本也是呈線性的。這也就是本系統(tǒng)的恒流原理。由于器件受溫度的影響以及局部非線性的存在,這樣的恒流源不能做到真正的恒流,因此,當外界條件發(fā)生變化時,我們要及時給予補償,只有這樣才能做到真正的恒流。這也就是為什么要加入模數(shù)轉換器的真正原因,他能實時測量電流的變化并按照一定的算法及時給予補償,采用數(shù)字補償逐次逼近的方式作為反饋調(diào)整環(huán)節(jié),由程序控制調(diào)節(jié)功率管的輸出。當改變負載</p><p>&l

22、t;b>  1.3系統(tǒng)介紹</b></p><p>  本系統(tǒng)以AT89C52單片機為主控制器,通過鍵盤來設置直流電源的輸出電流,設置步進等級可達10mA,并可由液晶模塊顯示實際輸出電流值和電流設定值。首先,采用單片穩(wěn)壓芯片實現(xiàn)直流穩(wěn)壓,然后采用了分立元器件實現(xiàn)穩(wěn)流。為實現(xiàn)對輸出電流控制:一方面,通過D/A轉換器(AD5320)輸出實現(xiàn)電流的預置,再經(jīng)過運算放大器控制晶體管的輸出電流。另一方面,

23、單片機系統(tǒng)還兼顧對恒流源進行實時監(jiān)控,輸出電流經(jīng)過電流/電壓轉變后,通過A/D轉換(MAX1241)芯片,實時把模擬量轉化為數(shù)字量,再經(jīng)單片機分析處理, 通過數(shù)據(jù)形式的反饋環(huán)節(jié),使電流更加穩(wěn)定,這樣構成穩(wěn)定的壓控電流源。此外,系統(tǒng)還增加了存儲設備,能夠保存掉電前的數(shù)據(jù),使系統(tǒng)更加方便使用。系統(tǒng)原理框圖,如圖1.1所示:</p><p>  圖1.1 系統(tǒng)原理框圖</p><p><

24、b>  第2章 硬件設計</b></p><p>  2.1電源模塊 </p><p>  本設計共用到電源有四種:即±12V、+5V、負載電源??蛇x用的有開關電源和穩(wěn)壓電源兩種,由于開關電源的紋波系數(shù)比較大,對AD和DA轉換的精度會有影響。穩(wěn)壓電源的線性比較好,因此采用常用的穩(wěn)壓電源來作為整個系統(tǒng)的電源。穩(wěn)壓電源由電源變壓器、整流電路、濾波電路和穩(wěn)

25、壓電路組成,如圖2.1所示:</p><p>  圖2.1 電源方框及波形圖</p><p>  整流和濾波電路:整流電路的作用是將交流電壓變換成脈動電壓。濾波電路一般由電容和電感組成,可以組成不同類型的濾波電路,其作用是把脈動電壓中的大部分紋波加以濾除,以得到較平滑的直流電壓。再通過穩(wěn)壓電路得到平直的直流電壓。</p><p><b>  2.1.1電

26、源設計</b></p><p>  該電源按常規(guī)設計,即用降壓變壓器把220V市電變成較低的交流電,再通過整流橋將交流變?yōu)槊}動的直流,并上電容濾波再接入78XX和79XX系列穩(wěn)壓塊穩(wěn)壓(78XX系列輸出正電壓,79XX系列輸出負電壓,且輸入電壓應高于輸出電壓4V-7V,壓差較大穩(wěn)定,但功耗也大,7805應加大散熱片輸出電壓才穩(wěn)定),從而得到5V,±12V的電壓源。其中5V電源用LM7812輸

27、出的12V電壓作為LM7805的輸入電壓以得到5V電壓。電路原理圖分別如圖2.2和圖2.3所示:</p><p>  圖2.2 +5V電源</p><p>  圖2.3 ±12V電源</p><p>  考慮到恒流源電路的電源需要提供較大的功率,同時為了減少電源間的干擾,而且單片機對電源電壓的穩(wěn)定性要求很高,當供電電壓波動大時會出現(xiàn)復位情況,所以恒流源

28、電路電源由單獨電源提供。由LM317搭建成輸出電壓為1.2~37V的可調(diào)電源,穩(wěn)壓電源由電源變壓器、整流電路、濾波電路、保護電路和穩(wěn)壓電路組成。其電路原理圖,如圖2.4所示:</p><p>  圖2.4 負載電源</p><p><b>  2.2恒流源模塊</b></p><p>  用“運放+大功率三極管”的結構構成恒流源部分。功率三極

29、管選用SS8050,它是應用范圍廣、中小功率NPN型的三極管,特征頻率:最小150MH,集電極最大允許電流:1.5(A),集電極電壓:40V。其性能滿足本設計要求,同時可以通過功率管的不同容量來滿足不同的應用要求。采用常用的大功率電阻作為采樣電阻,輸出電流波動比較大,而康錳銅絲(阻值隨溫度的變化較小)是一種溫度特性佳的阻性元件,選其作為取樣電阻,其兩端電壓正比于流過的電流,因此該電壓的反饋就是負載電流的反饋。</p>&l

30、t;p>  當功率三極管工作于飽和區(qū)時,集電極電流Ic近似為電壓VRL控制的電流。即當Uc為常數(shù)時,滿足:Ic=A(Vbc),只要Vbc不變,Ic就不變。在此電路中,R13為取樣電阻,采用康銅絲繞制(阻值隨溫度的變化較?。柚禐?.35歐。運放采用OP-07作為電壓比較器,(VDA)=(UIN-)=(UIN+)=(VAD),功率三極管Ic=Ie(基極電流相對很小,可忽略不計) 所以Io=Ie= VAD/R13= VDA/R13。

31、正因為Io= VDA/R13,電路輸入電壓VDA控制電流Io,即Io不隨RL的變化而變化,從而實現(xiàn)壓控恒流。 其原理,如圖2.5所示:</p><p>  圖2.5 恒流電路</p><p><b>  2.3單片機模塊</b></p><p>  2.3.1 AT89C52芯片介紹</p><p>  單片機是大規(guī)

32、模集成電路結束發(fā)展的產(chǎn)物,常見的單片機有8051系列的單片機、8096系列的單片機、PIC系列、AVR系列、SPCE061A的凌陽單片機。他將中央處理器(CPU)、存儲器(ROM/RAM)、輸入輸出接口、定時器/記數(shù)器等主要計算機部件集成在一片芯片上,因此單片機被稱為單片機微型計算機(Single Chip Microcomputer).單片機配上適當?shù)耐鈬O備和軟件,便可構成一個單片機應用系統(tǒng)。本次設計對單片機的要求:只要能夠方便地擴

33、展顯示器、鍵盤、A/D轉換器、D/A轉換器等外設即可,其他并無特殊要求。故選擇常見的美國Inter公司生產(chǎn)的MCS-51系列單片機,它具有可高性高、功能強、體積小、價格低、和抗干擾能力強等特點,被廣泛應用于工農(nóng)業(yè)生產(chǎn)、國防、科研及日常生活等各個領域。而且本組同學也比較熟悉。</p><p>  我們選擇的ATMEL公司的AT89C52單片機,他是一種低功耗、高性能CMOS8位微控制器,具有8K ISP(在系統(tǒng)可編

34、程)Flash存儲器。使用Atmel公司高密度非易失性存儲器技術制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得AT89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、超有效的解決方案。AT89C52管腳,如圖2.6所示:</p><p>  AT89C52具有如下特點:</p><

35、;p>  兼容MCS-51指令系統(tǒng)</p><p><b>  32個雙向I/O口</b></p><p>  3個16位可編程定時/計數(shù)器</p><p>  全雙工UART串行中斷口線</p><p><b>  2個外部中斷源</b></p><p><b&

36、gt;  中斷喚醒省電模式</b></p><p>  看門狗(WDT)電路</p><p>  靈活的ISP字節(jié)和分頁編程</p><p>  4.5-5.5V工作電壓 </p><p>  時鐘頻率0-33MHz</p><p>  256×8bit內(nèi)部RAM</p><

37、p>  低功耗空閑和省電模式</p><p><b>  3級加密位</b></p><p>  軟件設置空閑和省電功能 </p><p><b>  雙數(shù)據(jù)寄存器指針</b></p><p>  8k可反復擦寫(>1000次)ISP Flash ROM

38、</p><p>  AT89C52主要引腳的主要功能:</p><p>  VCC:接+5V電源。</p><p><b>  GND:接地。</b></p><p>  圖2.6 AT89C52引腳</p><p>  P0口:P0口為一個8位漏極開路雙向I/O口,作為輸出口,每位能驅動8個

39、TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復用。在這種模式下,P0口具有內(nèi)部上拉電阻。在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。</p><p>  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口輸出緩沖器能驅動4個TTL邏輯電平。對P1端口寫“1”時,內(nèi)部上拉

40、電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.1分別作定時器/記數(shù)器2的外部記數(shù)輸入(P1.0/T2)和定時器/記數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表1所示。</p><p>  在flash編程和校驗時,P1口接收低8位地址字節(jié)。</p><p>  表1各端口引腳與復用功能表<

41、/p><p>  P2口:P2口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅動4個TTL邏輯電平。對P2口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如MOVX @DPTR)時,P2口送出高八位地址。在這種應用中,P2口P2口使用很強的內(nèi)部上拉發(fā)送1。在使用

42、8位地址(如MOVX @RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。</p><p>  P3口:P3口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅動4個TTL邏輯電平。對P3端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。<

43、;/p><p>  P3口亦作為AT89C52特殊功能(第二功能)使用,如下表2所示。</p><p>  在flash編程和校驗時,P3口也接收一些控制信號。</p><p>  表2各端口引腳與復用功能表</p><p>  RST:復位輸入。晶振工作時,RST腳持續(xù)2個機器周期高電平將使單片機復位。看門狗計時完成后,RST腳輸出96個晶振周

44、期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態(tài)下,復位高電平有效。</p><p>  ALE/ :地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8</p><p>  位地址的輸出脈沖。在flash編程時,此引腳()也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而

45、,特別強調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置 “1”,ALE操作將無效。這一位置 “1”,ALE僅在執(zhí)行MOVX或MOVC指令時有效。否則,ALE將被微弱拉高。這個ALE使能標志位(地址為8EH的SFR的第0位)的設置對微控制器處于外部執(zhí)行模式下無效。</p><p> ?。和獠砍绦虼鎯ζ鬟x通信號。</p><p>  當AT8

46、9C52從外部程序存儲器執(zhí)行外部代碼時,在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,將不被激活。</p><p>  /VPP:訪問外部程序存儲器控制信號。為使能從0000H到FFFFH的外部程序存儲器讀取指令,必須接GND。</p><p>  為了執(zhí)行內(nèi)部程序指令,應該接VCC。</p><p>  在flash編程期間,也接收12伏VPP電壓</

47、p><p>  XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。</p><p>  XTAL2:振蕩器反相放大器的輸出端。</p><p>  2.3.2 AT89C52硬件電路設計 </p><p>  單片機系統(tǒng)是整個數(shù)控系統(tǒng)的核心部分,它主要用于鍵盤按鍵管理、數(shù)據(jù)處理、實時采樣分析系統(tǒng)參數(shù)及對各部分反饋環(huán)節(jié)進行整體調(diào)整。主要包括A

48、T89C52單片機、振蕩電路、復位電路等。電路,如圖2.7所示:</p><p>  圖2.7 單片機控制電路</p><p>  (1)AT89C52單片機的P1口是個雙向口,可以作輸出輸入口,在本系統(tǒng)中用作顯示部分,P0口也是個雙向口,主要接A/D、 D/A和24C02C。P2口的P2.3、 P2.4、 P2.5、P2.6接鍵盤輸入。而P3口主要用于中斷。</p>&l

49、t;p>  (2)復位電路 復位是單片機初始化操作。復位將單片機復位初始化狀態(tài),目的是使CPU及個專用寄存器處于一個確定的初始狀態(tài)。如前面介紹,在單片機的復位信號RST上保持2個機器周期以上的高電平,單片機就會復位。本次設計采用的是手動復位方式和自動復位都可以,利用按鍵閉合是單片機復位端上保持接通高電平狀態(tài)兩個機器周期以上就可以完成復位。</p><p>  (3)振蕩電路 該電路是由內(nèi)部反相放大器通過

50、引腳XTAL1和引腳XTAL2與外接的晶體以及電容C2和C3構成,產(chǎn)生出晶體振蕩信號。此晶振信號接至內(nèi)部的時鐘電路。圖中的晶振頻率為11.0592MHz,外接晶體時,電容C2和C3通常選30pF。雖然對外接電容沒有嚴格要求,但電容的大小會影響振蕩頻率、振蕩器的穩(wěn)定性和起振的速度。振蕩器的這些特性對彈片機的應用影響很大,因此在設計印刷電路板時,應使晶體和電容盡可能與單片機靠近,以保證穩(wěn)定可靠。</p><p>&l

51、t;b>  2.4鍵盤模塊</b></p><p>  鍵盤的作用是對單片機輸入數(shù)據(jù),進行對輸出的控制。設計要求能對輸出電流進行“+”,“-”調(diào)節(jié),本設計采用五個按鍵,分別是“進入調(diào)整”、“+”、“-”、“確定”、“取消”。把按鍵值送給單片機的并行口P2, P2.3~P2.6作為鍵盤的輸入端口。</p><p><b>  2.4.1鍵盤電路</b>

52、</p><p>  如圖2.8所示,在沒按下按鍵時對應的IO端口為高電平,當按下按鍵后對應的端口為低電平,由此可知是否有哪個鍵被按下,其中的電阻稱為限流電阻起到限定電流的作用,否則電流過大會損壞單片機的IO端口。從鍵盤的上到下開始,依次為“進入調(diào)整”、“+”、“-”、“確定”、“取消”。 進入調(diào)整的作用是在系統(tǒng)工作時使程序進入電流調(diào)整狀態(tài),進入調(diào)整與單片機的INT0引腳相連。</p><p&

53、gt;  圖2.8 鍵盤電路</p><p><b>  2.5顯示模塊</b></p><p>  2.5.1 1602LCD顯示</p><p>  液晶顯示器由于體積小、質(zhì)量輕、功耗低等特點,已成為各種便攜式電子信息產(chǎn)品的理想顯示器。液晶顯示器通??煞譃閮纱箢?,一是點陣型,二是字符型。一般的字符型液晶只有兩行,面積較小,能顯示字符和一些

54、很簡單的圖形;而點陣型液晶通常面積較大,可以顯示圖形和更多的字符。為了方便設計,同時又能滿足設計的需要及盡可能降低設計成本。因此,我們選擇1602LCD液晶顯示器。目前常用16*1,16*2,20*2和40*2行等的模塊。針對此設計,我們選用16*2模塊。1602字符型液晶顯示器實物如圖2.9所示:</p><p>  圖2.9 1602液晶顯示器</p><p>  1602引腳功能說

55、明</p><p>  液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖2.10是1602的內(nèi)部顯示地址,如下圖:</p><p>  圖2.10 1602LCD內(nèi)部顯示地址</p><p>  2.5.2 LCD顯示硬件電路</p

56、><p>  1602LCD的讀寫控制引腳是第5引腳R/W;在本次設計中,為了降低程序設計,我們只用LCD作顯示器,在此只對其寫操作,所以設計時直接將R/W接地。第三引腳的滑動電阻器可以調(diào)整屏幕的亮度,其電路原理圖,如圖2.11所示:</p><p>  圖2.11 LCD電路</p><p><b>  1602程序如下:</b></p&

57、gt;<p>  void write_date(uchar date)//顯示器寫數(shù)據(jù)</p><p><b>  {</b></p><p><b>  lcdrs=1;</b></p><p><b>  P0=date;</b></p><p><b

58、>  delay(1);</b></p><p><b>  lcde=1;</b></p><p><b>  delay(1);</b></p><p><b>  lcde=0;</b></p><p><b>  }</b><

59、;/p><p>  void write_com(uchar com) //顯示器寫程序</p><p><b>  {</b></p><p><b>  lcdrs=0;</b></p><p><b>  P0=com;</b></p><p>&l

60、t;b>  delay(1);</b></p><p><b>  lcde=1;</b></p><p><b>  delay(1);</b></p><p><b>  lcde=0;</b></p><p><b>  }</b>

61、;</p><p>  void init()//lcd1602初始化</p><p><b>  {</b></p><p><b>  lcde=0;</b></p><p>  write_com(0x38);//8位數(shù)據(jù)端口,2行顯示,5*7點陣</p><p>  

62、write_com(0x0f);//D2=1:開顯示;D1=1:顯示光標;D0=1:光標閃爍</p><p>  write_com(0x01);//清屏</p><p>  write_com(0x80);//設定地址指針在第一行第一個位置</p><p><b>  }</b></p><p><b> 

63、 2.6 A/D模塊</b></p><p>  由于本次設計的數(shù)控直流電流源能夠完成設定輸出值。根據(jù)題目要求輸出0mA~500mA,以10mA為步進。需要的級數(shù)為:</p><p>  因,由此可見采用11位的轉換芯片完全可以滿足要求,但市場上并沒有11位轉換器,所以系統(tǒng)中采用12位高精度A/D轉換芯片MAX1241。同時D/A也采用12位的轉換芯片AD5320。</p

64、><p>  2.6.1芯片MAX1241</p><p>  MAX1241是MAXIM公司推出的一種串行A/D轉換器,具有低功耗、高精度、高速度、體積小、接口簡單等優(yōu)點。MAX1241是一種單通道12位逐次逼近型串行A/D轉換器,功耗低,轉換速度快。它使用逐次逼近技術完成A/D轉換過程。最大非線性誤差小于1LSB,轉換時間9µs。采用三線式串行接口,內(nèi)置快速采樣/保持電路。<

65、;/p><p>  MAX1241內(nèi)部結構(如圖2.12)和管腳定義(如圖2.13):</p><p>  圖2.12 MAX1241內(nèi)部結構</p><p>  圖2.13 MAX1241管腳定義</p><p>  2.6.2 A/D模塊電路</p><p>  MAX1241的VDD供電范圍為2.7~5.25V,

66、為減少來自電源的干擾,可在VDD引腳配置4.7μF和0.1μF的濾波電容。由于MAX1241內(nèi)部沒有參考電源提供,需外接參考電壓,只需將Vref接在4.7μF電解電容即可;特殊情況下,讓懸空,此時,即可在REF引腳輸入?yún)⒖茧妷海浞秶鸀?.0~VDD.REF引腳外接電解電容不宜選擇過大,電容越大,MAX1241由待機模式到正常工作模式的喚醒時間將越長。MAX1241的三根數(shù)據(jù)線,時鐘輸入端、片選控制端和數(shù)據(jù)輸出端分別由AT89S52的P

67、1.0、P1.1和P1.2控制。  MAX1241芯片內(nèi)部具有采樣/保持電路,無需外部保持電容和采樣/保持電路。 MAX1241的控制線SCLK、、DOUT可與AT89S52的通用I/O口直接相連,無需任何接口變換, 模擬電壓經(jīng)前級放大至0~VREF范圍后,由AIN引腳輸入。其中MAX1241,所用到的+2.5V基準電壓,由LM336精密的2.5V并聯(lián)的穩(wěn)壓二極管提供。其外圍電路,如圖2.14所示:</p>&

68、lt;p>  圖2.14 MAX1241外圍電路</p><p><b>  AD程序如下:</b></p><p>  uint ad_conver()//A/D轉換</p><p><b>  {</b></p><p>  uint voltage_temp=0;</p>

69、<p>  uchar ucloop=12;</p><p><b>  adcs=1;</b></p><p><b>  adsclk=0;</b></p><p><b>  adcs=0;</b></p><p>  while(adout==0);//EO

70、C信號為高表示轉換結束</p><p><b>  adsclk=1;</b></p><p><b>  adsclk=0;</b></p><p>  while(ucloop--)</p><p><b>  {</b></p><p>  ads

71、clk=1;//上升沿數(shù)據(jù)穩(wěn)定并讀出</p><p>  voltage_temp<<=1;</p><p>  if(adout==1)</p><p>  voltage_temp+=1;</p><p><b>  adsclk=0;</b></p><p><b> 

72、 }</b></p><p><b>  adcs=1;</b></p><p>  return voltage_temp;</p><p><b>  }</b></p><p><b>  2.7 D/A模塊</b></p><p> 

73、 有前面的計算知,模擬量輸出通道我們選用了AD公司的單通道12位電壓輸出D/A轉換器,單電源工作,電壓范圍為2.7V~5.5V,時鐘頻率最高可達30MHz。片內(nèi)高精度輸出放大器提供滿電源幅度輸出,其基準來自電源輸入端,可以提供較大的動態(tài)輸出范圍,它利用能與標準的接口標準兼容的3線串行接口與微處理器交換數(shù)據(jù),接口簡單。</p><p>  工作過程中,將SYNC置為低電平時候啟動寫序列,在這個階段,SYNC線至少要

74、保持低電平一直到SCLK的第16個下降沿,DAC在這第16個下降沿被更新,如果在這之前SYNC被拉為高電平,就意味著寫序列中斷,此時移位寄存器復位。來自DIN線的數(shù)據(jù)在SCLK的下降沿隨時鐘送入16位移位寄存器,輸入移位寄存器的數(shù)據(jù)位數(shù)為16位寬,前兩位是無關位,接下來2為是控制位,決定控制器件處于哪種工作方式,最后12位是數(shù)據(jù)位,它們代表著DA轉換器即將輸出的電壓值。在第16個時鐘下降沿,最后一位數(shù)據(jù)隨時鐘輸入并按照給定內(nèi)容執(zhí)行已編制

75、好的功能。其外圍電路,如下圖2.15所示:</p><p>  圖2.15 AD5320外圍電路</p><p><b>  DA程序如下:</b></p><p>  void da_conver(uint dignum) //D/A轉換</p><p><b>  {</b></p>

76、;<p>  uint dig=0;</p><p>  uchar k=0;</p><p><b>  dasync=1;</b></p><p>  _nop_();_nop_();</p><p><b>  dasync=0;</b></p><p>

77、  for(k=0;k<16;k++)</p><p><b>  {</b></p><p><b>  dasclk=1;</b></p><p>  dig=dignum&0x8000;</p><p>  if(dig) dadin=1;</p><p>

78、;  else dadin=0;</p><p><b>  dasclk=0;</b></p><p>  _nop_();_nop_();</p><p>  dignum<<=1;</p><p><b>  }</b></p><p><b&g

79、t;  dasync=1;</b></p><p>  _nop_();_nop_();</p><p><b>  }</b></p><p><b>  2.8存儲模塊</b></p><p>  本系統(tǒng)的外擴存儲器主要是用來記憶用戶數(shù)據(jù),因此容量不需要很大,一般的小型存儲器芯片就可

80、以。然而從方便系統(tǒng)擴展來和價格來考慮,我們選用了EEPROM—24C02,它是采用C接口的一種常用2Kbit(256×8bit)的存儲器。</p><p>  首先,我們還是先介紹C總線。</p><p><b>  2.8.1C總線</b></p><p>  在現(xiàn)代電子系統(tǒng)中,有為數(shù)眾多的IC需要進行相互之間以及與外界的通信。為了

81、提供硬件的效率和簡化電路的設計,PHILIPS開發(fā)了一種用于內(nèi)部IC控制的簡單的雙向兩線串行總線C。C總線支持任何一種IC制造工藝,并且PHILIPS和其他廠商提供了種類非常豐富的C兼容芯片。作為一個專利的控制總線,C已經(jīng)成為世界性的工業(yè)標準。</p><p>  C總線是一種用于IC器件之間的二線制總線。它通過SDA(串行數(shù)據(jù)線)及SCL(串行時鐘線)兩根線連到總線上的器件之間傳送信息,并根據(jù)地址識別每個器件,

82、不管是單片機、存儲器、LCD驅動還是鍵盤接口。</p><p>  C總線的數(shù)據(jù)傳送格式是在C總線開始信號后,送出的第一個字節(jié)數(shù)據(jù)是是用來識別從器件的地址,其中前七位為地址碼,第8位為方向位(R/W)。方向位為“0”表示發(fā)送,每次都是先傳最高位。</p><p>  2.8.2 芯片24C02C</p><p>  24C02C是一種串行存儲器,其容量2Kbit。其

83、封裝,如圖2.16所示:</p><p>  圖2.16 24C02C引腳</p><p>  A0、A1和A2引腳用于多器件工作。將這些輸入引腳上的電平與從器件地址中的相應位作比較,如果比較結果為真,則該器件被選中。</p><p>  SDA串行數(shù)據(jù)引腳為雙向引腳,用于把地址和數(shù)據(jù)輸入/ 輸出器件。該引腳為漏極開路。因此,SDA總線要求在該引腳與VCC之間接入

84、上拉電阻。對于正常的數(shù)據(jù)傳輸,只允許在SCL為低電平期間改變SDA電平。而SDA電平在SCL高電平期間若發(fā)生變化,表明起始和停止條件產(chǎn)生。</p><p>  WP寫保護引腳必須連接到VSS或者VCC。如果連接到VSS, 寫操作使能。如果連接到VCC,寫操作被禁止,但讀操作不受影響。</p><p>  VCC電源輸入引腳,標稱條件下在VCC低于3.8V時,則VCC閾值檢測電路會禁止內(nèi)部的

85、擦寫邏輯。</p><p>  2.8.3 存儲模塊電路</p><p>  將A0、A1、A2全部接地,即決定了該模塊的地址為0xA0,24C02C的外圍電路,如圖2.17所示:</p><p>  圖2.17 24C02C外圍電路</p><p><b>  程序如下:</b></p><p&g

86、t;  /******************************************************************/</p><p>  作用:啟動IIC總線 </p><p>  /***************************************************************

87、***/</p><p>  void Start()</p><p><b>  {</b></p><p><b>  Sda=1;</b></p><p>  _nop_();_nop_();</p><p><b>  Scl=1;</b><

88、;/p><p>  _nop_();_nop_();_nop_();_nop_();_nop_();</p><p><b>  Sda=0;</b></p><p>  _nop_();_nop_();_nop_();_nop_();_nop_();</p><p><b>  Scl=0;</b>&

89、lt;/p><p><b>  }</b></p><p>  /******************************************************************/</p><p>  作用:停止IIC總線 </p><p>  /***

90、***************************************************************/</p><p>  void Stop()</p><p><b>  {</b></p><p><b>  Sda=0;</b></p><p><b> 

91、 _nop_();</b></p><p><b>  Scl=1;</b></p><p>  _nop_();_nop_();_nop_();_nop_();_nop_();</p><p><b>  Sda=1;</b></p><p>  _nop_();_nop_();_no

92、p_();_nop_();_nop_();</p><p><b>  Scl=0;</b></p><p><b>  }</b></p><p>  /******************************************************************/</p><p

93、>  作用:應答IIC總線 </p><p>  /******************************************************************/</p><p>  void Ack()</p><p><b>  {</b></p>

94、<p><b>  Sda=0;</b></p><p>  _nop_();_nop_();_nop_();</p><p><b>  Scl=1;</b></p><p>  _nop_();_nop_();_nop_();_nop_();_nop_();</p><p><

95、;b>  Scl=0;</b></p><p>  _nop_();_nop_();</p><p><b>  }</b></p><p>  /******************************************************************/</p><p>  

96、作用:非應答IIC總線 </p><p>  /******************************************************************/</p><p>  void NoAck()</p><p><b>  {</b></p><

97、;p><b>  Sda=1;</b></p><p>  _nop_();_nop_();_nop_();</p><p><b>  Scl=1;</b></p><p>  _nop_();_nop_();_nop_();_nop_();_nop_();</p><p><b>

98、;  Scl=0;</b></p><p>  _nop_();_nop_();</p><p><b>  }</b></p><p>  /******************************************************************/</p><p>  作用:發(fā)送

99、一個字節(jié) </p><p>  /******************************************************************/</p><p>  void Send(uchar Data)</p><p><b>  { </b></p>

100、<p>  uchar BitCounter=8;</p><p>  uchar temp;</p><p><b>  do</b></p><p><b>  {</b></p><p>  temp=Data;</p><p><b>  Scl

101、=0;</b></p><p>  _nop_();_nop_();_nop_();_nop_();_nop_();</p><p>  if((temp&0x80)==0x80)</p><p><b>  Sda=1;</b></p><p><b>  else</b>&l

102、t;/p><p><b>  Sda=0;</b></p><p><b>  Scl=1;</b></p><p>  temp=Data<<1;</p><p>  Data=temp;</p><p>  BitCounter--;</p><

103、;p><b>  }</b></p><p>  while(BitCounter);</p><p><b>  Scl=0;</b></p><p><b>  }</b></p><p>  /************************************

104、******************************/</p><p>  作用:讀一個字節(jié)并返回 </p><p>  /******************************************************************/</p><p>  uchar Read(void)<

105、;/p><p><b>  {</b></p><p>  uchar temp=0;</p><p>  uchar temp1=0;</p><p>  uchar BitCounter=8;</p><p><b>  Sda=1;</b></p><p

106、><b>  do</b></p><p><b>  {</b></p><p><b>  Scl=0;</b></p><p>  _nop_();_nop_();_nop_();_nop_();_nop_();</p><p><b>  Scl=1;&

107、lt;/b></p><p>  _nop_();_nop_();_nop_();_nop_();_nop_();</p><p><b>  if(Sda)</b></p><p>  temp=temp|0x01;</p><p><b>  else</b></p><

108、;p>  temp=temp&0xfe;</p><p>  if(BitCounter-1)</p><p><b>  {</b></p><p>  temp1=temp<<1;</p><p>  temp=temp1;</p><p><b>  }&

109、lt;/b></p><p>  BitCounter--;</p><p><b>  }</b></p><p>  while(BitCounter);</p><p>  return(temp);</p><p><b>  }</b></p>

110、<p>  /******************************************************************/</p><p>  作用:寫入數(shù)據(jù) </p><p>  /***********************************************************

111、*******/</p><p>  void WrToROM(uchar Data[],uchar Address,uchar Num)</p><p><b>  {</b></p><p><b>  uchar j;</b></p><p>  uchar *PData;</p>

112、<p>  PData=Data;</p><p>  for(j=0;j<Num;j++)</p><p><b>  {</b></p><p><b>  Start();</b></p><p>  Send(0xa0); //

113、寫入芯片地址</p><p><b>  Ack();</b></p><p>  Send(Address+j); //寫入存儲地址</p><p><b>  Ack();</b></p><p>  Send(*(PData+j));

114、 //寫數(shù)據(jù)</p><p><b>  Ack();</b></p><p><b>  Stop();</b></p><p>  delay(10);</p><p><b>  }</b></p><p><b>  }<

115、;/b></p><p>  /******************************************************************/</p><p>  作用:讀出數(shù)據(jù) </p><p>  /****************************************

116、**************************/</p><p>  void RdFromROM(uchar Data[],uchar Address,uchar Num)</p><p><b>  {</b></p><p><b>  uchar j;</b></p><p>  uc

117、har *PData;</p><p>  PData=Data;</p><p>  for(j=0;j<Num;j++)</p><p><b>  {</b></p><p>  Start(); //寫入芯片地址</p><p> 

118、 Send(0xa0);</p><p><b>  Ack();</b></p><p>  Send(Address+j); //寫入存儲地址</p><p><b>  Ack();</b></p><p><b>  Start();</b

119、></p><p>  Send(0xa1); //讀入地址</p><p><b>  Ack();</b></p><p>  *(PData+j)=Read(); //讀數(shù)據(jù)</p><p><b>  Scl=0;<

120、/b></p><p><b>  NoAck();</b></p><p><b>  Stop();</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>

121、;  第3章 軟件設計</b></p><p>  3.1編程語言描述 </p><p>  C語言已成為當前舉世公認的高效簡潔,又貼近硬件的編程語言之一,將C語言向單片機上的移植,始于20世紀80年代的中后期,經(jīng)過十幾年的努力,C語言終于成為專業(yè)化的單片機實用高級語言,人們通常把開發(fā)MCS-51使用的C語言簡稱C51。采用C51編寫的應用程序結構清楚、模塊化程度高、可讀性強

122、,并容易移植。應用C51進行軟件開發(fā),用戶可以不必具體考慮寄存器、存儲器的分配等工作,而把這部分工作交給編譯、連接軟件,用戶只需了解MCS-51的存儲器結構,甚至不必去了解51的指令系統(tǒng)。C51開發(fā)環(huán)境一般都提供了數(shù)學計算等子程序,為程序開發(fā)帶來方便。雖然采用C51編程形成的源代碼比不上有經(jīng)驗人員編寫的匯編語言精煉,但對于相對復雜的系統(tǒng)開發(fā)或復雜運算,還是比用匯編語言容易得多,且易于移植及有利于系統(tǒng)的維護和升級。在實時要求較高的場合,可

123、采用C51匯編混合編程。</p><p>  本設計我們采用的是C51,其編譯器是Keil C51,它是德國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng)。Keil C51軟件提供了豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具。</p><p>  C51語言編程方法是:1.啟動uvision3(Keil C51基于Windows下的開發(fā)環(huán)境),創(chuàng)建一個項目文件,并從

溫馨提示

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

評論

0/150

提交評論