當你需要從一個配備數位類比轉換器(DAC)的微處理器輸出類比訊號時,可以外加一個DAC晶片,也可以用另一種更經濟的方法──採用脈寬調變(PWM)輸出加上低通濾波器(LPF)取平均值的方法,該平均值等於PWM訊號的佔空比(duty cycle)。


![20160422 ADC TA 01FIG1](//images.contentful.com/644o4pfp4ld4/3HcDeqd76gIEGmyEMG2Cg8/0ba47e6f794e3ce69495e1d5ee0340e4/20160422_ADC_TA_01FIG1.jpg)
圖1 用RC低通濾波器得到PWM訊號的平均值。



RC低通濾波器濾去除了非直流分量(non-DC components),剩餘的是訊號平均值UOUT,如果PWM訊號的週期為63個時脈週期,UOUT將會是64個DC離散值之一(0 ~63的 6位元解析度)。


RC低通濾波器的時間常數τ必須足夠大,以平滑輸出訊號UOUT;漣波訊號ΔUOUT必須小於最低有效位元(LSB)。最壞的情況出現在50%佔空比時(圖2)。當τ遠大於週期T時,電容的充電電流IC 和漣波ΔUOUT變化可近似為:


![20160422 ADC TA 01FIG1-1](//images.contentful.com/644o4pfp4ld4/584iPICEoEkweOAaOkgU6m/c5d0959d1e87e1e2fdbd60a4e6cf1902/20160422_ADC_TA_01FIG1-1.jpg)
公式



對於一個6位元的DAC,ΔUOUT 應小於 VCC/64,需要 τ = RC大於等於16 · T的濾波器。


![20160422 ADC TA 01FIG2](//images.contentful.com/644o4pfp4ld4/5E8YRMOKvm2c6oaa4uI2U4/cb252e6a079bca9ded0483b9c9c0ccca/20160422_ADC_TA_01FIG2.jpg)
圖2 濾波訊號輸出(藍色)應小於漣波的一個最低有效位元。



一些實際數字:低功耗微處理器常使用一個32,768Hz晶體振盪器作為PWM模組的時脈訊號,如果是6位元PWM,則週期T為64/32768約為2ms,因此需要32 ms的時間常數τ,也就是要等待5τ (160ms)的時間來使6位元轉換器穩定,非常慢。下面的設計將完美地展現如何加速完成訊號的轉換。


微控制器中的PWM模組通常可以產生多個PWM訊號;考慮將兩個3位元PWM DAC(DACH與DACL)的輸出加總,在加總前將DACL的輸出幅度減小到八分之一,最後的訊號等同一個6位元DAC,但具備超越簡單6位元DAC的一個重要優勢──相同解析度下的週期T只要8個時脈週期,時間常數τ是原來的八分之一,DAC的穩定時間快了8倍。這樣的佈置很容易以雙PWM訊號(PWMH、PWML)的RC濾波器內電阻來實現,如圖3。


![20160422 ADC TA 01FIG3](//images.contentful.com/644o4pfp4ld4/PUhf0BwfwOSw6CIEmUeW6/15944be84eddab624b1ff58b990769e2/20160422_ADC_TA_01FIG3.jpg)
圖3 將兩個PWM DAC的輸出結合。



輸出訊號UOUT等於:


![20160422 ADC TA 01FIG3-1](//images.contentful.com/644o4pfp4ld4/7BAtmEewAEKSmk0wGE2agQ/076d1170ab74c163e5017e51ce11224e/20160422_ADC_TA_01FIG3-1.jpg)
公式



此技巧已經在TI的MSP430F5132微控制器實現,如圖4。


![20160422 ADC TA 01FIG4](//images.contentful.com/644o4pfp4ld4/18u6UGiggUeusIMUWc0WCA/aa1697cf7d191a9fdafdb3522fcd831d/20160422_ADC_TA_01FIG4.jpg)
圖4 基於6位元(3+3)PWM的DAC的初始化和配置程式碼。



![20160422 ADC TA 01FIG5](//images.contentful.com/644o4pfp4ld4/7JzWKB2ormS2CSW0AqoeC6/471d99387362ac5a5de4f64f24011503/20160422_ADC_TA_01FIG5.jpg)
圖5 6位元PWM DAC輸出量測結果;藍線為圖1方案的測試結果(穩定時間160ms),紫線為圖3方案測試結果(穩定時間20ms)。

7位元DAC用1%精度的電阻就可以實現;這一次兩個PWM訊號用來產生兩個3位元DAC、整體6位元的效果。最高有效位元(MSb)能在P3.7接腳輕鬆設置為0或1。


![20160422 ADC TA 01FIG6](//images.contentful.com/644o4pfp4ld4/2Aq7ZVOOpmoGE4Wsy0EiuU/7c9c9a5be161aa8e133977fb79e5c98f/20160422_ADC_TA_01FIG6.jpg)
圖6 7位元PWM DAC實作案例。



![20160422 ADC TA 01FIG7](//images.contentful.com/644o4pfp4ld4/4R1yN2m3yMcueKywA44KWm/a9762672532eeb238caf7216ba81b43c/20160422_ADC_TA_01FIG7.jpg)
圖7 圖6電路輸出的量測結果;注意其優秀的線性度。

![20160422 ADC TA 01FIG8](//images.contentful.com/644o4pfp4ld4/1TiXpXpHK4Qoi2SMm2eeOc/cc370b428c182048e8970d1f85ca2ed4/20160422_ADC_TA_01FIG8.jpg)
圖 8 基於7位(3+3+1)PWM的DAC的初始化和配置程式碼。

速度的提升效果在這裡更加明顯。一個簡單PWM DAC需要128個時脈週期(128/32768 s-1= 3.9ms),結果是τ=32·T = 125ms ,穩定時間為5×125ms = 625ms。圖7穩定時間為40ms,快了16倍。使用高階的低通濾波器也有助於縮短穩定時間。