《單片機(jī)原理與應(yīng)用》頻率占空比可調(diào)的方波發(fā)生器_第1頁(yè)
《單片機(jī)原理與應(yīng)用》頻率占空比可調(diào)的方波發(fā)生器_第2頁(yè)
《單片機(jī)原理與應(yīng)用》頻率占空比可調(diào)的方波發(fā)生器_第3頁(yè)
《單片機(jī)原理與應(yīng)用》頻率占空比可調(diào)的方波發(fā)生器_第4頁(yè)
《單片機(jī)原理與應(yīng)用》頻率占空比可調(diào)的方波發(fā)生器_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1 單片機(jī)介紹及仿真原理 MSP430系列單片機(jī)是美國(guó)德州儀器(TI)1996年開(kāi)始推向市場(chǎng)的一種16位超低功耗、具有精簡(jiǎn)指令集(RISC)的混合信號(hào)處理器(Mixed Signal Processor)。稱之為混合信號(hào)處理器,是由于其針對(duì)實(shí)際應(yīng)用需求,將多個(gè)不同功能的模擬電路、數(shù)字電路模塊和微處理器集成在一個(gè)芯片上,以提供“單片”解決方案。該系列單片機(jī)多應(yīng)用于需要電池供電的便攜式儀器儀表中。 單片機(jī)有集成度高、功能強(qiáng)、可靠性高、體積小、功耗地、使用方便、價(jià)格低廉等一系列優(yōu)點(diǎn),目前已經(jīng)滲入到人們工作和生活的方方面面,幾乎“無(wú)處不在,無(wú)所不為”。單片機(jī)的應(yīng)用領(lǐng)域已從面向工業(yè)控制、通訊、交通、智能

2、儀表等迅速發(fā)展到家用消費(fèi)產(chǎn)品、辦公自動(dòng)化、汽車電子、PC機(jī)外圍以及網(wǎng)絡(luò)通訊等廣大領(lǐng)域。 單片機(jī)有兩種基本結(jié)構(gòu)形式:一種是在通用微型計(jì)算機(jī)中廣泛采用的,將程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器合用一個(gè)存儲(chǔ)器空間的結(jié)構(gòu),稱為普林斯頓結(jié)構(gòu)。另一種是將程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器截然分開(kāi),分別尋址的結(jié)構(gòu),一般需要較大的程序存儲(chǔ)器,目前的單片機(jī)以采用程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器截然分開(kāi)的結(jié)構(gòu)為多。 本課題討論的方波發(fā)生器的核心是目前應(yīng)用極為廣泛的 51系列單片機(jī)。本次課程設(shè)計(jì)運(yùn)用的仿真軟件是Proteus。Proteus是世界上著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真

3、正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)計(jì)。是目前世界上唯一將電路仿真軟件、PCB設(shè)計(jì)軟件和虛擬模型仿真軟件三合一的設(shè)計(jì)平臺(tái),其處理器模型支持8051ARM、8086和MSP430等。在編譯方面,它也支持IAR、Keil和MPLAB等多種編譯器。2 設(shè)計(jì)原理本設(shè)計(jì)通過(guò)單片機(jī)80C51的P3口的P3.0和P3.1兩個(gè)引腳輸出兩路方波信號(hào),通過(guò)P1口的矩陣鍵盤(只用到其中4個(gè))來(lái)控制輸出方波的相位和頻率變化以及復(fù)位。本設(shè)計(jì)的相位和頻率的變化是通過(guò)調(diào)用延時(shí)子程序來(lái)控制的,通過(guò)按鍵是延時(shí)的時(shí)間發(fā)生改變從而輸出不同相位和頻率的方波信號(hào),設(shè)計(jì)框圖如下圖1。 圖 1 設(shè)計(jì)框圖本課程設(shè)計(jì)是設(shè)計(jì)一個(gè)方波發(fā)生器,用1602顯

4、示方波的頻率和相位差。系統(tǒng)的整體圖如圖2:圖2系統(tǒng)整體圖系統(tǒng)默認(rèn)的頻率為10HZ,默認(rèn)的相位差為0。2.1復(fù)位電路設(shè)計(jì)如果RST持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài),而無(wú)法執(zhí)行程序。由C1,R1,開(kāi)關(guān)構(gòu)成開(kāi)關(guān)復(fù)位電路,如圖3。上電后,由于電容充電,使RST持續(xù)一段高電平。當(dāng)單片機(jī)在運(yùn)行狀態(tài)下,按下復(fù)位鍵也能使RST持續(xù)一段時(shí)間的高電平,從而實(shí)現(xiàn)上電復(fù)位和手動(dòng)復(fù)位。圖3 復(fù)位電路2.2振蕩電路設(shè)計(jì)如圖3所示,外接石英晶體或者陶瓷諧振器以及電容C2,C3接在放大器的反饋電路中構(gòu)成并聯(lián)諧振電路。諧振器本身對(duì)外接電容C2、C3雖然沒(méi)有十分嚴(yán)格的要求,但電容容量的大小會(huì)輕微影響振蕩頻率的高低、振蕩器工

5、作的穩(wěn)定性、起振的難易程度以及溫度的穩(wěn)定性,如果使用石英晶體,推薦使用30pF,而使用陶瓷諧振器建議選擇40pF。本次設(shè)計(jì)使用的是石英晶體諧振器,因此采用30pF的電容,晶振頻率為12MHZ。圖4 振蕩電路2.3矩陣鍵盤設(shè)計(jì)在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖5所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過(guò)一個(gè)按鍵加以連接。這樣,一個(gè)端口(P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則只能多出一鍵(9鍵)。由此可見(jiàn),在需要

6、的鍵數(shù)比較多時(shí),采用矩陣法來(lái)做鍵盤是合理的。矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,下圖中,列線通過(guò)電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒(méi)有按下時(shí),所有的輸入端都是高電平,代表無(wú)鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過(guò)讀入輸入線的狀態(tài)就可得知是否有鍵按下了。圖5 矩陣鍵盤2.4液晶顯示液晶如圖:圖6 液晶1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來(lái)的2條線是背光電源線VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其中:引腳符號(hào)功能

7、說(shuō)明1VSS一般接地2VDD接電源(+5V)3V0液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地電源時(shí)對(duì)比度最高(對(duì)比度過(guò)高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過(guò)一個(gè)10K的電位器調(diào)整對(duì)比度)。4RSRS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。5R/WR/W為讀寫(xiě)信號(hào)線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫(xiě)操作。6EE(或EN)端為使能(enable)端,寫(xiě)操作時(shí),下降沿使能。讀操作時(shí),E高電平有效7DB0低4位三態(tài)、 雙向數(shù)據(jù)總線 0位(最低位)8DB1低4位三態(tài)、 雙向數(shù)據(jù)總線 1位9DB2低4位三態(tài)、 雙向數(shù)據(jù)總線 2位10DB3低4位三態(tài)、 雙向數(shù)據(jù)總

8、線 3位11DB4高4位三態(tài)、 雙向數(shù)據(jù)總線 4位12DB5高4位三態(tài)、 雙向數(shù)據(jù)總線 5位13DB6高4位三態(tài)、 雙向數(shù)據(jù)總線 6位14DB7高4位三態(tài)、 雙向數(shù)據(jù)總線 7位(最高位)(也是busy flag)15BLA背光電源正極16BLK背光 電源負(fù)極寄存器選擇控制表RSR/W操作說(shuō)明00寫(xiě)入指令寄存器(清除屏等)01讀busy flag(DB7),以及讀取位址計(jì)數(shù)器(DB0DB6)值10寫(xiě)入數(shù)據(jù)寄存器(顯示各字型等)11從數(shù)據(jù)寄存器讀取數(shù)據(jù)注:關(guān)于E=H脈沖開(kāi)始時(shí)初始化E為0,然后置E為1,再清0.busy flag(DB7):在此位為1時(shí),LCD忙,將無(wú)法再處理其他的指令要求。3 程

9、序流程圖圖7 流程圖4 源程序#include <reg51.h>#include <math.h>#define uchar unsigned char#define uint unsigned intsbit test=P37;sbit LCDEN=P22;sbit LCDRS=P20;sbit LCDRW=P21;sbit WaveA=P30; sbit WaveB=P31; uchar Frequency,Key_Value,Flag,a6;uint data Phase_Difference;double Control_Phase=0.000001;int

10、data Counter_T0,Number_T0, Counter_T1,Number_T1;/*void Initial_System();uchar Scan_Keyboard();uint Get_Number_T0(uchar Frequency);uint Get_Number_T1(uchar Frequency);void Increase_Frequency();void Decrease_Frequency();void Increase_Phase_Difference(uint data Step_Phase_Difference);/void Decrease_Pha

11、se_Difference(uint data Step_Phase_Difference);void Calculate_Frequency_Phase(void);void Display_Frequency_Phase();void Delay(uint);void Write_Cmd(uchar cmd);void Write_Data(uchar Data);void LCD_Init();/*void main()Initial_System();while(1)Key_Value=Scan_Keyboard();Calculate_Frequency_Phase();Displa

12、y_Frequency_Phase(); /*void Initial_System()WaveA=0;WaveB=0;Control_Phase=0.000001;Frequency=10;Phase_Difference=0;Counter_T0=0;Counter_T1=0;Number_T1=Get_Number_T1(Frequency);TMOD=0x22;TH1=0x38; /256-200TL1=0x38; /256-200TH0=0xc9; /256-201TL0=0xc9;EA=1;ET1=1;TR0=1;TR1=1;LCD_Init();/*void Write_Cmd(

13、uchar cmd) LCDEN=1; LCDRS=0; P0=cmd; Delay(5); LCDEN=0;/*void Write_Data(uchar Data) LCDEN=1; LCDRS=1; P0=Data; Delay(5); LCDEN=0;/*void LCD_Init() LCDRW=0; LCDRS=0; Write_Cmd(0x01); Write_Cmd(0x38); Write_Cmd(0x0C); Write_Cmd(0x06); Write_Cmd(0x80); Write_Data('F'); Write_Data('R');

14、 Write_Data('E'); Write_Data(':'); Write_Cmd(0x80+0x40); Write_Data('P'); Write_Data('H'); Write_Data('A'); Write_Data(':');/*uchar Scan_Keyboard()uchar key;uchar temp1,temp2;P1=0x0f;if(P1!=0x0f)temp1=P1;P1=0xf0;temp2=P1;P1=0x0f;while(P1!=0x0f)Delay(10

15、);key=temp1|temp2;switch(key)case 0xee :return 0; break;case 0xde :return 1; break;case 0xbe :return 2; break;case 0x7e :return 3; break;default : return 16;/*uint Get_Number_T0(uchar Frequency)uint h;double l;l=(double)Frequency;l=Control_Phase*0.5/l;l=l/0.000055;h=l;if(l-h>+0.5)h=h+1;return h;/

16、*uint Get_Number_T1(uchar Frequency)uint h;double f;f=(double)Frequency;f=0.5/f;f=f/0.0002;h=f;if(f-h>=0.5)h=h+1;return h;/*T0void Timer0_Interrupt() interrupt 1Counter_T0+;if(Counter_T0>Number_T0)Counter_T0=0;if(Flag=0)WaveB=WaveA;elseWaveB=WaveA;ET0=0;TR0=0;/*T1void Timer1_Interrupt() interr

17、upt 3 Counter_T1+; if(Counter_T1>Number_T1)Counter_T1=0;WaveA=WaveA;ET0=1;TR0=1;/*void Increase_Frequency()if(Frequency<=256-10) Frequency=Frequency+10;else Frequency=255;Number_T1=Get_Number_T1(Frequency);/*void Decrease_Frequency()if(Frequency>10)Frequency=Frequency-10;elseFrequency=1;Num

18、ber_T1=Get_Number_T1(Frequency);/*void Increase_Phase_Difference(uint data Step_Phase_Difference)Control_Phase=Control_Phase+0.00555556*Step_Phase_Difference;if(Control_Phase>=1)Control_Phase=0.000001;else if(Control_Phase>1)Flag=1;Control_Phase=Control_Phase-1; Phase_Difference+=Step_Phase_Di

19、fference;if(Phase_Difference>=360)Phase_Difference=0;void Calculate_Frequency_Phase(void)switch(Key_Value) case 0:Increase_Frequency();break; case 1:Decrease_Frequency();break; case 2:Increase_Phase_Difference(10); break; case 3:Initial_System();break; default :break;Number_T0=Get_Number_T0(Frequ

20、ency);void Display_Frequency_Phase()uchar i,j;a0=Frequency/100;a1=(Frequency%100)/10;a2=Frequency%10;a3=Phase_Difference/100;a4=(Phase_Difference%100)/10;a5=Phase_Difference%10;Write_Cmd(0x80+5);for(i=0;i<=2;i+)Write_Data(ai+48);Delay(5);Write_Cmd(0x80+0x40+5);for(j=3;j<=5;j+)Write_Data(aj+48)

21、;Delay(5);test=0;void Delay(uint i)uint j,k;for(k=i;k>0;k-)for(j=110;j>0;j-);5 仿真結(jié)果分析5.1系統(tǒng)初始化系統(tǒng)默認(rèn)頻率為10HZ,相位差為0液晶顯示,示波器測(cè)量如圖:圖8 系統(tǒng)初始圖5.2頻率50HZ,相位差0圖9 頻率50HZ,相位差05.3頻率50HZ,相位差50圖10頻率50HZ,相位差505.4頻率50HZ,相位差90圖11頻率50HZ,相位差906 心得體會(huì)本次課程設(shè)計(jì)我的題目是設(shè)計(jì)并實(shí)現(xiàn)兩路相位可調(diào)方波信號(hào)發(fā)生器。實(shí)驗(yàn)要求輸出兩路方波信號(hào),鍵盤控制頻率和兩信號(hào)的相位差,頻率范圍和變化步長(zhǎng)值自定,相位0360,相位差變化步長(zhǎng)值自定,用雙蹤示波器觀察。在學(xué)習(xí)微機(jī)原理和單片機(jī)以及智能儀器這些課程的時(shí)候我們就接觸過(guò)很多可以產(chǎn)生方波的方法。因此這次課程設(shè)計(jì)對(duì)于產(chǎn)生方波的方式有了多種選擇。既然是單片機(jī)課設(shè),而且這次實(shí)驗(yàn)的最簡(jiǎn)單的方案就是利用單片機(jī)MSP430的P1口的兩個(gè)引腳輸出高低電平。通過(guò)定時(shí)器A計(jì)數(shù)來(lái)實(shí)現(xiàn)PWM輸出,通過(guò)port2端口的IO中斷來(lái)實(shí)現(xiàn)按鍵控制相位變

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論