久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2745|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

使用stc32g12k128單片機(jī)的高精度脈沖頻率測(cè)量例程

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
    使用mcu對(duì)脈沖頻率進(jìn)行測(cè)量有多種方法,最基本的是定時(shí)長(zhǎng)脈沖計(jì)數(shù)法和周期測(cè)量法。其中定時(shí)長(zhǎng)計(jì)數(shù)法適合高頻脈沖測(cè)量,其測(cè)量能力和精度由Mcu的端口速度和系統(tǒng)時(shí)鐘限定。周期測(cè)量法適合低頻端脈沖測(cè)量。這兩種方式在中間頻率上都存在明顯的誤差。
本例程給出了一種基于stc32g12k128的頻率測(cè)量方法。采用系統(tǒng)時(shí)鐘11059200HZ時(shí)適合頻率是200HZ——900KHZ。根據(jù)需要可以向高端或低端擴(kuò)展,是一種簡(jiǎn)單的寬頻率范圍的測(cè)量程序。
    本例程在提高測(cè)量精度方面是從三個(gè)角度著手。一是兩端對(duì)齊,就像用尺子測(cè)量棍子時(shí)所做的,把棍子兩端與尺子的刻度對(duì)齊,方能測(cè)量準(zhǔn)確。在測(cè)量時(shí)把脈沖信號(hào)與時(shí)鐘信號(hào)正確對(duì)齊,來(lái)提高測(cè)量精度。二是采用雙精度時(shí)鐘,這與游標(biāo)卡尺的原理相似,一個(gè)大刻度尺子粗測(cè),一個(gè)小刻度尺子用來(lái)精測(cè)。三是增加測(cè)量時(shí)間長(zhǎng)度。取較長(zhǎng)的時(shí)間測(cè)量,可以使誤差相對(duì)去減小。
    例程中使用PWMA的ccp1通道的外時(shí)鐘模式一對(duì)脈沖信號(hào)進(jìn)行計(jì)數(shù),信號(hào)輸入在P1.0口,定時(shí)器T0做主時(shí)間定時(shí),使用12T模式,初值為0,以獲得更多測(cè)量時(shí)長(zhǎng)。定時(shí)器T1進(jìn)行精測(cè)計(jì)時(shí),采用1T模式,以提高測(cè)量精度。利用PWMA的上升沿中斷來(lái)啟動(dòng)和結(jié)束計(jì)數(shù)和計(jì)時(shí),獲得好的對(duì)齊效果。
    在需要向高頻端擴(kuò)展時(shí),可以提高系統(tǒng)時(shí)鐘頻率(如改為33177600)和對(duì)被測(cè)信號(hào)進(jìn)行分頻(當(dāng)前未開(kāi)分頻,可以分頻值為2—8分頻),把測(cè)量頻率的上限擴(kuò)展到20M以上,這時(shí)的限制在于mcu端口本身的速度。需要向低頻端擴(kuò)展時(shí),可以把T1定時(shí)器改為12T模式,測(cè)量頻率下限則為15HZ。
擴(kuò)展時(shí)還需要修改程序內(nèi)的兩個(gè)計(jì)算常數(shù)。如果想同時(shí)向兩個(gè)方向擴(kuò)展,則需要修改程序流程,增加頻段選擇的相關(guān)操作。
    如果想進(jìn)一步提高測(cè)量精度,則需要采用外置高精度高穩(wěn)定度晶振。并對(duì)程序中影響測(cè)量精度的語(yǔ)句進(jìn)行補(bǔ)償(給T1定時(shí)器設(shè)一個(gè)初值)。相信該例程本身能夠滿足專業(yè)測(cè)量頻率的需要。
    下面給出例程主體,包括主程序和配置程序。未列出的程序包括顯示屏的驅(qū)動(dòng)程序和各種頭文件。在附件中有完整程序供初學(xué)者參考和使用。
附圖中顯示屏上的第二行為被測(cè)頻率的計(jì)數(shù)值,第三行為兩個(gè)定時(shí)器的計(jì)數(shù)值之和。被測(cè)頻率的計(jì)數(shù)值會(huì)出現(xiàn)正負(fù)一個(gè)數(shù)的變動(dòng),定時(shí)器測(cè)量值也會(huì)隨之變動(dòng),但測(cè)結(jié)果不受影響。

單片機(jī)源程序如下:
#include "STC32G.H"
#include "stc32_12864driver.h"
#include "mcu_initial.h"
#include "initial_lcd.h"
#include "chinese_zhouqi.h"
unsigned long int cnt1=10,cnt2,cnt3;//cnt1的初值是為指示程序是否進(jìn)入測(cè)量狀態(tài)。cnt2,cnt3是調(diào)試時(shí)用到的參數(shù)
bit first=0;//程序走向控制參數(shù),初值不影響測(cè)量結(jié)果
void main(void)
{
        mcu_initial();
        initial_lcd();
        clear_screen();
transfer_chine_word(1,0,pin);
transfer_chine_word(1,16,lu);
        PWMA_SR1=0;//中斷標(biāo)志位清零
        PWMA_CR1|=0x01; //使能計(jì)數(shù)器
        PWMA_IER=0x02;//開(kāi)捕獲中斷,用于捕獲第一次中斷
        while (1)
{      
        digit6_display(1,32,(cnt1*(1105920000/(cnt3+1)))/100);//輸出頻率
        digit6_display(3,32,cnt1);//顯示精確捕獲計(jì)數(shù)
        digit6_display(5,32,cnt3);//顯示總計(jì)時(shí)器值,該值以1T的精度顯示超過(guò)12T的定時(shí)計(jì)數(shù)值
}
}
void t0_isr() interrupt 1 //定時(shí)
{
        TR1=1;
        TR0=0;
        PWMA_SR1=0;//中斷標(biāo)志位清零
        PWMA_IER=0x02;//開(kāi)捕獲中斷,用于捕獲第二次中斷
}

void PWMA_isr() interrupt 26//用來(lái)啟動(dòng)和停止計(jì)數(shù)器,輸出測(cè)量數(shù)值
{
first=!first;
        if(first)
{
        TR1=0;//停定時(shí)器
        cnt1=(PWMA_CCR1H<<8)+PWMA_CCR1L; //CCp1 捕獲值輸出
        cnt2=(TH1<<8)+TL1;//讀計(jì)時(shí)器
/*
        cnt2=TH1;
        cnt2=(cnt2<<8);
        cnt2=cnt2+TL1;
        */
        cnt3=cnt2+(65535*12);        //兩個(gè)定時(shí)器的計(jì)時(shí)值之和
        //下一次測(cè)量的初始化
        TL1 = 0x00;                //設(shè)置定時(shí)初始值
        TH1 = 0x00;                //設(shè)置定時(shí)初始值
        TL0 = 0x00;                //設(shè)置定時(shí)初始值
        TH0 = 0x00;                //設(shè)置定時(shí)初始值
        PWMA_EGR|=0x01;//產(chǎn)生一次更新事件,可用來(lái)使計(jì)數(shù)器初始化,硬件自動(dòng)清零
        PWMA_SR1=0;//中斷標(biāo)志位清零
        PWMA_IER=0x02;//開(kāi)捕獲中斷,用于捕獲第一次中斷
        PWMA_CR1|=0x01; //使能計(jì)數(shù)器
}
else
{
        TR0=1;//開(kāi)T0定時(shí)器
        PWMA_SR1=0;//中斷標(biāo)志位清零
        PWMA_IER=0;//關(guān)捕獲中斷
}

}
#include "mcu_initial.h"
#include "STC32G.H"
void mcu_initial(void)
{
P_SW1=0x04;//選擇P2.2,2.4,2.4.2.5輸出SPI
EAXFR = 1; //使能訪問(wèn) XFR
CKCON = 0x00; //設(shè)置外部數(shù)據(jù)總線速度為最快
WTST = 0x00; //設(shè)置程序代碼等待參數(shù),        
        P1M0=0x00;   //P1配置為高阻,其中的P1.6為雙向。P1.0輸入被檢測(cè)脈沖
        P1M1=0xbf;
                P2M0=0xFF;//P2為推挽,其實(shí)雙向模式也可
        P2M1=0x00;
        P3M1|=0x04;
        P3M0&=0xfb;//把P3.2設(shè)置為高阻端,用于外部模式二輸入被測(cè)信號(hào),本程序中沒(méi)用到

        AUXR &= 0x7F;                //定時(shí)器0時(shí)鐘12T模式
        TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
        TL0 = 0;                //設(shè)置定時(shí)初始值
        TH0 = 0;                //設(shè)置定時(shí)初始值4ms,11M
        TF0 = 0;                //清除TF0標(biāo)志
      
        AUXR |= 0x40;                //定時(shí)器1時(shí)鐘1T模式
        TMOD &= 0x0F;                //設(shè)置定時(shí)器T1模式
        TL1 = 0x00;                //設(shè)置定時(shí)初始值
        TH1 = 0x00;                //設(shè)置定時(shí)初始值
        TF1 = 0;                //清除TF1標(biāo)志

        HSSPI_CFG2=0X20;//開(kāi)高速SPI模式,方便使用33M時(shí)鐘
        SPSTAT=0x00;
        SPCTL=0xd3;                                                                                 

        MCLKOCR=0x82;//P1.6輸出2分頻系統(tǒng)時(shí)鐘,提供一個(gè)方便的測(cè)試信號(hào)源

//外部模式一
        PWMA_PS=0x00;//選擇P1.0輸入外部信號(hào)
        PWMA_CCER1=0x00;//關(guān)cc1通道,準(zhǔn)備寫(xiě)CCMR1
        PWMA_CCMR1=0x01;//PWMA_CCMR1.CC1S=01//IC1映射在TI1FP1上。設(shè)置為輸入模式,關(guān)濾波,關(guān)預(yù)分頻器
        PWMA_CCER1=0X01;//選擇cc1p上升沿極性.使能cc1p
        PWMA_SMCR=0x57;//選中外部觸發(fā)輸入。上升沿觸發(fā),復(fù)位模式,輸入通道在TI1FP1,資料參考值為0x57
        PWMA_SR1=0;//中斷標(biāo)志位清零
        PWMA_SR2=0;//重復(fù)捕獲中斷標(biāo)志位清零

        EA=1;
        ET0=1;
}

8400HZ.jpg (296.3 KB, 下載次數(shù): 115)

信號(hào)源設(shè)置8400HZ顯示

信號(hào)源設(shè)置8400HZ顯示

8400.png (19.75 KB, 下載次數(shù): 112)

信號(hào)源設(shè)置8400HZ示波器顯示

信號(hào)源設(shè)置8400HZ示波器顯示

3Whz.jpg (435.5 KB, 下載次數(shù): 117)

信號(hào)源設(shè)置3萬(wàn)HZ顯示

信號(hào)源設(shè)置3萬(wàn)HZ顯示

3W.jpg (5.04 MB, 下載次數(shù): 112)

信號(hào)源設(shè)置3萬(wàn)HZ示波器顯示

信號(hào)源設(shè)置3萬(wàn)HZ示波器顯示

30W.jpg (355.44 KB, 下載次數(shù): 111)

30萬(wàn)測(cè)量顯示

30萬(wàn)測(cè)量顯示

240HZ.jpg (448.83 KB, 下載次數(shù): 126)

240HZ測(cè)量顯示

240HZ測(cè)量顯示

Keil代碼.7z

49.02 KB, 下載次數(shù): 26, 下載積分: 黑幣 -5

評(píng)分

參與人數(shù) 2黑幣 +104 收起 理由
STC莊偉 + 4 贊一個(gè)!
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂3 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1017706 發(fā)表于 2022-10-12 14:57 | 只看該作者
不錯(cuò),我過(guò)來(lái)看看學(xué)習(xí)下
回復(fù)

使用道具 舉報(bào)

板凳
ID:1047952 發(fā)表于 2022-10-17 08:48 | 只看該作者
這用到了  STC-ISP 的 調(diào)試顯示接口了,畢竟 普通的 LCD 顯示能力太弱了
回復(fù)

使用道具 舉報(bào)

地板
ID:1038726 發(fā)表于 2022-10-17 08:55 | 只看該作者
我也去STC申請(qǐng)樣品測(cè)試一下,程序有了,直接照抄啦
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 伊人久久麻豆 | caoporn国产精品免费公开 | 精品三级在线观看 | 欧美高清成人 | 国产成人小视频 | 久久久久国产一区二区三区 | 四虎国产 | 免费成人av| 欧美日韩久久精品 | 中文字幕亚洲一区 | 日本天天操 | 精品国产一区二区 | 不卡一区 | 欧美在线一区二区三区 | 麻豆国产一区二区三区四区 | 天天拍天天操 | 国产成人综合在线 | 亚洲日韩中文字幕一区 | 亚洲一区 中文字幕 | 欧美日韩国产欧美 | 欧美日韩精品久久久免费观看 | 天堂精品视频 | 九九九色| 欧美成人二区 | 欧美午夜精品理论片a级按摩 | 成人国产一区二区三区精品麻豆 | 亚洲精品一区中文字幕乱码 | 91精品国产91久久久久久吃药 | 国产精品一区二区日韩 | 免费黄网站在线观看 | 一区二区三区视频在线观看 | 亚洲视频在线观看免费 | 国产99久久精品 | 国产精品久久久久久妇女 | 一区二区三区免费 | 在线免费观看黄a | 欧美一区二区在线观看 | 日韩一区在线观看视频 | 91精品无人区卡一卡二卡三 | 亚洲一区二区三区视频 | tube国产|