PWM可以算是數(shù)字電路中的“獨(dú)臂”神通,“獨(dú)臂” - 只需一根線;“神通” - 在很多關(guān)鍵的應(yīng)用中起到棟梁的作用。PWM(脈寬調(diào)制 Pulse Width )從字面意思上講它是一種“調(diào)制”方式,調(diào)制就意味著在某些載波信號(hào)上攜帶了某些的信息,通過解調(diào)的過程就可以得到其攜帶的信息matlab數(shù)字信號(hào)發(fā)生器,這些信息的屬性由PWM的產(chǎn)生端定義,總之在這一根僅僅發(fā)生0、1交替變化的信號(hào)線上可以做出很多文章。
今天我們就看看如何通過PWM的方式實(shí)現(xiàn)數(shù)字到模擬變換的功能,也就是通過改變一根管腳的輸出脈沖,得到模擬世界的某種波形。
首先PWM是由一串連續(xù)行走在某輸出管腳上的0、1交替出現(xiàn)的信號(hào)組成,我們稱高電平1為ON,低電平0為OFF,ON+OFF為一個(gè)周期T,ON的持續(xù)時(shí)間除以周期T就為占空比 - Duty Cycle,看下面的兩個(gè)圖。
如果發(fā)送端用脈沖的占空比來傳遞“電壓值”,也就是將某個(gè)數(shù)字的電壓值對(duì)脈沖的占空比進(jìn)行調(diào)制,就可以在接收端通過RC低通濾波器(也就是解調(diào)器)從調(diào)制脈寬的數(shù)據(jù)流中得到需要的模擬電壓值,從而達(dá)到DAC的目的。看下面的動(dòng)圖 - 假設(shè)脈沖的占空比為0的時(shí)候(整個(gè)周期全部為OFF - 低電平)代表電壓值為0,占空比為100%的時(shí)候(整個(gè)周期全部為ON - 高電平)代表電壓值為最高電壓,比如3.3V,則40%的占空比就是40%*3.3V。占空比改變-每個(gè)周期的脈寬改變,也就意味著輸出的電壓值在改變。
用脈寬的改變攜帶電壓值的變化信息
用一個(gè)電阻和電容組成的低通濾波就可以將PWM中攜帶的電壓信息“解調(diào)”成模擬的電壓值
前面講過DAC的兩個(gè)關(guān)鍵指標(biāo) - 轉(zhuǎn)換率和轉(zhuǎn)換精度,在PWM里是如何對(duì)應(yīng)的這兩個(gè)指標(biāo)么?
看一下下面的波形:
PWM-DAC的轉(zhuǎn)換頻率相當(dāng)于脈沖的重復(fù)頻率
PWM-DAC的分辨率相當(dāng)于脈沖寬度相對(duì)于整個(gè)周期的精度,舉例如果一個(gè)最小的脈沖ON的時(shí)間為5ns(可以用的時(shí)鐘計(jì)數(shù)產(chǎn)生),PWM脈沖的周期為5ns x 256 = 1.28us,則這個(gè)PWM-DAC相當(dāng)于是8位的DAC。
也就是說如果你用的時(shí)鐘來通過PWM的方式做一個(gè)8位的DAC,最高的轉(zhuǎn)換頻率也只能到1/1.28us ~ 分辨率高則轉(zhuǎn)換率降低,因此用PWM做的DAC一般用于生成非常低頻的信號(hào)乃至直流信號(hào)。
下面的圖為經(jīng)過一個(gè)最簡(jiǎn)單的由一個(gè)電阻R和一個(gè)電容C構(gòu)成的低通濾波以后得到的模擬信號(hào),可以看到在輸出的模擬信號(hào)上還是有很高頻率的紋波。
如果要進(jìn)一步平滑輸出模擬信號(hào)上的波紋,可以通過加入電感或著用運(yùn)算放大器構(gòu)成的有源低通濾波器來對(duì)紋波實(shí)現(xiàn)更強(qiáng)的抑制。
是不是很簡(jiǎn)單?只需一個(gè)R和一個(gè)C就能得到你想生成的模擬信號(hào),做一個(gè)簡(jiǎn)單的任意波形發(fā)生器很簡(jiǎn)單啊。
有的朋友會(huì)問,很多MCU內(nèi)部都有DAC啊,干嘛不用內(nèi)部的DAC?
蘇老師答:如果有的話自然不需要折騰PWM了,如果沒有,只需要一根管腳和倆器件就能實(shí)現(xiàn)這樣的功能還是很有用的,再說了,也許你的系統(tǒng)中需要多個(gè)DAC的功能,而你的MCU內(nèi)部沒有足夠的DAC,且你也不想或者沒有足夠的管腳外掛一個(gè)單獨(dú)的DAC器件(需要I2C或SPI總線連接),PWM方式是個(gè)非常不錯(cuò)的選擇哦。
如果你用的是FPGA或CPLD,里面根本沒有DAC,而你又需要一個(gè),拿出一個(gè)管腳來產(chǎn)生PWM就會(huì)非常666。
理解用PWM生成DAC的機(jī)制、局限,在關(guān)鍵的時(shí)候也許就能起到意料不到的結(jié)果。
最好的方式是直接動(dòng)手試試嘍 - 在一個(gè)小腳丫的輸出管腳上加上R和C,用計(jì)數(shù)器生成以下PWM信號(hào),用示波器看看你能得到什么。
首先我們看一下脈沖信號(hào)的頻譜,根據(jù)傅立葉變換,周期為T的脈沖信號(hào)可以分解為多個(gè)單頻率的信號(hào)的疊加,最小的頻率分量為1/T,有興趣的可以通過自己做一下分析。
比如,我們對(duì)幅度為3.3V、周期為10uS(頻率)、占空比為50%的脈沖信號(hào)(此時(shí)為方波)進(jìn)行FFT變換,可以得到1.65V的直流分量、、(3次諧波)、(5次諧波)。。。等頻率分量,最小的交流頻率為。
從以上簡(jiǎn)單的分析可以看出,無論占空比是多少,脈沖波形除了直流分量以外,交流部分的最低頻率都為脈沖的重復(fù)頻率上,在DC和脈沖重復(fù)頻率之間一馬平川,光禿禿的。
因此,如果要得到直流分量,只需要去掉以上的頻譜能量就可以了。最簡(jiǎn)單的方法就是通過由一個(gè)電阻R和一個(gè)電容C構(gòu)成的一階低通濾波器,其截止頻率為fc=1/2*Pi*R*C,我們要得到的是直流分量,濾除的是以上的頻率,因此只要截止頻率在以內(nèi),并且能對(duì)以上的所有頻譜都有較好的抑制,就能夠得到比較好的DC輸出。
可以想象,截止頻率越高,越是接近要濾除的頻率(比如50KHz之于),該濾波器對(duì)的濾波效果就較差,就會(huì)有一定量的殘余能量出現(xiàn)在濾波器的輸出端,如下圖,也就是輸出的波形紋波比較高。
如果降低截止頻率,越是接近直流,從而距離要濾除的頻率越遠(yuǎn)matlab數(shù)字信號(hào)發(fā)生器,比如針對(duì)的脈沖頻率選擇1KHz作為L(zhǎng)PF的截止頻率,則在處可以達(dá)到非常高的抑制度,的殘留就非常小,也就是在輸出的直流信號(hào)上的紋波可以變得很小,如下圖
但卻出現(xiàn)了另外一個(gè)問題 - 需要花費(fèi)很久的時(shí)間(學(xué)名叫建立時(shí)間 time)才能達(dá)到應(yīng)該達(dá)到的DAC的直流值。原因就是fc低,意味著RC更高,也就是充電的時(shí)間常數(shù)變得很長(zhǎng) - R增大意味著對(duì)C進(jìn)行充電的電流變小,要對(duì)C沖電到一定的值花費(fèi)的時(shí)間也就更久。,
因此這就出現(xiàn)了一個(gè)讓人糾結(jié)的選擇:
選擇較低的截止頻率 - 較低的紋波,較長(zhǎng)的建立時(shí)間
選擇較高的截止頻率 - 較大的紋波,較快的建立時(shí)間
你會(huì)說一階不夠,要不多用幾階濾波器,加上電感或者有源的運(yùn)放來進(jìn)行低通濾波,這確實(shí)能改善濾波的效果,但 -- 電路的復(fù)雜度增加、元器件成本增加了,且改善有限。
那不增加電路的復(fù)雜程度,還是只用這一個(gè)R和一個(gè)C是否能夠改善性能呢?
答案是肯定的,其實(shí)也很簡(jiǎn)單 - 把交流分量的頻率踢的遠(yuǎn)遠(yuǎn)的,在保持較低的時(shí)間常數(shù)(建立時(shí)間短)的情況下,將LPF的截止頻率fc和要濾除的脈沖重復(fù)頻率之間的間隔盡可能的拉開,比如將的重復(fù)頻率給踢到10MHz(出去100倍),占空比不變,如果用原來的50KHz的濾波器,到了10MHz的地方怎么也把10MHz以上的頻率給消滅的只剩下一點(diǎn)渣了。看下圖,直流建立時(shí)間大約為15μs, 紋波變得只有25mV左右了。
是不是很神奇?其實(shí)理論依據(jù)很簡(jiǎn)單,自己把低通濾波器的頻響曲線畫一下就很容易理解了。
到這里我們就應(yīng)該知道如何設(shè)計(jì)自己的PWM系統(tǒng)的各項(xiàng)參數(shù)來構(gòu)造一個(gè)簡(jiǎn)單好用的DAC。