您當前的位置:首頁 > 攝影

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

作者:由 蔣宇智 發表于 攝影時間:2020-03-24

設計要求

1。輸出4種波形:方波、鋸齒波、三角波和正弦波;

2。幅值調節範圍為:2V-10V;

3。頻率調節範圍為:20Hz-80Hz;

內容簡介

訊號發生器模擬系統由51微控制器最小系統、LCD12864液晶模組、DAC0832波形轉換模組(包括波形幅值與頻率轉換)、按鍵控制模組以及示波器測量模組構成。透過Keil平臺下的C語言程式設計,微控制器控制輸出的數字訊號經工作在直通方式下的DAC0832數模轉換,輸出方波、正弦波、鋸齒波、三角波4種電壓波形,且波形幅值、頻率可調。波形的切換、頻率和幅值的增減可透過按鍵模組實現,同時當前的波形資訊可實時更新在LCD12864顯示模組上,波形形象可透過示波器測量模組展現。整個設計由Proteus模擬實現,並能滿足設計內容及要求。

本設計內容詳細,涵蓋 微控制器最小系統設計原理、按鍵與LCD12864液晶設計、DAC0832幅值控制電路、頻率控制電路設計、頻率控制演算法原理、模擬結果分析 等內容。

整體的框架

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

模擬電路圖

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

模擬分析

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

圖1 幅值為4V,頻率為20Hz的方波訊號

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

圖2 幅值為5V,頻率為50Hz的鋸齒波訊號

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

圖3 幅值為6V,頻率為60Hz的三角波輸出訊號

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

圖4 幅值為10V,頻率為80Hz的正弦波輸出訊號

部分C程式

intmain

void

{

uchar

data

i

=

0

uchar

idata

strtemp

35

];

SP

=

0xA0

for

i

=

0

i

<

7

i

++

{

//從20Hz開始,到80Hz,步長為10Hz,共7個頻率資料,最高只能做到80Hz,同時由於啟動中斷會佔用一定時間,所以補償25us。

freq

i

=

65535

-

1000000

/

20

+

i

*

10

/

256

+

25

}

TMOD

=

0x11

ET0

=

1

ET1

=

0

EA

=

1

TL0

=

freq

index_freq

%

256

TH0

=

freq

index_freq

/

256

TR0

=

1

IT0

=

0

EX0

=

1

LE1

=

0

P2

=

amplitude

index_amp

];

EA

=

0

LE1

=

1

LCDinit12864

();

LCD_DispStrWide

0x00

“波形:1方波”

);

LCD_DispStrWide

0x10

“頻率:20Hz”

);

LCD_DispStrWide

0x08

“幅值:2.0V”

);

LCD_DispStrWide

0x18

“波形頻率+-”

);

LE1

=

0

EA

=

1

while

1

{

if

K_WAVE

==

1

{

K_WAVE

=

0

C_WAVE

++

if

C_WAVE

>=

4

C_WAVE

=

0

//0:方波1:鋸齒波 2:三角波3:正弦波

sprintf

strtemp

“%s%s”

“波形:”

disp_wave

C_WAVE

]);

LE1

=

1

EA

=

0

LCD_DispStrWide

0x00

strtemp

);

EA

=

1

LE1

=

0

}

else

if

K_FREQ_AMP

==

1

{

K_FREQ_AMP

=

0

C_FREQ_AMP

++

if

C_FREQ_AMP

>=

2

C_FREQ_AMP

=

0

LE1

=

1

EA

=

0

if

C_FREQ_AMP

==

0

LCD_DispStrWide

0x18

“波形頻率+-”

);

//0:頻率

else

LCD_DispStrWide

0x18

“波形幅值+-”

);

//1:幅值

EA

=

1

LE1

=

0

}

else

if

K_ADD

==

1

{

K_ADD

=

0

if

C_FREQ_AMP

==

0

{

//在7種頻率之間切換 20Hz,30Hz,40Hz,50Hz,60Hz,70Hz,80Hz

index_freq

++

if

index_freq

>=

7

index_freq

=

0

sprintf

strtemp

“%s%d%s”

“頻率:”

,(

int

)(

20

+

index_freq

*

10

),

“Hz”

);

LE1

=

1

EA

=

0

LCD_DispStrWide

0x10

strtemp

);

EA

=

1

LE1

=

0

}

else

{

//在9種幅值之間切換 1V,2V,3V,4V,5V,6V,7V,8V,9V,10V

index_amp

++

if

index_amp

>

8

index_amp

=

0

sprintf

strtemp

“%s%。1f%s”

“幅值:”

,(

float

)(

1

+

index_amp

*

0。5

*

2

“V”

);

LE1

=

1

EA

=

0

LCD_DispStrWide

0x08

strtemp

);

LCD_DispStrWide

0x10

“頻”

);

EA

=

1

LE1

=

0

P2

=

amplitude

index_amp

];

}

}

else

if

K_REDUCE

==

1

{

K_REDUCE

=

0

if

C_FREQ_AMP

==

0

{

if

index_freq

>

0

index_freq

——

sprintf

strtemp

“%s%d%s”

“頻率:”

,(

int

)(

20

+

index_freq

*

10

),

“Hz”

);

LE1

=

1

EA

=

0

LCD_DispStrWide

0x10

strtemp

);

EA

=

1

LE1

=

0

}

else

{

if

index_amp

>

0

index_amp

——

sprintf

strtemp

“%s%。1f%s”

“幅值:”

,(

float

)(

1

+

index_amp

*

0。5

*

2

“V”

);

LE1

=

1

EA

=

0

LCD_DispStrWide

0x08

strtemp

);

LCD_DispStrWide

0x10

“頻”

);

EA

=

1

LE1

=

0

P2

=

amplitude

index_amp

];

}

}

}

return

0

}

分享內容

(1)基於51微控制器與DAC0832的訊號發生器設計論文完整版;

(2)Proteus模擬檔案

(3)Keil C語言程式檔案

(4)DAC0832 技術手冊

(5)Visio繪製的流程圖

資源截圖

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

DAC0832的波形訊號發生器Proteus模擬設計,正弦波、三角波、方波和鋸齒波

由於本設計為作者原創設計,

獲取完整的論文、Proteus模擬、Keil C程式、Visio流程圖檔案和技術手冊等資料。

請搜尋關注公眾號(公眾號請見頭像處或個人簡介,謝謝!)

標簽: index  ea  LE1  幅值  DispStrWide