電子設(shè)計大賽論文_第1頁
電子設(shè)計大賽論文_第2頁
電子設(shè)計大賽論文_第3頁
電子設(shè)計大賽論文_第4頁
電子設(shè)計大賽論文_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

目錄0摘要--------------------------------------------------------21設(shè)計任務(wù)與要求----------------------------------------------21.1設(shè)計任務(wù)-----------------------------------------------21.2根本電壓-----------------------------------------------21.3發(fā)揮局部-----------------------------------------------22系統(tǒng)方案論證------------------------------------------------23系統(tǒng)設(shè)計與理論分析------------------------------------------23.1核心模塊TMS320DSP芯片---------------------------------23.2數(shù)模轉(zhuǎn)換模塊-------------------------------------------33.3基準(zhǔn)電壓源模塊-----------------------------------------33.4模數(shù)轉(zhuǎn)換模塊-------------------------------------------43.5485通信模塊-------------------------------------------53.6顯示模塊-----------------------------------------------64系統(tǒng)調(diào)試----------------------------------------------------74.1調(diào)試儀器儀表-------------------------------------------74.2調(diào)試及分析---------------------------------------------74.3誤差分析-----------------------------------------------75設(shè)計總結(jié)----------------------------------------------------86元件清單----------------------------------------------------87參考文獻(xiàn)----------------------------------------------------98程序清單----------------------------------------------------100、摘要:本系統(tǒng)以DSP芯片為核心,控制過程是DSP接收數(shù)據(jù)并送入DA電路,利用AD820作為比擬器,正端接D/A輸出,負(fù)端接地,反應(yīng)輸出接AD采樣,失調(diào)電壓調(diào)零,輸出形成閉環(huán)回路,通過AD轉(zhuǎn)換電路將實(shí)際值采回DSP,由DSP進(jìn)展運(yùn)算,得輸入值與采回值之差即誤差,輸出結(jié)果通過12864液晶屏顯示。系統(tǒng)通過LM4050為A/D,D/A提供基準(zhǔn)電壓,使系統(tǒng)具有較高的可靠性。采用的DSP減少了由運(yùn)放產(chǎn)生的非線性誤差。關(guān)鍵字:信號發(fā)生器TMS320DSP芯片基準(zhǔn)電源芯片LM40501、設(shè)計任務(wù)與要求1.1設(shè)計任務(wù):設(shè)計出有一定輸出電壓圍高精度毫伏信號發(fā)生器,并能夠檢測其輸出精度1.2根本要求〔1〕輸出電壓:圍0~+1V,步進(jìn)0.5mV;具有輸出電壓值〔測量值〕顯示功能;由“+〞、“-〞兩鍵分別控制輸出電壓步進(jìn)增減;〔2〕具備485通訊能力,波特率可設(shè)置,即4800、9600、19200、38400、56000、57600、115200bps可設(shè)置;〔3〕能顯示設(shè)定值與實(shí)際值及其誤差。1.3發(fā)揮局部〔1〕輸出電壓:圍0~+2V,步進(jìn)0.1mV;指定輸出圍任意電壓值;〔2〕能提高精度模擬J型熱電偶分度簡表〔見附表〕輸出〔輸入溫度后,自動輸出電壓值〕;〔3〕檢測局部可單獨(dú)成為電壓測量模塊,測量圍、精度參考電壓輸出局部;系統(tǒng)方案論證用DSP作為核心芯片,輸出的數(shù)字信號由D/A轉(zhuǎn)換成模擬信號,再經(jīng)由A/D采回芯片部形成反應(yīng)。利用LM4050提供基準(zhǔn)電壓,7809穩(wěn)定基準(zhǔn)電壓源的輸出電壓,UA741做電壓跟隨器使其工作穩(wěn)定。為了使其工作更加準(zhǔn)確,需要再加一個AD820作為比擬器來減小非線性誤差。而與單片機(jī)相比,DSP器件具有較高的集成度。DSP具有更快的CPU,更大容量的存儲器,置有波特率發(fā)生器和FIFO緩沖器。提供高速、同步串口和標(biāo)準(zhǔn)異步串口。有的片集成了A/D和采樣/保持電路,可提供PWM輸出。DSP器件采用改良的哈佛構(gòu)造,具有獨(dú)立的程序和數(shù)據(jù)空間,允許同時存取程序和數(shù)據(jù)。置高速的硬件乘法器,增強(qiáng)的多級流水線,使DSP器件具有高速的數(shù)據(jù)運(yùn)算能力。DSP器件比16位單片機(jī)單指令執(zhí)行時間快8~10倍,完成一次乘加運(yùn)算快16~30倍。系統(tǒng)設(shè)計與理論分析3.1核心模塊TMS320DSP芯片DSP是一種獨(dú)特的微處理器,是以數(shù)字信號來處理大量信息的器件。其工作原理是接收模擬信號,轉(zhuǎn)換為0或1的數(shù)字信號。再對數(shù)字信號進(jìn)展修改、刪除、強(qiáng)化,并在其他系統(tǒng)芯片中把數(shù)字?jǐn)?shù)據(jù)解譯回模擬數(shù)據(jù)或?qū)嶋H環(huán)境格式。DSP微處理器一般具有如下主要特點(diǎn):〔1〕在一個指令周期可完成一次乘法和一次加法;程序和數(shù)據(jù)空間分開,可以同時訪問指令和數(shù)據(jù);片具有快速RAM,通??赏ㄟ^獨(dú)立的數(shù)據(jù)總線在兩塊中同時訪問;具有低開銷或無開銷循環(huán)及跳轉(zhuǎn)的硬件支持;快速的中斷處理和硬件I/O支持;具有在單周期操作的多個硬件地址產(chǎn)生器;可以并行執(zhí)行多個操作;支持流水線操作,使取指、譯碼和執(zhí)行等操作可以重疊執(zhí)行。3.2數(shù)模轉(zhuǎn)換模塊D/A轉(zhuǎn)換電路如下圖,通過AD5541芯片實(shí)現(xiàn)將數(shù)字量轉(zhuǎn)換為模擬量,送給電壓比擬器。該電路通過LM4050提供基準(zhǔn)電壓源,UA741做電壓跟隨器,使電壓穩(wěn)定。AD820作為比擬器,正端接D/A輸出,負(fù)端接地,反應(yīng)輸出接AD采樣,失調(diào)電壓調(diào)零,輸出形成閉環(huán)回路,減少由運(yùn)放產(chǎn)生的非線性誤差,由DSP進(jìn)展運(yùn)算。算法:輸出值=(D/65535)*REF,其中D為載入DAC代碼。D/A轉(zhuǎn)換電路3.2.2AD5541芯片AD5541為單通道、16位、串行輸入、電壓輸出數(shù)模轉(zhuǎn)換器(DAC),采用5V±10%單電源供電。AD5541采用多功能三線式接口,并且與SPI、QSPI?、MICROWIRE?、DSP接口標(biāo)準(zhǔn)兼容。這些DAC可提供16位性能,無需進(jìn)展任何調(diào)整。DAC輸出不經(jīng)過緩沖,可降低功耗,并減少輸出緩沖所造成的失調(diào)誤差。3.3基準(zhǔn)電壓源模塊LM4050芯片LM4050/是精細(xì)的二端、并聯(lián)模式、帶隙電壓基準(zhǔn),具有多種固定反向擊穿電壓:1.225V、2.048V、2.500V、3.000V、3.3V、4.096V和5.000V。LM4050/LM4051采用超小型、3引腳SC70表貼封裝(1.8mm*1.8mm),比采用SOT23表貼封裝的同類器件縮小了50%。如下圖電路,即為基準(zhǔn)電壓電路,它為A/D模塊,D/A模塊提供穩(wěn)定的基準(zhǔn)電壓。對電路穩(wěn)定性起著至關(guān)重要的作用?;鶞?zhǔn)電壓模塊電路UA741芯片如下圖,UA741是高增益運(yùn)算放大器這類單片硅集成電路器。件提供輸出短路保護(hù)和閉鎖自由運(yùn)作。這些類型還具有廣泛的共同模式,差模信號圍和低失調(diào)電壓調(diào)零能力與使用適當(dāng)?shù)碾娢弧?和5為偏置(調(diào)零端),2為正向輸入端,3為反向輸入端,4接地,6為輸出,7接電源8空腳3.4模數(shù)轉(zhuǎn)換模塊3.4.1ADS8320芯片AD8320其特點(diǎn)及功能:ADS8320是Burr-Brown公司生產(chǎn)的逐次逼近式串行16位微功耗CMOS型高速A/D轉(zhuǎn)換器,它的線性度為±0.05%,工作電源在2.7V~5.25V圍,采樣頻率最高可達(dá)100kHz;在2.7V供電和100kHz采樣速率下,其功耗僅為1.8mW,而在10kHz低速采樣時的功耗僅為0.3mW;在非轉(zhuǎn)換狀態(tài)時可處于關(guān)閉模式,此時功耗可低至100μW;ADS8320具有同步串行SPI/SSI接口,因而占用微處理器的端口較少;其差動輸入信號圍為500mV~VCC(工作電源);采用8引腳MSOP小體積封裝算法:送入DSP芯片的數(shù)值=〔輸入的模擬值/REF〕*65535A/D轉(zhuǎn)換電路3.4.2AD820芯片AD820是一款精細(xì)、低功耗、FET輸入運(yùn)算放大器,可以采用5V至36V單電源或±2.5V至±18V雙電源供電。該放大器具有單電源供電能力,輸入電壓圍可擴(kuò)展至負(fù)供電軌以下,因此在單電源模式下可以處理地電壓以下的輸入信號。輸出電壓擺幅可擴(kuò)展至各供電軌10mV以,以提供最大的輸出動態(tài)圍。直流精度性能包括最大800μV的失調(diào)電壓、2μV/°C的失調(diào)電壓漂移、小于25pA的典型輸入偏置電流以及低輸入電壓噪聲,源阻抗最高可達(dá)1GΩ。單位增益帶寬為1.8MHz,10kHz時總諧波失真(THD)為?93dB,壓擺率為3V/μs,電源電流低至800μA。AD820可直接驅(qū)動最高350pF的容性負(fù)載,并可提供最低15mA的輸出電流。因此,該放大器能夠處理各種負(fù)載情況。AD820在A/D轉(zhuǎn)換電路中有電壓跟隨器的作用。3.5485通信模塊ma*485芯片MA*485是用于RS-485與RS-422通信的低功耗收發(fā)器。MA*485的驅(qū)動器擺率不受限制,可以實(shí)現(xiàn)最高2.5Mbps的傳輸速率。這些收發(fā)器在驅(qū)動器禁用的空載或滿載狀態(tài)下,吸取的電源電流在120μA至500μA之間。所有器件都工作在5V單電源下。驅(qū)動器具有短路電流限制,并可以通過熱關(guān)斷電路將驅(qū)動器輸出置為高阻狀態(tài)。接收器輸入具有失效保護(hù)特性,當(dāng)輸入開路時,可以確保邏輯高電平輸出。具有較高的抗干擾性能。MA*485是市面上最為常見的RS422芯片,亦是用量最大的RS422芯片,性價比高,優(yōu)質(zhì),供貨穩(wěn)定是大局部廠家采用MA*485接口芯片是Ma*im公司的一種RS-485芯片。MA*485芯片的構(gòu)造和引腳都非常簡單,部含有一個驅(qū)動器和接收器。RO和DI端分別為接收器的輸出和驅(qū)動器的輸入端,與單片機(jī)連接時只需分別與單片機(jī)的R*D和T*D相連即可;/RE和DE端分別為接收和發(fā)送的使能端,當(dāng)/RE為邏輯0時,器件處于接收狀態(tài);當(dāng)DE為邏輯1時,器件處于發(fā)送狀態(tài),因?yàn)镸A*485工作在半雙工狀態(tài),所以只需用單片機(jī)的一個管腳控制這兩個引腳即可;A端和B端分別為接收和發(fā)送的差分信號端,當(dāng)A引腳的電平高于B時,代表發(fā)送的數(shù)據(jù)為1;當(dāng)A的電平低于B端時,代表發(fā)送的數(shù)據(jù)為0。在與單片機(jī)連接時接線非常簡單。只需要一個信號控制MA*485的接收和發(fā)送即可。同時將A和B端之間加匹配電阻,一般可選100Ω的電阻。MA*引腳(管腳)圖及工作電路MA*232芯片第一局部是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供應(yīng)RS-232串口電平的需要。第二局部是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。其中13腳〔R1IN〕、12腳〔R1OUT〕、11腳〔T1IN〕、14腳〔T1OUT〕為第一數(shù)據(jù)通道。8腳〔R2IN〕、9腳〔R2OUT〕、10腳〔T2IN〕、7腳〔T2OUT〕為第二數(shù)據(jù)通道。TTL/CMOS數(shù)據(jù)從T1IN、T2IN輸入轉(zhuǎn)換成RS-232數(shù)據(jù)從T1OUT、T2OUT送到電腦DB9插頭;DB9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2OUT輸出。第三局部是供電。15腳GND、16腳VCC〔+5v〕。3.5.3485串口通信電路串口電路3.6顯示模塊顯示電路采用12864液晶屏,該點(diǎn)陣的屏顯本錢相對較低,適用于各類儀器,小型設(shè)備的顯示領(lǐng)域。液晶屏連線方式4、系統(tǒng)調(diào)試4.1調(diào)試儀器儀表儀器名稱型號數(shù)量雙通道示波器RIG—OL1數(shù)字萬用表UT5214.2調(diào)試及分析首先,把DA和AD的基準(zhǔn)電壓源調(diào)到兩伏,然后滿量程輸出的值就應(yīng)該是2伏,而實(shí)際上我們得到的是1.89伏,原因是因?yàn)镈A的輸出有漂移,DSP把數(shù)字信號送給DA5541,DA輸出模擬信號,經(jīng)過ADS8320輸出模擬信號,整個過程,為了使輸出的電壓更加穩(wěn)定,參加了AD820作為電壓跟隨器,利用它的輸入阻抗高,輸出阻抗低的特點(diǎn),同時通過減法器使實(shí)測電壓緩慢的接近輸入電壓值,通過驗(yàn)證,AD采回的數(shù)值偏高,這樣我們又參加ua741電壓跟隨器來調(diào)整基準(zhǔn)電壓的輸出,最后調(diào)整到輸入電壓值和實(shí)測電壓值偏差接近0.2毫伏之,最后把基準(zhǔn)電壓確定在2.0伏,然后通過萬用表和示波器測量出AD樣值和AD的輸出值通過LCD12864液晶屏將輸入電壓和實(shí)測電壓顯示出來,誤差接近0.1毫伏,通過按鍵調(diào)整波特率,同時使輸入電壓步進(jìn)0.1毫伏,這樣反復(fù)通過AD820減法器使實(shí)測電壓值接近輸入值,這樣就到達(dá)了本實(shí)驗(yàn)的要求和目的。4.3誤差分析造成誤差的原因有(1)零點(diǎn)漂移:由于運(yùn)算放大器的零點(diǎn)漂移,溫度漂移等帶來的誤差,可以通過溫度補(bǔ)償措施來解決此誤差。A/D,D/A轉(zhuǎn)換誤差:受AD轉(zhuǎn)換器精度及基準(zhǔn)源穩(wěn)定程度的限制,不可防止地帶來一定的誤差。為了更準(zhǔn)確的輸出電源電壓,選用更多位數(shù)的AD,DA芯片。因外界突發(fā)干擾或儀表顯示值等引起的隨機(jī)誤差或粗大誤差。采樣電阻自熱效應(yīng)引起的誤差:由于電阻在溫度上升時阻值會發(fā)生變化,因此會引起溫度飄移,給系統(tǒng)帶來測量的誤差。設(shè)計總結(jié)直流毫伏信號發(fā)生器可以實(shí)現(xiàn)如下功能:〔1〕輸出電壓:圍0~+1V,步進(jìn)0.5mV;具有輸出電壓值〔測量值〕顯示功能;由“+〞、“-〞兩鍵分別控制輸出電壓步進(jìn)增減;〔2〕具備485通訊能力,波特率可設(shè)置,即4800、9600、19200、38400、56000、57600、115200bps可設(shè)置;〔3〕能顯示設(shè)定值與實(shí)際值及其誤差。本設(shè)計制作完成了題目要求的根本局部的全部要求和發(fā)揮局部的大局部要求,而且局部功能大大高于發(fā)揮局部的要求。目前,在電子儀器,設(shè)備中經(jīng)常要用到直流毫伏信號發(fā)生器,有時要求應(yīng)具有良好的穩(wěn)定性,而且精度較高。該設(shè)計完全符合了這些要求,如果再經(jīng)過構(gòu)造優(yōu)化,將具有良好的市場前景。通過本次電子設(shè)計大賽的學(xué)習(xí),對DSP的應(yīng)用有了根本的了解,對DSP軟件編程及調(diào)試有了根本的掌握。這對我們來說是一個質(zhì)的提高。在本次設(shè)計大賽的過程中,我們的團(tuán)隊(duì)精神表達(dá)了重要的作用。元件清單TMS320F2812PGF芯片一片AD5541芯片一片12864液晶屏一塊LM4050芯片一片AD820芯片二片ADS8320芯片一片UA741芯片一片MA*485芯片一片MA*232芯片一片膽電容一個開關(guān)四個三端穩(wěn)壓器7805,AS2830各一片電阻,電容,導(dǎo)線假設(shè)干7、參考文獻(xiàn):[1]全國大學(xué)生電子設(shè)計設(shè)計競賽組委員會.全國大學(xué)生電子設(shè)計競賽訓(xùn)練教程[M].電子工業(yè),2005年[2]全國大學(xué)生電子設(shè)計設(shè)計競賽組委員會.全國大學(xué)生電子設(shè)計競賽獲獎作品匯編〔第一屆~第五屆〕[M].理工大學(xué),2004年[3]模擬電子技術(shù)根底.童詩白,華成英主編[4]現(xiàn)代電力電子器件原理與應(yīng)用.機(jī)械工業(yè)[5]TMS320*28***原理與開發(fā).奎峰編8、程序清單//BUSLCD*include"DSP281*_Device.h"http://DSP281*HeaderfileIncludeFile*include"DSP281*_E*amples.h"http://DSP281*E*amplesIncludeFile*include"LED.C"http://****************************************************//定義區(qū)unsignedintvalue;unsignedcharADVAL[8]={'*','.','*','*','*','*','\0'};unsignedcharADVAL_err[8]={'0','.','0','0','0','0','','\0'};unsignedintkey=0*4E20;unsignedcharkey_baud=0*00;unsignedintkey_value=0*0000;charkey_false=0*00;//*****************************************************defineAVG10//Averagesamplelimit*defineBUF_SIZE10//SamplebuffersizeUint16Sample_AD=0*0000;Uint16SampleTable[BUF_SIZE];Uint32Sample=0,Sample_AVG=0;//SCI發(fā)送接收數(shù)據(jù)中間變量Uint16sdataB[16];//SenddataforSCI-AUint16rdataB[8];//ReceiveddataforSCI-AUint16rdata_pointB;//Usedforcheckingthereceiveddata//****************************************************unsignedcharbaud_disp[8]={'4','8','0','0','','','\0'};unsignedcharbaud_disp1[8]={'9','6','0','0','','','\0'};unsignedcharbaud_disp2[8]={'1','9','2','0','0','','\0'};unsignedcharbaud_disp3[8]={'3','8','4','0','0','','\0'};unsignedcharbaud_disp4[8]={'5','6','0','0','0','','\0'};unsignedcharbaud_disp5[8]={'5','7','6','0','0','','\0'};unsignedcharbaud_disp6[8]={'1','1','5','2','0','0','\0'};unsignedcharnumber_tab[]={'0','1','2','3','4','5','6','7','8','9'};//***********************************************//***********************************************//波特率設(shè)定首位高字節(jié),二位低字節(jié)//SCI_PRD[14]={4800,9600,19200,38400,56000,57600,115200};unsignedcharSCI_PRD[14]={0*03,0*CF,0*01,0*E7,0*00,0*F3,0*00,0*79,0*00,0*52,0*00,0*50,0*00,0*27};voidinitlcm(void);//初始化LCMvoidsendCMD(chardat);//寫控制指令voidsendDAT(chardat);//寫顯示數(shù)據(jù);也可以寫一個單字節(jié)字符voiddisplay(char*_add,chardat,chardat1);//寫漢字到LCD屏指定位置voiddelay(unsignedintt);//****************************************************//SCI函數(shù)聲明FIFO模式interruptvoidscibT*FifoIsr(void);interruptvoidscibR*FifoIsr(void);interruptvoidcpu_timer0_isr(void);voidscib_fifo_init(void);voiddelay_ad(void);//****************************************************//****************************************************Uint16spi_data=0*0000;//senddatavoiddelay_loop(void);voidspi_*mit(Uint16a);voidspi_fifo_init(void);voidspi_init(void);voiderror(void);//****************************************************//發(fā)送半角數(shù)字和字母字符串//*p為字符串指針//amount所發(fā)送字符串的最大數(shù)量voidchar_string(unsignedchar*p,unsignedcharamount);unsignedchartitle[]={"輸入電壓"};//標(biāo)題unsignedchartitle1[]={"實(shí)測電壓"};//標(biāo)題unsignedchartitle2[]={"輸入波特率"};//標(biāo)題unsignedchartitle3[]={"實(shí)際偏差"};//標(biāo)題///////////////////////////////////////////////voiddelay(unsignedintt){ while(t>0) t--;}//**************************************************voidsendBYTE(chardat)//串行傳送一字節(jié)數(shù)據(jù){chari;GpioMu*Regs.GPBDIR.all|=SID;for(i=0;i<8;i++){delay(1000);GpioDataRegs.GPBDAT.all&=~SCK;//SCK=0if((dat&0*80)!=0)GpioDataRegs.GPBDAT.all|=SID;//SID=1elseGpioDataRegs.GPBDAT.all&=~SID;//SID=0GpioDataRegs.GPBDAT.all|=SCK;//SCK=1;dat=dat<<1;}}//****************************************************//如果需要改變半字地址,也是用此程序.只需輸入地址就可以.voidsendCMD(chardat)//寫控制指令{sendBYTE(0*f8);sendBYTE(dat&0*f0);sendBYTE((dat<<4)&0*f0);}//****************************************************voidsendDAT(chardat)//寫顯示數(shù)據(jù);也可以寫一個單字節(jié)字符{sendBYTE(0*fa);sendBYTE(dat&0*f0);sendBYTE((dat<<4)&0*f0);}//****************************************************voiddisplay(char*_add,chardat,chardat1)//寫漢字到LCD屏指定位置//*_add顯示RAM地址//dat/dat1顯示漢字編碼{sendCMD(*_add);sendDAT(dat);sendDAT(dat1);}//*****************************************************voidinitlcm(void)//初始化LCM{delay(1000);GpioMu*Regs.GPBDIR.all|=SCK;//SCK設(shè)為輸出sendCMD(0*30);//功能設(shè)置:一次送8位數(shù)據(jù),根本指令集sendCMD(0*04);//點(diǎn)設(shè)定:顯示字符/光標(biāo)從左到右移位,DDRAM地址加一sendCMD(0*0f);//顯示設(shè)定:開顯示,顯示光標(biāo),當(dāng)前顯示位反白閃動sendCMD(0*0f);//顯示設(shè)定:開顯示,顯示光標(biāo),當(dāng)前顯示位反白閃動sendCMD(0*01);//清DDRAMsendCMD(0*02);//*DDRAM地址歸位}//****************************************************//發(fā)送半角數(shù)字和字母字符串//*p為字符串指針//*_add所要顯示的地址voidchar_string(unsignedchar*p,unsignedchar*_add){unsignedcharn;if((*_add>=GM12232_MINADD_L1)&&(*_add<GM12232_MA*ADD_L1)){sendCMD(*_add);for(n=0;p[n]!='\0';n++){sendDAT(p[n]);}}elseif((*_add>=GM12232_MINADD_L2)&&(*_add<GM12232_MA*ADD_L2)){sendCMD(*_add);for(n=0;p[n]!='\0';n++){sendDAT(p[n]);}}elseif((*_add>=GM12232_MINADD_L3)&&(*_add<GM12232_MA*ADD_L3)){sendCMD(*_add);for(n=0;p[n]!='\0';n++){sendDAT(p[n]);}}elseif((*_add>=GM12232_MINADD_L4)&&(*_add<GM12232_MA*ADD_L4)){sendCMD(*_add);for(n=0;p[n]!='\0';n++){sendDAT(p[n]);}}elsereturn;}//說明:實(shí)驗(yàn)標(biāo)題1,應(yīng)用單實(shí)形式發(fā)送.voidsend_title()//標(biāo)題顯示{sendCMD(DDRAM_0);//DDRAMsendCMD(off_cursor);//關(guān)光標(biāo)}//****************************************************//說明:單片機(jī)初始化voidinit(void){initlcm();//LCD初始化char_string(title,LCD_L11);//發(fā)送本實(shí)驗(yàn)標(biāo)題1char_string(title1,LCD_L21);//發(fā)送本實(shí)驗(yàn)標(biāo)題1char_string(title2,LCD_L31);//發(fā)送本實(shí)驗(yàn)標(biāo)題1char_string(title3,LCD_L41);//發(fā)送本實(shí)驗(yàn)標(biāo)題1char_string(baud_disp,LCD_L36);send_title();//發(fā)送本實(shí)驗(yàn)標(biāo)題2sendCMD(off_cursor);//關(guān)光標(biāo)}//****************************************************//說明:數(shù)值轉(zhuǎn)換voidconv(unsignedintintdata,unsignedchar*pc,unsignedcharset_or_ad)//set=0*00,ad=0*01{unsignedinta,b,c,d;if(0*00==set_or_ad){sdataB[0]=0*41;sdataB[1]=ADVAL[0]=number_tab[intdata/10000];a=intdata%10000;sdataB[2]=ADVAL[2]=number_tab[a/1000];b=a%1000;sdataB[3]=ADVAL[3]=number_tab[b/100];c=b%100;sdataB[4]=ADVAL[4]=number_tab[c/10];d=c%10;sdataB[5]=ADVAL[5]=number_tab[d/1];sdataB[6]=0*30;sdataB[7]=0*30;pc[0]=ADVAL[0];pc[1]='.';pc[2]=ADVAL[2];pc[3]=ADVAL[3];pc[4]=ADVAL[4];pc[5]=ADVAL[5];pc[6]='\0';}if(0*01==set_or_ad){sdataB[8]=0*42;sdataB[9]=ADVAL[0]=number_tab[intdata/10000];a=intdata%10000;sdataB[10]=ADVAL[2]=number_tab[a/1000];b=a%1000;sdataB[11]=ADVAL[3]=number_tab[b/100];c=b%100;sdataB[12]=ADVAL[4]=number_tab[c/10];d=c%10;sdataB[13]=ADVAL[5]=number_tab[d/1];sdataB[14]=0*30;sdataB[15]=0*30;pc[0]=ADVAL[0];pc[1]='.';pc[2]=ADVAL[2];pc[3]=ADVAL[3];pc[4]=ADVAL[4];pc[5]=ADVAL[5];pc[6]='\0';}if(0*02==set_or_ad){intdata=abs((float)key-Sample_AD);ADVAL[0]=number_tab[intdata/10000];a=intdata%10000;ADVAL[2]=number_tab[a/1000];b=a%1000;ADVAL[3]=number_tab[b/100];c=b%100;ADVAL[4]=number_tab[c/10];d=c%10;ADVAL[5]=number_tab[d/1];pc[0]=ADVAL[0];pc[1]='.';pc[2]=ADVAL[2];pc[3]=ADVAL[3];pc[4]=ADVAL[4];pc[5]=ADVAL[5];pc[6]='\0';}}//****************************************************unsignedintDA_OUT(void){floatvol_const=3.27675;floatkey_voltage;unsignedintkey_vol;key_voltage=(float)key;key_voltage*=vol_const; spi_data=key_voltage;}voiddelay_ad(void){unsignedinti,j;for(i=0;i<6;i++){for(j=0;j<10;j++);}}Uint16ads8320(void){unsignedinti,da=0*0000;GpioDataRegs.GPADAT.bit.GPIOA0=1;GpioDataRegs.GPADAT.bit.GPIOA1=1;delay_ad();GpioDataRegs.GPADAT.bit.GPIOA0=0;GpioDataRegs.GPADAT.bit.GPIOA1=1;delay_ad();while(1){GpioDataRegs.GPADAT.bit.GPIOA1=1;delay_ad();if(GpioDataRegs.GPADAT.bit.GPIOA2==0) break; GpioDataRegs.GPADAT.bit.GPIOA1=0; delay_ad();}for(i=0;i<0*10;i++){GpioDataRegs.GPADAT.bit.GPIOA1=1; delay_ad(); if(GpioDataRegs.GPADAT.bit.GPIOA2==0) da=da<<1; else { da=da|0*0001; da=da<<1; } GpioDataRegs.GPADAT.bit.GPIOA1=0; delay_ad();}GpioDataRegs.GPADAT.bit.GPIOA0=1;delay_ad();return(da);}voidAD_SUM_AVG(void){unsignedinti=0;floataF=0.9;staticfloatSample_AVG_fst=0.0;Sample=0;for(i=0;i<AVG;i++){SampleTable[i]=ads8320();Sample=Sample+SampleTable[i];} Sample_AVG=Sample/AVG;Sample_AVG=(1-aF)*Sample_AVG+aF*Sample_AVG_fst;Sample_AD=Sample_AVG*0.327675;Sample_AVG_fst=Sample_AVG;}voidmain(void){ InitSysCtrl(); //初始化系統(tǒng)//初始化系統(tǒng)時鐘,系統(tǒng)時鐘150M,低俗時鐘37.5M,翻開外設(shè)時鐘SPI控制37.5M EALLOW; SysCtrlRegs.PCLKCR.bit.SPIENCLK=0*01; EDIS; //****************************************************//初始化GPIOF,設(shè)定SPI外設(shè)控制EALLOW;GpioMu*Regs.GPFMU*.all=0*000F; //SelectGPIOstobeSPIpins//PortFMU*-*000000000001111EDIS; //初始化GPIOA,設(shè)定GPA0為AD8320的CS,GPA1為SCK,GPA2為DoutEALLOW;GpioMu*Regs.GPAMU*.all=0*0000;//GPIOI/OsGpioMu*Regs.GPADIR.all=0*FFFB;//GPIODIRselectGPIOsasoutput GpioDataRegs.GPADAT.bit.GPIOA0=1;//ads8320--cs GpioDataRegs.GPADAT.bit.GPIOA1=1;//ads8320--clkEDIS; //初始化SCI,GP4為T*D,GP5為R*DEALLOW;GpioMu*Regs.GPGMU*.bit.SCIT*DB_GPIOG4=1;GpioMu*Regs.GPGMU*.bit.SCIR*DB_GPIOG5=1;EDIS; //初始化GPIOB,設(shè)定低四位為按鍵輸入EALLOW;GpioMu*Regs.GPBMU*.all=0*0000;//peripheralI/OsGpioMu*Regs.GPBDIR.all=0*FF00;//GPIODIRselectGPIOsasoutputEDIS; //**************************************************** //**************************************************** DINT; //關(guān)閉中斷 IER=0*0000; IFR=0*0000; //****************************************************InitPieCtrl(); //初始化PIE控制存放器 InitPieVectTable(); //初始化PIE參數(shù)表init();//初始化液晶顯示//****************************************************EALLOW; //ThisisneededtowritetoEALLOWprotectedregistersPieVectTable.R*BINT=&scibR*FifoIsr;PieVectTable.T*BINT=&scibT*FifoIsr;EDIS;//ThisisneededtodisablewritetoEALLOWprotectedregisters//****************************************************scib_fifo_init();//InitSCI-Bspi_fifo_init(); //InitializetheSpiFIFOspi_init(); //initSPI//****************************************************//Enableinterruptsrequiredforthise*amplePieCtrlRegs.PIECRTL.bit.ENPIE=1;//EnablethePIEblockPieCtrlRegs.PIEIER9.bit.INT*3=1;//PIEGroup9,INT1PieCtrlRegs.PIEIER9.bit.INT*4=1;//PIEGroup9,INT2//****************************************************//PieCtrlRegs.PIEIER6.bit.INT*1=1;//EnablePIEGroup6,INT1//PieCtrlRegs.PIEIER6.bit.INT*2=1;//EnablePIEGroup6,INT2EINT;//****************************************************EALLOW;GpioDataRegs.GPADAT.bit.GPIOA1=1;GpioDataRegs.GPADAT.bit.GPIOA0=0;EDIS;//****************************************************EALLOW; PieVectTable.TINT0=&cpu_timer0_isr;//將CPU定時器0的中斷效勞程序入口地址寫到PIE向量表中 EDIS; InitCpuTimers(); ConfigCpuTimer(&CpuTimer0,150,250000); PieCtrlRegs.PIEIER1.bit.INT*7=1;//使能PIE中組1的第7個中斷TINT0-PIE級中斷使能IER=0*121; //EnableCPUINT CpuTimer0Regs.TCR.bit.TSS=0;//停頓定時器0的運(yùn)行//****************************************************while(1) { Uint16i; AD_SUM_AVG(); DA_OUT();spi_*mit(spi_data); char_string(title,LCD_L11);//發(fā)送本實(shí)驗(yàn)標(biāo)題1_輸入電壓char_string(title1,LCD_L21);//發(fā)送本實(shí)驗(yàn)標(biāo)題2_實(shí)測電壓char_string(title2,LCD_L31);//發(fā)送本實(shí)驗(yàn)標(biāo)題3_輸入波特率 conv(Sample_AD,ADVAL,0*01);//數(shù)據(jù)轉(zhuǎn)換調(diào)用char_string(ADVAL,LCD_L25);//發(fā)送實(shí)測電壓值 for(i=0;i<500;i++) { delay(5000); } conv(key,ADVAL,0*00);//數(shù)據(jù)轉(zhuǎn)換調(diào)用 char_string(ADVAL,LCD_L15);//發(fā)送輸入電壓值 for(i=0;i<500;i++) { delay(5000); } conv(key_false,ADVAL_err,0*02);//數(shù)據(jù)轉(zhuǎn)換調(diào)用 char_string(ADVAL_err,LCD_L45);//發(fā)送實(shí)測電壓值 for(i=0;i<500;i++) { delay(5000); } }} interruptvoidcpu_timer0_isr(void){staticcharkey4=0*00;CpuTimer0Regs.TCR.bit.TSS=1;//關(guān)閉定時器 key_value=GpioDataRegs.GPBDAT.all; if((key_value&BIT3)==BIT3) { key4=key4^0*01; }if(((key_value&BIT0)==BIT0)&&(key4==0*01))//輸入減1{ if(key==0*0000) {key=0*0000;} else key--;}if(((key_value&BIT1)==BIT1)&&(key4==0*01))//輸入加1 { if(key==0*4E20) {key=0*4E20;}else key++; }//****************************************************if((key_value&BIT2)==BIT2)//波特率設(shè)定{ CpuTimer0Regs.TCR.bit.TSS=1;//關(guān)閉定時器key_baud++; if(key_baud==0*07) {key_baud=0*00;}switch(key_baud){case0:char_string(baud_disp,LCD_L36);ScibRegs.SCIHBAUD=SCI_PRD[0];ScibRegs.SCILBAUD=SCI_PRD[1];break;//顯示波特率4800 case1: char_string(baud_disp1,LCD_L36); ScibRegs.SCIHBAUD=SCI_PRD[2];ScibRegs.SCILBAUD=SCI_PRD[3]; break;//顯示波特率9600 case2: char_string(baud_disp2,LCD_L36); ScibRegs.SCIHBAUD=SCI_PRD[4];ScibRegs.SCILBAUD=SCI_PRD[5]; break; case3: char_string(baud_disp3,LCD_L36); ScibRegs.SCIHBAUD=SCI_PRD[6];ScibRegs.SCILBAUD=SCI_PRD[7]; break;//顯示波特率38400 case4: ScibRegs.SCIHBAUD=SCI_PRD[8];ScibRegs.SCILBAUD=SCI_PRD[9]; char_string(baud_disp4,LCD_L36); break;//顯示波特率56000 case5: ScibRegs.SCIHBAUD=SCI_PRD[10];ScibRegs.SCILBAUD=SCI_PRD[11]; char_string(baud_disp5,LCD_L36); break;//顯示波特率57600 case6: ScibRegs.SCIHBAUD=SCI_PRD[12];ScibRegs.SCILBAUD=SCI_PRD[13]; char_string(baud_disp6,LCD_L36); break;//顯示波特率115200}} CpuTimer0Regs.TCR.bit.TSS=0;//重新啟動定時器}interruptvoidscibT*FifoIsr(void){Uint16i;staticcharset_back=0*00;set_back=set_back^0*01;if(set_back==0*00){for(i=0;i<8;i++){ ScibRegs.SCIT*BUF=sdataB[i]

溫馨提示

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

最新文檔

評論

0/150

提交評論