eda多功能信號發生器課程設計
1. 鋸齒波、遞增斜波信號發生器eda課程設計
基本要求:能用按鍵選擇輸出以下波形:正弦波,三角波,鋸齒波,方波. 提高要求:嘿嘿,我的畢業設計就是這個,用FPGA做的信號發生器,用MAXPLUS2做的模擬,
2. 多功能信號發生器設計原理
該 信號發生器 的硬體結構如圖1 所示。硬體結構以 AT89C52 單片機為主控制器, 包括DA 轉換模塊、輸出放大模塊、數據存儲模塊、液晶顯示模塊、 時鍾模塊、電源監控模塊及鍵盤等。系統工作原理: 在開機時, 主控制器 AT89C52 單片機定時中斷產生脈沖信號, 其信號大小採用默認值, 該值輸出給DA 轉換模塊後變為電流信號, 然後通過輸出放大模塊輸出用戶需要的電壓方波信號, 同時, 液晶顯示模塊動態顯示方波信號的各種參數和時間信息。 用戶通過鍵盤可在線修改系統運行參數, 同時可保存當前設定值或查看歷史運行數據。 為了提高系統的集成度和減小系統體積, 採用 CPLD 可編程邏輯器 件完成了系統外圍電路的組合邏輯設計。從圖1 可以看出, CPLD 是整個儀器的關鍵, 他接受從單片機發來的控制指令, 產生各個晶元的控制時序和地址信號。本設計中採用LATT ICE 公司的44 腳ispLSI1016VE 器件, 他採用PLCC 封裝, 內有1000 個PLDGates, 擦寫次數超過10 000 次, 是一種不需要特殊編程裝置、使用極為方便的邏輯器件。 通過VHDL 語言編程實現了地址鎖存器、解碼器及其他組合邏輯。由於 信號發生 器需要時間信息, 選用了高性能的DS1302 時鍾晶元向系統提供時間信息。考慮該 信號發生器 在不同時間各種設定參數長時間保存的要求, 選用富士通公司的FLASH 存儲器MBM29F016 用於保存歷史數據。容量為16 M b (2 M ×8 b) 的CMOS 器件 MBM29F016 在線可擦寫次數超過100 000 次, 其48 腳的 TSOP 封裝有助於減小系統體積和提高抗干擾性。此外, 由於在系統中單片機採用5 V 供電而DA 轉換器採用15 V 供電, 所以採用了高性能的電源轉換晶元MAX1776 作電平轉換; 採用DS1233 作電源監控以保證系統工作的可靠性。系統在初始化後, 單片機將用戶所需要生成波形的數據送出, 模數轉換晶元DAC0832 將單片機輸出數據轉換為電流信號再通過運算放大器轉化為電壓信號 , 同時各種數據信息被送給液晶顯示器進行顯示。 通過按鍵操作菜單按特定的步長對參數進行加減。另外還設計了 信號 發生器 與PC 機的串列通訊介面RS 232 介面, 以便日後對信號發生器的歷史數據進行分析和處理。
3. 基於單片機的多功能信號發生器設計
波形發生器是一種常用的信號源,廣泛地應用於電子電路、自動控制系統和教學實驗等領域。本次課程設計使用的AT89S51 單片機構成的發生器可產生鋸齒波、三角波、正弦波等多種波形,波形的周期可以用程序改變,並可根據需要選擇單極性輸出或雙極性輸出,具有線路簡單、結構緊湊等優點。在本設計的基礎上,加上按鈕控制和LED顯示器,則可通過按鈕設定所需要的波形頻率,並在LED上顯示頻率、幅值電壓,波形可用示波器顯示。
二、系統設計
波形發生器原理方框圖如下所示。波形的產生是通過AT89S51 執行某一波形發生程序,向D/A轉換器的輸入端按一定的規律發生數據,從而在D/A轉換電路的輸出端得到相應的電壓波形。在AT89S51的P2口接5個按扭,通過軟體編程來選擇各種波形、幅值電壓和頻率,另有3個P2口管腳接TEC6122晶元,以驅動數碼管顯示電壓幅值和頻率,每種波形對應一個按鈕。此方案的有點是電路原理比較簡單,實現起來比較容易。缺點是,采樣頻率由單片機內部產生故使整個系統的頻率降低。
1、波形發生器技術指標
1)波形:方波、正弦波、鋸齒波;
2)幅值電壓:1V、2V、3V、4V、5V;
3)頻率:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;
2、操作設計
1)上電後,系統初始化,數碼顯示6個『-』,等待輸入設置命令。
2)按鈕分別控制「幅值」、「頻率」、、「正弦波」。
3)「幅值「鍵初始值是1V,隨後再次按下依次增長1V,到達5V後在按就回到1V。
4)「頻率「鍵初始值是10HZ,隨後在按下依次為20HZ、50HZ、100HZ、200HZ、500HZ、1000HZ循環。
三、硬體設計
本系統由單片機、顯示介面電路,波形轉換(D/A)電路和電源等四部分構成。電路圖2附在後
1、單片機電路
功能:形成掃描碼,鍵值識別、鍵處理、參數設置;形成顯示段碼;產生定時中斷;形成波形的數字編碼,並輸出到D/A介面電路和顯示驅動電路。
AT89S51外接12M晶振作為時鍾頻率。並採用電源復位設計。復位電路採用上電復位,它的工作原理是,通電時,電容兩端相當於短路,於是RST引腳上為高電平,然後電源通過對電容充電。RST端電壓慢慢下降,降到一定程序,即為低電平,單片機開始工作。
AT89S51的P2口作為功能按鈕和TEC6122的介面。P1口做為D/A轉換晶元0832的介面。用定時/計數器作為中斷源。不同的頻率值對應不同的定時初值,允許定時器溢出中斷。定時器中斷的特殊功能寄存器設置如下:
定時控制寄存器TCON=20H;
工作方式選擇寄存器TMOD=01H;
中斷允許控制寄存器IE=82H。
2、顯示電路
功能:驅動6位數碼管顯示,掃描按鈕。
由集成驅動晶元TEC6122、6位共陰極數碼管和5個按鈕組成。當某一按鈕按下時,掃描程序掃描到之後,通過P2口將數字信號發送到 TEC6122晶元。TEC6122是一款數字集成晶元。它的外接電壓也是+5V,並且由於數碼管的載壓較小,為了保護數碼管,必須在兩者間接電阻,大約是560歐。
掃描利用軟體程序實現,當某一按鍵按下時,掃描程序立即檢測到,隨後調用子程序,執行相應的功能。
3、D/A電路
功能:將波形樣值的編碼轉換成模擬值,完成雙極性的波形輸出。
由一片0832和兩塊LM358運放組成。DAC0832是一個具有兩個輸入數據寄存器的8位DAC。目前生產的DAC晶元分為兩類,一類晶元內部設置有數據寄存器,不需要外加電路就可以直接與微型計算機介面。另一類晶元內部沒有數據寄存器,輸出信號隨數據輸入線的狀態變化而變化,因此不能直接與微型計算機介面,必須通過並行介面與微型計算機介面。DAC0832是具有20條引線的雙列直插式CMOS器件,它內部具有兩級數據寄存器,完成8位電流D/A轉換,故不需要外加電路。0832是電流輸出型,示波器上顯示波形,通常需要電壓信號,電流信號到電壓信號的轉換可以由運算放大器LM358實現,用兩片LM358可以實現雙極性輸出。
單片機向0832發送數字編碼,產生不同的輸出。先利用采樣定理對各波形進行抽樣,然後把各采樣值進行編碼,的到的數字量存入各個波形表,執行程序時通過查表方法依次取出,經過D/A轉換後輸出就可以得到波形。假如N個點構成波形的一個周期,則0832輸出N個樣值點後,樣值點形成運動軌跡,即一個周期。重復輸出N個點,成為第二個周期。利用單片機的晶振控制輸出周期的速度,也就是控制了輸出的波形的頻率。這樣就控制了輸出的波形及其幅值和頻率。
四、 軟體設計
主程序和子程序都存放在AT89S51單片機中。
主程序的功能是:開機以後負責查鍵,即做鍵盤掃描及顯示工作,然後根據用戶所按的鍵轉到相應的子程序進行處理,主程序框圖如圖1所示。
子程序的功能有:幅值輸入處理、頻率輸入處理、正弦波輸出、鋸齒波輸出、方波輸出、顯示等。
下面是程序
include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit LCP=P2^2;
sbit SCP=P2^1;
sbit SI=P2^0;
sbit S1=P2^3;
sbit S2=P2^4;
sbit S3=P2^5;
sbit S4=P2^6;
sbit S5=P2^7;
sbit DA0832=P3^3;
sbit DA0832_ON=P3^2;
uchar fun=0,b=0,c=0,d=0,tl,th;
uchar code tab[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar code tosin[256]={0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5
,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5
,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd
,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda
,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99
,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51
,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16
,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00
,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15
,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e
,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 };
void display(unsigned char command)
{
unsigned char i;
LCP=0;
for(i=8;i>0;i--)
{
SCP=0;
if((command & 0x80)==0)
{
SI=0; }
else
{
SI=1;
}
command<<=1;
SCP=1;
}
LCP=1;
}
void key1(void)
{
fun++;
if(fun==4)
fun=0x00;
}
void key2(void)
{
tl++;
if(tl==0x1f)
th++;
}
void key3(void)
{
tl--;
if(tl==0x00)
th--;
}
void key4(void)
{
double t;
int f;
TR0=0;
t=(65535-th*256-tl)*0.4;
f=(int)(1000/t);
S3=tab[f%10];
f=f/10;
S2=tab[f%10];
f=f/10;
if(f==0)
S1=0;
else
S1=tab[f];
TR0=1;
}
void key5(void)
{
tl--;
if(tl==0x00)
th++;
}
void judge(void)
{
uchar line,row,de1,de2,keym;
P1=0x0f;
keym=P1;
if(keym==0x0f)return;
for(de1=0;de1<200;de1++)
for(de2=0;de2<125;de2++){;}
P1=0x0f;
keym=P1;
if(keym==0x0f)return;
P1=0x0f;
line=P1;
P1=0xf0;
row=P1;
line=line+row; /*存放特徵鍵值*/
if(line==0xde)key1();
if(line==0x7e)key2();
if(line==0xbd)key3();
if(line==0x7d)key4();
}
void time0_int(void) interrupt 1 //中斷服務程序
{
TR0=0;
if(fun==1)
{
DA0832=tosin[b]; //正弦波
b++;
}
else if(fun==2) //鋸齒波
{
if(c<128)
DA0832=c;
else
DA0832=255-c;
c++;
}
else if(fun==3) // 方波
{
d++;
if(d<=128)
DA0832=0x00;
else
DA0832=0xff;
}
TH0=th;
TL0=tl;
TR0=1;
}
void main(void)
{
TMOD=0X01;
TR0=1;
th=0xff;
tl=0xd0;
TH0=th;
TL0=tl;
ET0=1;
EA=1;
while(1)
{
display();
judge();
}
}
五、心得體會
開始的時候由於沒有經驗,不知如何下手,所以就去圖書管找了一些書看,盡管有許多的設計方案,可是總感覺自己還是有許多的東西弄不太清楚,於是就請教同學。他常做一些設計,有一些經驗。經過他的解釋分析各方案之後,決定用查表的方法來做。這樣可以降低一些硬體設計的難度,初次設計應切合自己的水平。用8031需要擴展ROM,這樣還要進行存儲器擴展。而且現在8031實際中已經基本上不再使用,實際用的AT89S51晶元有ROM,這樣把經過采樣得到的數值製成表,利用查表來做就簡單了。我認為程序應該不大,片內ROM應該夠用的。用LED顯示頻率和幅值,現有集成的介面驅動晶元,波形可通過示波器進行顯示,單片機接上D/A轉換晶元即可,這樣硬體很快就搭好了。
我以為這些做好了,構思也有了,寫程序應該是相對容易的。誰知道,寫起程序來,才想到功能鍵要有掃描程序才行呀,我真的感到很難。那時真的有點想放棄?於是就去請教了老師,老師幫忙分析了一下,自己又查閱了一些資料,終於明白了掃描程序怎麼寫。
於是在自己的努力下,程序很快就寫好了。這次是我的第一個設計器件,盡管經歷了不少的艱辛,但給我積累了一點設計的經驗,最後也有點小小的成就感。後面的路還很長,我還的努力!
4. EDA課程設計VHDL信號發生器設計 要求: (1) 產生方波、三角波、鋸齒波、正弦波 (2)頻率為10KHz
要求DDS方式實現么。。。你要看你的時鍾頻率。。。然後計算你需要的頻率控制字。。。
5. EDA課程設計:用vhdl語言設計一個正弦掃頻信號發生器,要求正弦波輸出,波形點數128點,幅度范圍8位。
正弦掃頻信號發生器,沒問題的。我會。。。。
6. EDA的調頻信號發生器的程序及課程設計報告,要求如下:
Ⅱ中完成一個正弦信號發生器的設計。系統可由五部分組成,如下圖所示:嵌入設計要求:FPGA內部底層其實網上書上都有現成的,問網不如自己找的快,
7. 求基於EDA的函數信號發生器的課程設計
本設計採用FPGA和鎖相環4046實現波形發生器。系統由波形產生模塊和可調頻率的時鍾產生模塊,數模轉換模塊和顯示模塊四部分組成。波形產生模塊完成三種波形的產生,並根據控制信號完成選定波形的輸出。可調頻率的時鍾產生模塊能夠產生具有不同頻率的方波clk,用此方波作為時鍾完成輸出波形頻率的調整。顯示模塊用於顯示輸出波形的頻率。數模轉換模塊將波形產生模塊輸出的數字信號轉換為模擬信號;並完成濾波以及放大等功能。此設計的特點在於結合了直接數字頻率合成技術和鎖相技術各自的優點,同時利用了FPGA的強大處理能力使系統易於實現,結構簡單。本設計能產生正弦波,三角波,占空比可調的方波以及它們的線性組合;頻率在100Hz~20KHz之間能以100Hz為步進進行調整;幅度可調范圍為0~5V。
關鍵詞:正弦波;三角波;占空比可調的方波;頻率可調;FPGA;鎖相環4046
目 錄
引言………………………………………………………………………………………1
1 設計任務……………………………………………………………………………1
1.1 基本要求……………………………………………………………………………1
1.2 發揮部分……………………………………………………………………………1
2 方案論證與比較……………………………………………………………………1
2.1 常見信號源製作方法原理…………………………………………………………1
2.2 常見信號產生電路…………………………………………………………………3
3 系統電路的設計………………………………………………………………4
3.1 系統框圖及說明……………………………………………………………………4
3.2 主要電路設計說明…………………………………………………………………6
3.2.1晶體振盪電路………………………………………………………………………6
3.2.2倍頻電路……………………………………………………………………………6
3.2.3數模轉換和放大濾波電路…………………………………………………………7
3.2.4數碼管顯示電路……………………………………………………………………8
3.2.5 輸入去抖電路……………………………………………………………………9
3.3 主要軟體設計說明…………………………………………………………………10
3.3.1前端核心軟體設計………………………………………………………………10
3.3.2波形產生模塊軟體設計…………………………………………………………12
3.4 主要元器件介紹……………………………………………………………………15
3.4.1FPGA介紹…………………………………………………………………………15
3.4.2鎖相環4046介紹…………………………………………………………………16
3.4.3VHDL介紹…………………………………………………………………………19
3.4.4MAX+PLUSII介紹…………………………………………………………………20
4軟體模擬與硬體調試與測試 ……………………………………………………20 4.1 軟體部分模擬……………………………………………………………………20
4.2 硬體調試……………………………………………………………………………22
4.3 硬體電路測試………………………………………………………………………22
4.4 誤差分析……………………………………………………………………………23
5 工程設計……………………………………………………………………………23
6 製作…………………………………………………………………………………24
7 結論…………………………………………………………………………………25
謝辭………………………………………………………………………………………26
參考文獻…………………………………………………………………………………27
附錄………………………………………………………………………………………28
8. EDA課程設計 信號發生器
嘿嘿,我的畢業設計就是這個,用FPGA做的信號發生器,用MAXPLUS2做的模擬,用VHDL編程,比你要求的波形多兩個,這你可以減掉。你郵箱里已經發目錄,加分到了發整個word文檔。
9. 急求eda課程設計一份:脈沖信號發生器的設計
給個時鍾信號發生器參考一下吧
一個電子系統中需要三種時鍾,分別是:1000HZ、100Hz、50Hz,系統輸入時鍾為100KHz。試用VHDL描述該時鍾發生器。
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity counter is
generic(count_value:integer:=9);
port(clk:in std_logic;
co:out std_logic);
end counter;
architecture a of counter is
signal cnt:integer range 0 to count_value;
begin
process(clk)
begin
if(clk'event and clk='1')then
if(cnt=count_value)then
cnt<=0;
co<='1';
else
cnt<=cnt+1;
co<='0';
end if;
end if;
end process;
end a;
(2)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity div3 is
port (clk:in std_logic;
fout:out std_logic_vector(2 downto 0));
end div3;
architecture a of div3 is
signal co_clk:std_logic_vector(3 downto 0);
component counter is
generic(count_value:integer:=9);
port(clk:in std_logic;
co:out std_logic);
end component;
begin
cnt0:counter
generic map(count_value=>9)
port map(clk=>clk, co=>co_clk(3));
cnt1:counter
generic map(count_value=>9)
port map(clk=>co_clk(3), co=>co_clk(2));
cnt2:counter
generic map(count_value=>9)
port map(clk=>co_clk(2), co=>co_clk(1));
cnt3:counter
generic map(count_value=>1)
port map(clk=>co_clk(1), co=>co_clk(0));
fout(2)<=co_clk(2);
fout(1)<=co_clk(1);
fout(0)<=co_clk(0);
end a;