❶ 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)