找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 29430|回復(fù): 31
收起左側(cè)

單片機(jī)DAC0832波形發(fā)生器實(shí)驗(yàn)報(bào)告

  [復(fù)制鏈接]
ID:249338 發(fā)表于 2017-12-1 15:06 | 顯示全部樓層 |閱讀模式
一個(gè)能產(chǎn)生正弦波、方波、三角波、梯形波、鋸齒波的波形發(fā)生器。
基本實(shí)現(xiàn):5個(gè)按鍵,每按一次按鍵后輸出對(duì)應(yīng)波形
                5個(gè)led指示對(duì)應(yīng)波形
                示波器中顯示2~3個(gè)周期波形時(shí),正弦波波形要光滑              
                雙極性電壓輸出,電壓幅值可調(diào).
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

電路圖

電路圖

實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱:波形發(fā)生器
班級(jí):應(yīng)物142
小組成員:董世豪 謝士輝 孫志偉 趙輝 孫豪

單片機(jī)實(shí)驗(yàn)——DA轉(zhuǎn)換實(shí)驗(yàn)

DA轉(zhuǎn)換器是將數(shù)字量轉(zhuǎn)換為模擬量的電路,主要用于數(shù)據(jù)傳輸系統(tǒng)、自動(dòng)測(cè)試設(shè)備、醫(yī)療信息處理、電視信號(hào)的數(shù)字化、圖像信號(hào)的處理和識(shí)別、數(shù)字通信和語(yǔ)音信息處理等。按數(shù)字量輸入方式:并行輸入和串行輸入DA轉(zhuǎn)換器。按模擬量輸出方式:電流輸出和電壓輸出DA轉(zhuǎn)換器。按DA轉(zhuǎn)換的分辯率:低分辯率、中分辯率和高分辯率DA轉(zhuǎn)換器。學(xué)習(xí)并熟悉如何設(shè)置DA轉(zhuǎn)換對(duì)于科學(xué)研究等將產(chǎn)生重要影響。

1實(shí)驗(yàn)?zāi)康?/strong>

  • 了解常用DA轉(zhuǎn)換芯片的結(jié)構(gòu)組成,工作原理。
  • 掌握DAC0832引腳功能,與單片機(jī)連接。
  • 理解單、雙極輸出方式的電路結(jié)構(gòu)原理,學(xué)會(huì)用這兩種方式。
      ( 4 )  設(shè)計(jì)一個(gè)能產(chǎn)生正弦波、方波、三角波、梯形波、鋸齒波的波形發(fā)生器。

2 D/A轉(zhuǎn)換器工作原理

任D/A是將數(shù)字量轉(zhuǎn)換成模擬量的器件,D/A的輸出是電壓或電流信號(hào)。衡量D/A性能的主要參數(shù)是:

分辨率:即輸出模擬量的最小變化量。
滿刻度誤差:即輸入為全1時(shí),實(shí)際輸出電壓與理想值之差。
輸出范圍
轉(zhuǎn)換時(shí)間:從轉(zhuǎn)換器的輸入改變到輸出穩(wěn)定的時(shí)間間隔。
是否容易與CPU接口。
3 DAC0832工作方式
DAC0832三種工作方式
  • 單緩沖方式:若應(yīng)用系統(tǒng)中只有一路D/A轉(zhuǎn)換或雖然有奪路轉(zhuǎn)換,并不要求各路信號(hào)同步輸出時(shí),則采用單緩沖的方式來接口。方法是:使鎖存器和DAC寄存器同時(shí)接收數(shù)據(jù)。
  • 雙緩沖方式:當(dāng)多路D/A信號(hào)要求同步輸出時(shí),則采用雙緩沖方式。方法是:分別使其輸入鎖存器接收數(shù)據(jù);同時(shí)傳送數(shù)據(jù)到其DAC寄存器,以實(shí)現(xiàn)多路轉(zhuǎn)換同步輸出。
  • 直通方式:所有控制信號(hào)均有效,適宜連續(xù)控制時(shí)。

D/A轉(zhuǎn)換

D/A芯片DAC0832的應(yīng)用:DAC0832是8位              D/A芯片,片內(nèi)帶數(shù)據(jù)鎖存器,電流輸出。該系列產(chǎn)品包括DAC0830——32,它們可以完全相互代換。它由8位輸入鎖存器、8位DAC寄存器、8位D/A轉(zhuǎn)換電路及轉(zhuǎn)換控制電路組成

ADC0808引腳如圖,各引腳功能如下:

  • DI0-DI7:數(shù)據(jù)輸入線,TLL電瓶。
  • ILE數(shù)據(jù)鎖存允許控制信號(hào)輸入線,高電平有效。
  • CS片選信號(hào)輸入線,低電平有效。
  • WR1:為輸入寄存器的寫選通信號(hào)。
  • XFER數(shù)據(jù)傳送控制信號(hào)輸入線,低電平有效。
  • WR2DAC寄存器寫選通輸入線。
  • Iout1電流輸出線。當(dāng)輸入全為1時(shí)Iout1最大
  • Iout2電流輸出線。其值與Iout1之和為常數(shù)。
  • Rfb:反饋信號(hào)輸入線,芯片內(nèi)部有反饋電阻。
  • Vcc:電源輸入線(+5v~+15v
  • Vref:基準(zhǔn)電壓輸入線-10v~+10v
  • AGND模擬地,模擬信號(hào)和基準(zhǔn)信號(hào)參考。
  • DGND數(shù)字地,兩種地線在基準(zhǔn)電源處共地比較好。
  • 主要功能電路
4.0 電路圖

4.1轉(zhuǎn)換電路


4.2波形指示


4.3按鍵電路


4.4單片機(jī)電路

  




4.5 運(yùn)行結(jié)果

三角形
方波
鋸齒波
梯形波
正弦波

5. 總結(jié)

方波擬合成功,其他波形擬合存在問題。


單片機(jī)源程序如下:
  1. #include "reg52.h"
  2. #include <math.h>

  3. #define ADC_PORT P2 //如圖,ADC0832連接端口

  4. //老師要求的5種波
  5. #define W_SINE 0
  6. #define W_SQU 1
  7. #define W_TRI 2
  8. #define W_TRA 3
  9. #define W_SAW 4

  10. #define PI 3.1415926f //圓周率好像是這個(gè)數(shù)

  11. //簡(jiǎn)化類型符寫法
  12. typedef unsigned char u8;
  13. typedef unsigned int u16;
  14. typedef unsigned long u32;

  15. sbit ADC_CS_WR=P3^0; //如圖,ADC0832使能口

  16. //老師要求的5個(gè)LED,接P0口
  17. sbit LED0=P0^0;
  18. sbit LED1=P0^1;
  19. sbit LED2=P0^2;
  20. sbit LED3=P0^3;
  21. sbit LED4=P0^4;

  22. //圖給出的5個(gè)按鍵
  23. sbit KEY0=P1^0;
  24. sbit KEY1=P1^1;
  25. sbit KEY2=P1^2;
  26. sbit KEY3=P1^3;
  27. sbit KEY4=P1^4;

  28. //全局變量
  29. u8 mode;//模式:正弦波……
  30. u16 freq;//頻率
  31. u8 time;//計(jì)次參數(shù)
  32. u8 AM;//調(diào)幅


  33. void Timer0Init(void);
  34. void scanKey(void);
  35. void sys_init(void);

  36. void sine_wave(u8 location);//正弦波
  37. void squ_wave(u8 location);//方……
  38. void tri_wave(u8 location);//三……
  39. void tra_wave(u8 location);//梯……
  40. void saw_wave(u8 location);//鋸……

  41. void Timer0Init(void)                //100微秒@12.000MHz
  42. {
  43.         TMOD &= 0xF0;                //設(shè)置定時(shí)器模式
  44.         TMOD |= 0x02;                //設(shè)置定時(shí)器模式
  45.         TL0 = 0x9C;                //設(shè)置定時(shí)初值
  46.         TH0 = 0x9C;                //設(shè)置定時(shí)重載值
  47.         TF0 = 0;                //清除TF0標(biāo)志
  48.         TR0 = 1;                //定時(shí)器0開始計(jì)時(shí)
  49.         EA = 1;         //開總中斷
  50.         ET0 = 1;        //開定時(shí)器0中斷
  51. }

  52. void scanKey(void)//按鍵掃描
  53. {
  54.         if(KEY0==0)
  55.         {
  56.                 mode=0;
  57.                 P0=0xFF;//滅所有燈
  58.                 LED0=0;
  59.         }
  60.         
  61.         if(KEY1==0)
  62.         {
  63.                 mode=1;
  64.                 P0=0xFF;//滅所有燈
  65.                 LED1=0;
  66.         }
  67.         
  68.         if(KEY2==0)
  69.         {
  70.                 mode=2;
  71.                 P0=0xFF;//滅所有燈
  72.                 LED2=0;
  73.         }
  74.         
  75.         if(KEY3==0)
  76.         {
  77.                 mode=3;
  78.                 P0=0xFF;//滅所有燈
  79.                 LED3=0;
  80.         }
  81.         
  82.         if(KEY4==0)
  83.         {
  84.                 mode=4;
  85.                 P0=0xFF;//滅所有燈
  86.                 LED4=0;
  87.         }
  88. }

  89. void sys_init(void)//系統(tǒng)初始化
  90. {
  91.         time=0;
  92.         ADC_CS_WR=0;
  93.         ADC_PORT=0;
  94.         mode=0;//默認(rèn)輸出正弦波
  95.         freq=100;//默認(rèn)頻率100Hz
  96.         AM=255;//最大幅度
  97. }
  98. void sine_wave(u8 location)//輸出正弦波
  99. {
  100.         double x=(double)location/50*PI;//把0-100放縮到0-2派(pai,沒有那個(gè)符號(hào),好難受(╯﹏╰))
  101.         u8 y=(sin(x)*(AM/2)+(AM/2));//算出y,并放縮到0-254(因?yàn)锳DC范圍0-AM,感覺這個(gè)芯片好落后)
  102.         ADC_PORT=y;
  103. }

  104. void squ_wave(u8 location)//方……
  105. {
  106.         if(location<50)
  107.                 ADC_PORT=AM;
  108.         else
  109.                 ADC_PORT=0x0;//這個(gè)好簡(jiǎn)單
  110. }

  111. void tri_wave(u8 location)//三……
  112. {
  113.         //為了簡(jiǎn)化,在單周期輸出V字形
  114.         u8 y;
  115.         if(location<50)
  116.                 y=(50-location)*AM/50;
  117.         else
  118.                 y=(location-50)*AM/50;
  119.         ADC_PORT=y;
  120.         //偶函數(shù),信不?當(dāng)然你說奇函數(shù)也沒錯(cuò)
  121. }
  122. void tra_wave(u8 location)//梯……
  123. {
  124.         u8 y;
  125.         if(location<25)
  126.                 y=0xFF;
  127.         else if(location<50)
  128.                 y=(50-location)*AM/25;
  129.         else if(location<75)
  130.                 y=0;
  131.         else
  132.                 y=(location-75)*AM/25;
  133.         ADC_PORT=y;
  134. }
  135. void saw_wave(u8 location)//鋸……
  136. {
  137.         ADC_PORT=location*AM/100;
  138.         //用(100-location)也以變成反向鋸齒
  139. }

  140. void Timer0Work() interrupt 1 //中斷服務(wù)函數(shù)
  141. {
  142.         switch(mode)
  143. ……………………

  144. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png

所有資料51hei提供下載:
323 實(shí)驗(yàn)三波形發(fā)生器.rar (673.88 KB, 下載次數(shù): 818)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:350855 發(fā)表于 2018-6-13 09:44 | 顯示全部樓層
謝謝樓主分享...............
回復(fù)

使用道具 舉報(bào)

ID:352835 發(fā)表于 2018-6-16 12:58 | 顯示全部樓層
求樓主分享
回復(fù)

使用道具 舉報(bào)

ID:358283 發(fā)表于 2018-6-27 11:02 | 顯示全部樓層
不錯(cuò) 兄嘚
回復(fù)

使用道具 舉報(bào)

ID:360600 發(fā)表于 2018-6-27 21:52 | 顯示全部樓層
挺不錯(cuò)的
回復(fù)

使用道具 舉報(bào)

ID:360600 發(fā)表于 2018-6-27 21:52 | 顯示全部樓層

求樓主分享
回復(fù)

使用道具 舉報(bào)

ID:375744 發(fā)表于 2018-7-20 12:32 來自手機(jī) | 顯示全部樓層
兄弟,波形失真了
回復(fù)

使用道具 舉報(bào)

ID:396289 發(fā)表于 2018-10-8 22:54 | 顯示全部樓層
123521 發(fā)表于 2018-7-20 12:32
兄弟,波形失真了

怎么更改呢??
回復(fù)

使用道具 舉報(bào)

ID:396289 發(fā)表于 2018-10-8 22:55 | 顯示全部樓層
怎么更改呢??
回復(fù)

使用道具 舉報(bào)

ID:234325 發(fā)表于 2018-10-9 09:15 | 顯示全部樓層
mark            
回復(fù)

使用道具 舉報(bào)

ID:313328 發(fā)表于 2018-12-4 17:06 | 顯示全部樓層
非常實(shí)用,感謝分享
回復(fù)

使用道具 舉報(bào)

ID:459429 發(fā)表于 2019-1-1 17:31 | 顯示全部樓層
感謝大佬的奉獻(xiàn)
回復(fù)

使用道具 舉報(bào)

ID:496232 發(fā)表于 2019-3-22 16:25 | 顯示全部樓層
感謝大佬的奉獻(xiàn)
回復(fù)

使用道具 舉報(bào)

ID:497439 發(fā)表于 2019-3-24 19:44 | 顯示全部樓層
感謝大佬,非常有用
回復(fù)

使用道具 舉報(bào)

ID:498267 發(fā)表于 2019-3-25 21:30 | 顯示全部樓層
謝謝樓主分享!
回復(fù)

使用道具 舉報(bào)

ID:521459 發(fā)表于 2019-4-25 15:51 | 顯示全部樓層
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:434140 發(fā)表于 2019-5-26 09:46 來自手機(jī) | 顯示全部樓層
真好!非常感謝
回復(fù)

使用道具 舉報(bào)

ID:148472 發(fā)表于 2019-5-28 13:55 | 顯示全部樓層
波形失真了怎么處理啊?
回復(fù)

使用道具 舉報(bào)

ID:550238 發(fā)表于 2019-5-29 15:44 | 顯示全部樓層
優(yōu)秀,我咋沒想出來
回復(fù)

使用道具 舉報(bào)

ID:574286 發(fā)表于 2019-6-28 19:32 | 顯示全部樓層
感謝大佬的貢獻(xiàn)。
回復(fù)

使用道具 舉報(bào)

ID:631363 發(fā)表于 2019-10-28 13:46 | 顯示全部樓層
感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:635139 發(fā)表于 2019-11-6 23:11 | 顯示全部樓層
感謝大佬
回復(fù)

使用道具 舉報(bào)

ID:635578 發(fā)表于 2019-11-29 10:35 | 顯示全部樓層
電壓幅值怎么調(diào)
回復(fù)

使用道具 舉報(bào)

ID:757987 發(fā)表于 2020-5-30 15:39 | 顯示全部樓層
樓主的程序教教我怎么寫?
回復(fù)

使用道具 舉報(bào)

ID:500754 發(fā)表于 2020-5-30 16:34 | 顯示全部樓層
感謝樓主分享 受益匪淺
回復(fù)

使用道具 舉報(bào)

ID:765220 發(fā)表于 2020-5-30 18:09 | 顯示全部樓層
不錯(cuò)啊兄弟
回復(fù)

使用道具 舉報(bào)

ID:722746 發(fā)表于 2020-5-30 18:09 | 顯示全部樓層
上邊5月30那兩人,咱是不是一個(gè)師傅哇
回復(fù)

使用道具 舉報(bào)

ID:783409 發(fā)表于 2020-6-18 16:50 | 顯示全部樓層

感謝樓主分享
回復(fù)

使用道具 舉報(bào)

ID:785181 發(fā)表于 2020-6-21 10:45 | 顯示全部樓層
大佬牛皮
回復(fù)

使用道具 舉報(bào)

ID:890152 發(fā)表于 2021-3-12 02:14 來自手機(jī) | 顯示全部樓層
感謝!學(xué)到了
回復(fù)

使用道具 舉報(bào)

ID:857072 發(fā)表于 2021-4-24 08:52 來自手機(jī) | 顯示全部樓層
老哥這正弦波能擬合到多高頻率
回復(fù)

使用道具 舉報(bào)

ID:952005 發(fā)表于 2021-7-12 09:14 | 顯示全部樓層
樓主,請(qǐng)問void sine_wave(u8 location);這個(gè)函數(shù)后面的括號(hào)里定義的location是啥意思
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表