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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2699|回復(fù): 3
收起左側(cè)

基于stc32g12k128單片機和jlx12864的簡易脈沖測量器 附程序

[復(fù)制鏈接]
ID:1039438 發(fā)表于 2022-9-28 16:06 | 顯示全部樓層 |閱讀模式
使用stc32g12k128(實際用了降龍棍核心板)和一個lcd顯示屏,可以構(gòu)建一個簡易脈沖測量器,該測量器有很寬的測量范圍和不錯的精度,而且由于對硬件沒有其它要求,可以在一般應(yīng)用的系統(tǒng)上,臨時寫入程序,使其成為一個測量脈沖工具,下面分享我的程序和思路,供初學(xué)單片機的朋友參考。
一、硬件選擇的考慮和功能
開始做這個東西的目的,是測量USB信號,48MHZ脈沖信號。相信stc32g12k128具有這個能力,使用jlx12864是看中它具有較快的顯示速度。使用TFT彩屏?xí)r,傳送一個點的數(shù)據(jù)需要兩個8位傳送指令,而jlx12864單色屏,一個8位傳送指令送出的是8個點的顯示信息。速度相差很大,這對高速脈沖的測量顯示很有價值。但實際設(shè)計時卻發(fā)現(xiàn),stc32g12k128的PWM和SPI是共用時鐘輸入分頻器的,如果想測48M的脈沖,必須讓PWM工作在高速模式,但這樣SPI也工作在高速模式了(我的屏是SPI接口),可是現(xiàn)在無論是屏還是IO接口,都不支持這樣的高速。除非使用并口屏,因為手里沒有并口屏,只好放棄了48M的測量。現(xiàn)在的搭配可以測量600HZ到10MHZ的脈沖信號(附圖中有一個測量系統(tǒng)時鐘的結(jié)果),因為對其它硬件沒有要求。所以還是蠻有用的一個東東。
二、程序主體
程序分如下幾個部分(完整程序在附件中)
1、mcu配置,這對PWM使用很重要,內(nèi)容也多些。
2、lcd12864屏驅(qū)動,包括屏的初始化和屏顯示用函數(shù),這部分可以根據(jù)用戶自己的屏進行修改,如果用戶用的并口屏,可以試著測更高的頻率。當(dāng)然程序中的參數(shù)需要修改。重要的是開高速PWM模式。
3、中斷函數(shù),一個是PWM中斷,用來捕捉周期和脈寬信號。一個是T0中斷,只為在無被測信號時顯示0.也就是超時清零。不過頻率欄在無信號時用來顯示系統(tǒng)時鐘頻率。
4、數(shù)字字模和漢字字模,分別在兩個頭文件中,方便修改。

11M.jpg
測量11.0592MHZ芯片的時鐘

600hz.jpg
測600HZPWM信號

2000.jpg
測2000HZPWM信號

mcu配置和main如下:
#include "STC32G.H"
#include "stc32_12864driver.h"
#include "mcu_initial.h"
#include "initial_lcd.h"
#include "chinese_zhouqi.h"
unsigned long int cnt1,cnt2;
void main(void)
{
        mcu_initial();
        initial_lcd();
        clear_screen();
transfer_chine_word(1,0,zhou);
transfer_chine_word(1,16,qi);
transfer_chine_word(3,0,zhan);
transfer_chine_word(3,16,kong);
transfer_chine_word(5,0,pin);
transfer_chine_word(5,16,lu);
        EA=1;
        ET0=1;
        while (1)
{        
digit6_display(1,32,cnt1);//以計數(shù)的形式顯示周期值
        digit6_display(3,32,cnt2);//以計數(shù)的形式顯示脈寬
        digit6_display(5,32,33177600/(cnt1+1));//顯示轉(zhuǎn)換后的頻率值,單位HZ,無被測信號時顯示單片機的時鐘

}
}

void PWMA_ISR(void) interrupt 26 //測量脈沖的周期和脈寬
{         
TR0=0;//關(guān)T0,中斷響應(yīng)期間免受T0中斷影響
        
if (PWMA_SR1 & 0x02) //判斷上升沿捕獲中斷是否發(fā)生
{

if (PWMA_SR1 & 0x02) //判斷上升沿捕獲中斷是否發(fā)生
{
PWMA_SR1 &= ~0x02; //中斷標(biāo)志位清零

cnt1 = (PWMA_CCR1H << 8) + PWMA_CCR1L; //CC1 捕獲周期寬度
}
if (PWMA_SR1 & 0x04) //判斷下降沿捕獲中斷是否發(fā)生
{
PWMA_SR1 &= ~0x04; //中斷標(biāo)志位清零

cnt2 = (PWMA_CCR2H << 8) + PWMA_CCR2L; //CC2 捕獲占空比(高電平寬度)
         TH0=0;//T0初始化
         TL0=0;
TR0=1;//開T0定時器
}
}
}

void tm0_isr(void) interrupt 1 //定時清屏幕顯示
{
        cnt2=0;
        cnt1=0;
}

#include "mcu_initial.h"
#include "STC32G.H"
void mcu_initial(void)
{
P_SW1=0x04;
EAXFR = 1; //使能訪問 XFR
CKCON = 0x00; //設(shè)置外部數(shù)據(jù)總線速度為最快
WTST = 0x00; //設(shè)置程序代碼等待參數(shù),         
        P1M0=0x00;   //P1配置為高阻,其中的P1.6為雙向。P1.0輸入被檢測脈沖
P1M1=0xbf;

                P2M0=0xFF;
        P2M1=0x00;

//        AUXR |= 0x80;                //定時器時鐘1T模式,定時器用較慢模式,減少對測量可能產(chǎn)生的影響
        TMOD &= 0xF0;                //設(shè)置定時器模式
        TL0 = 0x00;                //設(shè)置定時初始值
        TH0 = 0x00;                //設(shè)置定時初始值
        TF0 = 0;                //清除TF0標(biāo)志
        TR0 = 1;                //定時器0開始計時

MCLKOCR=0xff;//P1.6輸出127分頻系統(tǒng)時鐘
        
        HSSPI_CFG2=0X20;
        SPSTAT=0x00;
        SPCTL=0xd3;

        PWMA_PS=0x00;//不需要選了,用默認值
//(CC1 捕獲 TI1 上升沿,CC2 捕獲 TI1 下降沿)
//CC1 捕獲周期寬度,CC2 捕獲高電平寬度

        PWMA_CCER1 = 0x00; //捕獲使能。采用了初始值
PWMA_CCMR1 = 0x01; //CC1 為輸入模式,且映射到 TI1FP1 上
PWMA_CCMR2  =0x02; //CC2 為輸入模式,且映射到 TI1FP2 上
PWMA_CCER1 = 0x11; //使能 CC1/CC2 上的捕獲功能
PWMA_CCER1 |= 0x00; //設(shè)置捕獲極性為 CC1 的上升沿
PWMA_CCER1 |= 0x20; //設(shè)置捕獲極性為 CC2 的下降沿
PWMA_SMCR = 0x54; //TS=TI1FP1,SMS=TI1 上升沿復(fù)位模式
PWMA_IER = 0x06; //使能 CC1/CC2 捕獲中斷 。但TIE和UIE沒開通
PWMA_CR1 |= 0x01; //使能計數(shù)器
}

三、使用效果
見附圖吧測量時使用單獨一個降龍棍核心板作信號發(fā)生器,產(chǎn)生600HZ,2000HZ的PWM信號和一個系統(tǒng)時鐘輸出,然后用本貼所述的系統(tǒng)對其進行測試。信號發(fā)生器的低頻輸出用虛擬示波器測試,測試結(jié)果與設(shè)定值相符。
四、存在的問題
1、在測量較低頻率時出現(xiàn)的誤差。超出預(yù)期。
2、高頻時誤差比預(yù)期小太多,應(yīng)該引起重視(懷疑)。
3、可以用調(diào)整程序內(nèi)容實現(xiàn)低頻率的測量。
4、沒有使用并口屏實現(xiàn)更高頻率脈沖的捕捉。
有實力的朋友應(yīng)該能夠容易的解決存在的問題。

Keil代碼下載: Keil代碼.7z (25.82 KB, 下載次數(shù): 35)

評分

參與人數(shù) 1黑幣 +90 收起 理由
admin + 90 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2022-9-28 19:31 | 顯示全部樓層
這個程序在高頻段測試中存在嚴重缺點,正在修改中。
回復(fù)

使用道具 舉報

ID:961114 發(fā)表于 2022-9-29 08:49 | 顯示全部樓層
stc32g12k128的PWM和SPI是共用時鐘輸入分頻器的,如果想測48M的脈沖,必須讓PWM工作在高速模式,但這樣SPI也工作在高速模式了(我的屏是SPI接口)=====SPI 可以任意用PLL時鐘,或 CPU 的 時鐘,還可以分頻
回復(fù)

使用道具 舉報

ID:1039438 發(fā)表于 2022-9-29 16:18 | 顯示全部樓層
STC莊偉 發(fā)表于 2022-9-29 08:49
stc32g12k128的PWM和SPI是共用時鐘輸入分頻器的,如果想測48M的脈沖,必須讓PWM工作在高速模式,但這樣SPI ...

我以為用了PLL后只有在HSCLKDIV這里能分頻呢。原來還可以在SPCTL里再分一次頻。謝謝莊老師。

我是在這里看到的共用時鐘

我是在這里看到的共用時鐘

在這里分頻,把頻率再降下來嗎

在這里分頻,把頻率再降下來嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 青青久草 | 欧美精品一区在线 | 亚洲五码久久 | 国产精品区一区二区三区 | 欧洲亚洲视频 | 91porn成人精品 | 在线观看中文字幕dvd播放 | 成人免费毛片片v | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 欧美一区二区三区在线播放 | 国产视频福利 | 国产三级大片 | 亚洲精品永久免费 | 成年免费大片黄在线观看岛国 | 中文字幕一区二区三区四区 | 三级黄色片在线播放 | 精品欧美一区二区精品久久 | 美日韩视频 | 日本亚洲一区 | 久久成人综合 | 国产亚洲一区精品 | 日韩在线| 亚洲精品一区二区三区四区高清 | 精品国产欧美一区二区三区成人 | 亚洲精彩视频在线观看 | 国产成人高清视频 | 亚洲国产成人精品久久久国产成人一区 | 欧美激情精品久久久久久 | 国产99免费视频 | 日韩久久成人 | 理论片87福利理论电影 | 一区二区av | 亚洲精品免费在线 | 日本福利视频免费观看 | 天天看片天天干 | 亚洲国产自产 | 午夜影院在线观看 | 亚洲免费人成在线视频观看 | 成人网在线看 | 天天拍天天草 | 欧美日韩成人影院 |