田 吉,張 坤,李 成
(黃山學院 信息工程學院,安徽 黃山 245041)
目前市場上的信號發(fā)生器的實現(xiàn)主要通過3種方法。第一種通過運算IC 和分立元件組成,這種方法能夠產(chǎn)生的波形種類少,頻率低,精度不高,頻率調(diào)節(jié)只能通過調(diào)節(jié)硬件來完成,不夠靈活;第二種是通過專用數(shù)字合成DDS 芯片產(chǎn)生信號[3],雖然能產(chǎn)生高頻率平滑的波形,但是成本高;第三種是用單片機結合D/A 轉換來實現(xiàn),這種方法既能得到較高頻率的波形,調(diào)節(jié)靈活,而且成本較低。該設計采用STM32結合內(nèi)部所包含的12位DAC即可產(chǎn)生方波、正弦波和鋸齒波,實現(xiàn)了簡易函數(shù)信號發(fā)生器的設計,且精度較高,能夠用于多種場合。
本文設計的發(fā)生器系統(tǒng)結構框圖如圖1 所示。系統(tǒng)主要由按鍵輸入模塊,主控STM32F103ZET6及其子電路模塊組成。通過按鍵輸入來選擇輸出的波形的種類及參數(shù),主控STM32F103ZET6 的內(nèi)部DAC輸出相應波形。
圖1 系統(tǒng)結構圖
STM32F103ZET6 是一種嵌入式-微控制器的集成電路,內(nèi)核為ARM32 位的Cortex-M3 內(nèi)核系CPU,系統(tǒng)時鐘頻率最高可達72MHz,具有256KB的FLASH,48K 的RAM,2 個DMA 控制器(12 通道),112 個快速I/O 端口,11 個定時器,13 個通信端口和3 個12 位模數(shù)轉換器[1]。下面就本設計中用到的DMA、串口及DAC模塊進行進一步的討論。
DMA中斷,用來提供外設和存儲器之間或者存儲器之間的高速傳輸,減少對CPU 的打擾。該芯片有兩個DMA控制器,DMA1有7個通道,DMA2有5個通道。本系統(tǒng)外設從DMA 控制器得到應答信號后,即釋放請求,DMA控制器也會撤銷應答信號,直到啟動下一個周期。設計中使用的是DMA1的通道4。
設計將DAC 配置為12 位模式,并與DMA 控制器配合使用。DAC 模塊有2 個輸出通道,每個通道都有單獨的轉換器[2]。這里使用通道1,各DAC 通道引腳的模擬輸出電壓為:
其中,VREF為輸入?yún)⒖茧妷海珼OR 為DAC 輸出數(shù)據(jù)寄存器。
設計中用到了STM32F103ZET6 的串口,主要是用于將信息發(fā)送到PC機上。
如圖2 所示,采用獨立按鍵實現(xiàn)輸出波形選擇及頻率調(diào)節(jié)功能。
圖2 鍵盤設計圖
因使用DAC產(chǎn)生的波形受DAC 轉換速率的影響,所以這里方波使用PWM 來產(chǎn)生。PWM 即脈沖寬度調(diào)制,原理如圖3所示。
圖3 方波發(fā)生原理圖
使用DAC 輸出,首先將信號的離散值保存到STM32的存儲器中,然后利用STM32的DMA功能將數(shù)據(jù)傳輸?shù)紻AC的存儲器中,經(jīng)過數(shù)模轉換后輸出。正弦信號的離散值存戶在sin_buf[ ]中,其值為:
式中Um為Vref/2,SIZE為所取的點數(shù),點數(shù)越少,頻率越高,但是為了保證圖形的精確度,這里取100,i指第幾個點,取值范圍為0~99。
原理同正弦波,將信號的離散值保存到存儲器中,利用DAM將數(shù)據(jù)保存到DAC的存儲器中,最后通過模數(shù)轉換后進行輸出。鋸齒波的離散信號值存放在saw_buf[ ]中,其值為:
i為取第幾個點,取值范圍為0~99。
圖4 為信號發(fā)生器產(chǎn)生正弦波波形的實驗結果,由實驗結果可以看到,輸出的波形很平滑而且誤差較小。
圖4 實驗測試圖
實現(xiàn)了一種系統(tǒng)設計將STM32的DMA與DAC模塊相結合,輸出多種波形,并且得到的波形平滑,失真率低,易于控制,可以廣泛用于各種場合。