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