剛開始想用單片機(jī)做個(gè)頻率連續(xù)可調(diào)的信號(hào)發(fā)生器,后來(lái)就聯(lián)想到了當(dāng)時(shí)用FPGA做的DDS信號(hào)發(fā)生器了。然后上網(wǎng)搜資料,哈哈,這個(gè)還真有人做過(guò),大概看了一下人家的講解,就開始干活啦!
DDS信號(hào)發(fā)生器的頻率計(jì)算公式如下:
其中fout為輸出頻率, M為累加器每次的步進(jìn)值,N為累加器的位數(shù),我這里采用的是unsigned int 16位的累加器。在FPGA系統(tǒng)中這個(gè)fc為系統(tǒng)時(shí)鐘,也就是有源晶振經(jīng)過(guò)分頻后的頻率。但是在單片機(jī)中我們只能用單片機(jī)進(jìn)中斷的頻率來(lái)作為fc。
fc的設(shè)置需要注意的是1、進(jìn)中斷的周期要大于中斷程序執(zhí)行的時(shí)間 2、進(jìn)中斷的周期也要大于DAC兩次寫入數(shù)據(jù)的時(shí)間。
我采用的硬件stc12c5a08s2 24m晶振 dac0832
上最終效果圖
幾個(gè)頻率的測(cè)試波形
10Hz頻率測(cè)試
正弦波
方波
三角波
鋸齒波
制作經(jīng)歷:
昨天用單片機(jī)模擬個(gè)DDS信號(hào)發(fā)生器,畫了個(gè)板子。從開始做板子就各種不順。。。。。。打印時(shí)打印機(jī)沒墨啦,地線我用的鋪銅,悲催的是鋪地墨太淺,沒法只好拿著油性筆把地線重新描了下。好吧,做板去,腐蝕順利。然后拿到板子測(cè)量電源和地沒短路,開始焊接,一切順利。再次檢測(cè)電源和地是否短路,萬(wàn)用表討厭的滴滴聲想起來(lái)啦。。。。。。啊蒼天啊,短路啦,我焊接水平?jīng)]那么差吧,一個(gè)小板子竟然焊短路 啦!好吧開始檢查電路,把電源線從頭看到尾看不出來(lái)短路啊,好吧再看兩遍,還是沒短路啊。沒法開始上刀子割電源線,割了兩刀短路范圍縮小啦,然后就逮著那一小段電源線左看右看上看下看沒短路啊,當(dāng)時(shí)就有點(diǎn)崩潰。然后打開pcb,就沿著這條線對(duì)電路,暈死。。。。。。問題是我描地線時(shí)把復(fù)位按鍵當(dāng)做獨(dú)立按鍵啦,本來(lái)接電源的線硬給畫到了地上,割開不短路啦。可是我焊接前測(cè)試?yán)舶。瑳]短路啊親,怎么突然蹦出來(lái)電路缺陷短路啊,見鬼。上電,電源燈不亮。。。。。。趕緊拔下電源,摸摸芯片不熱啊,準(zhǔn)備好萬(wàn)用表,直接接在單片機(jī)的地和vcc上,上電,電壓正常,懷疑電源燈電路可能斷啦,一摸led焊盤直接翹起來(lái)啦,這的歸功于那沒墨的打印機(jī)。然后補(bǔ)線,硬件搞定
下載測(cè)試程序,咦,下不進(jìn)去!我一開始懷疑下載管腳沒接緊,我就輕微晃晃它,咦,怎么這么活絡(luò),翻過(guò)啦瞅瞅,下載的兩條插針焊盤全完蛋啦,好吧使用替換法,在其他板子上下載程序試試,可以下進(jìn)去,片子沒問題,然后把片子裝到原來(lái)那個(gè)板子上,檢測(cè)程序不運(yùn)行。上示波器測(cè)試晶振管腳,沒波形,哈哈,問題鎖定,晶振沒工作。這個(gè)晶振是在其他板子上拆的,是不是拆時(shí)間長(zhǎng)燒壞啦,換晶振,還不工作,好吧,我換30p電容,檢測(cè)晶振有波形,程序運(yùn)行,一切搞定!!!
總結(jié)越悲催越是小問題不斷。。。。。。
注:中間來(lái)回拔單片機(jī),一不留神,單片機(jī)兩根管腳硬生生鉆進(jìn)手指里!