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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1895|回復: 1
打印 上一主題 下一主題
收起左側

不使用定時器T的頻率測量程序(基于stc32g12k128單片機)

[復制鏈接]
跳轉到指定樓層
樓主
    學習時發現,stc32g12k128單片機的功能蠻強大的,這里給出了一個不使用定時器T的頻率測量方法,所謂不使用定時器T,一方面可以理解為省出了定時器T。方便給其它任務使用,另一方面可以理解為,這個程序里沒有定時。它采用的是頻率比較法測定脈沖信號的頻率,就是把一個被測信號與一個已知頻率的信號做比較,從而測出其頻率。就是對已知頻率信號和被測信號同時進行計數,在適當的時侯(非定時)同時停止計數,比較兩個計數的結果,計算出被測信號的頻率。這個已知頻率的信號由pwmb時鐘給出,并且可以通過調整其頻率,改變系統的測量范圍,其中向下擴展范圍還是挺有用的。為方便使用,程序中加入了兩個測量范圍擴展常數,通過設定常數可以分別獲得測量范圍向上或向下的擴展。其中向上擴展要受芯片IO口速度和系統運行速度的影響。擴展空間不是太大。另外注意不要同時使用兩個擴展常數,否則不僅作用會抵消一些,而且影響精度。做為一般測量,這個程序還是比較方便的,但對精度要求很高時,建議對程序中的數學計算公式進行優化,否則,會由于mcu在計算時對小數部分的切割,產生不少誤差。頻率擴展常數在頭文件mcu_initial.h中設置。
    筆者是個新人,不當之處,歡迎各位大神批評指正。
本程序是基于stc32g12k128的頻率測量程序。在降龍棍核心板和屠龍刀核心板驗證通過。

    下面給出主程序,完整程序在附件中。本程序使用的是jlxlcd12864單色液晶屏,使用其它屏的朋友需要自己更換驅動函數。

mcu_initial.h
#ifndef _mcu_initial_h_
#define _mcu_initial_h_
#define sysclk0 33177600//系統時鐘
//未擴展前基礎測量范圍是2000HZ——2.7MHZ,不要同時向兩個方向擴展,效果會抵消不說,還要影響測量精度,另外,對精度要求高時應對相應的計算公式做優化,可減少由MCU計算產生的誤差(計算誤差主要在最終計算公式中由于小數被切除而產生)
#define up_freq 1//向上擴展測量范圍倍數
#define down_freq 200//向下擴展測量范圍比例,基礎是1
void mcu_initial(void);
        #endif


main.c
#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的初值是為指示程序是否進入測量狀態。cnt2,cnt3是調試時用到的參數
bit first=1;//程序走向控制參數,初值不影響測量結果
void main(void)
{
        unsigned int N,M;
        mcu_initial();
        initial_lcd();
        clear_screen();
transfer_chine_word(1,0,pin);
transfer_chine_word(1,16,lu);
N=up_freq-1;
M=down_freq-1;
PWMA_PSCRH=0;
PWMB_PSCRH=0;
        PWMB_PSCRL=M;//向下擴展分頻器
        PWMA_PSCRL=N;//向上擴展分頻器
//        cnt3=PWMA_PSCRL+1;
        PWMB_CR1=0x00;//關PWMB計數
        PWMB_SR1=0;//中斷標志位清零
        PWMA_SR1=0;//中斷標志位清零
        
        PWMA_CR1|=0x01; //使能計數器
        PWMA_IER=0x02;//開捕獲中斷,用于捕獲第一次中斷
        while (1)
{        
        digit6_display(1,32,(cnt1*up_freq*((sysclk0*10)/(cnt2*down_freq+1)))/10);//輸出頻率單位HZ
        digit6_display(3,32,cnt1);//顯示捕獲計數,正常測量下限,該值不能小于2,就是說,真正的測量下限捕獲計數是2
        digit6_display(5,32,cnt2);//顯示基準信號計數值,要大于65535才是正常的

}
}
void PWMB_ISR() interrupt 27//開捕獲中斷
{
                        PWMB_SR1=0;//中斷標志位清零
        PWMA_SR1=0;//中斷標志位清零
        PWMA_IER=0x02;//開捕獲中斷,用于捕獲第二次中斷

}

void PWMA_isr() interrupt 26//用來啟動和停止計數器,輸出測量數值
{

        first=!first;
        if(first)
{
        PWMA_CR1=0x00;//停止計數
        PWMB_CR1=0x00;//停止計數
        cnt2=(PWMB_CNTRH<<8)+PWMB_CNTRL;//讀計時器
        cnt2=cnt2+65535;
        cnt1=(PWMA_CCR1H<<8)+PWMA_CCR1L; //CCp1 捕獲值輸出
        //下一次測量的初始化
        PWMB_EGR|=0x01;//產生一次更新事件,可用來使計數器初始化,硬件自動清零
        PWMA_EGR|=0x01;//產生一次更新事件,可用來使計數器初始化,硬件自動清零
        PWMB_SR1=0;//中斷標志位清零
        PWMA_SR1=0;//中斷標志位清零
        PWMA_CR1|=0x01; //使能計數器
        PWMA_IER=0x02;//開捕獲中斷,用于捕獲第一次中斷

}
else
{
        
        PWMB_CR1|=0x01; //使能計數器
        //PWMA_SR1=0;//中斷標志位清零
        PWMA_IER=0;//關捕獲中斷
}
}


10HZ測量結果.png (3.82 MB, 下載次數: 78)

10Hz測量結果,向下擴展200時

10Hz測量結果,向下擴展200時

Keil代碼.7z

26.56 KB, 下載次數: 16, 下載積分: 黑幣 -5

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:1039438 發表于 2022-10-15 08:14 | 只看該作者
對三個語句的注釋部分做了修改,之前誤用了舊程序的注釋,抱歉。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久九九九九 | 日韩三 | 欧美成人精品一区二区男人看 | 亚洲精品一区二区二区 | 综合久久亚洲 | 国产一区二区三区四区hd | 国产欧美一区二区三区久久 | 欧美日本亚洲 | 午夜精品一区二区三区在线视频 | 国产情侣一区 | 日本激情一区二区 | 久久成人一区 | 91在线观看免费视频 | 欧美成人精品一区二区男人看 | 亚洲日韩中文字幕一区 | 麻豆久久精品 | 国产中文区二幕区2012 | 精品美女 | 成人在线视频看看 | 天堂久久av | 精彩视频一区二区三区 | 精品无码久久久久国产 | 亚洲精品视频在线看 | 久久伊人免费视频 | 久久精品无码一区二区三区 | 综合色站导航 | 久久久蜜桃一区二区人 | 欧美亚洲国产日韩 | 欧美精品福利视频 | 网站黄色在线 | av中文天堂 | 免费观看成人av | 国产成人福利在线观看 | 最近中文字幕第一页 | 91精品91久久久 | 一级做a爰片久久毛片免费看 | 午夜影院在线观看 | 91一区二区三区在线观看 | 爱爱综合网 | 亚洲成人精品一区二区 | 国产精品福利在线观看 |