1. stc單片機產生pwm,這有一個程序,有人能詳細解釋下它怎麼產生pwm波嗎,能逐句詳解嗎
哥們,這個已經很詳細了;
大概說說吧,PWM[54]是定義的一組PWM脈寬輸出數組,PWM脈寬輸出是0-255;0的時候脈寬輸出最大,255的時候脈寬輸出最小;
然後那個初始化PCA,初始化定時器0就不說了,你自己下一個手冊看下就明白;
然後是中斷,每中斷一次index加1,然後判斷index是不是等於54,意思就是PWM[54]整個數組裡面的PWM是不是都送了一次CCAP寄存器;如果都數組都送了一次,將index置零,從頭開始送;標志位取反,如果標志位zf=1,讓P14輸出PWM,P13關閉;,如果zf=0,讓P13輸出PWM,P14關閉;if(zf==0)後面的語句就是讓PWM[54]中的每一個數都送CCAP寄存器一次;
其實按這個程序注釋的話,他本意是PWM波形從小變大P14輸出,PWM波形有大變小P13輸出;但是這個程序的實際效果是P14由小變大再由大變小。然後P14關閉,P13由小變大再由大變小
如此循環;
你最關心的PWM怎麼輸出:就是這兩個語句,CCAP0H=pwm[index]; CCAP1H=pwm[index]; index每中斷一次加1,那麼index是由0加到54,假如說index=0 ,那麼CCAP0H=pwm[0]; ,pwm[0]對應數字裡面的255,寄存器CCAP0H=255;這個寄存器等於255,PWM輸出就是一個小脈寬;下一次中斷CCAP0H=240了,脈寬有增加了一點;至於CCAP0H送一個數據就有脈寬輸出,這個是由單片機硬體本身決定的;你看看手冊就知道了;
這個已經說得很明白了吧;累死,打字都打了20分鍾;
2. STC單片機PWM輸出最大可以達到多少頻率
STC
1T單片機理論上是最高百工作頻率35MHZ,其最高時鍾頻率應該沒那麼度高,不過20多MH應該沒問題的,定時器問最高頻率應該就是20/256MHZ左右了,不需要定答時器直接在主循環裡面切換狀態可以更快--(不過此時單片機就回只能幹一件事情,就是切答換狀態了)
3. 單片機PWM起什麼作用
1.pwm
脈沖寬度調制(pwm),是英文「pulse
width
molation」的縮寫,簡稱脈寬調制,是利用微處理器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用在從測量、通信到功率控制與變換的許多領域中。
2.單片機中的pwm
指的是此單片機有部分i/o口具有輸出pwm信號的功能。
比如說部分單片機的i/o口可以輸出時鍾信號,時鍾信號的脈寬和占空皮可調,可以根據實際需要調整寄存器位來設定。
3.基本思想就是利用單片機具有的pwm埠,在不改變pwm方波周期的前提下,通過軟體的方法調整單片機的pwm控制寄存器來調整pwm的占空比,從而控制充電電流。以此來調整亮度
4. STC12C5410單片機中的pwm模塊怎樣產生三相正弦波信號
PWM即
脈寬調制
,調矩形波
占空比
的,因此它直接輸出的是矩形波,要想得到正弦波,需要讓這個占空比按正弦波規律輸出,然後再對PWM濾波,此時PWM相當於DA
所以你用三路PWM,如上操作,就可以產生三路正弦波
至於相位和讓占空比按正弦波規律變化,這寫都得在程序中做文章。
5. 自帶PWM功能的STC單片機,在使用內部時鍾的前提下能否產生精度高的38KHz PWM信號
不可以,因為內部RC振盪隨著溫度變化,其振盪頻率是變化的,其實紅外線的載波38K不需要太精確
6. STC單片機產生PWM波
我記得STC 這款晶元如果使用自身PCA/PWM模塊的話,頻率計算如下圖:
所以頻率=(16M)/256;這里假設您使用的是16M的晶振,並且在相關寄存器中配置了PCA時鍾輸入是ECI 如果是其他就是 內部晶振 = SYSclk
7. 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方波
8. 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 位來啟動計數器。
9. STC單片機PWM編程!
看看這個,單片機用的是ADUC848,AD轉換輸出正弦波,和PWM原理類似。
2、源程序清單
DACCONEQU0xfD;定義模數轉換控制器
DACHEQU0xfc;定義模數轉換數據寄存器高8位
DACLEQU0xfb;定義模數轉換數據寄存器低8位
ORG0000H
LJMPMAIN
ORG0200H
MAIN:MOVDACCON,#0fH;DACoperation
CLRA;
MOVDACH,A;模數轉換高八位清零
PRG3:MOVR0,#09H;正弦波
MOVR4,#40H
LP11:MOVA,R0
MOVCA,@A+PC
MOVDACL,A;2
ACALLDELAY;2
INCR0;1
DJNZR4,LP11;2
SJMPPRG3;2
DATA0:
DB80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH
DB0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H
DB0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,98H,8CH
DB80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H
DB0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H
DB1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH
RET
DELAY:MOVR6,#10H
MOVR7,#0A1H
DELAYLOOP:;延時程序
DJNZR6,DELAYLOOP
DJNZR7,DELAYLOOP
RET
四、實驗板插針配置:
無需插針配置,注意DAC是從CONDACOUT1端子輸出,可用示波器觀察DAC輸出波形。若產生失真情況,請檢查開發板DA輸出端LM358運算放大器的放大倍數,適當更改所查函數表的范圍。
五、思考題
1、改變程序,使能添加輸出鋸齒波;
2、改變程序,使輸出添加三角波;
3、改變程序,使輸出添加方波;
4、改變程序,並製作一個簡單的函數發生器
10. C語言讓STC單片機產生PWM信號。
#include<reg51.h>
#define uchar unsigned char
uchar pwm=50,cnt=0;
sbit pluse=P1^0;
sbit keyu=P1^4;
sbit keyd=P1^5;
void t0isr() interrupt 1
{
cnt++;
if(cnt>100)cnt=0;
if(cnt<pwm)pluse=1;
else pluse=0;
}
main()
{
TMOD=0x02;
TH0=256-246; //改變該值可以改變頻率。
TL0=256-246;
TR0=1;
ET0=1;
EA=1;
while(1)
{
if(keyu==0)
{
while(keyu==0);
if(pwm<100)pwm++;
}
if(keyd==0)
{
while(keyd==0);
if(pwm>0)pwm--;
}
}
}