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

QQ登錄

只需一步,快速開始

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

STC15Fxx系列單片機(jī)硬件PWM利用定時(shí)器2溢出脈沖作為計(jì)數(shù)器計(jì)數(shù)脈沖問題?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:232366 發(fā)表于 2023-3-26 10:16 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
下面是一個(gè)STC15單片機(jī)的硬件輸出PWM程序其硬件PWM的計(jì)數(shù)脈沖我設(shè)置的是使用定時(shí)器2的中斷溢出脈沖作為計(jì)數(shù)脈沖
自己琢磨了好久目前功能是實(shí)現(xiàn)了但是計(jì)算來計(jì)算去都搞清楚  最終的PWM頻率是怎么來的目前輸出頻率是20HZ邏輯分析
儀測(cè)試出來的想問問論壇有經(jīng)驗(yàn)的老鐵幫忙解答一下?

#define CYCLE   0x1f4L                //定義PWM周期(最大值為32767)
#define DUTY    50L                        //定義占空比為50%


/*---------------------------------------------------------------------*/
/*STC15Fxx 系列 單片機(jī)硬件PWM利用定時(shí)器2溢出脈沖作為計(jì)數(shù)器計(jì)數(shù)脈沖實(shí)例 */
/*--------工作頻率為12MHz-----------------------------*/

void Timer2Init(void)        //100微秒@12.000MHz"中斷周期為200us"
{
        AUXR&=0xFB;                //定時(shí)器時(shí)鐘12T模式
        T2L = 0x9C;                //設(shè)置定時(shí)初始值
        T2H = 0xFF;                //設(shè)置定時(shí)初始值
        AUXR|=0x10;                //定時(shí)器2開始計(jì)時(shí)
        IE2&=0xFB;                //允許定時(shí)器2申請(qǐng)中斷
        IE2|=0x04;                //允許定時(shí)器2申請(qǐng)中斷
        EA=1;                        //允許所有的中斷源申請(qǐng)中斷
}

void PWM_INIT()//STC15Fxx 系列 輸出任意周期和任意占空比的PWM初始化函數(shù)
{
        P_SW2|=0x80;//置1"EAXSFR"允許訪問RAM隨機(jī)存儲(chǔ)器區(qū)的特殊功能寄存器
        PWMCFG=0x00;//(置0"CBTADC位不使能ADC轉(zhuǎn)換")(置0"C2INI使能PWM2端口初始化電平為0")
        PWMCR=0x01;//置0"ENPWM"(先關(guān)閉不啟動(dòng)計(jì)時(shí)總控位)        "置1"ENC20"(使能PWM2通道口為PWM輸出受波形發(fā)生器控制)"
        PWMC=CYCLE;//設(shè)置PWM周期
        PWMCKS|=0x10;//(置"1" "SELT2")時(shí)鐘來源定時(shí)器T2的溢出脈沖 其他位保持不變
        //占空比為(PWM2T2-PWM2T1)/PWMC
        PWM2T1=0x0000;//設(shè)置PWM2第1次反轉(zhuǎn)的PWM計(jì)數(shù)
        PWM2T2=CYCLE*DUTY/100;//設(shè)置PWM2第2次反轉(zhuǎn)的PWM計(jì)數(shù)
        PWM2CR&=0xF7;//選擇PWM2輸出到P2.7,其他功能不使能
        PWM2CR|=0x08;//選擇PWM2輸出到P2.7,其他功能不使能
        PWMCR|=0x80;//最后使能"ENPWM"總控位使內(nèi)部計(jì)數(shù)器開始計(jì)數(shù)(必須全部特殊功能寄存器設(shè)置完畢后才可以使能此位)
        P_SW2&=~0x80;//置0"EAXSFR"禁止訪問RAM隨機(jī)存儲(chǔ)器區(qū)的特殊功能寄存器
}

void Timer2_Interrupt_Service(void) interrupt 12
{
        P30=~P30;
}

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

使用道具 舉報(bào)

沙發(fā)
ID:1034262 發(fā)表于 2023-3-26 11:57 | 只看該作者
用Timer2做PWM時(shí)鐘不要開中斷。
回復(fù)

使用道具 舉報(bào)

板凳
ID:232366 發(fā)表于 2023-3-26 13:37 來自手機(jī) | 只看該作者
coody_sz 發(fā)表于 2023-3-26 11:57
用Timer2做PWM時(shí)鐘不要開中斷。

已經(jīng)關(guān)了  開了貌似也不影響  就是為了調(diào)試用。主要的問題是比如我要調(diào)頻率時(shí)應(yīng)該怎么調(diào)?使用定時(shí)器溢出脈沖作為計(jì)數(shù)脈沖怎么映射到PWM的過程到最后得出的頻率計(jì)算的過程是啥樣的?
回復(fù)

使用道具 舉報(bào)

地板
ID:161164 發(fā)表于 2023-4-1 10:53 | 只看該作者
頻率=1/(中斷時(shí)間*PWM周期)
以你的代碼作例子
頻率=1/(100微秒 * CYCLE) = 1/(100微秒 * 0x1f4) = 1/(50000微秒) = 20hz
要調(diào)頻率,可以改變定時(shí)器2中斷時(shí)間(T2L/T2H)如10us
頻率=1/(10微秒 * CYCLE) = 1/(10微秒 * 0x1f4) = 1/(5000微秒) = 200hz
回復(fù)

使用道具 舉報(bào)

5#
ID:232366 發(fā)表于 2023-4-2 10:23 | 只看該作者
lkc8210 發(fā)表于 2023-4-1 10:53
頻率=1/(中斷時(shí)間*PWM周期)
以你的代碼作例子
頻率=1/(100微秒 * CYCLE) = 1/(100微秒 * 0x1f4) = 1/(500 ...

感謝老鐵耐心回復(fù) 我去計(jì)算一下過程
回復(fù)

使用道具 舉報(bào)

6#
ID:232366 發(fā)表于 2023-4-2 10:55 | 只看該作者
lkc8210 發(fā)表于 2023-4-1 10:53
頻率=1/(中斷時(shí)間*PWM周期)
以你的代碼作例子
頻率=1/(100微秒 * CYCLE) = 1/(100微秒 * 0x1f4) = 1/(500 ...

想問問您式中寫道:頻率=1/(10微秒 * CYCLE) = 1/(10微秒 * 0x1f4) = 1/(5000微秒) = 200hz
請(qǐng)問CYCLE這個(gè)時(shí)鐘是哪里的的時(shí)鐘????定時(shí)器經(jīng)過對(duì)系統(tǒng)時(shí)鐘分頻后的時(shí)鐘還是????
首先很感謝您對(duì)我的帖子精心回復(fù)。請(qǐng)問能不能將上面的式子拆分一下理解 感謝感謝。
回復(fù)

使用道具 舉報(bào)

7#
ID:161164 發(fā)表于 2023-4-2 16:10 | 只看該作者
SHANWAZI 發(fā)表于 2023-4-2 10:55
想問問您式中寫道:頻率=1/(10微秒 * CYCLE) = 1/(10微秒 * 0x1f4) = 1/(5000微秒) = 200hz
請(qǐng)問CYCLE這 ...

cycle是計(jì)時(shí)數(shù)
在代碼開頭處定義了
數(shù)值含義是12Mhz 12T: 1 = 1us
12MHz 1T: 1= 1/12 us
24MHz 12T: 1= 12/24 * 1us = 0.5us
回復(fù)

使用道具 舉報(bào)

8#
ID:232366 發(fā)表于 2023-4-2 16:39 | 只看該作者
lkc8210 發(fā)表于 2023-4-2 16:10
cycle是計(jì)時(shí)數(shù)
在代碼開頭處定義了
數(shù)值含義是12Mhz 12T: 1 = 1us

十分感謝老鐵的耐心回復(fù)與解答。我先去理解理解!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表