導航:首頁 > 操作系統 > 基於單片機的函數信號發生器設計

基於單片機的函數信號發生器設計

發布時間:2023-03-24 06:00:48

Ⅰ 設計和製作一函數信號發生器

基於ICL8038函數信號發生器的設計本設計是以ICL8038 和AT89C2051 為核心設計的數控及掃頻函數信號發生器。ICL8038 作為函數信號源
結合外圍電路產生占空比和幅度可調的正弦波、方波、三角波; 該函數信號發生器的頻率可調范圍為1~100kHz, 步進為0.1kHz, 波形穩定, 無明顯失真。
1.系統設計框圖如圖1 為系統設計框圖。本設計是利用鍵盤設置相應的頻率值, 根據所設置頻率段選擇相應電容, 經計算獲得相應數字量送數字電位器實現D/A 轉換, 同時與參考電壓( 本例為5.5V) 相加後形成數控調壓去控制ICL8038 第8 腳, 這樣即可由ICL8038 實現對應頻率值的矩形波、三角波和正弦波。方波幅度經衰減後送單片機可測得信號源頻率並由數碼管顯示。
2.電路原理圖
圖2 為電路原理圖。其中AT89C2051 是8 位單片機, 其中: P1.4~P1.7、P1.2、P1.3、P3.0、P3.1 作為數
碼顯示; P3.3、P3.5 、P3.7 作為鍵盤輸入口; P3.4 作為計數口, 用於測量信號源頻率;P3.0~P3.2 作為數字電位器的SPI匯流排; P1.1、P1.0 可根據需要擴展繼電器或模擬開關選擇ICL8038第10 腳( CAP) 與第11 腳間的電容C。
MCP41010 是8 位字長的數字電位器, 採用三匯流排SPI 介面。/CS: 片選信號, 低電平有效; SCK:時鍾信號輸入端; SI: 串列數據輸入端, 用於寄存器的選擇及數據輸入。MCP41010 可作為數字電位器, 也可以作為D/A 轉換器, 本設計是將MCP41010 接成8 位字長的D/A 轉換器, MCP41010 根據輸入的串列數據, 對基準電壓進行分壓後由中間抽頭輸出模擬電壓, 即VPWO =DN/256VREF ( 式中VREF=5V) 。
函數發生電路ICL8038, 圖2所示是一個占空比和一個頻率連續可調的函數發生電路。ICL8038是一種函數發生器集成塊, 通過外圍電路的設計, 可以產生高精密度的正弦波、方波、三角波信號, 選擇不同參數的外電阻和電容等器件, 可以獲得頻率在0.01Hz~300kHz 范圍內的信號。通過調節RW2 可使占空比在2%~98%可調。第10 腳( CAP) 與第11 腳間的電容C 起到很重要的作用, 它的大小決定了輸出信號頻率的瞎搭大小, 當C 確定後, 調節ICL8038 第8 腳的電壓可改變信號源的輸出頻率。從ICL8038 引腳9(要接上拉電阻)輸出的波形經衰減後送單片機P3.4 進行頻率測量。
正弦函數信號由三角波函數信號經過非線性變換而獲得。利用二極體的非線性特性, 可以將三角波信號的上升和下降斜率逐次逼近正弦波的斜率。ICL8038 中的非線性網路是由4 級擊穿點的非線性逼近網路構成。一般說來, 逼近點越多得到的正弦波效果越好, 失真度也越小, 在本晶元中N= 4, 失真度可以小於1。在實測中得到正弦信號的失真度可達0.5 左右。其精度效果相當滿意。為了進一步減小正弦波的失真度, 可採用圖2 所示電路中兩個電位器RW3 和RW4 所組成的電路, 調整它們可使正弦波失真度減小。當然, 如果矩形波的占空比不是50% , 矩形波不再是方波, 引腳2 輸出也就不再是正弦波了。 圖2 電路原理圖
經實驗發現, 在電路設計中接10 腳和11 腳的電容值和性能是整個電路的關鍵器件, 電容值的確定也就確定電路能產生的頻率范圍啟銷, 電容性能的好壞直接影響信號頻率的穩定性、波形的失真度, 由於該晶元是通過恆流源
對悄神遊C 充放電來產生振盪的, 故振盪頻率的穩定性就受到外接電容及恆流源電流的影響, 若要使輸出頻率穩定, 必須採用以下措施:外接電阻、電容的溫度特性要好; 外部電源應穩定; 電容應選用漏電小、質量好的非極化電容器。3.實驗結果
當±12V 工作電源時, 輸出頻率如下表: 失真度情況, 實驗數據如下表: 4.軟體流程圖
圖3 為軟體流程圖。T0 設為計數器,T1 設為定時器(初值為5ms)。5ms 啟動主循環, 主要用於鍵盤掃描及掃描顯示, 圖2 中K0 作為控制鍵, K1 作為調整鍵, K2 作為增加鍵; 上電時程序進入頻率設置模式, 按一下K0 鍵程序進入數控模式, 按二下K0 鍵程序進入掃頻模式, 按三下K0 鍵程序進入頻率設置模式, 周而復始。在頻率設置模式, 由K1 鍵和K2 鍵完成頻率設置。 圖3 軟體流程圖基於ICL8038的函數發生器函數發生器是一種可以同時產生方波、三角波和正弦波的專用集成電路。當調節外部電路參數時,還可以獲得占空比可調的矩形波和鋸齒波。因此,廣泛用於儀表之中。一、電路結構函數發生器ICL8038的電路結構如圖虛線框內所示,共有五個組成部分。兩個電流源的電流分別為IS1和IS2,且IS1=I,IS2=2I;兩個電壓比較器Ⅰ和Ⅱ的閾值電壓分別為 和 ,它們的輸入電壓等於電容兩端的電壓uC,輸出電壓分別控制RS觸發器的S端和 端;RS觸發器的狀態輸出端Q和 用來控制開關S,實現對電容C的充、放電;兩個緩沖放大器用於隔離波形發生電路和負載,使三角波和矩形波輸出端的輸出電阻足夠低,以增強帶負載能力;三角波變正弦波電路用於獲得正弦波電壓。RS觸發器是數字電路中具有存儲功能的一種基本單元電路。Q和 是一對互補的狀態輸出端,當Q=1時, ;當Q=0時, 。S和 是兩個輸入端,當 時,Q=0時, ;反之,當 時,Q=1時, ;當S=0, 時,Q和 保持原狀態不變。兩個電壓比較器的電壓傳輸特性如下圖所示。二、工作原理★當給函數發生器ICL8038合閘通電時,電容C的電壓為0V,根據電壓比較器的電壓傳輸特性,電壓比較器Ⅰ和Ⅱ的輸出電壓均為低電平;因而RS觸發器的 ,輸出Q=0, ;★使開關S斷開,電流源IS1對電容充電,充電電流為IS1=I因充電電流是恆流,所以,電容上電壓uC隨時間的增長而線性上升。★當上升為VCC/3時,電壓比較器Ⅱ輸出為高電平,此時RS觸發器的 ,S=0時,Q和 保持原狀態不變。★一直到上升到2VCC/3時,使電壓比較器Ⅰ的輸出電壓躍變為高電平,此時RS觸發器的 時,Q=1時, ,導致開關S閉合,電容C開始放電,放電電流為IS2-IS1=I因放電電流是恆流,所以,電容上電壓uC隨時間的增長而線性下降。起初,uC的下降雖然使RS觸發的S端從高電平躍變為低電平,但 ,其輸出不變。★ 一直到uC下降到VCC/3時,使電壓比較器Ⅱ的輸出電壓躍變為低電平,此時 ,Q=0, ,使得開關S斷開,電容C又開始充電,重復上述過程,周而復始,電路產生了自激振盪。由於充電電流與放電電流數值相等,因而電容上電壓為三角波,Q和 為方波,經緩沖放大器輸出。三角波電壓通過三角波變正弦波電路輸出正弦波電壓。結論:改變電容充放電電流,可以輸出占空比可調的矩形波和鋸齒波。但是,當輸出不是方波時,輸出也得不到正弦波了。三、性能特點ICL8038是性能優良的集成函數發生器。可用單電源供電,即將引腳11接地,引腳6接+VCC,VCC為10~30V;也可雙電源供電,即將引腳11接-VEE,引腳6接+VCC,它們的值為±5~±15V。頻率的可調范圍為0.01Hz~300kHz。輸出矩形波的占空比可調范圍為2%~98%,上升時間為180ns,下降時間為40ns。輸出三角波(斜坡波)的非線性小於0.05%。輸出正弦波的失真小於1%。四、常用接法如圖所示為ICL8038的引腳圖,其中引腳8為頻率調節(簡稱為調頻)電壓輸入端,電路的振盪頻率與調頻電壓成正比。引腳7輸出調頻偏置電壓,數值是引腳7與電源+VCC之差,它可作為引腳8的輸入電壓。如圖所示為ICL8038最常見的兩種基本接法,矩形波輸出端為集電極開路形式,需外接電阻RL至+VCC。在圖(a)所示電路中,RA和RB可分別獨立調整。在圖(b)所示電路中,通過改變電位器RW滑動的位置來調整RA和RB的數值。當RA=RB時,各輸出端的波形如下圖(a)所示,矩形波的占空比為50%,因而為方波。當RA≠RB時,矩形波不再是方波,引腳2輸出也就不再是正弦波了,圖(b)所示為矩形波占空比是15%時各輸出端的波形圖。根據ICL8038內部電路和外接電阻可以推導出占空比的表達式為故RA<2RB。 為了進一步減小正弦波的失真度,可採用如下圖所示電路中兩個100kΩ的電位器和兩個10kΩ電阻所組成的電路,調整它們可使正弦波失真度減小到0.5%。在RA和RB不變的情況下,調整RW2可使電路振盪頻率最大值與最小值之比達到100:1。在引腳8與引腳6之間直接加輸入電壓調節振盪頻率,最高頻率與最低頻率之差可達1000:1。

Ⅱ 求一個正確的基於51單片機的函數信號發生器的C程序

#include<reg51.h>
#include<absacc.h>
#include<MAX72191.h>
#defineDAC XBYTE[0x7fff] //P2.7接CS

sbitkey0 = P3^2;// 增減切換鍵
sbitkey1 = P3^3;//個位,十位,百位,千位的控制切換
sbitkey2 = P3^4;// 調整位
sbitkey3 = P3^5;// 波形選擇正弦、三角、矩形波,鋸齒波

unsignedchar i,j;
unsignedint counter,step,flag;
typedefunsigned int uint;
//定時器0初始化
voidInit_Timer0(void)
{
TMOD = (TMOD & 0XF0) | 0X01;//設置工作方式和定時初始值
TH0 = 0xff;
TL0 = 0x00;
TR0 =1; //啟動定時器
ET0 =1;
}
//定義輸出波形的代碼
unsignedchar code type[4][256]={
{ //正弦波代碼
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8,
0x9, 0xb,0xc, 0xd, 0xf, 0x10,0x12,0x13,0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23,
0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x39,0x3b,0x3e,0x41,0x43,0x46,0x49,0x4c,
0x4f,0x52,0x55,0x58,0x5b,0x5e,0x61,0x64,0x67,0x6a,0x6d,0x70,0x73,0x76,0x7a,0x7d,
0x80,0x83,0x86,0x89,0x8c,0x8f,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,
0xb1,0xb4,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xeb,0xed,0xef,0xf0,0xf1,0xf3,0xf4,
0xf5,0xf6,0xf8,0xf9,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfd,0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf9,0xf8,0xf6,0xf5,
0xf4,0xf3,0xf1,0xf0,0xef,0xed,0xeb,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc,0xda,
0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb4,0xb1,
0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x8f,0x8c,0x89,0x86,0x83,0x80,
0x7d,0x7a,0x76,0x73,0x70,0x6d,0x6a,0x67,0x64,0x61,0x5e,0x5b,0x58,0x55,0x52,0x4f,
0x4c,0x49,0x46,0x43,0x41,0x3e,0x3b,0x39,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27,0x25,
0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13,0x12,0x10,0xf,0xd, 0xc, 0xb, 0x9,
0x8,0x7, 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1, 0x1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
},
{ //三角波代碼
0x2,0x4, 0x6, 0x8, 0xa, 0xc, 0xe, 0x10,0x12,0x14, 0x16, 0x18, 0x1a,0x1c, 0x1e, 0x20,
0x22,0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e, 0x30,0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e, 0x40,
0x42,0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e, 0x50,0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60,
0x62,0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e, 0x70,0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e, 0x80,
0x82,0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e, 0x90,0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e, 0xa0,
0xa2,0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae, 0xb0,0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc,0xbe, 0xc0,
0xc2,0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xd0,0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc,0xde, 0xe0,
0xe2,0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee, 0xf0,0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc,0xfe, 0xff,
0xfe,0xfc, 0xfa, 0xf8, 0xf6, 0xf4, 0xf2, 0xf0,0xee, 0xec, 0xea, 0xe8, 0xe6, 0xe4,0xe2, 0xe0,
0xde,0xdc, 0xda, 0xd8, 0xd6, 0xd4, 0xd2, 0xd0,0xce, 0xcc, 0xca, 0xc8, 0xc6, 0xc4,0xc2, 0xc0,
0xbe,0xbc, 0xba, 0xb8, 0xb6, 0xb4, 0xb2, 0xb0,0xae, 0xac, 0xaa, 0xa8, 0xa6, 0xa4,0xa2, 0xa0,
0x9e, 0x9c, 0x9a, 0x98, 0x96, 0x94, 0x92, 0x90,0x8e, 0x8c, 0x8a, 0x88, 0x86, 0x84, 0x82, 0x80,
0x7e, 0x7c, 0x7a, 0x78, 0x76, 0x74, 0x72, 0x70,0x6e, 0x6c, 0x6a, 0x68, 0x66, 0x64, 0x62, 0x60,
0x5e, 0x5c, 0x5a, 0x58, 0x56, 0x54, 0x52, 0x50,0x4e, 0x4c, 0x4a, 0x48, 0x46, 0x44, 0x42, 0x40,
0x3e, 0x3c, 0x3a, 0x38, 0x36, 0x34, 0x32, 0x30,0x2e, 0x2c, 0x2a, 0x28, 0x26, 0x24, 0x22, 0x20,
0x1e, 0x1c, 0x1a, 0x18, 0x16, 0x14, 0x12, 0x10,0xe, 0xc, 0xa, 0x8, 0x6, 0x4, 0x2, 0x00
},
{// 矩形脈沖波代碼
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff, 0xff, 0xff, 0xff, 0xff,0xff, 0xff,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00,
},
{//鋸齒波代碼
0x00,0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,0x08,0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10,0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,0x18,0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
0x20,0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,0x28,0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
0x30,0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38,0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
0x40,0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,0x48,0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
0x50,0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,0x58,0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
0x60,0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,0x68,0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
0x70,0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,0x78,0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
0x80,0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,0x88,0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
0x90,0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,0x98,0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
0xa0,0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,0xa8,0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
0xb0,0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,0xb8,0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
0xc0,0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,0xc8,0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
0xd0,0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,0xd8,0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
0xe0,0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,0xe8,0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
0xf0,0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,0xf8,0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff}
};

//顯示子函數
Disp7219(unsignedlong dat)
{
unsigned char i;
unsigned char led[8];

led[7]=dat%10;
led[6]=dat/10%10;
led[5]=dat/100%10;
led[4]=dat/1000%10;
led[3]=dat/10000%10;
led[2]=dat/100000%10;
led[1]=dat/1000000%10;
led[0]=dat/10000000%10;

for(i=0;i<8;i++)
{
max_7219(i+1, led[i]);
}
}

//延時約1m秒
voiddelay_ms(uint n)
{
uchar j;
while(n--)
for(j=0;j<120;j++);
}

//主函數
main()
{
unsigned int f,n,j;
delay_ms(500);
Init_Max7219();//初始化7219
Disp7219(000);
Init_Timer0();
step=18;
EA = 1;
while(1)
{
if(key0 == 0) n=n+1;
if(n==2)n=0;
if(key1==0) j=j+1;
if(j==4) j=0;
if(n==0 && j == 0 &&key2 == 0) if(step<180) step+=18; //個位增
if(n==1 && j == 0 &&key2 == 0) if(step>18) step-=18; //個位減

if(n==0 && j == 1 &&key2 == 0) if(step<1800) step+=180;//十位增
if(n==1 && j == 1 &&key2 == 0) if(step>180) step-=180; //十位減

if(n==0 && j == 2 &&key2 == 0) if(step<18000) step+=1800;//百位增
if(n==1 && j == 2 &&key2 == 0) if(step>1800) step-=1800;//百位減

if(n==0 && j == 3 &&key2 == 0) if(step<54000) step+=18000;//千位增
if(n==1 && j == 3 &&key2 == 0) if(step>18000) step-=18000;//千位減

if(key3==0)flag=flag+1;if(flag==4)flag=0;

while((!key0)||(!key1)||(!key2)||(!key3));
f=step/18;
Disp7219(f);}//顯示頻率
}

// 定時中斷服務
voidTimer0(void) interrupt 1 using 2
{
TH0 = 0xff;
TL0 = 0x00;
counter = counter + step;
DAC=type[flag][(unsignedint)counter>>8];
}

Ⅲ 基於單片機的信號發生器的設計,輸出方波,正弦波,三角波,鋸齒波,頻率可調。原理是如何噠怎麼取點

51單片機硬體有PCA模塊的,或者是PWM發生器的型號,也有沒有的,你採用的晶元有沒有這些硬體?
正弦波:
如果有,以PCA模塊為例,可以作為DA使用,使用前根據datasheet配置好PCA。在51頭文件中有math.h,裡面有sin(X)函數,可以在程序中直接使用,使用前在主函數重要包含math.H這個文件。然後每個點采樣輸出即可,頻率可調可以通過不同方法實現,如果是要做信號發生器,推薦使用一個電位器,通過AD採集電壓,將採集值作為你輸出函數的系數即可,亦可以通過串口發送指令等方式實現,前提要在使用前將AD或者串口配置好。
如果沒有硬體模塊,也可以用普通IO口模擬,思路如下,經過y=sinx函數求得的結果,經過演算法轉化成二進制(主要是將小數轉化成二進制的演算法),推薦轉化成8的整數倍位,比如8位二進制或者16位二進制。轉化結束後將結果給IO口輸出即可,頻率也可採取上述方法設定。
三角波:
如果有DA,將DA的輸入值按一定時間自增,到達峰值後按一定時間自減。前文中的「一定時間」設定的足夠小,可以近似認為是三角波。三角波輸出頻率就是周期,在具體到操作層面時,可以將輸出函數前加上一個時間系數,還是通過調節正弦波的頻率的方式調節。
木有DA···還是和正弦波類似,通過演算法將輸出值轉化成二進制,然後送給IO口
方波:
這個最簡單,將IO口定時切換高低電平即可,你定的時間就將成為你輸出的頻率。
如果有PCA模塊,可配置成定時翻轉模式,比較方便~
鋸齒波是不是和方波類似啊?

Ⅳ 基於單片機、ADC0832信號發生器設計

智能函數發生器設計
設計的要求如下
設計要求
1. 信號頻率范圍1HZ~100kHZ;
2. 輸出波形應有: 方波、三角形、正弦波;
3. 輸出信號幅值范圍0~10V;
4. 具有數字顯示輸出信號頻率和電壓幅值功能。
第一章 方案設計與論證
方案一:本方案直接採用凌陽SPCE061A作為波形發生器。波形的具體產生是通過兩路DAC來產生,凌陽SPCE061A在這方面的設計為我們提供了極大的方便,用它實現的好處在於,外圍電路極其簡單,另外在DAC的編程方面又提供及其便利的編程環境。外圍電路的設計包括三大部分,第一是鍵盤控制電路的設計,這里採用4*4鍵盤,由IOA的低八位進行控制,把鍵盤上的行和列分別接在IOA0~IOA3和IOA4~IOA7上,採用外部中斷二來中斷所顯示波形,以便進入下一波形的編輯和輸出,在波形輸出的同時利用外部中斷一來實現同步的頻率調節。第二是顯示電路的設計,這里為了在波形輸出依然有顯示,由於單片機的局限性這里採用通常的動態LED顯示行不通,因為波形輸出時要求CPU不停地為其服務而沒有空閑來為LED進行不停更新,解決方案是採用帶數據緩存器和驅動的LCD來提供顯示,這樣只佔用八個I/O口即可完成設計要求,也可放棄適時顯示功能採用LED顯示,這里將提供兩種顯示方案。第三是濾波和電壓轉換電路的設計,濾波採用低通濾波器,濾除DAC轉換過程中形成的高頻小鋸齒波。另外由於凌陽SPCE061A單片機DAC輸出為電流輸出,為滿足達到5V的電壓輸出,外接OP07運算放大器進行放大,加1千歐姆電阻進行電流信號到電壓信號的轉換。本設計的特點是全面採用數字電路方案,因而工作穩定可靠。利用單片機控制管理,使頻率設置和占空比調整等操作可用鍵盤輸入,十分方便.由於方案中涉及到SPCE061A單片機現簡介如下:
SPCE061A單片機概述
SPCE061A是繼u'nSP系列產品SPCE500A等之後凌陽科技推出的又一個16位結構的微控制器。目前有兩種封裝形式:84引腳的PLCC84封裝和80引腳的LQFP80貼片封裝。主要性能如下:
16位m』nSP微處理器;
工作電壓:VDD為2.4~3.6V(cpu), VDDH為2.4~5.5V(I/O);
CPU時鍾:32768Hz~49.152MHz ;
內置2K字SRAM、內置32K FLASH;
可編程音頻處理;
32位通用可編程輸入/輸出埠;
32768Hz實時時鍾,鎖相環PLL振盪器提供系統時鍾信號;
2個16位可編程定時器/計數器(可自動預置初始計數值);
2個10位DAC(數-模轉換)輸出通道;
7通道10位電壓模-數轉換器(ADC)和單通道語音模-數轉換器;
聲音模-數轉換器輸入通道內置麥克風放大器自動增益控制(AGC)功能;
系統處於備用狀態下(時鍾處於停止狀態)耗電小於[email protected]
具備觸鍵喚醒的功能;
14個中斷源:定時器A / B,2個外部時鍾源輸入,時基,鍵喚醒等;
使用凌陽音頻編碼SACM_S240方式(2.4K位/秒),能容納210秒的語音數據;
具備非同步、同步串列設備介面;
具有低電壓復位(LVR)功能和低電壓監測(LVD)功能;
內置在線模擬電路介面ICE(In- Circuit Emulator);
具有保密能力;
具有WatchDog功能(由具體型號決定)

Ⅳ 單片機函數信號發生器

DAC0832可以的,但是速度比較慢,如果信號頻率比好基較高的話友槐謹建議用高速DAC,另外DA出來的波形是「階梯」明滑狀的,所以後面建議加一個低通濾波器

Ⅵ 怎麼用單片機做一個信號發生器

如果要求頻率不是很高,可以採用PWM方式,優點是無需另外加DA,且輸出解析度可靈活調整。考慮到單片機的運算能力不強,你可以用EXCEL編制一個正弦信號在一個周期內的等間隔幅值表,比如說,將一個周期的正弦信號分為64個點,信號的峰值為1000,初始相位為0°,那麼,這個表格的第一個點是0,第n點為1000*sin(2πn/64),用EXCEL將64個點的幅值計算完畢,按照需要的格式編制為編程語言能夠接受的表格。利用單片機的一個定時器,定時器的溢出值設置為1000,溢出時,某個IO口輸出低電平,再用一個寄存器存儲輸出點序號,序號為n時,根據輸出點序號通過查表獲取1000*sin(2πn/64)的數值,將定時器的計數值與1000*sin(2πn/64)比較,相等時,IO口輸出高電平。不斷循環執行上述程序,IO將輸出占空比與正弦信號幅值成正比的方波信號,這就是常說的正弦調制PWM信號。設計一個增益可調的有源低通濾波器,PWM信號經過低通濾波器後,輸出就是正弦波,調節低通濾波器的增益,即可改變正弦信號的幅值。當然,在設置PWM占空比時,將查表結果先乘以一個設定數值(一般是0~1的小數),也可以調節輸出幅值。為了簡化運算,可以是先乘以一個整數M,再除以N(N為128、256等2的冪的數值),M取值范圍為0~N,因為這種除法可通過移位進行,程序簡單,且運算速度快。

閱讀全文

與基於單片機的函數信號發生器設計相關的資料

熱點內容
曙光ai伺服器怎麼樣 瀏覽:469
單片機自激 瀏覽:299
好看的電影你應該懂得 瀏覽:780
電子製冷壓縮製冷哪個好 瀏覽:183
成人網電影 瀏覽:891
泛型編程pdf 瀏覽:697
影片在線免費觀看 瀏覽:683
網飛電影入口 瀏覽:198
億賽通加密軟體下載 瀏覽:933
安卓儲物櫃怎麼取出貨物 瀏覽:906
文件夾中怎樣查找相似照片 瀏覽:969
linux中斷線程 瀏覽:568
古裝三極古裝劇有哪些 瀏覽:462
智能控制技術pdf 瀏覽:225
安卓手機如何設置微信來電 瀏覽:380
android撥打分機號 瀏覽:423
成都通宵私人電影院哪家好 瀏覽:566
iphone照片視頻加密 瀏覽:266
四叉樹碰撞檢測演算法邊界 瀏覽:484
電影票怎麼驗票真偽 瀏覽:901