-
C8051F單片機(jī)是完全集成的混合信號系統(tǒng)級芯片(SOC),具有與8051完全兼容的指令內(nèi)核,該單片機(jī)采用流水線處理技術(shù),能在執(zhí)行指令期間預(yù)處理下一條指令,提高了效率。而且大部分型號的C8051F單片機(jī),片內(nèi)集成了數(shù)據(jù)采集和控制系統(tǒng)中常用的模擬和數(shù)字外設(shè)及其他功能部件,內(nèi)置FLASH程序存儲器和RAM數(shù)據(jù)存儲器,部分芯片上還集成了外部數(shù)據(jù)存儲器,即XRAM。C8051F單片機(jī)具有片內(nèi)調(diào)試電路,通過4腳的JTAG接口可以進(jìn)行非侵入式、全速的在系統(tǒng)調(diào)試。下表為C8051F系列具有代表性的型號的主要特性:
標(biāo)簽:
C8051F020
SOC
片上系統(tǒng)
單片機(jī)
上傳時間:
2013-10-29
上傳用戶:781354052
-
電梯的開關(guān)門過程是一個變速運(yùn)動過程 ,需要對電梯門系統(tǒng)的驅(qū)動電機(jī)進(jìn)行調(diào)速控制;本文提出了一種以高性能單片微機(jī)87C196MC 為核心的電梯門機(jī)變頻調(diào)速控制系統(tǒng),功率驅(qū)動電路采用驅(qū)動MOSFET 的專用集成電路IR2130;分析了基于PWM 技術(shù)控制電梯門機(jī)運(yùn)行的方法;采用單片微機(jī)和功率驅(qū)動專用集成電路將門系統(tǒng)電機(jī)的交流變頻器和驅(qū)動控制器集為一體,得到了一種可靠性高、控制靈活、成本低、體積小的電梯門機(jī)控制器。關(guān)鍵字:變頻器;正弦脈寬調(diào)制;電梯門機(jī)系統(tǒng)
電梯的門機(jī)系統(tǒng)是電梯的一個非常重要的子系統(tǒng)。門機(jī)系統(tǒng)性能的優(yōu)劣直接關(guān)系著整個電梯系統(tǒng)能否正常地運(yùn)行。所以說,對門機(jī)系統(tǒng)的設(shè)計(jì)開發(fā)及制造是電梯系統(tǒng)設(shè)計(jì)開發(fā)及制造的一個關(guān)鍵環(huán)節(jié)。從控制這個角度來說,研究的重點(diǎn)應(yīng)側(cè)重于如何把先進(jìn)的變頻調(diào)速技術(shù)應(yīng)用到門機(jī)系統(tǒng)中,使門機(jī)系統(tǒng)能高效經(jīng)濟(jì)可靠地運(yùn)行。在目前的工程實(shí)踐中,交流電機(jī)的變頻調(diào)速策略主要有兩種方法,即正弦脈寬調(diào)制方法(SPWM)和空間矢量脈寬調(diào)制方法(SVPWM)。其中SPWM 的基本原理就是用正弦波和高頻三角載波比較產(chǎn)生PWM 脈沖序列:當(dāng)基波(正弦波)高于三角載波時,相應(yīng)的開關(guān)器件導(dǎo)通,反之,當(dāng)基波低于三角載波時,相應(yīng)的開關(guān)器件截止。產(chǎn)生的PWM 脈沖序列作為逆變器功率開關(guān)器件的驅(qū)動控制信號。本電梯門機(jī)變頻調(diào)速系統(tǒng)就是采用SPWM 調(diào)制方法,采用INTEL 公司的16 位高性能微控制器87C196MC 作為核心控制芯片,由87C196MC 的PWM 波形發(fā)生模塊產(chǎn)生PWM 信號去驅(qū)動功率電路,從而帶動門機(jī)按照預(yù)先設(shè)定的運(yùn)行曲線運(yùn)行。
標(biāo)簽:
C196
196
87C
87
上傳時間:
2013-10-16
上傳用戶:zhaoman32
-
P C B 可測性設(shè)計(jì)布線規(guī)則之建議― ― 從源頭改善可測率PCB 設(shè)計(jì)除需考慮功能性與安全性等要求外,亦需考慮可生產(chǎn)與可測試。這里提供可測性設(shè)計(jì)建議供設(shè)計(jì)布線工程師參考。1. 每一個銅箔電路支點(diǎn),至少需要一個可測試點(diǎn)。如無對應(yīng)的測試點(diǎn),將可導(dǎo)致與之相關(guān)的開短路不可檢出,并且與之相連的零件會因無測試點(diǎn)而不可測。2. 雙面治具會增加制作成本,且上針板的測試針定位準(zhǔn)確度差。所以Layout 時應(yīng)通過Via Hole 盡可能將測試點(diǎn)放置于同一面。這樣就只要做單面治具即可。3. 測試選點(diǎn)優(yōu)先級:A.測墊(Test Pad) B.通孔(Through Hole) C.零件腳(Component Lead) D.貫穿孔(Via Hole)(未Mask)。而對于零件腳,應(yīng)以AI 零件腳及其它較細(xì)較短腳為優(yōu)先,較粗或較長的引腳接觸性誤判多。4. PCB 厚度至少要62mil(1.35mm),厚度少于此值之PCB 容易板彎變形,影響測點(diǎn)精準(zhǔn)度,制作治具需特殊處理。5. 避免將測點(diǎn)置于SMT 之PAD 上,因SMT 零件會偏移,故不可靠,且易傷及零件。6. 避免使用過長零件腳(>170mil(4.3mm))或過大的孔(直徑>1.5mm)為測點(diǎn)。7. 對于電池(Battery)最好預(yù)留Jumper,在ICT 測試時能有效隔離電池的影響。8. 定位孔要求:(a) 定位孔(Tooling Hole)直徑最好為125mil(3.175mm)及其以上。(b) 每一片PCB 須有2 個定位孔和一個防呆孔(也可說成定位孔,用以預(yù)防將PCB反放而導(dǎo)致機(jī)器壓破板),且孔內(nèi)不能沾錫。(c) 選擇以對角線,距離最遠(yuǎn)之2 孔為定位孔。(d) 各定位孔(含防呆孔)不應(yīng)設(shè)計(jì)成中心對稱,即PCB 旋轉(zhuǎn)180 度角后仍能放入PCB,這樣,作業(yè)員易于反放而致機(jī)器壓破板)9. 測試點(diǎn)要求:(e) 兩測點(diǎn)或測點(diǎn)與預(yù)鉆孔之中心距不得小于50mil(1.27mm),否則有一測點(diǎn)無法植針。以大于100mil(2.54mm)為佳,其次是75mil(1.905mm)。(f) 測點(diǎn)應(yīng)離其附近零件(位于同一面者)至少100mil,如為高于3mm 零件,則應(yīng)至少間距120mil,方便治具制作。(g) 測點(diǎn)應(yīng)平均分布于PCB 表面,避免局部密度過高,影響治具測試時測試針壓力平衡。(h) 測點(diǎn)直徑最好能不小于35mil(0.9mm),如在上針板,則最好不小于40mil(1.00mm),圓形、正方形均可。小于0.030”(30mil)之測點(diǎn)需額外加工,以導(dǎo)正目標(biāo)。(i) 測點(diǎn)的Pad 及Via 不應(yīng)有防焊漆(Solder Mask)。(j) 測點(diǎn)應(yīng)離板邊或折邊至少100mil。(k) 錫點(diǎn)被實(shí)踐證實(shí)是最好的測試探針接觸點(diǎn)。因?yàn)殄a的氧化物較輕且容易刺穿。以錫點(diǎn)作測試點(diǎn),因接觸不良導(dǎo)致誤判的機(jī)會極少且可延長探針使用壽命。錫點(diǎn)尤其以PCB 光板制作時的噴錫點(diǎn)最佳。PCB 裸銅測點(diǎn),高溫后已氧化,且其硬度高,所以探針接觸電阻變化而致測試誤判率很高。如果裸銅測點(diǎn)在SMT 時加上錫膏再經(jīng)回流焊固化為錫點(diǎn),雖可大幅改善,但因助焊劑或吃錫不完全的緣故,仍會出現(xiàn)較多的接觸誤判。
標(biāo)簽:
PCB
可測性設(shè)計(jì)
布線規(guī)則
上傳時間:
2014-01-14
上傳用戶:cylnpy
-
單片開關(guān)電源集成電路于20世紀(jì)如年代中、后期問世以來,在國際上獲得廣泛應(yīng)用,已成為開發(fā)中、小功率無工頻變壓器式高效開關(guān)電源的首選產(chǎn)品。本書從實(shí)用角度出發(fā),全面系統(tǒng)深入地闡述了單片開關(guān)電源的設(shè)計(jì)與應(yīng)用。全書共10章。第1至4章分別介紹了六大系列TOPswitch、TOPSwitch—II、TinySwitch、TNY256、MC33370、TOPSwitch—FX等67種型號的單片開關(guān)電源集成電路的原理與應(yīng)用。第5章講述L4960、L4970/4970A系列15種型號的單片開關(guān)式穩(wěn)壓器。第6章介紹16種單片開關(guān)電源模塊的設(shè)計(jì)。第7章闡述單片開關(guān)電源的特殊應(yīng)用。第8、9、10章分別介紹單片開關(guān)電源的設(shè)計(jì)指南、電磁兼容性及酗試技術(shù)、外圍電路關(guān)鍵元器件的選擇。這是國內(nèi)第一部關(guān)于單片開關(guān)電源的專著,充分反映了該領(lǐng)域的國內(nèi)外最新研究成果。
第1章 單片開關(guān)電源概述 1.1 開關(guān)電源的發(fā)展趨勢 1.1.1 開關(guān)電源的發(fā)展歷史 1.1.2 單片開關(guān)電源的發(fā)展趨勢 1.2 開關(guān)電源的基本原理 1.2.1 開關(guān)電源的控制方式 1.2.2 脈寬調(diào)制式開關(guān)電源的基本原理 1.3 單片開關(guān)電源的產(chǎn)品分類及主要特點(diǎn) 1.4 單片開關(guān)電源的基本原理及反饋電路類型 1.4.1 單片開關(guān)電源的基本原理 1.4.2 單片開關(guān)電源的兩種工作模式 1.4.3 反饋電路的四種基本類型 1.5 單片開關(guān)電源典型產(chǎn)品的技術(shù)指標(biāo) 第2章 三端單片開關(guān)電源的原理與應(yīng)用 2.1 TOPSwitch—II系列的產(chǎn)品分類及性能特點(diǎn) 2.1.1 TOPSwitch—II的產(chǎn)品分類 2.1.2 TOPSwitch—II的性能特點(diǎn) 2.2 TOPSwitch—II系列單片開關(guān)電源的工作原理
標(biāo)簽:
單片開關(guān)
電源
上傳時間:
2013-10-29
上傳用戶:潛水的三貢
-
無線感測器已變得越來越普及,短期內(nèi)其開發(fā)和部署數(shù)量將急遽增加。而無線通訊技術(shù)的突飛猛進(jìn),也使得智慧型網(wǎng)路中的無線感測器能夠緊密互連。此外,系統(tǒng)單晶片(SoC)的密度不斷提高,讓各式各樣的多功能、小尺寸無線感測器系統(tǒng)相繼問市。儘管如此,工程師仍面臨一個重大的挑戰(zhàn):即電源消耗。
標(biāo)簽:
能量采集
無線感測器
上傳時間:
2013-10-30
上傳用戶:wojiaohs
-
注:1.這篇文章斷斷續(xù)續(xù)寫了很久,畫圖技術(shù)也不精,難免錯漏,大家湊合看.有問題可以留言.
2.論壇排版把我的代碼縮進(jìn)全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服.
一、什么是PWM
PWM 即Pulse Wavelength Modulation 脈寬調(diào)制波,通過調(diào)整輸出信號占空比,從而達(dá)到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調(diào)制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調(diào)光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數(shù)字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。
二、Arduino 軟件模擬PWM
Arduino PWM 調(diào)壓原理:PWM 有好幾種方法。而Arduino 因?yàn)殡娫春蛯?shí)現(xiàn)難度限制,一般 使用周期恒定,占空比變化的單極性PWM。
通過調(diào)整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。
如圖所示,假設(shè)PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實(shí)現(xiàn)難點(diǎn)在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始:
const int PWMPin = 13;
int bright = 0;
void setup()
{
pinMode(PWMPin, OUTPUT);
}
void loop()
{
if((bright++) == 255) bright = 0;
for(int i = 0; i < 255; i++)
{
if(i < bright)
{
digitalWrite(PWMPin, HIGH);
delayMicroseconds(30);
}
else
{
digitalWrite(PWMPin, LOW);
delayMicroseconds(30);
}
}
}
這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環(huán)可以看出,完成一個PWM 周期,共循環(huán)255 次。
假設(shè)bright=100 時候,在第0~100 次循環(huán)中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平;
然后第100 到255 次循環(huán)里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。
那么說,如果bright=100 的話,就有100 次循環(huán)是高電平,155 次循環(huán)是低電平。 如果忽略指令執(zhí)行時間的話,這次的PWM 波形占空比為100/255,如果調(diào)整bright 的值, 就能改變接在D13 的LED 的亮度。
這里設(shè)置了每次for 循環(huán)之后,將bright 加一,并且當(dāng)bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應(yīng)該是大家想的比較多的想法。
然后介紹一個簡單一點(diǎn)的。思維風(fēng)格完全不同。不過對于驅(qū)動一個LED 來說,效果與上面 的程序一樣。
const int PWMPin = 13;
int bright = 0;
void setup()
{
pinMode(PWMPin, OUTPUT);
}
void loop()
{
digitalWrite(PWMPin, HIGH);
delayMicroseconds(bright*30);
digitalWrite(PWMPin, LOW);
delayMicroseconds((255 - bright)*30);
if((bright++) == 255) bright = 0;
}
可以看出,這段代碼少了一個For 循環(huán)。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。
三、多引腳PWM
Arduino 本身已有PWM 引腳并且運(yùn)行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實(shí)用意義。我們軟件模擬的價值在于:他能將任意的數(shù)字IO 口變成PWM 引腳。
當(dāng)一片Arduino 要同時控制多個PWM,并且沒有其他重任務(wù)的時候,就要用軟件PWM 了。
多引腳PWM 有一種下面的方式:
int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設(shè)置
int StartPWMPin = 0, EndPWMPin = 13; //設(shè)置D0~D13為PWM 引腳
int PWMResolution = 255; //設(shè)置PWM 占空比分辨率
void setup()
{
//定義所有IO 端輸出
for(int i = StartPWMPin; i <= EndPWMPin; i++)
{
pinMode(i, OUTPUT);
//隨便定義個初始亮度,便于觀察
brights[ i ] = random(0, 255);
}
}
void loop()
{
//這for 循環(huán)是為14盞燈做漸亮的。每次Arduino loop()循環(huán),
//brights 自增一次。直到brights=255時候,將brights 置零重新計(jì)數(shù)。
for(int i = StartPWMPin; i <= EndPWMPin; i++)
{
if((brights[i]++) == PWMResolution) brights[i] = 0;
}
for(int i = 0; i <= PWMResolution; i++) //i 是計(jì)數(shù)一個PWM 周期
{
for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳
{
if(i < brights[j])\
所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調(diào)整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
標(biāo)簽:
Arduino
PWM
軟件模擬
上傳時間:
2013-10-08
上傳用戶:dingdingcandy
-
半導(dǎo)體的產(chǎn)品很多,應(yīng)用的場合非常廣泛,圖一是常見的幾種半導(dǎo)體元件外型。半導(dǎo)體元件一般是以接腳形式或外型來劃分類別,圖一中不同類別的英文縮寫名稱原文為
PDID:Plastic Dual Inline Package
SOP:Small Outline Package
SOJ:Small Outline J-Lead Package
PLCC:Plastic Leaded Chip Carrier
QFP:Quad Flat Package
PGA:Pin Grid Array
BGA:Ball Grid Array
雖然半導(dǎo)體元件的外型種類很多,在電路板上常用的組裝方式有二種,一種是插入電路板的銲孔或腳座,如PDIP、PGA,另一種是貼附在電路板表面的銲墊上,如SOP、SOJ、PLCC、QFP、BGA。
從半導(dǎo)體元件的外觀,只看到從包覆的膠體或陶瓷中伸出的接腳,而半導(dǎo)體元件真正的的核心,是包覆在膠體或陶瓷內(nèi)一片非常小的晶片,透過伸出的接腳與外部做資訊傳輸。圖二是一片EPROM元件,從上方的玻璃窗可看到內(nèi)部的晶片,圖三是以顯微鏡將內(nèi)部的晶片放大,可以看到晶片以多條銲線連接四周的接腳,這些接腳向外延伸並穿出膠體,成為晶片與外界通訊的道路。請注意圖三中有一條銲線從中斷裂,那是使用不當(dāng)引發(fā)過電流而燒毀,致使晶片失去功能,這也是一般晶片遭到損毀而失效的原因之一。
圖四是常見的LED,也就是發(fā)光二極體,其內(nèi)部也是一顆晶片,圖五是以顯微鏡正視LED的頂端,可從透明的膠體中隱約的看到一片方型的晶片及一條金色的銲線,若以LED二支接腳的極性來做分別,晶片是貼附在負(fù)極的腳上,經(jīng)由銲線連接正極的腳。當(dāng)LED通過正向電流時,晶片會發(fā)光而使LED發(fā)亮,如圖六所示。
半導(dǎo)體元件的製作分成兩段的製造程序,前一段是先製造元件的核心─晶片,稱為晶圓製造;後一段是將晶中片加以封裝成最後產(chǎn)品,稱為IC封裝製程,又可細(xì)分成晶圓切割、黏晶、銲線、封膠、印字、剪切成型等加工步驟,在本章節(jié)中將簡介這兩段的製造程序。
標(biāo)簽:
封裝
IC封裝
制程
上傳時間:
2013-11-04
上傳用戶:372825274
-
特點(diǎn): 精確度0.05%滿刻度±1位數(shù) 可量測交直流電流/交直流電壓/電位計(jì)/Pt-100/熱電偶/荷重元/電阻等信號 熱電偶SENSOR輸入種類J/K/T/E/R/S/B可任意規(guī)劃 顯示范圍-19999-99999可任意規(guī)劃 小數(shù)點(diǎn)可任意規(guī)劃 尺寸小,穩(wěn)定性高 CE認(rèn)證
標(biāo)簽:
24
48
mm
微電腦
上傳時間:
2013-10-31
上傳用戶:wsq921779565
-
提出了一種基于9/7小波的二維小波變換器的硬件設(shè)計(jì)方案.通過優(yōu)化算法以及采用行列變換并行處理的方式,提高了變換器的數(shù)據(jù)吞吐量.該方案采用了流水線技術(shù),較大地提高了硬件效率.綜合結(jié)果表明,該方案的系統(tǒng)時鐘可達(dá)到110 MHz,且具有高速、高吞吐量、片內(nèi)存儲器小等優(yōu)點(diǎn).
標(biāo)簽:
JPEG
2000
VLSI
二維小波變換
上傳時間:
2015-01-03
上傳用戶:yangbo69
-
注:1.這篇文章斷斷續(xù)續(xù)寫了很久,畫圖技術(shù)也不精,難免錯漏,大家湊合看.有問題可以留言.
2.論壇排版把我的代碼縮進(jìn)全弄沒了,大家將代碼粘貼到arduino編譯器,然后按ctrl+T重新格式化代碼格式即可看的舒服.
一、什么是PWM
PWM 即Pulse Wavelength Modulation 脈寬調(diào)制波,通過調(diào)整輸出信號占空比,從而達(dá)到改 變輸出平均電壓的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 個8 位精度PWM 引腳,分別是3, 5, 6, 9, 10, 11 腳。我們可以使用analogWrite()控 制PWM 腳輸出頻率大概在500Hz 的左右的PWM 調(diào)制波。分辨率8 位即2 的8 次方等于 256 級精度。但是有時候我們會覺得6 個PWM 引腳不夠用。比如我們做一個10 路燈調(diào)光, 就需要有10 個PWM 腳。Arduino Duemilanove 2009 有13 個數(shù)字輸出腳,如果它們都可以 PWM 的話,就能滿足條件了。于是本文介紹用軟件模擬PWM。
二、Arduino 軟件模擬PWM
Arduino PWM 調(diào)壓原理:PWM 有好幾種方法。而Arduino 因?yàn)殡娫春蛯?shí)現(xiàn)難度限制,一般 使用周期恒定,占空比變化的單極性PWM。
通過調(diào)整一個周期里面輸出腳高/低電平的時間比(即是占空比)去獲得給一個用電器不同 的平均功率。
如圖所示,假設(shè)PWM 波形周期1ms(即1kHz),分辨率1000 級。那么需要一個信號時間 精度1ms/1000=1us 的信號源,即1MHz。所以說,PWM 的實(shí)現(xiàn)難點(diǎn)在于需要使用很高頻的 信號源,才能獲得快速與高精度。下面先由一個簡單的PWM 程序開始:
const int PWMPin = 13;
int bright = 0;
void setup()
{
pinMode(PWMPin, OUTPUT);
}
void loop()
{
if((bright++) == 255) bright = 0;
for(int i = 0; i < 255; i++)
{
if(i < bright)
{
digitalWrite(PWMPin, HIGH);
delayMicroseconds(30);
}
else
{
digitalWrite(PWMPin, LOW);
delayMicroseconds(30);
}
}
}
這是一個軟件PWM 控制Arduino D13 引腳的例子。只需要一塊Arduino 即可測試此代碼。 程序解析:由for 循環(huán)可以看出,完成一個PWM 周期,共循環(huán)255 次。
假設(shè)bright=100 時候,在第0~100 次循環(huán)中,i 等于1 到99 均小于bright,于是輸出PWMPin 高電平;
然后第100 到255 次循環(huán)里面,i 等于100~255 大于bright,于是輸出PWMPin 低電平。無 論輸出高低電平都保持30us。
那么說,如果bright=100 的話,就有100 次循環(huán)是高電平,155 次循環(huán)是低電平。 如果忽略指令執(zhí)行時間的話,這次的PWM 波形占空比為100/255,如果調(diào)整bright 的值, 就能改變接在D13 的LED 的亮度。
這里設(shè)置了每次for 循環(huán)之后,將bright 加一,并且當(dāng)bright 加到255 時歸0。所以,我們 看到的最終效果就是LED 慢慢變亮,到頂之后然后突然暗回去重新變亮。 這是最基本的PWM 方法,也應(yīng)該是大家想的比較多的想法。
然后介紹一個簡單一點(diǎn)的。思維風(fēng)格完全不同。不過對于驅(qū)動一個LED 來說,效果與上面 的程序一樣。
const int PWMPin = 13;
int bright = 0;
void setup()
{
pinMode(PWMPin, OUTPUT);
}
void loop()
{
digitalWrite(PWMPin, HIGH);
delayMicroseconds(bright*30);
digitalWrite(PWMPin, LOW);
delayMicroseconds((255 - bright)*30);
if((bright++) == 255) bright = 0;
}
可以看出,這段代碼少了一個For 循環(huán)。它先輸出一個高電平,然后維持(bright*30)us。然 后輸出一個低電平,維持時間((255-bright)*30)us。這樣兩次高低就能完成一個PWM 周期。 分辨率也是255。
三、多引腳PWM
Arduino 本身已有PWM 引腳并且運(yùn)行起來不占CPU 時間,所以軟件模擬一個引腳的PWM 完全沒有實(shí)用意義。我們軟件模擬的價值在于:他能將任意的數(shù)字IO 口變成PWM 引腳。
當(dāng)一片Arduino 要同時控制多個PWM,并且沒有其他重任務(wù)的時候,就要用軟件PWM 了。
多引腳PWM 有一種下面的方式:
int brights[14] = {0}; //定義14個引腳的初始亮度,可以隨意設(shè)置
int StartPWMPin = 0, EndPWMPin = 13; //設(shè)置D0~D13為PWM 引腳
int PWMResolution = 255; //設(shè)置PWM 占空比分辨率
void setup()
{
//定義所有IO 端輸出
for(int i = StartPWMPin; i <= EndPWMPin; i++)
{
pinMode(i, OUTPUT);
//隨便定義個初始亮度,便于觀察
brights[ i ] = random(0, 255);
}
}
void loop()
{
//這for 循環(huán)是為14盞燈做漸亮的。每次Arduino loop()循環(huán),
//brights 自增一次。直到brights=255時候,將brights 置零重新計(jì)數(shù)。
for(int i = StartPWMPin; i <= EndPWMPin; i++)
{
if((brights[i]++) == PWMResolution) brights[i] = 0;
}
for(int i = 0; i <= PWMResolution; i++) //i 是計(jì)數(shù)一個PWM 周期
{
for(int j = StartPWMPin; j <= EndPWMPin; j++) //每個PWM 周期均遍歷所有引腳
{
if(i < brights[j])\
所以我們要更改PWM 周期的話,我們將精度(代碼里面的變量:PWMResolution)降低就行,比如一般調(diào)整LED 亮度的話,我們用64 級精度就行。這樣速度就是2x32x64=4ms。就不會閃了。
標(biāo)簽:
Arduino
PWM
軟件模擬
上傳時間:
2013-10-23
上傳用戶:mqien