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