武漢理工大學(xué)《學(xué)科基礎(chǔ)課群課設(shè)》報告-數(shù)字電流源報告.doc
課程設(shè)計任務(wù)書學(xué)生姓名: 專業(yè)班級: 通信1103 指導(dǎo)教師: 周建新 工作單位: 信息工程學(xué)院 題 目: 數(shù)控直流電流源初始條件: 1.單片機基本理論知識 2.數(shù)字電路基本理論知識 3.模擬電路基本理論知識 4.Proteus、Keil編程基礎(chǔ)知識5.裝有Proteus、Keil的PC機要求完成的主要任務(wù): 設(shè)計并制作數(shù)控直流電流源。輸入交流200240V,50Hz;輸出直流電壓10V。要求:1)輸出電流范圍:200mA2000mA;2)可設(shè)置并顯示輸出電流給定值,要求輸出電流與給定值偏差的絕對值給定值的1+10 mA;3)具有“+”、“-”步進調(diào)整功能,步進10mA;4)改變負載電阻,輸出電壓在10V以內(nèi)變化時,要求輸出電流變化的絕對值輸出電流值的1+10 mA; 5)紋波電流2mA;時間安排:1、理論講解,老師布置課程設(shè)計題目,學(xué)生根據(jù)選題開始查找資料;2、課程設(shè)計時間為2周(1)確定技術(shù)方案、電路,并進行分析計算, 時間2天;(2)選擇元器件、安裝與調(diào)試,或仿真設(shè)計與分析,時間6天;(3)總結(jié)結(jié)果,寫出課程設(shè)計報告,時間2天。指導(dǎo)教師簽名: 年 月 日系主任(或責任教師)簽名: 年 月 日目錄課程設(shè)計任務(wù)書1摘要3Abstract5第一章 緒論61.1目的61.2任務(wù)61.3要求6第二章 相關(guān)理論知識62.1理論分析62.2 系統(tǒng)介紹72.3 AT89C52芯片介紹8第三章 硬件設(shè)計113.1 恒流源模塊113.2 單片機模塊113.2.1 AT89C52 硬件電路設(shè)計113.3 鍵盤模塊133.3.1 MM74C922133.3.2 鍵盤電路133.4 顯示模塊143.4.1 1602LCD顯示143.4.2 LCD顯示硬件電路143.5 A/D模塊153.5.1 芯片MAX1241153.5.2 A/D模塊電路163.6 D/A模塊163.7 存儲模塊173.7.1 芯片24C02C173.7.2 存儲模塊電路173.8穩(wěn)壓電源模塊18第四章 軟件設(shè)計194.1 編程語言描述194.2 系統(tǒng)軟件的功能模塊204.2.1 主程序設(shè)計204.2.2 中斷程序設(shè)計20第五章 軟件仿真及硬件調(diào)試245.1 軟件仿真245.2 硬件調(diào)試255.2.1 單片機最小系統(tǒng)調(diào)試255.2.2 鍵盤及液晶顯示調(diào)試255.2.3 數(shù)模轉(zhuǎn)換與功放電路調(diào)試265.2.4 模數(shù)轉(zhuǎn)換電路調(diào)試265.2.5 存儲器電路調(diào)試26第六章 設(shè)計總結(jié)27參考文獻28附錄A29附錄B30摘要本系統(tǒng)由單片機程控設(shè)定數(shù)字信號,經(jīng)過D/A轉(zhuǎn)換器AD5320輸出模擬量,控制輸出功率管的基極,隨著功率管基極電壓的變化而輸出不同的電流。單片機系統(tǒng)還兼顧對恒流源進行實時監(jiān)控,輸出電流經(jīng)過電流/電壓轉(zhuǎn)換后,通過A/D轉(zhuǎn)換芯片MAX1241,實時把模擬量轉(zhuǎn)化為數(shù)字量,再經(jīng)單片機分析處理,通過數(shù)字量形式的反饋環(huán)節(jié),使電流更加穩(wěn)定,這樣構(gòu)成穩(wěn)定的壓控電流源。關(guān)鍵詞:壓控恒流源; AT89C52; 數(shù)控電源; AbstractIn the system, the digitally programmable signal from SCM is converted to analog value by DAC AD5320, is sent to the base electrode of power transistor, so an adjustable output current can be available with the base electrode voltage of power transistor. On the other hand, The constant current source can be monitored by the SCM system real-timely, its work process is that output current is converted voltage, then its analog value is converted to digital value by ADC MAX1241, finally the digital value as a feedback loop is processed by SCM so that output current is more stable, so a stable voltage-controlled constant current power is designed.KeyWords:voltage-controlled constant current source;AT89C52;Numerical controlled source;第一章 緒論1.1目的1、在實踐中對通信原理、微機原理、模擬電子技術(shù)基礎(chǔ)、數(shù)字電子技術(shù)基礎(chǔ)、電磁場與電磁波等學(xué)科基礎(chǔ)課的課堂理論知識做進一步鞏固;2、鍛煉對學(xué)科基礎(chǔ)課的綜合運用能力。1.2任務(wù)設(shè)計并制作數(shù)控直流電流源。輸入交流200240V,50Hz;輸出直流電壓10V。其原理示意如圖所示。鍵盤控制器電流源負載顯示器電 源1.3要求(1)輸出電流范圍:200mA2000mA;(2)可設(shè)置并顯示輸出電流給定值,要求輸出電流與給定值偏差的絕對值給定值的1+10 mA;(3)具有“+”、“-”步進調(diào)整功能,步進10mA;(4)改變負載電阻,輸出電壓在10V以內(nèi)變化時,要求輸出電流變化的絕對值輸出電流值的1+10 mA; (5)紋波電流2mA;第二章 相關(guān)理論知識2.1理論分析首先,在數(shù)控方面采用單片機比CPLD和FPGA等可編程邏輯器件好,因為此處只是一般用途的控制,沒有必要選用價格昂貴的CPLD和FPGA,而且他們用在此處并不合適,控制起來顯得很麻煩。而單片機則不同,他有著非常成熟的技術(shù),這方面的參考文獻也很多,而且他從來就是用于控制方面的,在這方面有著天生的優(yōu)勢。還有他價格也不貴,僅幾元人民幣。對于這樣的應(yīng)用系統(tǒng)比較劃得來。其次在恒流源方面,我的方案也很好。從理論上看,運放是接成比較器的,作為模擬反饋的,這樣只要運放的輸入不變,那么三極管的是不變的,根據(jù)三極管的共射極輸入特性可知,不變時,和也保持不變,而且,。當比較大時。當運放的輸入改變時,也改變了值,這樣也就改變了和的值,而且這個變化基本也是呈線性的。這也就是本系統(tǒng)的恒流原理。由于器件受溫度的影響以及局部非線性的存在,這樣的恒流源不能做到真正的恒流,因此,當外界條件發(fā)生變化時,我要及時給予補償,只有這樣才能做到真正的恒流。這也就是為什么要加入模數(shù)轉(zhuǎn)換器的真正原因,他能實時測量電流的變化并按照一定的算法及時給予補償,采用數(shù)字補償逐次逼近的方式作為反饋調(diào)整環(huán)節(jié),由程序控制調(diào)節(jié)功率管的輸出。當改變負載大小時,基本上不影響電流的輸出。模數(shù)轉(zhuǎn)換器還起到測量的作用,同時送顯示讓我知道實際的電流輸出值。2.2 系統(tǒng)介紹本系統(tǒng)以AT89C52單片機為主控制器,通過鍵盤來設(shè)置直流電源的輸出電流,設(shè)置步進等級可達1mA,并可由液晶模塊顯示實際輸出電流值和電流設(shè)定值。首先,采用單片穩(wěn)壓芯片實現(xiàn)直流穩(wěn)壓,然后采用了分立元器件實現(xiàn)穩(wěn)流。為實現(xiàn)對輸出電流控制:一方面,通過 D/A轉(zhuǎn)換器(AD5320)輸出實現(xiàn)電流的預(yù)置,再經(jīng)過運算放大器控制晶體管的輸出電流。另一方面,單片機系統(tǒng)還兼顧對恒流源進行實時監(jiān)控,輸出電流經(jīng)過電流/電壓轉(zhuǎn)變后,通過A/D轉(zhuǎn)換(MAX1241)芯片,實時把模擬量轉(zhuǎn)化為數(shù)字量,再經(jīng)單片機分析處理, 通過數(shù)據(jù)形式的反饋環(huán)節(jié),使電流更加穩(wěn)定,這樣構(gòu)成穩(wěn)定的壓控電流源。此外,系統(tǒng)還增加了存儲設(shè)備,能夠保存掉電前的數(shù)據(jù),使系統(tǒng)更加方便使用。系統(tǒng)原理框圖如下圖1:圖1 系統(tǒng)原理框圖2.3 AT89C52芯片介紹我選擇的是ATMEL公司的AT89C52單片機,它是一種低功耗、高性能CMOS8位微控制器,具有8K ISP(在系統(tǒng)可編程)Flash 存儲器。使用Atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。AT89C52主要引腳的主要功能:VCC:接+5V電源。GND:接地。P0口:P0口為一個8位漏極開路雙向I/O口,作為輸出口,每位能驅(qū)動8個TTL邏輯電平。對P0端口寫“1”時,引腳用作高阻抗輸入。當訪問外部程序和數(shù)據(jù)存儲器時,P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0口具有內(nèi)部上拉電阻。在flash編程時,P0口也用來接收指令字節(jié);在程序校驗時,輸出指令字節(jié)。程序校驗時,需要外部上拉電阻。P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P1端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.1分別作定時器/記數(shù)器2的外部記數(shù)輸入(P1.0/T2)和定時器/記數(shù)器2的觸發(fā)輸入(P1.1/T2EX),具體如下表1所示。在flash編程和校驗時,P1口接收低8位地址字節(jié)。P2口:P2口是一個具有內(nèi)部上拉電阻的8位雙向I/O口,P2輸出緩沖器能驅(qū)動4個TTL邏輯電平。對P2口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲器或用16位地址讀取外部數(shù)據(jù)存儲器(例如MOVX DPTR)時,P2口送出高八位地址。在這種應(yīng)用中,P2口P2 口使用很強的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX RI)訪問外部數(shù)據(jù)存儲器時,P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗時,P2口也接收高8位地址字節(jié)和一些控制信號。P3口:P3 口是一個具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)動4 個 TTL 邏輯電平。對P3 端口寫“1”時,內(nèi)部上拉電阻把端口拉高,此時可以作為輸入口使用。作為輸入使用時,被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89C52特殊功能(第二功能)使用,如下表2所示。在flash編程和校驗時,P3口也接收一些控制信號。RST:復(fù)位輸入。晶振工作時,RST腳持續(xù)2 個機器周期高電平將使單片機復(fù)位??撮T狗計時完成后,RST 腳輸出96 個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認狀態(tài)下,復(fù)位高電平有效。ALE/ :地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8 位地址的輸出脈沖。在flash編程時,此引腳()也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或時鐘使用。然而,特別強調(diào),在每次訪問外部數(shù)據(jù)存儲器時,ALE脈沖將會跳過。如果需要,通過將地址為8EH的SFR的第0位置 “1”,ALE操作將無效。這一位置 “1”,ALE僅在執(zhí)行MOVX 或MOVC指令時有效。否則,ALE將被微弱拉高。這個ALE使能標志位(地址為8EH的SFR的第0位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。:外部程序存儲器選通信號。當AT89C52從外部程序存儲器執(zhí)行外部代碼時,在每個機器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,將不被激活。/VPP:訪問外部程序存儲器控制信號。為使能從0000H 到FFFFH的外部程序存儲器讀取指令,必須接GND。為了執(zhí)行內(nèi)部程序指令,應(yīng)該接VCC。在flash編程期間,也接收12伏VPP電壓XTAL1:振蕩器反相放大器和內(nèi)部時鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的輸出端。AT89C52引腳圖第三章 硬件設(shè)計3.1 恒流源模塊用“運放+大功率三極管”的結(jié)構(gòu)構(gòu)成恒流源。大功率三極管選用TIP122型號,它是應(yīng)用范圍廣、功率小、頻率低的達林頓, NPN極性型,特征頻率:1000(MHz),集電極允許電流:8(A),集電極最大允許耗散功率:48(W)。其性能滿足本設(shè)計要求,同時可以通過功率管的不同容量來滿足不同的應(yīng)用要求。采用常用的大功率電阻作為采樣電阻,輸出電流波動比較大,而康錳銅絲是一種溫度特性佳的阻性元件,選其作為取樣電阻,其兩端電壓正比于流過的電流,因此該電壓的反饋就是負載電流的反饋。其原理如圖2所示:圖2 恒流電路3.2 單片機模塊3.2.1 AT89C52 硬件電路設(shè)計 單片機系統(tǒng)是整個數(shù)控系統(tǒng)的核心部分,它主要用于鍵盤按鍵管理、數(shù)據(jù)處理、實時采樣分析系統(tǒng)參數(shù)及對各部分反饋環(huán)節(jié)進行整體調(diào)整。主要包括AT89C52單片機、振蕩電路、復(fù)位電路等。電路如下圖3所示:圖3 單片機控制電路(1) AT89C52單片機的P0口是個雙向口,可以作輸出輸入口,在本系統(tǒng)中用作顯示部分,P1口也是個雙向口,主要接A/D、 D/A和24C02C。P2口的P2.0、 P2.1、 P2.2、P2.3接鍵盤輸入,P2.4、 P2.5用于鍵盤控制是能端。而P3口主要用于中斷。(2) 復(fù)位電路 復(fù)位是單片機初始化操作。復(fù)位將單片機復(fù)到初始化狀態(tài),目的是使CPU及個專用寄存器處于一個確定的初始狀態(tài)。如前面介紹,在單片機的復(fù)位信號RST上保持2個機器周期以上的高電平,單片機就會復(fù)位。本次設(shè)計采用的是手動復(fù)位方式,利用按鍵閉合是單片機復(fù)位端上保持接通高電平狀態(tài)兩個機器周期以上。 (3) 振蕩電路 該電路是由內(nèi)部反相放大器通過引腳XTAL1和引腳XTAL2與外接的晶體以及電容C3和C4構(gòu)成,產(chǎn)生出晶體振蕩信。此晶振信號接至內(nèi)部的時鐘電路。圖中的晶振頻率為11.0592MHz,外接晶體時,電容C3和C4通常選30pF。雖然對外接電容沒有嚴格要求,但電容的大小會影響振蕩頻率、振蕩器的穩(wěn)定性和起振的速度。振蕩器的這些特性對彈片機的應(yīng)用影響很大,因此在設(shè)計印刷電路板時,應(yīng)使晶體和電容盡可能與單片機靠近,以保證穩(wěn)定可靠。3.3 鍵盤模塊鍵盤的作用是對單片機輸入數(shù)據(jù),設(shè)計中要求能使電流進行“+”,“-”及電流值的設(shè)定,所以采用鍵盤為44的矩陣鍵盤,用MM74C922芯片進行識別按鍵后送AT89C52的并行口P2, P2.0P2.3作為鍵盤輸入口。傳統(tǒng)的44矩陣鍵盤識別處理程序的編寫相對煩瑣。所以采用MM74C922芯片來將44矩陣鍵盤的鍵值轉(zhuǎn)換成4位二進制碼以簡化程序的編寫。3.3.1 MM74C922MM74C922是一款集成了鍵盤防抖動技術(shù)和按鍵檢測功能的16位按鍵的譯碼芯片。由CMOS工藝技術(shù)制造,工作電壓3-15V,“二鍵鎖定”功能,編碼輸出為三態(tài)輸出,可直接與微處理器數(shù)據(jù)總線相連,內(nèi)部振蕩器能完成44矩陣鍵盤掃描,亦可用外部振蕩器使鍵盤操作與其他處理同步,通過外接電容避免開關(guān)發(fā)生前、后沿彈跳所需的延時。有按鍵按下時數(shù)據(jù)有效線變高,同時封鎖其他鍵,片內(nèi)鎖存器將保持鍵盤矩陣的4位編碼,可由微處理器讀出。其引腳圖如圖4所示: 圖4 MM74C9223.3.2 鍵盤電路由X1X4,Y1Y4的連接方式,即可確定每一個按鍵的編碼。如圖5所示,從鍵盤的左下角開始,依次編碼為0、1、2E、F。我將A作為設(shè)置鍵,B作為恢復(fù)鍵,C作為加法鍵,D作為減法鍵,E作為確認鍵,F(xiàn)作為取消鍵。再加上09剛好16個按鍵。通過DA信號觸發(fā)中斷,由于有按鍵時,DA為高電平,而單片機的中斷信號為低電平,故需在DA信號引腳上接上一個非門,再與單片機的INT0引腳相連。圖5 鍵盤電路3.4 顯示模塊3.4.1 1602LCD顯示液晶顯示器由于體積小、質(zhì)量輕、功耗低等特點,已成為各種便攜式電子信息產(chǎn)品的理想顯示器。液晶顯示器通??煞譃閮纱箢悾皇屈c陣型,二是字符型。一般的字符型液晶只有兩行,面積較小,能顯示字符和一些很簡單的圖形;而點陣型液晶通常面積較大,可以顯示圖形和更多的字符。為了方便設(shè)計,同時又能滿足設(shè)計的需要及盡可能降低設(shè)計成本。因此,我選擇1602LCD液晶顯示器。目前常用16*1,16*2,20*2和40*2行等的模塊。針對此設(shè)計,我選用16*2模塊。1602引腳功能說明:編號符號引腳說明編號符號引腳說明1VSS電源地9D2數(shù)據(jù)2VDD電源正極10D3數(shù)據(jù)3VL液晶顯示偏壓11D4數(shù)據(jù)4RS數(shù)據(jù)/命令選擇12D5數(shù)據(jù)5R/W讀/寫選擇13D6數(shù)據(jù)6E使能信號14D7數(shù)據(jù)7D0數(shù)據(jù)15BLA背光源正極8D1數(shù)據(jù)16BLK背光源負極液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。 3.4.2 LCD顯示硬件電路1602LCD的讀寫控制引腳是第5引腳R/W;在本次設(shè)計中,為了降低程序設(shè)計,我只用LCD作顯示器,在此只對其寫操作,所以設(shè)計時直接將R/W接地。其電路原理圖如圖6所示:圖6 LCD電路3.5 A/D模塊3.5.1 芯片MAX1241MAX1241是MAXIM公司推出的一種串行A/D轉(zhuǎn)換器,具有低功耗、高精度、高速度、體積小、接口簡單等優(yōu)點。MAX1241是一種單通道12位逐次逼近型串行A/D轉(zhuǎn)換器,功耗低,轉(zhuǎn)換速度快。它使用逐次逼近技術(shù)完成A/D轉(zhuǎn)換過程。最大非線性誤差小于1LSB,轉(zhuǎn)換時間9s。采用三線式串行接口,內(nèi)置快速采樣/保持電路。MAX1241內(nèi)部結(jié)構(gòu)(如圖7)和管腳定義(如圖8):圖7 MAX1241內(nèi)部結(jié)構(gòu)管腳名稱功能參數(shù)1VDD電源輸入+2.7+5.2V2VIN模擬電壓輸入03SHDN節(jié)電方式控制端“0”節(jié)電方式;“1”工作4REF參考電壓輸入端1.0VVDD5GND電源地6DOUT串行數(shù)據(jù)輸出三態(tài)7CS芯片選通“0”選通;“1”禁止8SCLK串行輸出驅(qū)動時鐘輸入頻率范圍:02.1MHz圖8 MAX1241管腳定義3.5.2 A/D模塊電路MAX1241的VDD供電范圍為2.75.25V,為減少來自電源的干擾,可在VDD引腳配置4.7F和0.1F的濾波電容。由于MAX1241內(nèi)部沒有參考電源提供,需外接參考電壓,只需將Vref接在4.7F電解電容即可;特殊情況下,讓懸空,此時,即可在REF引腳輸入?yún)⒖茧妷?,其范圍?.0VDD.REF引腳外接電解電容不宜選擇過大,電容越大,MAX1241由待機模式到正常工作模式的喚醒時間將越長。MAX1241的三根數(shù)據(jù)線,時鐘輸入端、片選控制端和數(shù)據(jù)輸出端分別由AT89C52的P1.0、P1.1和P1.2控制。MAX1241芯片內(nèi)部具有采樣/保持電路,無需外部保持電容和采樣/保持電路。MAX1241的控制線SCLK、DOUT可與AT89C52的通用I/O口直接相連,無需任何接口變換, 模擬電壓經(jīng)前級放大至0VREF 范圍后,由AIN引腳輸入。其中MAX1241,所用到的+2.5V基準電壓,由LM336精密的2.5V并聯(lián)的穩(wěn)壓二極管提供。其外圍電路如圖9所示:圖9 MAX1241外圍電路3.6 D/A模塊有前面的計算知,模擬量輸出通道我選用了AD公司的單通道12位電壓輸出D/A轉(zhuǎn)換器,單電源工作,電壓范圍為2.7V5.5V,時鐘頻率最高可達30MHz。片內(nèi)高精度輸出放大器提供滿電源幅度輸出,其基準來自電源輸入端,可以提供較大的動態(tài)輸出范圍,它利用能與標準的接口標準兼容的3線串行接口與微處理器交換數(shù)據(jù),接口簡單。工作過程中,將SYNC置為低電平時候啟動寫序列,在這個階段,SYNC線至少要保持低電平一直到SCLK的第16個下降沿,DAC在這第16個下降沿被更新,如果在這之前SYNC被拉為高電平,就意味著寫序列中斷,此時移位寄存器復(fù)位。來自DIN線的數(shù)據(jù)在SCLK的下降沿隨時鐘送入16位移位寄存器,輸入移位寄存器的數(shù)據(jù)位數(shù)為16位寬,前兩位是無關(guān)位,接下來2為是控制位,決定控制器件處于哪種工作方式,最后12位是數(shù)據(jù)位,它們代表著DA轉(zhuǎn)換器即將輸出的電壓值。在第16個時鐘下降沿,最后一位數(shù)據(jù)隨時鐘輸入并按照給定內(nèi)容執(zhí)行已編制好的功能。其外圍電路如下圖10所示:圖10 AD5320外圍電路3.7 存儲模塊本系統(tǒng)的外擴存儲器主要是用來記憶用戶數(shù)據(jù),因此容量不需要很大,一般的小型存儲器芯片就可以。然而從方便系統(tǒng)擴展來和價格來考慮,我選用了EEPROM24C02,它是采用C接口的一種常用2Kbit(2568bit)的存儲器。3.7.1 芯片24C02C24C02C是一種串行存儲器,其容量2Kbit。A0、A1 和A2引腳用于多器件工作。將這些輸入引腳上的電平與從器件地址中的相應(yīng)位作比較,如果比較結(jié)果為真,則該器件被選中。SDA串行數(shù)據(jù)引腳為雙向引腳,用于把地址和數(shù)據(jù)輸入/ 輸出器件。該引腳為漏極開路。因此,SDA 總線要求在該引腳與VCC 之間接入上拉電阻。對于正常的數(shù)據(jù)傳輸,只允許在SCL為低電平期間改變SDA 電平。而SDA 電平在SCL 高電平期間若發(fā)生變化,表明起始和停止條件產(chǎn)生。WP寫保護引腳必須連接到 VSS 或者 VCC。如果連接到 VSS, 寫操作使能。如果連接到VCC,寫操作被禁止,但讀操作不受影響。VCC電源輸入引腳,標稱條件下在VCC 低于3.8V 時,則VCC 閾值檢測電路會禁止內(nèi)部的擦寫邏輯。3.7.2 存儲模塊電路將A0、A1、A2全部接地,即決定了該模塊的地址為0xA0,24C02C的外圍電路如圖11所示:圖11 24C02C外圍電路3.8穩(wěn)壓電源模塊本系統(tǒng)要求自制5V,12V穩(wěn)壓電源,滿足對系統(tǒng)的供電。對于5V電源,我們制作了使用7805芯片的穩(wěn)壓電源。電路主要包括:整流電路、濾波電路、穩(wěn)壓電路組成。整流電路采用四個二極管整流,經(jīng)2200uf電容使電流平緩后用0.1uf電容濾波,然后接至7805,輸出是紋波較小的5V直流電壓。電路圖如下所示:圖六:5V電源制作圖對于12V的穩(wěn)壓電源,類似的,本系統(tǒng)使用以7815、7915為三端穩(wěn)壓器的電源。電源外接的是由22012V變壓器輸出的交流電壓。這里整流電路已省去。第四章 軟件設(shè)計4.1 編程語言描述 本設(shè)計我采用的是C51,其編譯器是Keil C51,它是德國Keil Software公司出品的51系列兼容單片機C語言軟件開發(fā)系統(tǒng)。Keil C51軟件提供了豐富的庫函數(shù)和功能強大的集成開發(fā)調(diào)試工具。C51語言編程方法是:1.啟動uvision4(Keil C51基于Windows下的開發(fā)環(huán)境),創(chuàng)建一個項目文件,并從器件數(shù)據(jù)庫里選擇一款CPU芯片;2.根據(jù)應(yīng)用要求,在PC上用文本編輯軟件編寫C語言源程序;利用C51編譯工具軟件對源程序進行編譯,生成目標文件(.obj文件);利用C51連接工具對目標程序進行連接定位,生成絕對程序,即可以裝載到開發(fā)裝置仿真運行。在某些情況下,也可以將絕對程序轉(zhuǎn)化為十六進制代碼程序(.hex文件)。4.2 系統(tǒng)軟件的功能模塊根據(jù)本系統(tǒng)的實際及鍵盤設(shè)置要求,軟件設(shè)計可分為以下2個功能模塊:主程序和中斷程序。4.2.1 主程序設(shè)計主程序主要完成的是一些初始化的設(shè)置(比如液晶顯示和鍵盤),和監(jiān)控程序。主程序流程圖如圖12所示。其中監(jiān)控程序流程圖如圖13所示: 圖12 主程序流程圖 圖13 監(jiān)控程序流程圖4.2.2 中斷程序設(shè)計 中斷程序主要是對不同的按鍵做出不同的處理,其中斷流程圖如圖14所示:圖14 中斷程序流程圖其中數(shù)字程序流程圖如圖15所示。設(shè)置程序流程圖如圖16所示: 圖15 數(shù)字程序流程圖 圖16 設(shè)置程序流程圖恢復(fù)程序流程圖如圖17所示。加法程序流程圖如圖18所示: 圖17 恢復(fù)程序流程圖 圖18 加法程序流程圖減法程序流程圖如圖19所示。確認程序流程圖如圖20所示: 圖19 減法程序流程圖 圖20 確認程序流程圖.取消程序流程圖如圖21所示:.圖21 取消程序流程圖如上述流程圖所示,本系統(tǒng)的程序是分為很多功能小模塊,只要完成每個小程序的編寫,整個系統(tǒng)的程序也就隨之完成。這樣做大大減小了編程難度!系統(tǒng)的完整程序見附錄B。第五章 軟件仿真及硬件調(diào)試在組裝硬件之前,做足軟件的仿真是硬件能夠正常工作的保障!為此,我在設(shè)計時,就采用Proteus仿真,這樣便于我在編程時,能夠及時的發(fā)現(xiàn)程序的不足,及時的修改,使我編寫的程序更加完美。5.1 軟件仿真首先,我在Proteus里編輯原理圖(如圖22所示),然后在單片機的屬性中導(dǎo)入由在keil軟件里編輯的程序生成的HEX文件,即可執(zhí)行仿真!圖22 仿真原理圖由于設(shè)計要求規(guī)定輸出為200mA2000mA。因此我在初始化是就默認初始值為200mA。我接著單擊鍵盤上的“加”鍵,設(shè)置值加1,輸出值也加1的變化。連續(xù)單擊幾次加鍵,再單擊“減”鍵,也達到我想要的結(jié)果。單擊設(shè)置鍵,我輸入0200,即要求輸出為200mA的電流,單擊確認鍵,發(fā)現(xiàn)輸出值也達到了200mA。由于我選取的取樣電阻值為1歐,因此,我檢測的電壓值理論上就是輸出電流值。如圖23所示:圖23 Proteus仿真圖電路初始時,LCD初始顯示是輸入200ma,輸出200ma。在按下鍵盤的“加”鍵是,輸入顯示是201ma,說明步進是1ma,輸出顯示201ma,符合要求。按下鍵盤”減”鍵是,輸入顯示回200ma,輸出顯示20ma,符合要求。當輸入顯示在2000ma時,再按下“加”鍵,輸入和輸出還是2000ma;當輸入顯示在200ma時,再按下“減”鍵,輸入和輸出還是200ma;說明,輸出的范圍是200-2000ma的電流。按下“設(shè)置”鍵,在輸入0700,再按下“確認”和“恢復(fù)”鍵,輸入顯示700ma,輸出也顯示700ma,大設(shè)置輸出電流的目的。5.2 硬件調(diào)試5.2.1 單片機最小系統(tǒng)調(diào)試先查看電源,然后利用示波器測單片機ALE引腳,以晶振六分之一的固定頻率輸出脈沖,即為正常工作。如果正常,基本上就沒問題,就可以下載簡單的程序加以驗證了。5.2.2 鍵盤及液晶顯示調(diào)試為了直觀的測試鍵盤,我先調(diào)試了液晶顯示模塊,在液顯調(diào)通后,然后用鍵盤輸入進行調(diào)試,看鍵值是否正確。經(jīng)測試,鍵盤所有功能正常,顯示器也能正常工作。5.2.3 數(shù)模轉(zhuǎn)換與功放電路調(diào)試我直接編寫程序,并給定某個確定的數(shù)值,看轉(zhuǎn)換結(jié)果是否正確。若正確就可以接上功放電路進行功放電路的調(diào)試,甚至還可以改變程序中的定值,來看輸出是否恒流。由于時間和硬件的原因,這部分只是我在軟件調(diào)試上的方法。5.2.4 模數(shù)轉(zhuǎn)換電路調(diào)試對于這部分我采用電位器輸出接到芯片的模擬輸入端,將電位器可調(diào)的最大電壓接到AD芯片上的基準電壓,然后將轉(zhuǎn)換結(jié)果送到單片機I/O口,利用顯示器顯示出I/O口的值,旋動電位器,若將電位器調(diào)節(jié)輸出最小電壓,則顯示0,若調(diào)節(jié)電位器輸出最大電壓,則顯示4095(該芯片是12位模數(shù)轉(zhuǎn)換器),即說明該部分電路正常。5.2.5 存儲器電路調(diào)試存儲器芯片只要硬件連接不出錯,一般是不會出問題的。我使用的是C總線的串行存儲器24C02C,我只對硬件電路做了檢查。畢竟在軟件上,我已經(jīng)仿真成功。第六章 設(shè)計總結(jié)整個課設(shè)已經(jīng)完成了,這一個星期的努力終于有了成果,在這期間我收獲了許多。下面我對整個群課設(shè)的過程做一下簡單的總結(jié)。整個過程中,開始階段是最難得,因為要決定切入點,想好方案,如果開始階段做的不好會影響整個制作過程。所以,我已開始查找了很多資料,通過大量閱讀資料,在進行比較,最后選出最合適的方案。在這個過程中,我更加豐富了我的課外知識。同過查找各種芯片的功能,我更加加強了自己的閱讀芯片說明的能力。我只有對自己有了更高的要求,才能作為動力不斷取得新的成績!在整個設(shè)計過程中,使我懂得了許多東西,也培養(yǎng)了我獨立工作的能力,樹立了對自己工作能力的信心,相信會對今后的學(xué)習(xí)工作生活有非常重要的影響。參考文獻1、孫涵芳 徐愛卿.MCS51系列單片機原理.北京:北京航空航天大學(xué)出版社,20022、閻石 數(shù)字電子技術(shù)基礎(chǔ) 高等教育出版3、周雪. 模擬電子技術(shù)M. 西安: 西安電子科技大學(xué)出版社,2004.4、梅笙,李瑋. 基于AT89C52 控制的數(shù)控直流電流源的設(shè)計J . 電子測試,2007 (2) :19223.5、張毅剛.新編MCS-51單片機應(yīng)用設(shè)計M.哈爾濱:哈爾濱工業(yè)的出版社,20086、全國人學(xué)牛電子設(shè)計競賽組委會.全國人學(xué)牛電子設(shè)計競賽獲獎作品選編( 2003 ) M .北京:北京理工學(xué)出版社,2005.7、黃智偉.全國大學(xué)生電子設(shè)計競賽訓(xùn)練教程M.北京:電子上業(yè)出版社,2005.8、全國人學(xué)牛電子設(shè)計競賽組委會.全國人學(xué)牛電子設(shè)計競賽獲獎作品選編(第一屆一第五屆)M .北京:北京理_人學(xué)出版社,2004.9、趙東波,郭榮幸,趙雨斌.基于單片機的數(shù)控直流電流源設(shè)計與買現(xiàn)J.儀表技術(shù).200810、鐘乃元,高飛.量技術(shù).2007, 30 (9)大電流高精度恒流源fJl.電子測176一178.11、顧三春 仝迪.電子技術(shù)實驗.北京:化學(xué)工業(yè)出版社.200912、全國大學(xué)生電子設(shè)計競賽硬件電路設(shè)計.陳永真,韓梅,陳之勃.電子工業(yè)出版社.2009.413、感悟設(shè)計.王偉 編.北京航空航天大學(xué)出版社.2010.514、單片機原理課程設(shè)計 張一斌,余建坤,2009附錄AProtues電路仿真總原理圖:附錄B系統(tǒng)完整程序如下:#include<reg52.h>#include <intrins.h> #define uint unsigned int#define uchar unsigned char sbit lcdrs=P24;sbit lcde=P25; sbit keyda=P32;sbit adcs=P10;sbit adsclk=P11;sbit adout=P12;sbit dasync=P13;sbit dasclk=P14;sbit dadin=P15;sbit Sda=P16;sbit Scl=P17;uchar code dis1 = " INPUT mA "uchar code dis2 = " OUTPUT mA "uchar number4,number14;uint i,n,s,m; /n為鍵入允許標志控制,s為鍵入次數(shù)計數(shù)uint adata1,data2;/延時程序void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/作用:啟動IIC總線void Start() Sda=1;_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Sda=0;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;/停止IIC總線void Stop() Sda=0;_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Sda=1;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;/應(yīng)答IIC總線void Ack()Sda=0;_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;_nop_();_nop_();/非應(yīng)答IIC總線void NoAck()Sda=1;_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=0;_nop_();_nop_();/發(fā)送一個直字節(jié)void Send(uchar Data)uchar BitCounter=8;uchar temp;do temp=Data;Scl=0;_nop_();_nop_();_nop_();_nop_();_nop_();if(temp&0x80)=0x80)Sda=1;elseSda=0;Scl=1;temp=Data<<1;Data=temp;BitCounter-;while(BitCounter);Scl=0;/讀一個字節(jié)并返回uchar Read(void)uchar temp=0;uchar temp1=0;uchar BitCounter=8;Sda=1;doScl=0;_nop_();_nop_();_nop_();_nop_();_nop_();Scl=1;_nop_();_nop_();_nop_();_nop_();_nop_();if(Sda)temp=temp|0x01;elsetemp=temp&0xfe;if(BitCounter-1)temp1=temp<<1;temp=temp1;BitCounter-;while(BitCounter);return(temp);/寫入數(shù)據(jù)void WrToROM(uchar Data,uchar Address,uchar Num)uchar j;uchar *PData;PData=Data;for(j=0;j<Num;j+)Start();Send(0xa0);Ack();Send(Address+j); /寫入存儲地址Ack();Send(*(PData+j);/寫數(shù)據(jù)Ack();Stop();delay(10);/讀出數(shù)據(jù)void RdFromROM(uchar Data,uchar Address,uchar Num)uchar j;uchar *PData;PData=Data;for(j=0;j<Num;j+)Start();/寫入芯片地址Send(0xa0);Ack();Send(Address+j);/寫入存儲地址?Ack();Start();Send(0xa1);/讀入地址Ack();*(PData+j)=Read();/讀數(shù)據(jù)Scl=0;NoAck();Stop();/AD轉(zhuǎn)換uint ad_conver()uint voltage_temp=0;uchar ucloop=12;adcs=1;adsclk=0;adcs=0;while(adout=0);/EOC信號為高表示轉(zhuǎn)換結(jié)束adsclk=1;adsclk=0;while(ucloop-)adsclk=1;/上升沿數(shù)據(jù)穩(wěn)定并讀出voltage_temp<<=1;if(adout=1)voltage_temp+=1;adsclk=0;adcs=1;return voltage_temp;/DA轉(zhuǎn)換void da_conver(uint dignum)uint dig=0;uchar k=0;dasync=1;_nop_();_nop_();dasync=0;for(k=0;k<16;k+)dasclk=1;dig=dignum&0x8000;if(dig) dadin=1;else dadin=0;dasclk=0;_nop_();_nop_();dignum<<=1;dasync=1;_nop_();_nop_();/顯示器寫數(shù)據(jù)void write_date(uchar date)lcdrs=1;P0=date;delay(1);lcde=1;delay(1);/E 下降沿-執(zhí)行指令lcde=0;/顯示器寫程序void write_com(uchar com) lcdrs=0;P0=com;delay(1);lcde=1;delay(1);lcde=0;/數(shù)據(jù)顯示void xianshi(uchar z)int j;write_com(0x0c);/D2=1:開顯示;D1=0:不顯示光標;D0=0:光標不閃爍if(z=1)write_com(0x80+0x09);for(j=0;j<4;j+)write_date(numberj+0x30);if(z=2)write_com(0x80+0x49);for(j=0;j<4;j+)write_date(number1j+0x30);write_date(m);write_date(A);write_date( );/數(shù)據(jù)處理void chuli()float data3=0.0;data3=data2/2500.0*4095;adata1=(int)data3;adata1=adata1+m;da_conver(adata1);delay(200);adata1=ad_conver();data3=adata1/4095.0;data3=data3*2500;adata1=(uint)data3;number10=(adata1/1000)%10;number11=(adata1/100)%10;number12=(adata1/10)%10;number13=(adata1/1)%10;xianshi(2);if(adata1<data2) m+;if(adata1>data2) m-;if(adata1=data2) m=m;/lcd1602初始化void init()lcde=0;write_com(0x38);/8位數(shù)據(jù)端口,2行顯示,5*7點陣write_com(0x0f);/D2=1:開顯示;D1=1:顯示光標;D0=1:光標閃爍write_com(0x01);/清屏write_com(0x80);/設(shè)定地址指針在第一行第一個位置/輸出數(shù)組顯示void print(uchar *str)/while(*str!=0)write_date(*str);delay(5);str+;/清除上次輸入數(shù)據(jù)void clear()uint num;write_com(0x80+0x09);for(num=1;num<5;num+)write_date( );/確認鍵功能void queren()float data3=0.0;n=0;write_com(0x0c);/D2=1:開顯示;D1=0:不顯示光標;D0=0:光標不閃爍WrToROM(number,0,4);delay(5);data2=number0*1000+number1*100+number2*10+number3;data3=data2/2500.0*4095;adata1=(int)data3;da_conver(adata1);/取消鍵功能void quxiao()if(n=1&&s>1)write_com(0x04);/D1=0:地址光標減1;D0=0:整屏不移動write_com(0x10);/光標左移?write_date(?);i=i-1;s=s-1;write_com(0x06);/D1=1:地址光標加1;D0=0:整屏不移動write_com(0x14);/光標右移/設(shè)置鍵功能void shezhi()clear();n=1;i=0;s=1;write_com(0x80+0x09);write_com(0x0f);/D2=1:開顯示;D1=1:顯示光標;D0=1:光標閃爍write_com(0x06);/D1=1:地址光標加1;D0=0:整屏不移動/"+"鍵功能void jia()n=0;/data2=number0*1000+number1*100+number2*10+number3;if(data2>=200&&data2<2000)number3+;if(number3>9)number3=0;number2+;if(number2>9)number2=0;number1+;if(number1>9)number1=0;number0+;else number3=number3+0;write_com(0x0c);/D2=1:開顯示;D1=0:不顯示光標;D0=0:光標不閃爍xianshi(1);WrToROM(number,0,4);delay(5);data2=number0*1000+number1*100+number2*10+number3;/"-"鍵功能void jian()n=0;/data2=number0*1000+number1*100+number2*10+number3;if(data2>200&&data2<=2000)if(number3=0)number3=9;if(number2=0)number2=9;if(number1=0)number1=9;number0-;else number1-;else number2-;else number3-;else number3=number3-0;write_com(0x0c);/D2=1:開顯示;D1=0:不顯示光標;D0=0:光標不閃爍xianshi(1);WrToROM(number,0,4);delay(5);data2=number0*1000+number1*100+number2*10+number