久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

標題: 單片機+DAC0832信號發生器的仿真設計(方波、三角波、梯形波、鋸齒波) [打印本頁]

作者: 362443451    時間: 2018-12-16 22:02
標題: 單片機+DAC0832信號發生器的仿真設計(方波、三角波、梯形波、鋸齒波)
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

一、設計要求
設計一個能產生方波、三角波、梯形波、鋸齒波的波形發生器。
二、方案論證
方案 :利用單片機AT89C51編寫程序,然后將產生信號通過DAC0832(數模轉換器)轉化成模擬信號,輸入信號經運放電路后信號放大,低通濾波是輸出的信號穩定不失真,通過四個按鍵來選擇輸出的波形。AT89C51單片機為很多嵌入式控制系統提供了一種靈活性高且價廉的方案。
方案二:集成運算放大器應用于波形發生器。正弦波和非正弦波產生電路常常作為信號源,利用正弦波振蕩電路(RC橋式正弦波振蕩器)產生正弦波,用集成運放構成方波發生器和三角波發生器一般包括比較器和RC積分器。此方案實現起來比較復雜,對運算電路要有嚴格的分析,所需要的東西較多。
方案比較:采用方案一,該信號發生器具有體積小,價格低,性能穩定優點。

三、理論設計
3.1原理分析
利用單片機AT89C51編寫程序,然后將產生信號通過DAC0832(數模轉換器)轉化成模擬信號,輸入信號經運放電路后信號放大,低通濾波是輸出的信號穩定不失真,通過四個按鍵來選擇輸出的波形。



圖3-3  DAC0832的引腳圖

3.4電流/電壓轉換放大電路
由于從DAC0832轉換出來的模擬信號為電流信號,將DAC0832輸出的信號經過電流/電壓轉換放大電路轉變為電壓信號。本設計中使用的運放為LM324,LM324運算放大器是價格便宜的帶差動輸入功能的四運算放大器
圖3-4 電流/電壓轉換放大電路
3.5按鍵輸入電路
按鍵使由一組按壓式或觸摸式開關構成的陣列,是一種常用的輸入設備。鍵盤可分為編碼式鍵盤和非編碼式鍵盤兩種。


3.6系統總體結構圖

四、電路仿真及仿真結果分析
4.1電路圖
四個按鍵,每按一次按鍵后輸出對應的波形。雙極性電壓輸出,電壓幅值可調。
4.2方波仿真結果
4.3三角波仿真結果
4.4梯形波仿真結果
4.5鋸齒波仿真結果
五、心得體會

通過本次課程設計,使我對課程所學理論知識的深化和提高,我了解和掌握了單片機應用系統的軟硬件設計過程、方法及實現,為以后設計和實現更難得應用打下了良好的基礎。

   在本次設計工程中,遇到了很多得問題,對硬件方面的各種知識并不是非常理解。對于單片機設計,硬件電路還是比較簡單,但是在程序設計上,費了很大的功夫,對于程序不是那么容易上手,查找書籍并參考了網上的例子,才得以把實驗完成。要設計一個成功的電路,必須要有耐心,要有堅持的毅力,因此在整個設計過程中大部分時間都是用在程序上面的,很多子程序事可以借鑒書本上的,但怎樣銜接各個子程序比較重要。完成這次設計后,我在書本理論知識的基礎上又有了更深層次的理解。



  1. #include "reg52.h"
  2. #include <math.h>

  3. #define DAC_PORT P2 //DAC0832連接端口
  4. #define K_SQU 1        // 方波標志
  5. #define K_TRI 2        //三角波標志
  6. #define K_TRA 3        //梯形波標志
  7. #define K_SAW 4        //鋸齒波標志
  8. sbit DAC_CS_WR=P3^0; //ADC0832使能口
  9. sbit K1=P1^0;
  10. sbit K2=P1^1;
  11. sbit K3=P1^2;
  12. sbit K4=P1^3;

  13. typedef unsigned char u8;
  14. typedef unsigned int u16;
  15. typedef unsigned long u32;

  16. //全局變量
  17. u8 mode;//模式:
  18. u16 freq;//頻率
  19. u8 time;//計次參數
  20. u8 AM;//調幅


  21. void Timer0Int(void);
  22. void scanKey(void);
  23. void sys_int(void);
  24. void squ_wave(u8 location);
  25. void tri_wave(u8 location);
  26. void tra_wave(u8 location);
  27. void saw_wave(u8 location);

  28. void Timer0Int(void)               
  29. {
  30.         
  31.         TMOD &= 0xF0;                //設置定時器模式
  32.         TMOD |= 0x02;        //設置定時器模式
  33.         TL0 = 0x9C;                //設置定時初值
  34.         TH0 = 0x9C;               
  35.         TF0 = 0;                //清除TF0標志
  36.         TR0 = 1;                //定時器0開始計時
  37.         EA = 1;         //開總中斷
  38.         ET0 = 1;        //開定時器0中斷
  39. }

  40. void scanKey(void)
  41. {
  42.         
  43.         if(K1==0)
  44.         {
  45.                 mode=1;
  46.         }
  47.         
  48.         if(K2==0)
  49.         {
  50.                 mode=2;
  51.         }
  52.         
  53.         if(K3==0)
  54.         {
  55.                 mode=3;
  56.         }
  57.         
  58.         if(K4==0)
  59.         {
  60.                 mode=4;
  61.         }
  62. }
  63. void sys_int(void)
  64. {
  65.         time=0;
  66.         DAC_CS_WR=0;
  67.         DAC_PORT=0;
  68.         mode=0;
  69.         freq=100;//默認頻率100Hz
  70.         AM=255;//最大幅度
  71. }


  72. void squ_wave(u8 location)//方波函數
  73. {
  74.         if(location<50)
  75.                 DAC_PORT=AM;
  76.         else
  77.                 DAC_PORT=0x00;
  78. }

  79. void tri_wave(u8 location)//三角波函數
  80. {
  81.         u8 y;
  82.         if(location<50)
  83.                 y=(50-location)*AM/50;
  84.         else
  85.                 y=(location-50)*AM/50;
  86.         DAC_PORT=y;
  87. }
  88. void tra_wave(u8 location)//梯形波函數
  89. {
  90.         u8 y;
  91.         if(location<25)
  92.                 y=0xFF;
  93.         else if(location<50)
  94.                 y=(50-location)*AM/25;
  95.         else if(location<75)
  96.                 y=0;
  97.         else
  98.                 y=(location-75)*AM/25;
  99.         DAC_PORT=y;
  100. }
  101. void saw_wave(u8 location)//鋸形波函數
  102. {
  103.         DAC_PORT=location*AM/100;
  104. }

  105. void Timer0Work() interrupt 1 //中斷服務函數
  106. {
  107.         switch(mode)
  108.         {
  109.             case K_SQU:squ_wave((u8)((time*freq/100)%100));break;  //計算出波的位置
  110.                 case K_TRI:tri_wave((u8)((time*freq/100)%100));break;
  111.                 case K_TRA:tra_wave((u8)((time*freq/100)%100));break;
  112.                 case K_SAW:saw_wave((u8)((time*freq/100)%100));break;
  113.         }
  114.         time++;
  115.         if(time>=100)//計數100次
  116.                 time=0;
  117. }

  118. int main(void)
  119. {
  120.         sys_int();
  121.         Timer0Int();
  122.         while(1)
  123.         {
  124.                 scanKey();
  125.         }
  126. }
復制代碼




全部資料51hei下載地址:

信號發生器的設計.zip (1.51 MB, 下載次數: 871)





作者: xiayan666    時間: 2018-12-18 21:47
用哪個版本的Proteus打開呢?

作者: tieq1952    時間: 2018-12-19 08:18
謝謝分享!!!好資料,51黑有你更精彩!!!
作者: 362443451    時間: 2018-12-19 22:02
xiayan666 發表于 2018-12-18 21:47
用哪個版本的Proteus打開?

Proteus7.5

51hei.gif (309.76 KB, 下載次數: 115)

51hei.gif

作者: 15738536901    時間: 2018-12-24 19:02
這個很給力,必須支持
作者: zzjay    時間: 2018-12-24 21:10
大神,我弄成功了,不勝感激

作者: yufei0734    時間: 2019-3-18 17:54
感謝, 下了這么多個,這套資料總算仿真成功,感謝樓主的貢獻
作者: anyi123    時間: 2019-4-13 16:11
樓主 我是小萌新  就是問一下如果說要輸出其他的波形例如正弦波是不是可以繼續用這個電路然后只是在單片機編程方面修改就可以啦
作者: hey12345678    時間: 2019-4-13 18:28
可以,傾向于方案二
作者: vinformation    時間: 2019-4-23 22:59
我想問一下,有沒有proteus的仿真電路圖文件


作者: 肖蠢蠢    時間: 2019-5-22 09:30
為什么我的不出結果呀
作者: 肖蠢蠢    時間: 2019-5-22 10:25
好啦,是我自己的問題,謝謝樓主~~
作者: 油菜花123    時間: 2019-5-23 16:24
我想問一下樓主如何改變三角波的頻率

作者: 夏爾64579    時間: 2019-6-3 15:06
請問樓主這是雙極性輸出嗎?我看電路圖好像單極性電壓輸出啊?
作者: xiehua    時間: 2019-6-3 15:45
您好,如果要在同一個圖中顯示方波正弦波等該怎么改
作者: 小鹿LY    時間: 2019-6-18 18:14
樓主,這個梯形波怎改了頻率為130HZ 之后,波形就不對了,應該怎么修改啊
作者: 51hei團團    時間: 2019-7-3 23:35
491989986 發表于 2019-7-3 17:36
壓縮文件損壞

貌似我下載了能打開,我用的是winrar新版解壓的
作者: 1294081095    時間: 2019-9-2 15:42
謝謝分享
作者: 15816798481    時間: 2019-10-1 09:18
誰能告訴下這個lm324怎么接+-10v電壓
作者: 123kk321kk    時間: 2019-10-22 18:12
為啥我的波形顯示不對?

作者: BT饅頭    時間: 2019-12-12 16:25
謝謝樓主666
作者: sijie    時間: 2019-12-13 08:32
肖蠢蠢 發表于 2019-5-22 10:25
好啦,是我自己的問題,謝謝樓主~~

我的也不出結果呀 什么情況

作者: 我可不會at89s52    時間: 2019-12-24 19:25
做的真好,按鍵設計很合理
作者: bhk4    時間: 2020-2-25 14:13
樓主 我的為什么不顯示結果呢

作者: bhk4    時間: 2020-2-25 14:15
肖蠢蠢 發表于 2019-5-22 10:25
好啦,是我自己的問題,謝謝樓主~~

你好  問一下 結果怎樣出來的呢?
作者: 源歌    時間: 2020-3-20 21:08
肖蠢蠢 發表于 2019-5-22 10:25
好啦,是我自己的問題,謝謝樓主~~

怎么搞,我的也不出
作者: YDYQ    時間: 2020-4-8 16:16
那正弦波呢

作者: kaikaikai    時間: 2020-5-1 01:15
樓主我想問下編寫各個函數時的具體思想
作者: 馬夢圓    時間: 2020-5-2 12:48
樓主可以聯系你嗎
作者: 馬夢圓    時間: 2020-5-2 13:12
樓主有STM32版本的發生器設計嗎
作者: 二一二    時間: 2020-5-23 18:06
YDYQ 發表于 2020-4-8 16:16
那正弦波呢

同問

作者: swustlx86    時間: 2020-5-30 13:43
感謝分享
作者: fssst    時間: 2020-6-8 14:30
謝謝分享
作者: 算術平均數    時間: 2020-6-10 11:24
請問有沒有用DAC0832控制直流電機調速的啊?
作者: 145614586    時間: 2020-6-11 09:44
我也出不了波形救濟孩子
作者: 3232966108    時間: 2020-6-15 22:40
請問正弦波函數怎么寫呢?
作者: 小宇宙88    時間: 2020-6-24 18:59
如果弄硬件的話,可以成功嗎
作者: Jeff_BlindCat    時間: 2020-6-27 13:49
這個要好好學習下,謝謝分享。
作者: 1245210444    時間: 2020-7-6 11:54
咦為什么題目介紹說用80C51圖上和程序確實80C52啊?如果要用80C51我直接把圖上的80C52換成80C51,然后把程序#include "reg52.h"改成#include "reg51.h"就可以了嗎?
作者: 15113151266    時間: 2020-12-15 14:39
鋸齒波怎么改成上升的啊?
作者: 1587912810    時間: 2022-10-22 18:23
頂呀,樓主,好資源
作者: hh002    時間: 2023-5-28 01:09
感謝博主,真的棒了我大忙
作者: 1232131123123    時間: 2024-4-15 16:27
感謝好心人!!

作者: 1046835508    時間: 2024-5-16 12:08
有波形產生流程圖嗎




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 丝袜毛片 | 激情亚洲 | av免费在线观看网站 | www性色 | 日韩视频免费看 | 国产高清久久久 | 中文字幕乱码视频32 | 四虎影院免费在线播放 | 中文字幕高清免费日韩视频在线 | 国产精品爱久久久久久久 | 欧美激情一区二区三区 | 国产高清一二三区 | 久久99精品国产自在现线小黄鸭 | 久久久久久久久久久蜜桃 | 久久精品亚洲成在人线av网址 | 国产四虎| 中文字幕在线视频精品 | 最新国产精品精品视频 | 免费视频99 | 蜜桃视频成人 | 亚洲成人自拍网 | 美女视频一区二区三区 | 99久久婷婷国产综合精品电影 | 337p日本欧洲亚洲大胆 | 久久久久亚洲 | 欧美在线视频免费 | 一起操网站 | 日韩高清三区 | 一区二区av | www.日本在线| 91精品国产综合久久久动漫日韩 | 成人精品 | 午夜影院在线观看视频 | 久久99视频免费观看 | 成人免费视频网站在线观看 | 欧美一区二区三区在线观看 | 中文欧美日韩 | 国产欧美一区二区三区久久 | 在线观看www视频 | 日韩中文字幕一区 | 成人在线精品视频 |