導航:首頁 > 操作系統 > stc單片機pwm

stc單片機pwm

發布時間:2024-03-30 12:11:03

❶ STC15W4K32S4單片機怎麼使用自帶的PWM功能同時輸出控制3個電機

/*任意周期和任意佔空比DUTY%的PWM*/
#define CYCLE 6000L //定義PWM周期(最大值為32767)
sbit PWM2=P3^7;
sbit PWM3=P2^1;
sbit PWM4=P2^2;

void pwminit()
{ P_SW2 |= 0x80;
PWMCFG = 0x00; //配置PWM的輸出初始電平為低電平
PWMCKS = 0x0f; //選擇PWM的時鍾為Fosc/(0+1)
PWMC = CYCLE; //設置PWM周期,定義PWM周期(最大值為32767)
PWM2CR = 0x00; //選擇PWM2輸出到P3.7,不使能PWM2中斷
PWM3CR = 0x00;
PWM4CR = 0x00;
PWM2T1 = 0x0001;
PWM2T2 = 0;
PWM3T1 = 0x0001;
PWM3T2 = 0;
PWM4T1 = 0x0001;
PWM4T2 = 0;
PWMCR |= 0x80; //使能PWM模塊
P_SW2 &=~0x80;
}
void pwm2( unsigned int DUTY) //PWM2
{
if(DUTY==0)
{
PWMCR &=~0x01;
PWM2=0;
}
else if (DUTY==100)
{
PWMCR &=~0x01;
PWM2=1;
}
else
{
P_SW2 |= 0x80; //使能訪問PWM在擴展RAM區的特殊功能寄存器XSFR
PWM2T1 = 0x0001; //設置PWM2第1次反轉的PWM計數
PWM2T2 = CYCLE * DUTY / 100; //設置PWM2第2次反轉的PWM計數
P_SW2 &=~0x80; //占空比為(PWM2T2-PWM2T1)/PWMC
PWMCR |= 0x01; //使能PWM信號輸出

}

}
void pwm3(unsigned int DUTY) //PWM3
{
if(DUTY==0)
{
PWMCR &=~0x02;
PWM3=0;
}
else if(DUTY==100)
{
PWMCR &=~0x02;
PWM3=1;
}
else
{
P_SW2 |= 0x80;
PWM3T1 = 0x0001;
PWM3T2 = CYCLE * DUTY / 100;
P_SW2 &=~0x80;
PWMCR |= 0x02;

}
}
void pwm4(unsigned int DUTY) //PWM4
{
if(DUTY==0)
{
PWMCR &=~0x04;
PWM4=0;
}
else if (DUTY==100)
{
PWMCR &=~0x04;
PWM4=1;
}
else
{
P_SW2 |= 0x80;
PWM4T1 = 0x0001;
PWM4T2 = CYCLE * DUTY / 100;
P_SW2 &=~0x80;
PWMCR |= 0x04;

}
}

❷ STC12C5A60S2單片機怎麼才能輸出占空比可調的PWM

void PWM_init (void){//PWM初始化函數

CMOD=0x02; //設置PCA定時器,計數頻率為晶振頻率/2 當為12Mhz時,PWM輸出頻率約23.4Khz
//CMOD=0x00; //設置PCA定時器,計數頻率為晶振頻率/12 當為12Mhz時,PWM輸出頻率約3.9Khz
//CMOD=0x04; //設置PCA定時器,計數頻率為定時器0的溢出率,晶振頻率/256 當為12Mhz時,PWM輸出頻率約183hz
CL=0x00;
CH=0x00;
CCAPM1=0x42; //PWM1設置PCA工作方式為PWM方式(0100 0010)
CCAP1L=0x00; //設置PWM1初始值與CCAP0H相同
CCAP1H=0x00; // PWM1初始時為0
CR=1; //啟動PCA定時器
}

void PWM1_set (uchar a)//PWM1占空比設置函數
{
CCAP1L=a; //設置值直接寫入CCAP1L
CCAP1H=a; //設置值直接寫入CCAP1H
}
主程序中,按預想規律改變PWM1_set (uchar a)的參數即可調節占空比

❸ stc8h單片機如何設置pwm頻率

首先,STC8H不需要外部晶振和外部復位,也可以外接。它的時鍾4M-36M。和其它stc晶元的區別是它的運行速度夠快,8路16位的高級pwm定時器,4路可以輸出互補的脈沖信號,在用這個晶元的時候我發現手冊上有些地方講的不是太清楚,對照了32的手冊才明白了原理,今天著重說一下高級定時器的那部分。     

STC8H 系列的單片機內部集成了 8 通道 16 位高級 PWM 定時器,分成兩組周期可不同的 PWM,分別命名為 PWMA 和 PWMB可分別單獨設置。第一組 PWM/PWMA 可配置成 4 組互補/對稱/死區控制的 PWM 或捕捉外部信號,第二組 PWM/PWMB 可配置成 4 路 PWM 輸出或捕捉外部信號。

pwmA可配置成輸出比較,輸入捕獲以及pwm模式,pwm有邊沿對齊以及中間對齊模式,可直接驅動一些小型的電機,在驅動一些小型的電機時一定要將相應的io口配成推挽輸出在,不然驅動不起來,具體的原理就不寫了,主要說一下主要寄存器以及主要模式的配置。
選擇計數器時鍾(內部、外部或者預分頻器(PSCR)),我用的都是內部。

    預分頻器看你想要輸出的頻率范圍自己設置

2. 將相應的數據寫入 PWMA_ARR(設頻率) 和 PWMA_CCRi (設占空比)寄存器中。頻率=時鍾/(PSCR+1)/(ARR+1)

3. 如果要產生一個中斷請求,設置 CCiIE 位,在中斷判斷SR1狀態位,PWMA和PWMB不是一個中斷號。

4. 選擇輸出模式步驟:

1. 設置 OCiM=011,在計數器與 CCRi 匹配時翻轉 OCiM 管腳的輸出

2. 設置 OCiPE = 0,禁用預裝載寄存器

3. 設置 CCiP = 0,選擇高電平為有效電平,開始輸出高電平。

4. 設置 CCiE = 1,使能輸出

5. 設置 PWMA_CR1 寄存器的 CEN 位來啟動計數器。

輸入捕獲配置:

先設置PSCR,根據你的所測頻率范圍來設數據。設ARR一般為最大值

1.選擇有效輸入端,設置 PWMA_CCMR1 寄存器中的 CC1S=01,此時通道被配置為輸入,並且PWMA_CCR1 寄存器變為只讀。

2. 根據輸入信號 TIi 的特點,可通過配置 PWMA_CCMR1 寄存器中的 IC1F 位來設置相應的輸入濾波器的濾波時間。假設輸入信號在最多 5 個時鍾周期的時間內抖動,我們須配置濾波器的帶寬長於 5 個時鍾周期;因此我們可以連續采樣 8 次,以確認在 TI1 上一次真實的邊沿變換,即在PWMA_CCMR1 寄存器中寫入 IC1F=0011,此時,只有連續采樣到 8 個相同的 TI1 信號,信號才為有效(采樣頻率為 fMASTER)。

3. 選擇 TI1 通道的有效轉換邊沿,在 PWMA_CCER1 寄存器中寫入 CC1P=0(上升沿)。

4. 配置輸入預分頻器。在本例中,我們希望捕獲發生在每一個有效的電平轉換時刻,因此預分頻器被禁止(寫 PWMA_CCMR1 寄存器的 IC1PS=00)。

5. 設置 PWMA_CCER1 寄存器的 CC1E=1,允許捕獲計數器的值到捕獲寄存器中。

6. 如果需要,通過設置

PWMA_IER 寄存器中的 CC1IE 位允許相關中斷請求。

7.使能計數器設置 PWMA_CR1 寄存器的 CEN 位來啟動計數器。

❹ STC單片機PWM輸出最大可以達到多少頻率

8位控制的話是時鍾/256,靠掩位可以更高,但是調控精度降低.

❺ stc12c5a60s2單片機 輸出自帶pwm頻率怎麼改變,比如說我現在需要50hz的頻率

1,stc12c5a60s2一般pwm頻率=PCA時鍾源/256
2,PCA時鍾源設置有4種方式,一般都有T0的溢出率,來設置PCA時鍾源,
一般在COMD這個寄存器的B2,B1兩位來確定是那種方式,10方式就是T0溢出方式(1T更快),可以做可變PCA時鍾源時鍾源,從而得到可變頻率的pwm輸出。

3,理論可生成(1-65535)個頻率級別,如12MHz主頻,(1T)方式最小可以做到12MHz,但實際是到了的最快也就是1/2SYsclk,即6MHz,然後除以256,理想可以輸出23Khz~0.5Hz左右的頻率范圍

❻ STC單片機輸出PWM信號,頻率要25KHz,請大神指教,怎麼實現,或者直接給我一個程序,謝謝!

void PWM_init (void){//PWM初始化函數
CMOD=0x02; //設置PCA定時器,計數頻率為晶振頻率/2 當為12Mhz時,PWM輸出頻率約23.4Khz
//CMOD=0x00; //設置PCA定時器,計數頻率為晶振頻率/12 當為12Mhz時,PWM輸出頻率約3.9Khz
//CMOD=0x04; //設置PCA定時器,計數頻率為定時器0的溢出率,如果讓定時器0設為16位計數模式,其溢出頻率可以在很大范圍內調節,從而以產生很高或很低的PWM頻率
CL=0x00;
CH=0x00;
CCAPM1=0x42; //PWM1設置PCA工作方式為PWM方式(0100 0010)
CCAP1L=0x00; //設置PWM1初始值與CCAP0H相同
CCAP1H=0x00; // PWM1初始時為0
CR=1; //啟動PCA定時器
}
實際上要產生低頻率的PWM波,不用其硬體PWM功能完全可以
用定時器中斷方式即可實現
讓定時器 200us中斷一次(中斷不算頻繁呀) ,設一變數a,每次中斷a加1,100次就是20ms,,另設一變數b,數值在1-100之間,每次中斷比較a和 b的大小,如果a<b,則引腳 輸出高電平,否則為低電平,這樣通過改變b的值,就可實現頻率為50HZ,占空比1-100%可調的PWM方波

❼ stc12c5608ad的單片機內部的PWM最高可輸出多大的頻率要做紅外遙控,至少要38K以上才行!

stc12c5608ad PWM最高可輸出頻率
; PWM = fSYS / 2 / 256
; fosc= 6 MHz PWM 頻率=11.71875KHz
; fosc=12 MHz PWM 頻率=23.4375KHz
; fosc=19. 456MHz PWM 頻率=38.000KHz
stc12c5202ad PWM最高可輸出頻率
; PWM = fSYS / 256
; fosc= 6 MHz PWM 頻率=23.4375KHz
; fosc=12 MHz PWM 頻率=46.875KHz
; fosc=9. 728MHz PWM 頻率=38.000KHz
; fosc=19. 456MHz PWM 頻率=38.000KHz (PWM = fSYS / 2 / 256)

閱讀全文

與stc單片機pwm相關的資料

熱點內容
哪個app買的衣服好 瀏覽:467
天刀以前玩過的伺服器忘了怎麼辦 瀏覽:211
單片機基礎代碼解讀 瀏覽:233
廣東青少年編程學習 瀏覽:509
買男士香水去哪個app 瀏覽:548
androidsleep函數 瀏覽:151
android內核代碼下載 瀏覽:665
伺服器如何添加墨跡 瀏覽:747
diglinux安裝 瀏覽:279
虛擬機執行命令 瀏覽:444
cctv16奧林匹克頻道加密播出 瀏覽:899
c盤微信文件夾隱私 瀏覽:229
asp壓縮mdb 瀏覽:670
node開源論壇源碼 瀏覽:10
單片機比手機晶元還貴 瀏覽:35
java課表 瀏覽:557
如何在pdf裡面修改 瀏覽:930
橙光製作器檔案框在哪個文件夾 瀏覽:992
php如何抓取網頁數據 瀏覽:642
計數器單片機 瀏覽:968