51单片机的频率计设计
?設計功能
(1)主要采用51單片機+最小系統(tǒng)+LCD1602液晶顯示模塊+分頻電路+整形電路+按鍵而成。
(2)頻率的測量范圍為1Hz—20MHz能測量各種周期信號,能測出正弦波、三角波或方波等波形的頻率。
(3)通過LCD1602液晶顯示屏顯示檢測到的即時頻率數(shù)值(最多8位數(shù),單位為Hz)。?
(4)電路板上排針左邊接信號輸入,右邊接地。
原理圖:
原理圖繪制軟件采用AD2013。頻率計能測出正弦波、三角波或方波等波形的頻率,測量范圍為1Hz—20MHz,且能檢測幅度最小值為1Vpp的信號;③通過LCD1602液晶顯示屏顯示檢測到的即時頻率數(shù)值(最多8位數(shù),單位為Hz)。另外,當輸入頻率大于20KHz的信號時,由于采用了100分頻采樣,顯示結果稍有誤差,如輸入最大測量頻率20MHz的信號時,LCD1602液晶顯示屏上顯示的測量結果為19998900HZ,誤差不超過十萬分之一,在可接受范圍之內(nèi)。
輸入信號需要經(jīng)過信號處理電路后,單片機才能準確計算出頻率;
(1)信號放大電路
????????為了有效防止因信號過小而造成的檢測障礙,在信號輸入處采用了三極管共射放大電路,如圖所示。
????????實際工作中,我們必須解決放大電路與信號源及放大電路與負載之間的耦合問題。一方面要求耦合電路能夠傳輸交流的輸入和輸出信號,傳輸過程中的信號損耗盡可能小;另一方面又要求信號源,放大電路、負載之間的直流工作狀態(tài)互補影響,即有“隔直”作用,電路的C1、C7就很好的解決了這個問題即固定偏置共射極放大器。集電極電壓通過基極偏置電阻R2使晶體管Je正偏;同時拖過R3使Jc反偏,從而實現(xiàn)信號源放大。
(2)信號緩沖電路
????????脈沖產(chǎn)生模塊采用74HC14實現(xiàn)了三次施密特觸發(fā)并反相,從圖1.2可以看出,來自信號采集模塊的經(jīng)過放大的信號從74HC14的1腳進入,經(jīng)過1A→1Y、2A→2Y和3A→3Y三次施密特觸發(fā)并反相最終將緩慢變化的輸入信號轉換成清晰、無抖動的信號從6腳輸出。
(3)分頻電路
????????由于單片機可操作頻率有限,若輸入信號頻率過大則單片機無法成功實現(xiàn)脈沖計數(shù),因此需要使用74HC390進行分頻,以100分頻為宜(具體為200KHz以上信號采取100分頻后再檢測,200KHz或以下信號則檢測未經(jīng)100分頻的原始信號)。
采取的方法為:從圖中可以看出,若從nCP1輸入頻率為f的時鐘信號,則會在nQ2處輸出頻率為f/5的脈沖信號,因此可進行如圖1.5所示的連線方法,1CP1--1Q2→2CP1--2Q2→1CP0--1Q0→2CP0--2Q0,其中“→”代表芯片外部電氣連接,“--”代表芯片內(nèi)部功能連接,從而得到5×5×2×2=100分頻,即若從1CP1輸入一個頻率為f的信號,則會從2Q0輸出一個頻率為f/100的分頻信號。?
其總體硬件原理圖如圖所示。
仿真設計
仿真軟件采用Protues7.8。
程序設計
程序采用C作為編程語言,使用Keil5作為編程軟件;
/----------------主函數(shù)-------------------- void main() { unsigned char i;LCD_init();timer_init(); //定時/計數(shù)器初始化 for(i = 0;i<4;i++){LCD_disp_char(i+0,1,character_1[i]);}while(1){dis_num(); //顯示delay_1s();} } //-------------------定時/計數(shù)器初始化-------------- void timer_init(void) //定時/計數(shù)器初始化 { TMOD=0x66; //計數(shù)器0和計數(shù)器1工作工作方式2,自動重裝初值 TH0=0; //計數(shù)器初值為0TL0=0;TR0=1; //計數(shù)器開始計數(shù) ET0=1; //打開計數(shù)器0中斷 TH1=0; //計數(shù)器初值為0TL1=0;TR1=1; //計數(shù)器開始計數(shù) ET1=1; //打開計數(shù)器1中斷 RCAP2H=(65536-62500)/256; //在程序初始化的時候給RCAP2L和RCAP2H賦值, RCAP2L=(65536-62500)%256; //TH2和TL2將會在中斷產(chǎn)生時自動使TH2=RCAP2H,TL2=RCAP2L。 TH2=RCAP2H; //12M晶振下每次中斷62.5ms(1s=1000ms=62.5ms×16)TL2=RCAP2L;ET2=1; //打開定時器2中斷 TR2=1; //定時器2開始計時 EA=1; //開總中斷 } //------------------中斷函數(shù)---------------------- void timer2(void) interrupt 5 //定時器2中斷(62.5ms) {time++;TF2=0; //定時器2的中斷標志位TF2不能夠由硬件清零,所以要在中斷服務程序中將其清零if (time==16) //定時1s時間到 {time=0; //計時清0EA=0; //關中斷 fre=(long)count1*256+TL1; //count*256強制轉換成long型,否則將不產(chǎn)生進位~先判斷分頻后(計數(shù)器1)FLAG = 0; if(fre<2000)//如果不到200KHz則讀取分頻前(計數(shù)器0)頻率(200K÷100=2000){fre = (long)count*256+TL0;FLAG = 1; } if(!FLAG){fre = fre *100;//100分頻}TL0=0; //清零計數(shù)器0計數(shù) TH0=0;TL1=0;TH1=0; count=0; //清零計數(shù)器0計數(shù) count1=0;EA=1; //開中斷 } }鏈接:https://pan.baidu.com/s/1K_iaNaTtbG7G-vrYtpOvyw?
提取碼:fqvi
?
總結
以上是生活随笔為你收集整理的51单片机的频率计设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k8s集群部署方式(kubeadm方式安
- 下一篇: 第2章 Python 分支结构