一、什么是PWM
PWM,英文名Pulse Width Modulation,是脈沖寬度調(diào)制縮寫(xiě),它是通過(guò)對(duì)一系列脈沖的寬度進(jìn)行調(diào)制,等效出所需要的波形(包含形狀以及幅值),對(duì)模擬信號(hào)電平進(jìn)行數(shù)字編碼,也就是說(shuō)通過(guò)調(diào)節(jié)占空比的變化來(lái)調(diào)節(jié)信號(hào)、能量等的變化,占空比就是指在一個(gè)周期內(nèi),信號(hào)處于高電平的時(shí)間占據(jù)整個(gè)信號(hào)周期的百分比,例如方波的占空比就是50%.
二、PWM信號(hào)輸出輸出和作用
1. 如果要實(shí)現(xiàn)PWM信號(hào)輸出如何輸出呢?
1)可以直接通過(guò)芯片內(nèi)部模塊輸出PWM信號(hào),前提是這個(gè)I/O口要有集成的pwm控制器,只需要通過(guò)對(duì)應(yīng)的寄存器即可,這種自帶有PWM輸出的功能模塊在程序設(shè)計(jì)更簡(jiǎn)便,同時(shí)數(shù)據(jù)更精確。
2)但是如果IC內(nèi)部沒(méi)有PWM功能模塊,或者要求不是很高的話可以利用I/O口設(shè)置一些參數(shù)來(lái)輸出PWM信號(hào),因?yàn)镻WM 信號(hào)其實(shí)就是一高一低的一系列電平組合在一起。具體方法是給I/O加一個(gè)定時(shí)器,對(duì)于你要求輸出的PWM信號(hào)頻率與你的定時(shí)器一致,用定時(shí)器中斷來(lái)計(jì)數(shù),但是這種方法一般不采用,除非對(duì)于精度、頻率等要求不是很高可以這樣實(shí)現(xiàn)。
2. PWM信號(hào)應(yīng)用
PWM信號(hào)把模擬信號(hào)轉(zhuǎn)化為數(shù)字電路所需要的編碼,現(xiàn)在基本是采用數(shù)字電路,因此在很多場(chǎng)合都采用PWM信號(hào)。
我們經(jīng)常見(jiàn)到的就是交流調(diào)光電路,也可以說(shuō)是無(wú)級(jí)調(diào)速,高電平占多一點(diǎn),也就是占空比大一點(diǎn)亮度就亮一點(diǎn),占空比小一點(diǎn)亮度就沒(méi)有那么亮,前提是PWM的頻率要大于我們?nèi)搜圩R(shí)別頻率,要不然會(huì)出現(xiàn)閃爍現(xiàn)象。
除了在調(diào)光電路應(yīng)用,還有在直流斬波電路、蜂鳴器驅(qū)動(dòng)、電機(jī)驅(qū)動(dòng)、逆變電路、加濕機(jī)霧化量等都會(huì)有應(yīng)用。
三、蜂鳴器
蜂鳴器廣泛用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。
蜂鳴器分為壓電式及電磁式的二大類:
壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。它是以壓電陶瓷的壓電效應(yīng),來(lái)帶動(dòng)金屬片的振動(dòng)而發(fā)聲;
電磁式的蜂鳴器,由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號(hào)電流通過(guò)電磁線圈,使電磁線圈產(chǎn)生磁場(chǎng)。振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。通電時(shí)將金屬振動(dòng)膜吸下,不通電時(shí)依振動(dòng)膜的彈力彈回。
有源蜂鳴器, 只要給它加上恒定的電壓, 就能發(fā)聲;無(wú)源蜂鳴器, 必須給它加上一定頻率的方波或正弦波才能發(fā)聲
有源蜂鳴器內(nèi)部帶震蕩源,所以一通電就會(huì)叫。而無(wú)源內(nèi)部不帶震蕩源,所以如果用直流信號(hào)無(wú)法令其鳴叫。
有源蜂鳴器往往比無(wú)源的貴,就是因?yàn)槔锩娑鄠€(gè)震蕩電路。
【優(yōu)點(diǎn)】無(wú)源蜂鳴器的優(yōu)點(diǎn)是:
便宜
聲音頻率可控,可以做出“多來(lái)米發(fā)索拉西”的效果。
在一些特例中,可以和LED復(fù)用一個(gè)控制口有源蜂鳴器的優(yōu)點(diǎn)是:
程序控制方便 。
應(yīng)用:電風(fēng)扇、收音機(jī)的聲音按鈕、任何模擬值都可以使用PWM進(jìn)行編碼
四、fs4412電路圖
本例采用fs4412開(kāi)發(fā)板,pwm外接了一個(gè)蜂鳴器BUZZER,電路圖如下:
從上面電路圖可知:
該BUZZER是無(wú)源蜂鳴器,如果要想發(fā)出聲音,需要正負(fù)極產(chǎn)生電流變化,我們通過(guò)生成方波,從而實(shí)現(xiàn)圖中三極管1->2周期性導(dǎo)通和關(guān)閉來(lái)讓BUZZER倆邊電壓產(chǎn)生變化,從而實(shí)現(xiàn)電流變化;
三極管的基極連接的是SOC的GPD0_0引腳;
產(chǎn)生方波我們借助的是PWM,標(biāo)號(hào)為MOTOR_PWM。
繼續(xù)查找MOTOR_PWM:
由上圖可知,MOTOR_PWM連接的是PWM的XpwmTOUT0,和LCD一起復(fù)用引腳GPD0_0,
去datasheet繼續(xù)查看GPD0_0說(shuō)明,
由上圖可知,GPD0_0配置由寄存器的GPD0CON[3:0]位控制,要想作為PWM輸出,要設(shè)置為T(mén)OUT_0即0x2。
同時(shí)也可以看到,該引腳還可以設(shè)置為外部中斷信號(hào)[EXT_INT6]功能即0xF。
五、Exynos 4412 PWM
概述
Exynos 4412 SCP有五個(gè)32位脈沖寬度調(diào)制(PWM)定時(shí)器。這些定時(shí)器產(chǎn)生內(nèi)部中斷對(duì)于ARM子系統(tǒng)。此外,定時(shí)器0、1、2和3包括驅(qū)動(dòng)外部I/O的PWM功能信號(hào)。定時(shí)器0中的PWM有一個(gè)可選的死區(qū)發(fā)生器功能,以支持大量的設(shè)備。定時(shí)器4是一個(gè)沒(méi)有輸出引腳的內(nèi)部定時(shí)器。
定時(shí)器使用APB-PCLK作為源時(shí)鐘。定時(shí)器0和1共享可編程8位預(yù)分頻器為PCLK提供第一級(jí)分頻。定時(shí)器2、3和4共享不同的8位預(yù)分頻器。每個(gè)計(jì)時(shí)器都有它自己的專用時(shí)鐘分頻器,提供第二級(jí)時(shí)鐘劃分頻(預(yù)分頻器除以2、4、8或16)。
每個(gè)定時(shí)器都有它的32位遞減計(jì)數(shù)器;定時(shí)器時(shí)鐘驅(qū)動(dòng)這個(gè)計(jì)數(shù)器。定時(shí)器計(jì)數(shù)緩沖寄存器(TCNTBn)加載遞減計(jì)數(shù)器的初始值。如果遞減計(jì)數(shù)器達(dá)到零,它將生成計(jì)時(shí)器中斷請(qǐng)求,通知CPU定時(shí)器操作完成。如果定時(shí)器下降計(jì)數(shù)器達(dá)到零,相應(yīng)TCNTBn的值自動(dòng)重新加載到下一個(gè)循環(huán)開(kāi)始。但是,如果定時(shí)器停止,例如,在定時(shí)器運(yùn)行模式下,通過(guò)清除TCONn的定時(shí)器使能位,TCNTBn的值將不會(huì)重新加載到計(jì)數(shù)器中。
PWM功能使用TCMPBn寄存器的值。定時(shí)器控制邏輯改變輸出電平下計(jì)數(shù)器值與定時(shí)器控制邏輯中比較寄存器的值相匹配。因此,比較寄存器決定PWM輸出的開(kāi)啟時(shí)間或關(guān)閉時(shí)間。
每個(gè)定時(shí)器都是雙緩沖結(jié)構(gòu),帶有TCNTBn和TCMPBn寄存器,允許定時(shí)器參數(shù)在周期中更新。新值在當(dāng)前計(jì)時(shí)器周期完成之前不會(huì)生效。
Exynos PWM定時(shí)器的特性
1)5個(gè)32位定時(shí)器;
2)2個(gè)8位PCLK分頻器提供一級(jí)預(yù)分,5個(gè)2級(jí)分頻器用來(lái)預(yù)分外部時(shí)鐘;3)可編程選擇PWM獨(dú)立通道。
4)4個(gè)獨(dú)立的可編程的控制及支持校驗(yàn)的PWM通道。
5)靜態(tài)配置:PWM停止;
6)動(dòng)態(tài)配置:PWM啟動(dòng);
7)支持自動(dòng)重裝模式及觸發(fā)脈沖模式;
8)一個(gè)外部啟動(dòng)引腳。
9)兩個(gè)PWM輸出可帶Dead-Zone 發(fā)生器。
10)中斷發(fā)生器。
PWM內(nèi)部模塊圖
工作的步驟:
當(dāng)時(shí)鐘PCLK被使能后,定時(shí)器計(jì)數(shù)緩沖寄存器(TCNTBn)把計(jì)數(shù)器初始值下載到遞減計(jì)數(shù)器中。
定時(shí)器比較緩沖寄存器(TCMPBn)把其初始值下載到比較寄存器中,并將該值與遞減計(jì)數(shù)器的值進(jìn)行比較。當(dāng)遞減計(jì)數(shù)器和比較寄存器值相同時(shí),輸出電平翻轉(zhuǎn)。
遞減計(jì)數(shù)器減至0后,輸出電平再次翻轉(zhuǎn),完成一個(gè)輸出周期。這種基于TCNTBn和TCMPBn的雙緩沖特性使定時(shí)器在頻率和占空比變化時(shí)能產(chǎn)生穩(wěn)定的輸出。
每個(gè)定時(shí)器都有一個(gè)專用的由定時(shí)器時(shí)鐘驅(qū)動(dòng)的16位遞減計(jì)數(shù)器。當(dāng)遞減計(jì)數(shù)器的計(jì)數(shù)值達(dá)到0時(shí),就會(huì)產(chǎn)生定時(shí)器中斷請(qǐng)求來(lái)通知CPU定時(shí)器操作完成。當(dāng)定時(shí)器遞減計(jì)數(shù)器達(dá)到0的時(shí)候,如果設(shè)置了Auto-Reload 功能,相應(yīng)的TCNTBn的值會(huì)自動(dòng)重載到遞減計(jì)數(shù)器中以繼續(xù)下次操作。
然而,如果定時(shí)器停止了,比如在定時(shí)器運(yùn)行時(shí)清除TCON中定時(shí)器使能位,TCNTBn的值不會(huì)被重載到遞減計(jì)數(shù)器中。
TCMPBn 的值用于脈沖寬度調(diào)制。當(dāng)定時(shí)器的遞減計(jì)數(shù)器的值和比較寄存器的值相匹配的時(shí)候,定時(shí)器控制邏輯將改變輸出電平。因此,比較寄存器決定了PWM 輸出的開(kāi)關(guān)時(shí)間。
舉例
下面我們舉個(gè)實(shí)例來(lái)看下,
初始化寄存器 TCNTBn = 159 (50 + 109) ,TCMPBn =109.
開(kāi)啟定時(shí)器: 通過(guò)設(shè)置TCON的開(kāi)啟位.寄存器TCNTBn 的值159將自動(dòng)加載到遞減寄存器down-counter, 同時(shí)輸出引腳TOUTn 設(shè)置為低電平.
當(dāng)down-counter 的值遞減打破和寄存器TCMPBn 的值109相同時(shí), 輸出引腳將從低拉到高.
當(dāng)down-counter遞減到0時(shí), 產(chǎn)生一個(gè)中斷請(qǐng)求.
如果我們?cè)O(shè)置成autoreload模式,那么down-counter會(huì)自動(dòng)加載TCNTBn的值到down-counter,開(kāi)啟新的一個(gè)周期。
我們可以通過(guò)設(shè)置TCNTBn、TCMPBn來(lái)控制占空比,而每個(gè)pwm周期后都可以重新設(shè)置新的值到TCNTBn、TCMPBn,我們通過(guò)精確的計(jì)算來(lái)設(shè)置TCNTBn、TCMPBn的值并通過(guò)設(shè)置dead zone我們可以設(shè)計(jì)出各種復(fù)雜的矩形波。
如下圖所示:
本例我們只需要產(chǎn)生規(guī)則的舉行方波即可,所以我們只需要設(shè)置占空比為50%即可。
六、寄存器
由第四章可知,我們使用PWM控制器的timer 0,對(duì)應(yīng)的寄存器組如下圖所示:
1、TFCG0
定時(shí)器配置寄存器0(TFCG0) ,主要用于預(yù)分頻設(shè)置。
我們是timer 0,所以只需要設(shè)置該寄存器的bite【7:0】即可,最終的輸出頻率和value的公式如下:
參考24.3.1節(jié):
其中方波的頻率必須在音頻范圍內(nèi),也就是20Hz到20KHZ之間, 但是20Hz到20KHZ的頻率送給蜂鳴器后, 只有某一點(diǎn)的頻率是最響的, 這個(gè)頻率稱為蜂鳴器的諧振頻率, 離它越遠(yuǎn), 蜂鳴器發(fā)出的聲音越輕。
所以Prescaler 0 value值應(yīng)該設(shè)置為255,divider value 應(yīng)該是1/16,值由TCFG1設(shè)置。
PWM.TCFG0=PWM.TCFG0&(~(0xff))|0xf9;
2、TCFG1
定時(shí)器配置寄存器1(TCFG1) 主要用于PWM定時(shí)器的divider value設(shè)置。
由上一節(jié)分析,秩序設(shè)置TCFG1 bite【3:0】為0100即0x2即可。
PWM.TCFG1=PWM.TCFG1&(~(0xf))|0x2;
3、TCON
timer控制寄存器TCON
bite[3] : 設(shè)置定時(shí)器是只執(zhí)行一個(gè)周期(One-shot)還是周期執(zhí)行(auto-reload)
bite[1]: 置為1,則更新TCNTB0 、TCMPB0 的值
bit[0]:開(kāi)啟或者停止定時(shí)器
針對(duì)不同操作,我們可以設(shè)置不同的值:
裝載
PWM.TCON=PWM.TCON&(~(0xff))|(1<0)?|?(1?<1)?;
開(kāi)啟定時(shí)器,蜂鳴器響
PWM.TCON=PWM.TCON&(~(0xff))|(1<0)?|?(1?<3)?;
關(guān)閉定時(shí)器,蜂鳴器滅
PWM.TCON=PWM.TCON&(~(1<0))?;
4、TCNTB0
定時(shí)器計(jì)數(shù)緩沖寄存器(TCNTB0)根據(jù)測(cè)算,設(shè)置為100
TCNTB0
PWM.TCNTB0=100;
5、TCMPB0
定時(shí)器比較緩沖寄存器(TCMPB0 )設(shè)置為50,占空比為50%
PWM.TCMPB0=50;
責(zé)任編輯:xj
原文標(biāo)題:基于Cortex-A9的pwm詳解
文章出處:【微信公眾號(hào):玩轉(zhuǎn)單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
PWM
+關(guān)注
關(guān)注
114文章
5195瀏覽量
214354 -
CORTEX-A9
+關(guān)注
關(guān)注
0文章
38瀏覽量
35280 -
無(wú)源蜂鳴器
+關(guān)注
關(guān)注
0文章
41瀏覽量
11171
原文標(biāo)題:基于Cortex-A9的pwm詳解
文章出處:【微信號(hào):mcu168,微信公眾號(hào):硬件攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論