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