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

51單片機與pwm

發布時間:2022-06-11 05:54:48

1. 51單片機實現pwm對電機調速

可以用一個定時器實現,也可以用兩個定時器實現
一個定時器實現辦法,如定時器定時50US中斷一次,中斷100次是5ms,即PWM的周期
每次中斷,變數a加1,並且a與另一變數b比較,如果a<b,讓某一管腳輸出高電平,如果a>=b,則讓其輸出低電平,a等於100時清0,這樣占空比是b/100,改變b的值,就可以改變占空比
缺點定時器定時時間不能太短,例如10us中斷程序根本執行不完,若占空比調節精度要求較高,如要求百分之一,則a需大於100,這樣PWM波的周期就比較大,頻率比較低
兩個定時器,如一個定時器0定時100us,另外一個定時器1定時小於100us,如b
us
定時器0中斷時輸出高電平,並打開定時器1,定時器1負責置低電平
這樣,就可以產生周期100us,占空比是b/100的方波
頻率可以比用一個定時器高一些

2. 51單片機是如何產生PWM波的。。用定時器中斷如何實現

有的單片機帶有pwm功能,用定時器實現的方法是:根據占空比計算出高電平和低電平的時間,利用定時器定時,然後取反就可以了

3. 求詳細解釋這個51單片機PWM波原理

這個程序每一條語句你肯定能看懂,給你加註釋沒有必要,給你講講PWM的原理,你再對照程序看就明白了
你要用51產生PWM去控制LED,首先你要確定PWM的周期T和占空比D,確定了這些以後,你可以用定時器產生一個時間基準t,比如定時器溢出n次的時間是PWM的高電平的時間,則D*T=n*t,類似的可以求出PWM低電平時間需要多少個時間基準n'
那麼你就可以編寫程序,根據你定的時間基準
t
去給定時器賦值初始化,然後開啟定時器,定義一個標志位flag,根據flag的狀態決定輸出高平還是低電平,假設定義flag=1的時候輸出高電平,用一個變數去記錄定時器中斷的次數,每次中斷就讓記錄中斷次數的變數+1,在中斷程序裡面判斷這個變數的值是否到了
n
,如果到了說明高電平的時間夠了,那麼就改變flag為0,輸出低電平,同時記錄中斷變數的值清零,每次中斷的時候依舊+1,根據flag=0的情況跳去判斷記錄變數的值是否到了
n'
如果到了,說明PWM的低電平時間夠了,那麼就改flag=1,輸出改高電平,同時記錄次數變數清零,重新開始,如此循環便可得到你想要的PWM波形。

4. 51單片機如何產生8路PWM波

用兩個定時器的方法是用定時器t0來控制頻率,定時器t1來控制占空比。大致的的編程思路是這樣的:t0定時器中斷讓一個i0口輸出高電平,在這個定時器t0的中斷當中起動定時器t1,而這個t1是讓io口輸出低電平,這樣改變定時器t0的初值就可以改變頻率,改變定時器t1的初值就可以改變占空比。
用一個定時器時(如定時器t0),首先你要確定pwm的周期t和占空比d,確定了這些以後,你可以用定時器產生一個時間基準t,比如定時器溢出n次的時間是pwm的高電平的時間,則d*t=n*t,類似的可以求出pwm低電平時間需要多少個時間基準n'。
因為這里我們是產生周期為1ms(1000hz)的pwm,所以可設置中斷的時間基準為0.01ms,,然後中斷100次即為1ms。在中斷子程序內,可設置一個變數如time,在中斷子程序內,有三條重要的語句:1、當time>=100時,time清零(此語句保證頻率為1000hz),2、當time>n時(n應該在0-100之間變化開),讓單片相應的i/o口輸出高電平,當time

評論
0

0

0

載入更多

5. c51單片機pwm==0和pwm==1有什麼區別

PWM是一種對模擬信號電平進行數字編碼的方法。
1、通過高解析度計數器的使用,方波的占空比被調制用來對一個具體模擬信號的電平進行編碼。
2、PWM信號仍然是數字的,因為在給定的任何時刻,滿幅值的直流供電要麼完全有(ON),要麼完全無(OFF)。

6. 51單片機產生pwm波

確實PWM頻率夠低的,定時器時間可短一些,如100us或1ms,但不能太低,如10us,中斷就
太頻繁了
調
節占空比:
void
X0_INT()
interrupt
0
{
b++;
if(b
>
19)
b
=
19;
//占空比等級最大為19
}
//------------------------------------------
void
X1_INT()
interrupt
2
{
b--;
if(b
<1)
b
=
1;
//占空比等級最小
為1
}
另外
unsigned
int
a,
b浪費內存
應寫為
unsigned
char
a,
b

7. 如何利用51單片機輸出PWM波

1、用定時器+編程
2、51系列單片機無PWM輸出功能,可以採用定時器配合軟體的方法輸出。對精度要求不高的場合,非常實用
3、思路:定義一個靜態變數,程序每次進入定時器的中斷函數中時判斷是否滿足你說要求的占空比,沒達到就繼續對變數值進行累加直到滿足條件後使輸出PWM波的那個引腳電平反轉

4、具體詳見http://wenku..com/link?url=u82FHU5L--ZvMAabY2JKxCEajqxn_f5GPMl5GQRgrnji3hAGRBq11e

8. 51單片機怎麼產生pwm程序

正則表達式替換 import java.util.regex.Matcher; import java.util.regex.Pattern; public class $ { public static void main(String... _) { String sa = "<ABCDEFGHIJK>SDFER<EGD>FG"; Pattern p = Pattern.compile("<([A-Z]|[a-z]){0,}>"); Matcher match = p.matcher(sa); while (match.find()) { String str = match.group(); sa = sa.replaceFirst(str, str.toLowerCase()); } System.out.println(sa); } }

9. 51單片機PWM

#include <stc51.h>
int X ; // PWM的周期 單位:us微秒
int ty; //占空比變數
void main()
{
X=2000; //周期100uS 即PWM的頻率=10KHZ
ty=50; //占空比 50%
TMOD=0X11;
EA=1;
ET0=1;
ET1=1;
TH0=(65535-ty)/256; //定時器0 改變占空比
TL0=(65535-ty)%256;
TH1=(65535-X)/256 ; //定時器1 改變頻率
TL1=(65535-X)%256;
TR0=1;
TR1=1;
while(1) ;
}
void timer0_isr() interrupt 1 //定時器0;改變占空比
{
TR0=0;
P1=0X00;
++ty;
if(ty>=X-1) ty=1;
}
void timer1_isr() interrupt 3 //定時器1 ;改變PWM頻率 即周期
{
P1=0XFF;
TH1=(65535-X)/256; //改變周期
TL1=(65535-X)%256;
TH0=(65535-ty)/256; //改變占空比
TL0=(65535-ty)%256;
TR0=1;
//TR1=1;
}

閱讀全文

與51單片機與pwm相關的資料

熱點內容
手機程序加密有什麼作用 瀏覽:178
求黑馬程序員python教程 瀏覽:528
androidmvvm優缺點 瀏覽:894
unix下編譯庫文件 瀏覽:633
程序員的u盤 瀏覽:237
android根據經緯度獲取城市 瀏覽:564
python使用解釋器還是編譯器 瀏覽:358
以下關於有加密演算法及密鑰描述 瀏覽:219
linuxgethostname 瀏覽:416
程序員多數有對象 瀏覽:131
單片機延時程序計算 瀏覽:444
編譯原理語法翻譯 瀏覽:504
pr編譯出錯渲染存在偏移 瀏覽:262
如何製作自家的app 瀏覽:199
推薦一個解壓軟體rar解壓幫手 瀏覽:210
wd文檔加密器 瀏覽:748
伺服器上傳壓縮包一般是什麼格式 瀏覽:333
發送加密文件密碼幾位數 瀏覽:160
樹洞app怎麼樣 瀏覽:175
vivo編譯時間可以改么 瀏覽:150