基於微控制器設計波形發生器,可產生方波 三角波 正弦波,且波形幅度 週期可調

時間 2021-09-03 08:14:52

1樓:

波形發生器是一種常用的訊號源,廣泛地應用於電子電路、自動控制系統和教學實驗等領域。本次課程設計使用的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

#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]=;

uchar code tosin[256]=;

void display(unsigned char command)

else

command<<=1;

scp=1;

} lcp=1;

} void key1(void)

void key2(void)

void key3(void)

void key4(void)

void key5(void)

void judge(void)

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 //中斷服務程式

else if(fun==2) //鋸齒波

else if(fun==3) // 方波

th0=th;

tl0=tl;

tr0=1;

} void main(void) }

五、心得體會

開始的時候由於沒有經驗,不知如何下手,所以就去圖書管找了一些書看,儘管有許多的設計方案,可是總感覺自己還是有許多的東西弄不太清楚,於是就請教同學。他常做一些設計,有一些經驗。經過他的解釋分析各方案之後,決定用查表的方法來做。

這樣可以降低一些硬體設計的難度,初次設計應切合自己的水平。用8031需要擴充套件rom,這樣還要進行儲存器擴充套件。而且現在8031實際中已經基本上不再使用,實際用的at89s51晶片有rom,這樣把經過取樣得到的數值製成表,利用查表來做就簡單了。

我認為程式應該不大,片內rom應該夠用的。用led顯示頻率和幅值,現有整合的介面驅動晶片,波形可通過示波器進行顯示,微控制器接上d/a轉換晶片即可,這樣硬體很快就搭好了。

我以為這些做好了,構思也有了,寫程式應該是相對容易的。誰知道,寫起程式來,才想到功能鍵要有掃描程式才行呀,我真的感到很難。那時真的有點想放棄?

於是就去請教了老師,老師幫忙分析了一下,自己又查閱了一些資料,終於明白了掃描程式怎麼寫。

於是在自己的努力下,程式很快就寫好了。這次是我的第一個設計器件,儘管經歷了不少的艱辛,但給我積累了一點設計的經驗,最後也有點小小的成就感。後面的路還很長,我還的努力!

參考文獻

[1] 童詩白,華成英.類比電子技術基礎〔m〕.北京:高等教育出版社,2003.345-362

[2] 潘永雄,沙河,劉向陽.電子線路cad實用教程〔m〕.西安:西安電子科技大學出版社,2001.13-118.

[3] 張毅剛,彭喜源,譚曉昀,曲春波.mcs-51微控制器應用設計[m].哈爾濱:哈

爾濱工業大學出版社,1997.53-61.

微控制器8051設計簡易波形發生器,要求能產生正弦波,方波,三角波,通過鍵盤可改變輸出訊號的頻率和幅度 50

2樓:

基於51微控制器的訊號發生器-完整電路、程式免費的。

可以產生弦波、方波、三角波、三角波、梯形波及其他任意波形,波形的頻率(最大790hz)和幅度在一定範圍內可任意改變。波形和頻率的改變通過軟體控制,幅度的改變通過硬體實現。這是本人課程設計得到優秀的作品,有完整的電路圖,程式。

不是光**那種。

如果你覺得790hz的頻率不夠的話,可以用fpga+ad,頻率幾十m都沒問題,也不是很難。多看看資料,

3樓:q號

這個網上資料很多的,你可以參考下的,我前幾天也做了個,proteus**的,程式如下,希望能幫到你的,有問題可以交流下的

#include

unsigned char i,sqar_num=128; //最大值100,預設值50

unsigned char cho=0; //0:正弦波。1:方波。2:三角波。3:鋸齒波。

unsigned char num=0;

unsigned char time0_h=0xff,time0_l=0xdc; //定時器0的初值設定;全域性變數.對應正弦波,鋸齒波50hz

sbit chg= p1^0;

sbit freq_u=p1^1;

sbit freq_d=p1^2;

sbit duty_u=p1^3;

sbit duty_d=p1^4;

sbit cs =p3^7;

bit flag=0;

unsigned int freq=50;//初始化頻率,30hz

unsigned char flag1;

sbit rs=p1^5;

sbit lcdcs=p1^7;

sbit cd=p3^0;

unsigned char tempbuffer[7];

unsigned char value1=;

void delay(unsigned int ms)

//波形發生函式

void sint(void)

}/* else if(flag)

} */

}void square(void)

else

}void ********(void)

void stw(void)

}//1602顯示開始

void write_command(unsigned char command)

void write_data(unsigned char data0)

void init_1602()

//1602顯示結束

void temp_to_str()

void main()

tr0=1;

while(1)}

微控制器8051設計簡易波形發生器,要求能產生正弦波,方波,三角波,通過鍵盤可改變輸出訊號的頻率和幅度

基於51微控制器的訊號發生器 完整電路 程式免費的。可以產生弦波 方波 三角波 三角波 梯形波及其他任意波形,波形的頻率 最大790hz 和幅度在一定範圍內可任意改變。波形和頻率的改變通過軟體控制,幅度的改變通過硬體實現。這是本人課程設計得到優秀的作品,有完整的電路圖,程式。不是光 那種。如果你覺得...

51微控制器跑馬燈程式,51微控制器設計跑馬燈的程式用(c語言)編寫

不好意思,延時用了樓上的。keil下編譯ok。假設p1接燈。org 00h sjmp start org 30h start mov a 00 setb c mov r0,9 從左到右 loop1 rlc a mov p1,a acall delay djnz r0,loop1 從右到左 mov r...

求基於微控制器AT89C51的溫度檢測報警與控制系統電路圖

我把這個資料發你郵箱了!微控制器溫控系統設計 微控制器溫控系統設計 摘要本設計是以一個保溫箱為控制物件,以at89c51為控制系統核心,通過微控制器系統設計實現對保溫箱溫度的顯示和控制功能。本溫度控制系統是一個閉環反饋調節系統,由溫度感測器ad590對保溫箱溫度進行檢測,經過調理電路得到合適的電壓訊...