程控DDS信號發生器的設計與實現_第1頁
程控DDS信號發生器的設計與實現_第2頁
程控DDS信號發生器的設計與實現_第3頁
程控DDS信號發生器的設計與實現_第4頁
程控DDS信號發生器的設計與實現_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 程控DDS信號發生器的設計與實現一、 設計任務書1、目的(1)培養學生以實際工程性的整體思路來完成整個項目;(2)培養學生電子項目綜合設計和管理及協作能力;(3)通過完成項目設計制作,使學生完整地進行設計、制作、測試、總結等全過程。2、具體任務設計和制作一個程控DDS信號發生器,基本要求為有智能CPU芯片(單片機、嵌入式系統、FPGA)為主控芯片,以專用DDS芯片為實現手段,輔助輸入、輸出手段,完成程控DDS的設計與制作。技術指標:1) 最終頻率輸出范圍為10Hz8MHz(正弦波);2) 外部供電電壓+5v、0v;3) 八位LED數碼管顯示輸出頻率;4) 輸出頻率可設置調整(最小設置步長10

2、Hz);5) 主控CPU和芯片自行選擇;6) 繪制PCB電路板實現。工程性要求:1)三人為一個項目組,由一人當組長;2)有項目整體設計報告、項目的進度表和最終的測試報告和使用手冊;4)以項目組為考核整體,兼顧小組分工;5)制作焊接工藝(貼片工藝);6)整體產品結構合理,使用方便、美觀。3、基本原理DDS是直接數字式頻率合成器(Direct Digital Synthesizer)的英文縮寫。與傳統的頻率合成器相比,DDS具有低成本、低功耗、高分辨率和快速轉換時間等優點,廣泛使用在電信與電子儀器領域,是實現設備全數字化的一個關鍵技術。一塊DDS芯片中主要包括頻率控制寄存器、高速相位累加器和正弦計

3、算器三個部分。頻率控制寄存器可以串行或并行的方式裝載并寄存用戶輸入的頻率控制碼;而相位累加器根據頻率控制碼在每個時鐘周期內進行相位累加,得到一個相位值;正弦計算器則對該相位值計算數字化正弦波幅度(芯片一般通過查表得到)。DDS芯片輸出的一般是數字化的正弦波,因此還需經過高速D/A轉換器和低通濾波器才能得到一個可用的模擬頻率信號。 另外,有些DDS芯片還具有調幅、調頻和調相等調制功能及片內D/A變換器。 圖1 DDS基本結構圖4、基本元器件(供參考)1)DDS芯片AD9833;2)CPU板或芯片8051系列;3) 按鍵;4 共陰級LED數碼管;5)驅動三極管;6)電阻電容和連接線若干。5、測試要

4、求:1)外接電源+5V、0V;2) 利用示波器測試輸出正弦波(1路);3)輸出頻率測試(10Hz-8MHz程控可調)。二、設計框圖及電路系統概述圖2 系統結構框圖89S52顯示電路按鍵電路驅動電路A/D9833電源指示電路圖3 設計框圖選用89S51單片機為主控芯片,以專用DDS芯片9833為實現手段,6個按鍵控制輸入、輸出,并由8位數碼管顯示,從而完成程控DDS信號發生器的設計與制作。三、 各單元電路的設計方案及原理說明AD9833的主要特點如下:頻率和相位可數字編程;工作電壓為3V時,功耗僅為20mW;輸出頻率范圍為0MHz12.5MHz;頻率寄存器為28位(在25MHz的參考時鐘下,精度

5、為0.1Hz);可選擇正弦波、三角波、方波輸出;無需外界元件;3線SPI接口;溫度范圍為40105。總體設計原理圖:如圖4所示圖4原理圖各部分功能:n 一:LED顯示電路:采用LED顯示波形的頻率 。n 二:CPU控制板或控制電路:形成掃描碼,鍵值識別、鍵處理、參數設置;形成顯示段碼;產生定時中斷;形成波形的數字編碼,并輸出到D/A接口電路和顯示驅動電路。n 三: DDS芯片:用來產生波形,具有調幅、調頻和調相等調制功能及片內D/A變換器。n 四:幅度調整:調整波形的幅度。n 五:鍵盤輸入電路:用鍵盤輸入,控制電路,用來調節波 形輸出地頻率 。n 六:電源指示電路:提供電源。圖5 PCB版圖四

6、、 調試過程及結果分析Protues仿真調試:如圖6所示圖6仿真圖程序清單:Mian.c#include <absacc.h>#include <reg52.h>#include <intrins.h>#include "timer.h"#include "type.h"#include "workkey.h"uchar cxzt = 0;void initial() P3 = 0xff; TMOD = 0x11; TR0 = 0; TH0 = 0xd0; TL0 = 0x60; TR0 = 1;

7、ET0 = 1; EA = 1;void main() initial(); while(1) workkey(); Timer.c#include <absacc.h>#include <reg52.h>#include "main.h"#include "type.h"#include "timer.h"#include "workkey.h"sbit Led0 =P10; /LED控制腳sbit Led1 =P11;sbit Led2 =P12;sbit Led3 =P13;sbit

8、Led4 =P14; sbit Led5 =P15;sbit Led6 =P16;sbit Led7 =P17;#define KEYCOUNTER 4 uchar xs0; /* 8個數碼管顯示的數值 */ uchar xs1; uchar xs2; uchar xs3; uchar xs4; uchar xs5; uchar xs6; uchar xs7; uchar wei; bit key_control = 0; bit anxia = 0; bit getkey = 0; uchar keyCont = 0; uchar keynum = 0; uchar keyvalue; uc

9、har M_key; uchar key; uchar curr = 0; uchar halfsecond = 0; uchar second = 0; uchar minus = 0; uchar seconds = 0;code unsigned char Displayy31=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xbf,0x40,/*0.*/0x79,/*1.*/0x24,/*2.*/0x30,/*3.*/0x19,/*4.*/0x12,/*5.*/0

10、x02,/*6.*/0x78,/*7.*/0x00,/*8.*/0x10,/*9.*/ 0x89,/*H*/ 0xC7,/*L*/;/* 定時器0用于顯示 */void dujianpan(void);void intT0() interrupt 1 TH0 = 0xf8; TL0 = 0xc0; /20ms switch(curr) case 0: Led7 = 0; Led0 = 1; P0 = Displayyxs0; curr = 1; break; case 1: Led0 = 0; Led1 = 1; P0 = Displayyxs1; curr = 2; break; case

11、2: Led1 = 0; Led2 = 1; P0 = Displayyxs2; curr = 3; break; case 3: Led2 = 0; Led3 = 1; P0 = Displayyxs3; curr = 4; break; case 4: Led3 = 0; Led4 = 1; P0 = Displayyxs4; curr = 5; break; case 5: Led4 = 0; Led5 = 1; P0 = Displayyxs5; curr = 6; break; case 6: Led5 = 0; Led6 = 1; P0 = Displayyxs6; curr =

12、7; break; case 7: Led6 = 0; Led7 = 1; P0 = Displayyxs7; curr = 0; break; if(key_control) dujianpan();key_control = !key_control;void dujianpan(void) uchar M_key; /* 鍵盤數值暫存單元 */M_key = P2; M_key &= 0xf8;if(M_key != 0xf8) /* 認為有有效按鍵按下 */ keyvalue = M_key; keyCont +; if(keyCont > KEYCOUNTER) anx

13、ia = 1; else if(anxia =1) switch(keyvalue) case 0xf0:keynum = JW1;getkey = 1;break;case 0xe8:keynum = JW2;getkey = 1;break;case 0xd8: getkey = 1;keynum = JW3;break;case 0xb8:keynum = JW4;getkey = 1;break;case 0x78:keynum = JW5;getkey = 1;break; anxia = 0 ; keyCont = 0; keyCont = 0; anxia = 0 ; Workk

14、ey.c#include <absacc.h>#include <reg52.h>#include<intrins.h> #include "main.h"#include "type.h"#include "timer.h"#include "workkey.h"uchar xnum;uchar num;uchar zt = 0;bit bzw;bit blb;void changew(void);uchar add(void)if(num = 9) num = 0; else

15、 num+; return(num);uchar sub(void)if(num = 0) num = 9; else num-; return(num);void workkey(void)if(getkey = 1) switch(keynum) case 0:xnum = add();if( bzw = 1) changew();break; case 1: xnum = sub(); if( bzw = 1) changew();break;case 2: if(bzw = 1) if(zt = 7) zt = 0; blb = 1; else blb = 1; zt+; change

16、w(); break;case 3: if(bzw = 1) if(zt = 0) zt = 7; blb = 1; else blb = 1; zt-; changew();break;case 4: bzw = !bzw; if(bzw = 0) P3 = 0xff;break; getkey = 0; void changew() switch(zt) case 0: if(blb = 1) xnum = xs0; num = xs0; blb = 0; xs0 = xnum; P3 = 0xfe; P1 = 0; break; case 1: if(blb = 1) xnum = xs

17、1; num = xs1; blb = 0; xs1 = xnum; P3 = 0xfd; break; case 2: if(blb = 1) xnum = xs2; num = xs2; blb = 0; xs2 = xnum; P3 = 0xfb; break; case 3: if(blb = 1) xnum = xs3; num = xs3; blb = 0; xs3 = xnum; P3 = 0xf7; break; case 4: if(blb = 1) xnum = xs4; num = xs4; blb = 0; xs4 = xnum; P3 = 0xef; break; case 5: if(blb = 1) xnum = xs5; num = xs5; blb = 0; xs5 = xnum; P3 = 0xdf; break; case 6: if(blb = 1) xnum = xs6; num = xs6; blb = 0; xs6 = xnum; P3 = 0xbf; break; case 7: if(blb = 1) xnum = xs7; num = xs7; blb = 0; xs7 = xnum; P3 =

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論