(精選)基于單片機的全數(shù)字信號發(fā)生器設(shè)計_第1頁
(精選)基于單片機的全數(shù)字信號發(fā)生器設(shè)計_第2頁
(精選)基于單片機的全數(shù)字信號發(fā)生器設(shè)計_第3頁
(精選)基于單片機的全數(shù)字信號發(fā)生器設(shè)計_第4頁
(精選)基于單片機的全數(shù)字信號發(fā)生器設(shè)計_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、基于單片機的全數(shù)字信號發(fā)生器設(shè)計設(shè)備技術(shù)網(wǎng)   時間:2010-4-13來源:電子技術(shù)網(wǎng)    作者:工業(yè)設(shè)備常用頻率量信號作為采集量,如使用光電編碼器采信數(shù)據(jù),當(dāng)調(diào)試使用頻率信號的設(shè)備時,由于機械等部份還未動作,無法采集信號,因此需要使用信號發(fā)生器。對于在工業(yè)現(xiàn)場使用的設(shè)備,其要求與實驗室設(shè)備并不相同,如果直接使用實驗室中所用的標(biāo)準(zhǔn)信號發(fā)生器,往往會覺得其體積過大、價格太高、使用較麻煩等。工業(yè)現(xiàn)場使用的設(shè)備,其絕對精度要求并不高,關(guān)鍵要穩(wěn)定可靠,便于攜帶和使用。一、性能分析這個項目的目標(biāo)是替代工業(yè)現(xiàn)場的頻率采樣裝置,典型的如光電編碼

2、器。通過調(diào)查,確認最終要制作的信號發(fā)生器的性能指標(biāo)如下:頻率范圍:01Hz,以0.1Hz步進,1500Hz,以1Hz步進;波形:矩形波或方波均可;精度:頻率值的相對誤差不超過±1%;功能:(1)信號發(fā)生,信號發(fā)生器以給定的頻率輸出信號;(2)脈沖個數(shù)計數(shù),儀器可對本身已發(fā)出的脈沖個數(shù)進行計數(shù);(3)設(shè)定值可存儲,每次上電自動調(diào)出前次設(shè)定值。二、初步設(shè)計在確定了性能指標(biāo)后,可以進行初步設(shè)計,考慮其顯示、操作等方面的要求。1、顯示部分待設(shè)定的頻率值最高為500HZ,只要3位數(shù)碼管即可;要求對輸出脈沖計數(shù),雖未給出要求的計數(shù)值,但3位數(shù)碼管最大僅能計到999,似乎太少了一些,再考慮到該儀器

3、以后的擴展,如希望以后能加一些高端點頻(600、700、800、900、1000、2000、5000、10K等),需要更多的數(shù)碼管顯示,因此最終選擇5位數(shù)碼管顯示。2、鍵盤部分鍵盤有很多方案可供選擇,如工業(yè)品中常用的三鍵或四鍵方案,當(dāng)然也可以用多鍵(如市售有一些標(biāo)準(zhǔn)的12或16鍵鍵盤)等,經(jīng)過反復(fù)比較,考慮到易制作、易使用等等諸多因素,最終將鍵的個數(shù)確定為5個。鍵盤操作方案是儀器易用性的很重要的一個方面,這并非儀器的關(guān)鍵部分,但鍵盤、顯示程序的工作量往往占據(jù)整個設(shè)計的很大的一部份。對鍵盤設(shè)計,重要的是要確定各按鍵功能,描述出各鍵的具體操作。本儀器的鍵設(shè)計如下:1工作狀態(tài)描述由轉(zhuǎn)換鍵切換兩種狀態(tài)

4、(1)顯示設(shè)定的頻率值(2)顯示脈沖個數(shù)值2鍵定義切換鍵增加鍵減少鍵開啟/停止鍵清除鍵3鍵操作描述切換鍵:切換兩種工作狀態(tài)增加和減少鍵:在顯示設(shè)定頻率值時按,按增加鍵、減少鍵設(shè)定頻率,范圍為0.1500HZ,每按一次增加鍵,設(shè)定值加1,如果按著鍵不放,稍后進入連續(xù)狀態(tài),設(shè)定值快速增加;按減少鍵,設(shè)定值減1,如果按著鍵不放,稍后進入連續(xù)狀態(tài),設(shè)定值快速減少。當(dāng)頻率設(shè)定值小于1以后,每按一次增加或減少鍵,設(shè)定值增加或減少0.1。開啟/停止鍵:開始/停止信號發(fā)生清除鍵:用于清除當(dāng)前脈沖個數(shù)的計數(shù)值。4工作過程開機后,信號發(fā)生器自動運行,有信號輸出,按下“開啟/停止”鍵,則信號發(fā)生器停止工作,沒有信號

5、輸出,再次按下“開啟/停止”鍵,則信號發(fā)生器又開始工作,繼續(xù)輸出信號。信號燈用于指示信號發(fā)生器工作還是停止,當(dāng)有信號產(chǎn)生時,信號指示燈閃爍,信號發(fā)生器暫停工作時,信號指示燈滅。三、硬件電路的設(shè)計在確定了性能指標(biāo)、操作方案后,可以開始設(shè)計,首先要確定信號產(chǎn)生的方式。該信號發(fā)生器的絕對精度指標(biāo)不高,但是其要求的最低頻率低至0.1HZ,而最高分辨也要求達到0.1HZ,如果采用模擬技術(shù)難以達到,或需要付出較高代價才能做到。考慮到儀器的最高輸出頻率僅為500HZ,而且只需要提供要方波或矩形波,所以采用單片機做成全數(shù)字信號發(fā)生器。在有了這一設(shè)計思想之后,需要確定該方案是否可行,該方案準(zhǔn)備采用單片機的定時器

6、產(chǎn)生信號,由于定時器的定時時間只能是整數(shù),因此,不可避免會在一些頻率點上產(chǎn)生誤差,為此,用Excel對計數(shù)值、真實頻率值作了測算,部分表格如表1和表2所示,經(jīng)過測算表明,當(dāng)采用12M晶振時,絕對誤差最大約0.12HZ(492Hz處),相對誤差最大約0.024%(492Hz處),可以滿足要求,因此決定采用這一方案。當(dāng)然,這僅是理論值,考慮到單片機定時中斷的響應(yīng)時間等因素,實際的誤差肯定要比這個計算值大,但是要達到±1%的精度要求并不難,而其長期工作的穩(wěn)定性取決于晶振的穩(wěn)定度,并且晶振頻率的變化引起的輸出頻率的變化也很微小,因此其長期工作穩(wěn)定性也很好。 以下是部份測算的表格,完

7、整的表格在本期光盤Excel文件中。表1較高頻率算法理論頻率 t(ms) 真實頻率 絕對誤差 相對誤差10 100000 10 0.00E+00 0.00E+0011 90909 11.00001 1.00E-06 9.09E-0812 83333 12.00005 4.00E-06 3.33E-0713 76923 13.00001 1.00E-06 7.69E-0814 71429 13.99992 -6.00E-06 -4.29E-0715 66667 14.99993 -5.00E-06 -3.33E-0716 62500 16 0.00E+00 0.00E+0017 58824 16

8、.99986 -8.00E-06 -4.71E-0718 55556 17.99986 -8.00E-06 -4.44E-0719 52632 18.99985 -8.00E-06 -4.21E-0720 50000 20 0.00E+00 0.00E+00表1較低頻率算法f(hz) t(ms) 次數(shù) 頻率值 誤差 相對誤差0.1 10000000 5000 0.1 0.00E+00 0.00E+000.2 5000000 2500 0.2 0.00E+00 0.00E+000.3 3333333 1667 0.29994 -2.00E-04 -6.67E-040.4 2500000 1250

9、 0.4 0.00E+00 0.00E+000.5 2000000 1000 0.5 0.00E+00 0.00E+000.6 1666667 833 0.60024 4.00E-04 6.67E-040.7 1428571 714 0.70028 4.00E-04 5.72E-040.8 1250000 625 0.8 0.00E+00 0.00E+000.9 1111111 556 0.899281 -7.99E-04 -8.88E-04在確定了信號發(fā)生的方式以后,綜合初步設(shè)計中提出的一些技術(shù)指標(biāo)要求,進一步確定具體的實施方案。根據(jù)以往的設(shè)計經(jīng)驗,顯示部分由單片機的P0口與P2口直接驅(qū)動;

10、數(shù)據(jù)存儲則采用串行EEPROM;信號由單片機的一個I/O口輸出,并經(jīng)驅(qū)動后輸出。經(jīng)過上述的設(shè)計后,可以確定這個儀器的框圖如圖1所示。 原理框圖出來后,選擇一款合適的機殼,然后綜合考慮按鍵、數(shù)碼管的安裝方式,以便進行更詳細的設(shè)計。數(shù)碼管和按鍵必須安裝在印板上才能安裝到面板上,數(shù)碼管與單片機的連線較多,5位數(shù)碼管,需要13根線,再加上按鍵的連線共有19根,如果將單片機放在另一塊板上,必然要用大量導(dǎo)線與鍵盤顯示板連接,而大量的連線是我們不愿意做的,這不僅使得安裝困難,而且線易折斷造成故障,因此干脆將單片機也裝在同一塊板上,只留下電源和輸出電路放在另一塊板上,這樣,兩塊板間只需3根引線即可,

11、大大降低了裝配困難,也減少了故障隱患。整個設(shè)計的原理圖,如圖2和圖3所示。其中圖2是主板圖,提供了包括數(shù)碼管顯示驅(qū)動、鍵盤等在內(nèi)的大部份功能。從圖中可以看到,該電路主要由這樣幾部份組成:(1)數(shù)碼管顯示部份,由單片機及相關(guān)外圍電路構(gòu)成5位數(shù)碼管顯示電路;(2)按鍵部份,按設(shè)計共有5個按鍵;(3)EEPROM存儲器,這里選擇I2C接口的AT24C01A芯片;(4)一只LED指示燈;(5)輸出管腳。以上分別需要單片機片機的13、5、3、1、1個引腳,因此,單片機共要用到23只管腳。引腳數(shù)量確定后,即可初步確定主芯片的型號,這里選用40引腳的AT89C51單片機。如果編程中發(fā)現(xiàn)內(nèi)部資源(如片內(nèi)RAM

12、、ROM、定時器等)不夠,可以更換為89C52等其他單片機,比較靈活。圖3是電源、輸出部分,從圖中可以看出,儀器的輸出接口采用兩種方式,即集電極開路(OC門)方式和射極輸出方式,其中OC門方式是很多以頻率信號為輸出的儀器的標(biāo)準(zhǔn)輸出方式,如光電編碼器、霍爾開關(guān)等?;趩纹瑱C的全數(shù)字信號發(fā)生器設(shè)計設(shè)備技術(shù)網(wǎng)   時間:2010-4-13全數(shù)字信號發(fā)生器的硬件部分就介紹到這里,下一期將介紹程序的編寫。圖2    本儀器的程序主要由鍵盤、顯示程序、AT24C01A讀寫程序、信號產(chǎn)生程序等部分組成。以下對部分功能作一些分析。一、鍵盤程

13、序本儀器需要調(diào)整的數(shù)值范圍較大,因此,“增加”和“減少”鍵必須具有快速連加和快速連減的功能,否則調(diào)整速度太慢。這種鍵盤可以用多種方法來實現(xiàn),關(guān)鍵在于設(shè)計一個正確的程序結(jié)構(gòu),圖1是一種實現(xiàn)方法的流程圖。 圖1流程圖程序工作時,不斷地掃描鍵盤,第一次掃描到有鍵按下后如常規(guī)鍵盤一樣,進行鍵值處理,處理完畢,不等待鍵盤釋放,直接退出鍵盤程序。當(dāng)又一次執(zhí)行到鍵盤程序,如果檢測到鍵還被按著,就不再直接去鍵值處理程序,而是將一個計數(shù)器加1,直接返回主程序,如此循環(huán),直到計數(shù)到一個定值(如500,表示鍵盤程序已被執(zhí)行了500次),如果鍵還被按著,說明用戶有連加(或連減)要求,程序即將計數(shù)器減去一個數(shù)

14、值(如30),然后進行鍵值處理。這樣,以后鍵盤程序每執(zhí)行30次,就執(zhí)行一次鍵值處進程序,實現(xiàn)了第一次啟動時間較長,以后快速連續(xù)動作的要求。如果檢測到鍵已被釋放,則清除所有標(biāo)志,將計數(shù)器清零,準(zhǔn)備下一次按鍵處理。程序開始時定義了兩個常量:Qdsj和Ljsj,如下所示const  uint  Qdsj=500; /*與首次啟動連加(減)功能的時間有關(guān)*/const  uint  Ljsj=30;  /*與連加(減)的速度有關(guān)*/這兩個常量與第一次啟動及連加、減的速度有關(guān),具體數(shù)值應(yīng)根據(jù)實際情況試驗后確定。下面

15、是部分鍵處理程序,注意其中這兩個變量的使用。void Key()/*鍵處理*/             if(!KeyValue)                無鍵按下,清除一切標(biāo)志退出         &#

16、160;      if(KeyMark)     /*第一次檢測到按鍵嗎?*/           KeyCounter+;   /*不是第一次(KeyMark已是1了)*/            if(Qdsj=KeyCoun

17、ter) /*連續(xù)按著已有Qdsj次了*/               KeyCounter-=Ljsj; /*減去Ljsj次*/             KeyProcess(KeyValue,1);   /*鍵值處理*/      &#

18、160;                     else return     /* 如果按著還沒有到Qdsj*/                else /

19、*第一次檢測到有鍵按下*/          mDelay(10);     /*延時10毫秒*/再次檢測            if(!KeyValue) 清除一切標(biāo)志并返回 二、小數(shù)點的處理要在LED數(shù)碼管上顯示小數(shù)點,可以有兩種選擇,一種方式是在顯示0.10.9時用小數(shù)顯示,而在顯示1500時不顯示小數(shù)點,這種方式編程略麻

20、煩一些;另一種是使用定點的方式顯示小數(shù)點,即不論是在0.10.9Hz段,還是1500Hz段,均在倒數(shù)第二位點亮小數(shù)點,這種顯示方式比較簡單,本機采用了第二種方式。通常,用高級語言編程時,可以用浮點型數(shù)據(jù)來表示小數(shù),但本程序并沒有這樣來處理。因為單片機的資源有限,而浮點型數(shù)據(jù)的表達方式與其他數(shù)據(jù)的表達方式很不相同,無論是存儲還是運算,都相當(dāng)占用資源,因而在單片機中能不用浮點型數(shù)據(jù)就盡量不要使用。這里我們將所有的頻率設(shè)定值擴大10倍,即所要求的頻率值是0.1500Hz,但在單片機內(nèi)部用15000來表示。如果頻率設(shè)定值小于10,每按一次鍵,頻率設(shè)定值就加或減1,如果頻率設(shè)定值大于等于10,每按一次按

21、鍵就加或減10。例如,當(dāng)前頻率設(shè)定值為100,按一下“增加”鍵,該值就會變?yōu)?10,相當(dāng)于頻率設(shè)定值由10變?yōu)?1;如果當(dāng)前設(shè)定值為9,按一下“減少”鍵,該值變?yōu)?,相當(dāng)于頻率值由0.9變到了0.8。在根據(jù)頻率設(shè)定值計算定時常數(shù)時,只要將被除數(shù)擴大10倍即可,程序中是這樣表示的: ltemp=1000000;ltemp*=10; /由于plsd被放大了10倍,故被除數(shù)也放大10倍在顯示頻率設(shè)定值時,點亮倒數(shù)第二位的數(shù)碼管上的小數(shù)點,顯示程序中有這樣的程序行:if(Counter1=1) /如果當(dāng)前正在顯示倒數(shù)第二位時 if(!PlSl) /如果是要求顯示頻率   

22、DispCode=DispCode&0xbf; /*點亮小數(shù)點*/由于P0.6與小數(shù)點位相連,所以不論待顯示的數(shù)是多少,該位被清零后,小數(shù)點就能被點亮。要將該位清零,只要將字形碼與0xbf(10111111)相與即可。三、AT24C01A的讀寫AT24C01A芯片是具有I2C接口的EEPROM,由于89C51單片機沒有I2C接口,因此,必須用I/O口模擬I2C時序。這里僅提供作者用C語言編寫的接口程序,不對此作更多的介紹。使用這一接口程序,只要定義好寫常數(shù)、讀常數(shù)及根據(jù)硬件連線定義好三個引腳SDA、SCL和WP,然后直接調(diào)用讀、寫函數(shù)即可。#define AddWr

23、   0xa0            /*器件地址選擇及寫標(biāo)志*/#define AddRd   0xa1            /*器件地址選擇及讀標(biāo)志*/sbit    Sda=    P37; 

24、          /*串行數(shù)據(jù)*/sbit    Scl=    P36;           /*串行時鐘*/sbit    WP=    P35;接口程序提供了多字節(jié)的讀、寫函數(shù),其中讀函數(shù)需要用到三個參數(shù):用于存放讀出數(shù)據(jù)

25、的數(shù)組,待讀EEPROM的起始地址,字節(jié)數(shù);寫函數(shù)也要用到三個參數(shù):用于存放待寫入數(shù)據(jù)的數(shù)組,待寫入EEPROM的起始地址,字節(jié)數(shù)。下面是這兩個函數(shù)的用法參考:RdFromROM(Number,10,2);/從地址10H開始處讀出2個字節(jié),存入Numbre數(shù)組中。WrToROM(Number,10,2);/將Number數(shù)組中的2個字節(jié)寫入EEPROM,地址從10H開始四、信號產(chǎn)生信號發(fā)生由定時中斷0完成,在定時時間到之后,重置定時常數(shù),接著判斷究竟是較高頻率還是較低頻率,分別予以處理,如果是較高頻率,直接取反輸出端口即可返回,如果是較低頻率,則要進行計數(shù),并判斷計數(shù)值是否到設(shè)定值,如果到了,

26、則取反輸出端口,并清零計數(shù)器,然后再返回,這部分程序如下:void OutWave() interrupt 1 /定時0中斷用于波形輸出 static uint Count; /較低頻率時計數(shù)用TH0=CTH0; /重裝時間常數(shù)TL0=CTL0;if(HighLow) /如果是較高頻率 WaveOut=!WaveOut;Mczsl+; else  Count+;if(Count>=Plcs) WaveOut=!WaveOut;Count=0;Mczsl+; 其中Mczsl是脈沖輸出個數(shù)的計數(shù)值。從程序中還可以看出,每次輸出只能得到波形的一半,要么高電平,要么低電平,一個完整的波形需

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論