DDS芯片AD9833的特性
AD9833是AD公司出品的一款DDS波形發(fā)生器,能夠產(chǎn)生正弦波、三角波和方波輸出,它的主要參數(shù)如下:
能產(chǎn)生正弦波、三角波和方波的輸出;
28位的相位累加器,也就是主頻時鐘為25MHz時,可實現(xiàn)0.1Hz的分辨率;主頻時鐘為1MHz時,可實現(xiàn)0.004Hz的分辨率;
10位的DAC輸出;輸出正弦波和三角波時波形幅度為38mV~650mV,輸出方波時幅度最大為3.3V。
采用SPI接口,只作為SPI的從機。
這里需要說明一下,AD9833的輸出波形頻率,最高可達12.5MHz。這個12.5MHz是怎么來的呢?
因為AD9833的輸入時鐘頻率最高是25MHz,由于奈奎斯特采樣定律的限制,輸出波形的每個周期內(nèi)至少要2個點才能還原出信號,所以,25MHz/2 = 12.5MHz,是這么來的。
但是,這里要特別注意一下,奈奎斯特采樣定理使用的條件,它描述的是波形中所含正弦波的最高頻率。
因此,如果我們想讓它輸出12.5MHz的正弦波是可行的,一個周期內(nèi)兩個點的波形,再加上后端的低通濾波器就能實現(xiàn);輸出方波也是可行的,因為方波只有高、低電平的變化,輸出不加任何濾波就是方波;而想要輸出三角波,就不可能了,一個周期中只輸出兩個點,怎么都不可能形成三角波的圖形,要想輸出三角波,只能降低頻率,讓一個周期內(nèi)的點數(shù)增加,才能輸出類似三角波的波形。
使用stm32驅(qū)動AD9833輸出
AD公司官方給出了一套驅(qū)動AD9833的代碼,但是它的代碼結(jié)構(gòu)比較復(fù)雜,而且它為了兼容同系列的其他DDS芯片里面有很多冗余的部分,我們不使用官方的代碼(有興趣研究官方代碼的可以關(guān)注我的公眾號找到下載地址)。
自己來實現(xiàn)AD9833的驅(qū)動代碼,使用的硬件平臺是stm32單片機。
AD9833連接到SPI2接口上,使用PA8作為片選信號。
首先看AD9833的SPI接口時序:
它只有MOSI數(shù)據(jù),所以數(shù)據(jù)只有主機到從機的,而且要注意是在時鐘下降沿取數(shù)的,每次傳輸16bit。
在cubemx里建立工程,主要的參數(shù)設(shè)置下面幾項:
使能SPI2,設(shè)置為全雙工主機(半雙工主機也可以,因為數(shù)據(jù)線只有一根MOSI);時鐘初始為高、第一個跳變沿取數(shù);
PA8設(shè)置為輸出,作為AD9833的片選信號;
然后生成工程,在keil中打開后就可以編寫代碼了。
AD9833的寄存器比較簡單,一共就三個:控制寄存器、頻率寄存器、相位寄存器。
其中,控制寄存器用于設(shè)置波形、是否輸出、是否低功耗等等一些控制量。頻率、相位寄存器都有兩個,由控制寄存器中的FSELEC、PSELECT位來選擇使用哪一個。
原理圖如下:
在AD9833的輸出增加了一個數(shù)字電位器MCP41010和運放AD8051進行輸出波形幅度的調(diào)節(jié)。
但是,這個模塊的設(shè)計是有問題的,主要在于MCP41010數(shù)字電位器的帶寬不夠!會造成輸出頻率較高時,波形幅度大幅減小,完全起不到調(diào)節(jié)波形幅度的作用。
如下圖是MCP41010的增益隨頻率的變化曲線,可以看到,頻率到1MHz以上時,衰減會變得很明顯,頻率越高衰減越大: