當您需要來自沒有數模轉換器(DAC)的微控制器的模擬輸出時,您可以連接外部DAC芯片。但是對于更便宜的解決方案,使用脈沖寬度調制(PWM)輸出并添加低通濾波器(LPF)來提取其平均值,該平均值等于PWM信號的占空比。
圖1RC LPF提取PWM信號的平均值
RC濾波器去掉了非直流分量;剩下的是平均信號 U OUT 。如果PWM信號的周期 T 等于63個時鐘,則信號 U OUT 可以具有64個離散DC之一值(0到63,六位分辨率)。
低通RC濾波器的時間常數t必須足夠大,以平滑輸出信號 U OUT 的。紋波,? U OUT ,應小于一個最低有效位(LSb)。最壞的情況是占空比為50%(圖2)。如果t遠大于周期 T 那么電容器充電電流 I C 并且改變? U OUT 可以近似為:
對于6位DAC,? U OUT 應小于V CC /64,需要一個t <=> RC = 16·T的濾波器。
圖2濾波后的輸出(藍色)應少于一個LSb紋波。
一些實用數字:低功耗微處理器通常使用32768 Hz的晶體振蕩器,此時鐘信號用于PWM模塊。對于6位PWM,周期 T 為64/32768~2ms,需要32ms的時間常數。必須等待5t(160ms)才能使6位轉換器穩定下來。慢。本設計理念解釋了如何加快速度。
微控制器中的PWM模塊通常可以產生多個PWM信號。考慮對兩個基于PWM的3位DAC(DACH和DACL)的輸出求和,其中DACL的輸出在加法之前降低到八分之一幅度。產生的信號用作6位DAC,與簡單版本相比具有重要優勢:對于相同的分辨率,周期 T 僅為8個時鐘周期,并且所需的時間常數t為1/8以前,將建立時間加快8倍。 RC濾波器中的電阻可以很容易地實現這種布置,用于兩個PWM信號(PWMH,PWML):
圖3組合兩個基于PWM的DAC輸出
輸出信號 U OUT 由下式給出:
//配置PWM - 32 kHz/8 = 4 kHz :: 6位兩個PWM,上電時只執行一次
TA0CCR0 = 7;//最多7個(包括)
TA0CTL = TASSEL__ACLK | MC_1 | TACLR;
TA0CCR1 = 0; TA0CCTL1 = OUTMOD_6;//toggle/set
TA0CCR2 = 0; TA0CCTL2 = OUTMOD_6;//切換/設置
//使用::寫入PWM模塊以實現所需的DAC輸出
DAClevel ++;//下一個DAC級別,DAClevel是char
TA0CCR1 =(DAClevel >> 3)&amp; 7;//設置PWMH:MSB 3位
TA0CCR2 =(DAClevel)&amp; 7;//設置PWML:LSB 3位
圖4要初始化的代碼&amp;寫入6位(3 + 3)基于PWM的DAC
圖5基于6位PWM的DAC的測量輸出;藍色:實現如圖1所示(160ms建立); Violet:如圖3所示的實現(20ms建立)
7位DAC可以使用1%電阻實現。這次,兩個PWM信號用于產生兩個三位DAC,總共六位,并且在P3.7處MSb簡單地設置為0或1.
圖6七位基于PWM的DAC的實現
圖7圖6電路的測量輸出;注意良好的線性度。
//配置PWM - 32 kHz/8 = 4 kHz :: 7 bit in兩個PWM和一個數字引腳,上電僅執行一次
//相同圖5中configure部分
DAClevel ++;//下一個DAC級別,DAClevel是char
TA0CCR1 =(DAClevel >> 3)&amp; 7;//設置PWMH,MSB,3位
TA0CCR2 =(DAClevel)&amp; 7;//設置PWML,LSB,3位
if(DAClevel&amp; BIT6)P3OUT | = BIT7;否則P3OUT&amp; = ~BIT7;//設置MSB,無PWM
圖8初始化代碼&amp;寫入7位(3 + 3 + 1)基于PWM的DAC
-
PWM
+關注
關注
114文章
5191瀏覽量
214152 -
dac
+關注
關注
43文章
2296瀏覽量
191154 -
PCB打樣
+關注
關注
17文章
2968瀏覽量
21726 -
華強PCB
+關注
關注
8文章
1831瀏覽量
27788 -
華強pcb線路板打樣
+關注
關注
5文章
14629瀏覽量
43075
發布評論請先 登錄
相關推薦
評論