一、設(shè)計功能與技術(shù)指標(biāo)
1.1 設(shè)計目標(biāo)本項目旨在基于 PIC16F18877 單片機(jī),設(shè)計并實現(xiàn)一個單片機(jī)頻率測量儀(頻率計)。該系統(tǒng)可通過捕捉外部輸入的方波信號,統(tǒng)計單位時間內(nèi)脈沖數(shù),并在 LCD1602 顯示屏上以 Hz 為單位實時顯示被測信號的頻率值。系統(tǒng)采用軟件定時+硬件捕捉的組合方式,兼顧響應(yīng)速度和測量精度,適用于中低頻率信號的測量需求。
1.2 系統(tǒng)功能具備 10 Hz ~ 10 kHz 范圍的方波信號頻率測量能力; 采用 CCP1 模塊的上升沿捕捉方式進(jìn)行脈沖統(tǒng)計; 利用定時器 TMR1 提供精確的時間基準(zhǔn)(1s 周期); 通過 LCD1602 實時顯示頻率值; 支持頻率范圍異常判斷與錯誤提示顯示(Err Out); 測頻結(jié)果刷新周期為 1 秒,可連續(xù)穩(wěn)定工作; 支持中斷方式工作,系統(tǒng)實時性強(qiáng),資源占用低。
1.3 關(guān)鍵技術(shù)指標(biāo)關(guān)鍵技術(shù)指標(biāo)如下: 表 1 頻率計關(guān)鍵技術(shù)指標(biāo)及詳細(xì)說明 | | 測量信號類型 | 方波、TTL 電平信號(0V-5V) | 測量范圍 | 10 Hz ~ 10.00 kHz | 分辨率 | 1 Hz(基于單位時間內(nèi)計數(shù)法) | 顯示方式 | LCD1602 液晶屏,5 位十進(jìn)制頻率數(shù)字 + 單位“Hz” | 刷新周期 | 1 秒 | 測量誤差 | ±1 Hz(不考慮輸入信號抖動與干擾) | 捕捉方式 | CCP1 模塊上升沿捕捉,中斷響應(yīng)計數(shù) | 時間基準(zhǔn) | 定時器 TMR1,周期 5ms,累計 200 次構(gòu)成 1 秒 | | 若頻率 <10Hz 或 >10kHz,LCD 顯示“Err Out” | 1.4 技術(shù)實現(xiàn)說明1. 使用內(nèi)部時鐘頻率為 16 MHz,TMR1 工作在 Fosc/4(即 4MHz)下; 2. TMR1 每次計時 5ms,共 200 次形成 1 秒時間基準(zhǔn); 3. CCP1 模塊配置為捕捉模式,每次接收到一個上升沿即觸發(fā)中斷,累計脈沖數(shù); 4. 將 1 秒內(nèi)捕獲的脈沖數(shù)即視為頻率值(單位:Hz); 5. 所得頻率值由主循環(huán)中定時調(diào)用的LCD1602 模塊進(jìn)行顯示刷新; 6. 若頻率值超出設(shè)定量程,系統(tǒng)通過設(shè)定頻率為0xFFFF 觸發(fā) LCD 顯示“Err Out”,提示用戶超出測量范圍。 二、 設(shè)計思路本系統(tǒng)以 PIC16F18877 單片機(jī)為核心,結(jié)合其 CCP 捕捉模塊、TMR1 定時器和 LCD1602 顯示模塊,構(gòu)建一個高精度、低復(fù)雜度、易實現(xiàn)的數(shù)字頻率計系統(tǒng)。系統(tǒng)通過在1秒時間基準(zhǔn)內(nèi)統(tǒng)計外部輸入脈沖信號的個數(shù),從而直接計算出信號頻率。 2.1 整體架構(gòu)系統(tǒng)主要由以下三個核心模塊組成: 信號輸入捕捉模塊:使用 CCP1 模塊捕捉輸入方波的上升沿; 時間基準(zhǔn)模塊:采用 TMR1 定時器,每 5ms 計時一次,200 次構(gòu)成 1 秒; 數(shù)據(jù)顯示模塊:通過 LCD1602 顯示測得頻率,若超限則顯示錯誤信息。 2.2 硬件設(shè)計思路硬件設(shè)計基于Proteus平臺完成,采用最小系統(tǒng)電路結(jié)構(gòu)實現(xiàn): 2.2.1 PIC16F18877 單片機(jī)最小系統(tǒng)時鐘:外部晶振 16MHz(配置為 Fosc/4 模式); 電源:+5V 供電,帶電容濾波; IO資源分配如下:RC2 作為CCP1捕捉輸入(頻率信號)端口,RD0–RD7是LCD1602數(shù)據(jù)口,RA3–RA5接LCD1602 控制引腳:EN、RW、RS。 2.2.2 輸入信號模擬使用仿真器提供的信號源模塊生成 10Hz~10kHz 的方波信號輸入至 RC2; 2.3 軟件設(shè)計思路系統(tǒng)軟件基于 C 語言編寫,采用中斷驅(qū)動機(jī)制,軟件總體流程圖如下:
2.png (33.24 KB, 下載次數(shù): 0)
下載附件
2025-6-28 17:30 上傳
圖 1 軟件總體流程圖 2.3.1 核心代碼說明關(guān)鍵初始化配置如下: CCP1PPS =0x12; // 將RC2設(shè)置為CCP1輸入 CCP1CON =0x85; // CCP1上升沿捕捉 CCPTMRS0 =0x01; // 將TMR1作為CCP1的時鐘源 T1CLK =0x01; // Fosc/4為TMR1時鐘,周期 = 1us TMR1H = (65536-20000)/256; TMR1L =(65536-20000)%256; TMR1IE = 1; // 開啟TMR1中斷 中斷服務(wù)程序如下: void__interrupt() ISR(void) { if(CCP1IF) { CCP1IF = 0; pulse++; }
if(TMR1IF) { TMR1IF = 0; counter++; if(counter == 200) { counter = 0; if(pulse < 10 || pulse >10000) k = 0xFFFF; // 標(biāo)記為錯誤 else k = pulse; pulse = 0; } } } LCD顯示更新: if (k == 0xFFFF){ LCD1602cmd(0x80); // 顯示首行 LCD1602Write('E'); LCD1602Write('r');LCD1602Write('r'); LCD1602Write(' '); LCD1602Write('O');LCD1602Write('u'); LCD1602Write('t'); } else { 顯示頻率數(shù)值(5位) }
Proteus仿真程序:
頻率計.7z
(27.07 KB, 下載次數(shù): 0)
2025-6-28 17:35 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|