STM32開發(fā)指南--第二十五章 PWM DAC實(shí)驗(yàn)
二十五章 PWM DAC實(shí)驗(yàn)
上一章,我們介紹了STM32自帶DAC模塊的使用,但不是每個(gè)STM32都有DAC模塊的,對(duì)于那些沒有DAC模塊的芯片,我們可以通過PWM+RC濾波來實(shí)一個(gè)PWM DAC。本章我們將向大家介紹如何使用STM32的PWM來設(shè)計(jì)一個(gè)DAC。我們將使用按鍵(或USMART)控制STM32的PWM輸出,從而控制PWM DAC的輸出電壓,通過ADC1的通道1采集PWM DAC的輸出電壓,并在LCD模塊上面顯示ADC獲取到的電壓值以及PWM DAC的設(shè)定輸出電壓值等信息。本章將分為如下幾個(gè)部分:
25.1 PWM DAC簡(jiǎn)介
25.2 硬件設(shè)計(jì)
25.3 軟件設(shè)計(jì)
25.4 下載驗(yàn)證
25.1 PWM DAC簡(jiǎn)介
雖然大容量的STM32F103具有內(nèi)部DAC,但是更多的型號(hào)是沒有DAC的,不過STM32所有的芯片都有PWM輸出,因此,我們可以用PWM+簡(jiǎn)單的RC濾波來實(shí)現(xiàn)DAC輸出,從而節(jié)省成本。
PWM本質(zhì)上其實(shí)就是是一種周期一定,而高低電平占空比可調(diào)的方波。實(shí)際電路的典型PWM波形,如圖25.1.1所示:
圖25.1.1 實(shí)際電路典型PWM波形
圖25.1.1的PWM波形可以用分段函數(shù)表示為式①:
其中:T是單片機(jī)中計(jì)數(shù)脈沖的基本周期,也就是STM32定時(shí)器的計(jì)數(shù)頻率的倒數(shù)。N是PWM波一個(gè)周期的計(jì)數(shù)脈沖個(gè)數(shù),也就是STM32的ARR-1的值。n是PWM波一個(gè)周期中高電平的計(jì)數(shù)脈沖個(gè)數(shù),也就是STM32的CCRx的值。VH和VL分別是PWM波的高低電平電壓值,k為諧波次數(shù),t為時(shí)間。我們將①式展開成傅里葉級(jí)數(shù),得到公式②:
從②式可以看出,式中第1個(gè)方括弧為直流分量,第2項(xiàng)為1次諧波分量,第3項(xiàng)為大于1次的高次諧波分量。式②中的直流分量與n成線性關(guān)系,并隨著n從0到N,直流分量從VL到VL+VH之間變化。這正是電壓輸出的DAC所需要的。因此,如果能把式②中除直流分量外的諧波過濾掉,則可以得到從PWM波到電壓輸出DAC的轉(zhuǎn)換,即:PWM波可以通過一個(gè)低通濾波器進(jìn)行解調(diào)。式②中的第2項(xiàng)的幅度和相角與n有關(guān),頻率為1/(NT),其實(shí)就是PWM的輸出頻率。該頻率是設(shè)計(jì)低通濾波器的依據(jù)。如果能把1次諧波很好過濾
掉,則高次諧波就應(yīng)該基本不存在了。
通過上面的了解,我們可以得到PWM DAC的分辨率,計(jì)算公式如下:
分辨率=log2(N)
這里假設(shè)n的最小變化為1,當(dāng)N=256的時(shí)候,分辨率就是8位。而STM32的定時(shí)器都是16位的,可以很容易得到更高的分辨率,分辨率越高,速度就越慢。不過我們?cè)诒菊乱O(shè)計(jì)的DAC分辨率為8位。
在8位分辨條件下,我們一般要求1次諧波對(duì)輸出電壓的影響不要超過1個(gè)位的精度,也就是3.3/256=0.01289V。假設(shè)VH為3.3V,VL為0V,那么一次諧波的最大值是2*3.3/π=2.1V,這就要求我們的RC濾波電路提供至少-20lg(2.1/0.01289)=-44dB的衰減。