我們大多數(shù)人都知道PWM DAC(數(shù)模轉換器)。它們很容易實現(xiàn),也很便宜,非常適合一些低性能的應用。
實現(xiàn)它們的方法是濾除PWM信號中的高頻分量,只留下正比于占空比的低頻或直流分量。但是低通濾波器并不能完全濾除PWM頻率,因此低頻/直流信號中通常都會有一定程度的紋波。
減少PWM DAC紋波的方法一般有兩種。一種是降低低通濾波器的截止頻率,另一種是提高PWM信號的頻率。然而不可避免的是,更低的截止頻率會延長上升時間;如果是在給定時鐘頻率點通過減小計數(shù)器尺寸實現(xiàn)的,那么更快的PWM頻率會降低分辨率。
下面要討論的設計實例非常有趣,著重介紹了另外一種降低PWM DAC紋波的方法。
事實上,我們可以使用相位差為180°的兩個PWM信號來降低上述紋波。從直覺上,當兩個相同頻率的正弦波的相位相差180°時,它們會相互抵消,因此我們使用相位差為180°的兩個PWM信號也能將彼此的諧波分量抵消干凈,是這樣嗎?確實是這樣,但并不是PWM信號的所有諧波分量都能抵消,有些分量可以抵消,有些卻抵消不了。這與傅里葉級數(shù)有關,比較復雜,這里就不羅列一大堆數(shù)學公式來進行解釋了。
兩個PWM信號之間180°的相位差是如何實現(xiàn)的呢?我使用了TI的MSP320FR5969 LaunchPad,這種方法很常用。為了實現(xiàn)相位移動,需要兩個定時器。其中一個定時器必須包含兩個比較-捕獲-PWM(CCP)模塊,另一個只需要一個CCP模塊。
在包含兩個CCP模塊的定時器中,可以用一個CCP模塊來設置該定時器的PWM頻率和占空比,另一個CCP模塊產(chǎn)生中斷,用于啟動另一個定時器,兩者的延時等于PWM周期的一半。另一個定時器中的CCP模塊用于設置相同的PWM頻率和占空比。你還必須對這個延時進行“微調”,因為軟件會在PWM信號之間增加額外的時間。舉例來說,在我的代碼的102行,我將比較寄存器的值從(timer_period+1)/2改為了(timer_period+1)/2-27。
我做了一些小調查,想看看其它微控制器是否具有相同的硬件和能力來實現(xiàn)我所用的方法:許多Atmel微控制器都有1個以上的定時器,每種控制器通常都有兩個CCP(比如ATmega 328),因此實現(xiàn)這種方法應該是可能的。另外一個常見的例子是STM32F051R8(這是一些流行的ST電路板使用的微控制器),它有11個定時器,其中許多定時器都有1個以上的CCP。TI基于ARM的微控制器通常有獨立的PWM和定時器模塊(如TM4C123GH6PM),因此應該更容易實現(xiàn)相移。使用其中一個定時器,兩個PWM模塊就可以以一半PWM周期的延時開啟。
圖1:單路和雙路PWM電路。
在相移DAC的Vout端,兩個PWM信號被累加在一起,結果有些諧波分量彼此抵消,最終實現(xiàn)了降低紋波的效果。
我們看看使用三種不同電阻值時的情況。每個PWM信號都是占空比為25%、頻率為100kHz。
圖2:上面的波形是傳統(tǒng)PWM,下面的波形是雙路相移PWM。從左到右每格的電壓遞減100mV、50mV、4mV。
從圖中的結果可以看出:首先,峰-峰紋波降低了;其次,傳統(tǒng)PWM DAC的紋波基頻等于 PWM信號的頻率(100kHz)。相移PWM DAC的紋波基頻等于PWM信號的二次諧波(200kHz),這意味著我們用相移DAC成功地刪除了PWM信號的一次諧波。
這種方法的一個優(yōu)點是不用增加上升時間也能降低紋波(或者相同的紋波只需一半的上升時間)。
另外一個潛在優(yōu)點是,將兩個PWM設置為相隔一個計數(shù)值可以獲得中間值,進而實現(xiàn)DAC有效分辨率的翻倍。雖然這會導致少許的不對稱并增加紋波,但是影響很小可以忽略不計。