版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、基于 CPLD和單片機的頻率計設計引言:隨著電子技術與計算機技術的不斷發(fā)展, 以單片機為核心的測量控制系統(tǒng)層 出不窮。在被測信號中, 較多的是模擬和數字開關信號, 而且還經常遇到以頻率 為參數的被測信號, 例如流量、 轉速、晶體壓力傳感器以及經過參變量一頻率轉 換后的信號等。本次試驗采用測頻法,通過方案優(yōu)化,達到了較高的精度。該測頻系統(tǒng)的設計采用 AT89C51 單片機和具有內部結構重組、現場可編程 的 CPLD 芯片相結合起來,實現了對 IHz10MHz 信號頻率的高精度測量。系統(tǒng) 的整體穩(wěn)定性和精度較高,達到了測頻對精準度的要求。正文: 一、實驗設計原理1.1 實驗基本被測框架 信號信號放
2、大和整形測頻電路顯示圖一傳統(tǒng)的測頻原理是在一定的時間間隔 T 內測某個周期信號的重復變化次數 N,其頻率可表示為 f=N/T ,其原理框圖如圖 2 所示。這種測量方式的精度隨被 測信號頻率的下降而降低。圖二 關于誤差的分析將在下文中闡述。1.2 本實驗采用等精度測頻的原理為:首先, Clock 即標準時鐘信號進過分頻產生周期為1.25s,占空比為 80%的閘門信號, 從而閘門寬度為 1s,將分頻產生的信號和被測信號相與的結果即為計數器的技術時鐘信號, 在這 1s 的時間寬度內技術到的結果就是被測信號的頻率值,通過多路選擇器,有單片機發(fā) 送地址,每次四位將數據傳送給單片機, 經過單片機的代碼轉換
3、, 使用 7 個 8 段數碼管顯示。 具體原理如圖三所示。1.3 CPLD 模塊邏輯設計1.3.1 分頻模塊的實現分頻器采用 25 位的二進制計數器, 下圖為在 ISE 仿真環(huán)境下的閘門輸出。圖三產生周期 1.25s,占空比 80%的寬度為 1s 的閘門信號圖四1.3.2 計數器 計數器采用 28 的 BCD 碼計數,局部計數方式如下: if(en=1b1)&(clr=1b0)&(q34b1001)beginq3 =q3+4b0001;end else begin q3=4b0000; 下圖為在 ISE 仿真環(huán)境下的計數結果:圖五 鑒于數據較大,所以,我們仿真時候只選取了 12 位數據,結果是
4、正確的。 1.3.2 多路選擇器 有單片機提供 3 位地址信號,每次送四位數據給單片機,傳送7次數據即可。1.4 單片機主控模塊P1 口用來作為數碼管的 7 個位選信號;P2 口用來向單片機提供段選碼;(3)Latch :即與案例框圖中由分頻鏈給單片機的時鐘信號,為了實現單片機與 CPLD 工作的同步而做的;在 Latch 信號為高電平期間單片機取數據,而此時, CPLD 由于閘門為低電 平使得計數停止;在 Latch 為低電平時,單片機部取數,而 CPLD 在計數。從而保證兩者的 正常工作。(4)P0 口的低四位用來取數, P3 口地高三位用來傳送地址;(5)單片機采用定時中斷顯示,每 1m
5、s 改變一位,實現動態(tài)顯示。 二、測頻精度分析圖六 計數法測頻誤差示意圖說明: f x = NT由誤差合成公式有fx N TfxNT上式中第一項為量化誤差設主門的開啟時間為,是由于被測信號與門控閘門信號不相關引起的。T , 被測信號周期為Tx ,主門開啟時刻至下一個計數脈沖的前沿為t1, 主門關閉時刻至下一個計數脈沖的前沿為t2 ,如上圖所示。11。N Tfx其最大誤差為 1 個量化單位 ,則最大量化誤差的相對值為由式得到 ,被測頻率越高 ,閘門時間越長 ,則量化誤差越小 . 但閘門時間太長 ,則降低測量速度 且受到顯示位數的限制。三、實驗結果 在試驗中,頻率計在 1HZ 到 1KHZ 段的誤
6、差很小,幾乎可儀忽略不計,在高頻時的進度也很好,如下表示:信號/HZ33355577710k100k500k1M5M9M測量值/HZ33355577710024100K500012100013450001549000223附錄: mcu 部分#include sbit Dig1 = P10;sbit Dig2 = P11;sbit Dig3 = P12;sbit Dig4 = P13;sbit Dig5 = P14;sbit Dig6 = P15;sbit Dig7 = P16;sbit Latch = P30; /latch insbit Clr_data = P34;sbit Dig_se
7、l2 = P35;sbit Dig_sel1 = P36;sbit Dig_sel0 = P37;#define T0_High_Init 0 xfa;#define T0_Low_Init 0 x00;unsigned int Counter;unsigned char Digit1,Digit2,Digit3,Digit4,Digit5,Digit6,Digit7;/字形表int Get_7_Segment160 x7E,0 x30,0 x6D,0 x79,0 x33,0 x5B,0 x5F,0 x70,0 x7F,0 x7B,0 x77,0 x1f,0 x4e,0 x3d,0 x4f,0
8、 x47; unsigned char indata;/主函數/初始化函數void Initial(void)Counter = 0;TMOD = 0 x11;/定時器工作方式TH0 = T0_High_Init;TL0 = T0_Low_Init;/ 設置定時器初值TR0 = 1;/啟動定時器ET0 = 1;/允許定時器中斷EA = 1;/開中斷/延時void delay()int ti;for(ti=0;ti10;ti+)/判斷 Latch 是否為高電平int latch_high(void)int reci;/ 返回值if(Latch)delay();if(Latch) reci = 1
9、;elsereci = 0;elsereci = 0;return reci;/判斷 Latch 是否為低電平int latch_low(void)int reci;/ 返回值if(!Latch)delay();if(!Latch)reci = 1;elsereci = 0;elsereci = 0;return reci;void get_data(void)Dig_sel2 = 0;Dig_sel1 = 0;Dig_sel0 = 0;delay(); indata = P0;Digit7 = indata & 0 x0f;Dig_sel0 = 1;delay();indata = P0;D
10、igit6 = indata & 0 x0f;Dig_sel1 = 1;Dig_sel0 = 0; delay();indata = P0;Digit5 = indata & 0 x0f;Dig_sel0 = 1; delay(); indata = P0;Digit4 = indata & 0 x0f;/*Dig_sel2 = 1;Dig_sel1 = 0;Dig_sel0 = 0; delay();indata = P0;Digit3 = indata & 0 x0f;Dig_sel0 = 1; delay(); indata = P0;Digit2 = indata & 0 x0f;Di
11、g_sel1 = 1;Dig_sel0 = 0; delay(); indata = P0;Digit1 = indata & 0 x0f;/主函數void main()Initial();while( 1 )while( latch_high() ); get_data();Clr_data = 0; delay();Clr_data = 1; while( latch_low() );/中斷/顯示void Display_Digit(unsigned int Digit_Selected)if( Digit_Selected = 1 )Dig7 = 1;P2 = Get_7_Segment
12、Digit1;Dig1 = 0;if( Digit_Selected = 2 )Dig1 = 1;P2 = Get_7_SegmentDigit2;Dig2 = 0;if( Digit_Selected = 3 )Dig2 = 1;P2 = Get_7_SegmentDigit3;Dig3 = 0;if( Digit_Selected = 4 )Dig3 = 1;P2 = Get_7_SegmentDigit4;Dig4 = 0;if( Digit_Selected = 5 )Dig4 = 1;P2 = Get_7_SegmentDigit5;Dig5 = 0;if( Digit_Select
13、ed = 6 )Dig5 = 1;P2 = Get_7_SegmentDigit6;Dig6 = 0;if( Digit_Selected = 7 )Dig6 = 1;P2 = Get_7_SegmentDigit7;Dig7 = 0; /中斷處理函數 void display(void) interrupt 1 ET0 = 0;TR0 = 0;TH0 = T0_High_Init;TL0 = T0_Low_Init;/ 重裝定時器初值TR0 = 1;if( +Counter = 8 ) Counter = 1;Display_Digit(Counter); / 顯示ET0 = 1; Cpld
14、 部分 module fcounter(clk, clr, selector, single, gate, data);input clk;input clr; input 2:0selector; input single; output gate; output 3:0data;reg 3:0data; wire gate;/輸出數據/時鐘閘門reg 24:0gcount; reg 27:0count; reg a,b,c,d,e,f,g; wire clock; wire ssingle; assign gate=clock; always begincase (selector)3b0
15、00: data=count3:0; 3b001: data=count7:4; 3b010: data=count11:8; 3b011: data=count15:12; 3b100: data=count19:16; 3b101: data=count23:20; 3b110: data=count27:24; 3b111: ;endcase end always(posedge clk)begin if(gcount24:0=25h01e8480)gcount=25h185ee00;elsegcount=gcount+1;endassign clock=gcount24;assign
16、ssingle=single&clock; / 有效信號 always(negedge ssingle or negedge clr)/計數beginif(clr=0) count=0;else if(count3:0=4h9) beginif(count7:4=4h9)begin if(count11:8=4h9) beginif(count15:12=4h9) beginif(count19:16=4h9) beginif(count23:20=4h9) beginif(count27:24=4h9) count27:24=0;else count27:24=count27:24+1; count23:20=0;endelse
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度六安住房租賃合同協議書
- 2024年度新能源發(fā)電項目投資與建設合同
- 假期《木偶奇遇記》個人讀后感
- 2024年北京城市副中心建設項目合同
- 2024年度光伏發(fā)電項目特許權協議
- 2024年國際學校校長合同模板
- 2024年工程質量檢測服務協議
- 噴水壺課件教學課件
- 2024年債務重組:房產轉讓與債務清零合同
- 2024乳制品行業(yè)牛奶輸送泵安裝合同
- 家長進課堂小學生建筑知識課件
- 2023年口腔醫(yī)學期末復習-牙周病學(口腔醫(yī)學)考試歷年真題集錦帶答案
- 函數的概念 省賽獲獎
- 網絡安全培訓-
- 地下車位轉讓協議
- 2018年蜀都杯《辛亥革命》終稿z
- 斷絕關系的協議書兄妹
- 工程變更現場簽證經濟臺帳
- 結婚函調報告表
- 數學上冊專題(4)含字母參數的一元一次方程問題作業(yè)課件新版浙教版
- 新魯科版三年級英語上冊全冊教案教學設計(魯教版)
評論
0/150
提交評論