【報告】基于單片機(jī)的PWM波形發(fā)生器_第1頁
【報告】基于單片機(jī)的PWM波形發(fā)生器_第2頁
【報告】基于單片機(jī)的PWM波形發(fā)生器_第3頁
【報告】基于單片機(jī)的PWM波形發(fā)生器_第4頁
【報告】基于單片機(jī)的PWM波形發(fā)生器_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、.唐 剛 2130401281 電氣310張明潔 2130401266 電氣310基于單片機(jī)的PWM波發(fā)生器(雙路)目錄1.題目理解 11.1.技術(shù)要求11.2.工作要求11.3.調(diào)壓11.4.變流12.整體框圖 13.工作原理 13.1.PWM原理23.2.系統(tǒng)主要構(gòu)成24.工作過程 35.程序流程簡圖 36.主要模塊說明 56.1.ADC0809 56.2.74HC138 56.3.ULN2803 66.4.74HC573 76.5.Digitron 86.6.晶振和復(fù)位86.7.AT89C52 97.原理圖108.PCB圖119.系統(tǒng)程序129.1.逐點(diǎn)比較法129.2.面積等效法179

2、.3.兩個子函數(shù) 2310.總結(jié)26:基于單片機(jī)的PWM波形發(fā)生器(雙路)1. 題目理解1.1. 技術(shù)要求(1)輸出兩路波;(2)波參數(shù)可以通過按鍵調(diào)整; (3)交互界面友好,布局合理大方;(4)五個功能按鍵。1.2. 工作要求(1)總體結(jié)構(gòu)框圖;(2)通過理論分析和計算選擇電路參數(shù);(3)根據(jù)功能要求,確定鍵盤控制功能;(4)根據(jù)原理圖焊接電路板;(5)用Altium Desinger Winter 09畫電路圖與PCB圖;(6)采用語言編寫檢測程序和應(yīng)用程序并通過調(diào)試;(7)撰寫設(shè)計報告和答辯PPT。PWM廣泛應(yīng)用于各行各業(yè),兩種典型代表分化出兩種理解:1.3. 調(diào)壓。通過調(diào)節(jié)占空q比調(diào)壓

3、,占空比為q=0,輸出電壓U=0;占空比為q=100%,輸出電壓U=Umax。如直流斬波構(gòu)成的直流脈寬調(diào)速系統(tǒng)。1.4. 變流。其中,逆變是PWM最先應(yīng)用的領(lǐng)域。如用正弦信號調(diào)制出來的SPWM加在慣性環(huán)節(jié)上等效于正弦波,通俗來講,就是調(diào)制一個正弦波。本組實(shí)現(xiàn)變流調(diào)制。2. 整體框圖3. 工作原理3.1.PWM原理3.1.1. PWM最基本的理論基礎(chǔ):沖量相等而形狀不同的窄脈沖加在慣性環(huán)節(jié)上,其效果基本相同。設(shè)采樣后序列為x(n),一個正弦半波被分成若干份,每份脈寬Ns,則輸出PWM脈沖寬度為:=x(Ns2)Ns所以,只要采出x(Ns2),然后讓脈沖持續(xù)即可。3.1.2.PWM調(diào)制基礎(chǔ):用等腰三

4、角形波或鋸齒波作為載波信號,對信號波進(jìn)行調(diào)制。原理:信號波幅值大于載波輸出高電平,直至信號波幅值小于載波。3.2.系統(tǒng)主要構(gòu)成3.2.1. 信號發(fā)生器:產(chǎn)生信號波,如正弦波送入AD。設(shè)定為xt=2.2sin2ft+2.2電路板提供的參考電壓約為4.6V,因?yàn)锳D,且要求xt最大值必須小于PWM幅值。3.2.2. ADC:將送入的信號波采樣,轉(zhuǎn)換為單片機(jī)可以處理的離散序列xn。3.2.3. 單片機(jī):處理序列、控制時序、協(xié)調(diào)芯片等。3.2.4. 示波器:將產(chǎn)生的PWM波輸出觀察。4. 工作過程信號發(fā)生器產(chǎn)生信號波,送入AD。單片機(jī)啟動AD工作,選通到等,開始采集信號,輸出離散序列至單片機(jī)。單片機(jī)接

5、收AD轉(zhuǎn)換的離散序列,進(jìn)行調(diào)制。調(diào)制方法有等效面積法、載波調(diào)制法兩種。通過單片機(jī)處理之后調(diào)制出來脈沖序列,即PWM波。又經(jīng)過74573鎖存之后輸出接示波器觀察波形。5. 程序流程簡圖PWMYesWaitingHigh voltageLow voltageYesNoSW>=CW?NoAD converts over?InitializeStartSW: signal waveCW: carrier wave6. 主要模塊說明6.1.ADC0809ADC0809主要信號引腳的功能:Ø IN7IN0模擬量輸入通道 Ø ALE地址鎖存允許信號。對應(yīng)ALE上跳沿,A、

6、B、C地址狀態(tài)送入地址鎖存器中。 Ø START轉(zhuǎn)換啟動信號。START上升沿時,復(fù)位ADC0809;START下降沿時啟動芯片,開始進(jìn)行A/D轉(zhuǎn)換;在A/D轉(zhuǎn)換期間,START應(yīng)保持 低電平。Ø A、B、C地址線。 通道端口選擇線,A為低地址,C為高地址,引腳圖中為ADDA,ADDB和ADDC。 Ø EOC轉(zhuǎn)換結(jié)束信號。EOC=0,正在進(jìn)行轉(zhuǎn)換;EOC=1,轉(zhuǎn)換結(jié)束。使用中該狀態(tài)信號即可作為查詢的狀態(tài)標(biāo)志,又可作為中斷請求信號使用。 Ø D7D0數(shù)據(jù)輸出線。為三態(tài)緩沖輸出形式,可以和單片機(jī)的數(shù)據(jù)線直接相

7、連。D0為最低位,D7為最高  Ø OE輸出允許信號。用于控制三態(tài)輸出鎖存器向單片機(jī)輸出轉(zhuǎn)換得到的數(shù)據(jù)。OE=0,輸出數(shù)據(jù)線呈高阻;OE=1,輸出轉(zhuǎn)換得到的數(shù)據(jù)。Ø Vref參考電源參考電壓用來與輸入的模擬信號進(jìn)行比較。本項(xiàng)目信號波分兩路輸入:IN3、IN4。對應(yīng)選通地址位分別為0x1ffb、0x1ffc而數(shù)據(jù)位則是0x03、0x04。D0D7掛總線輸出,由單片機(jī)讀取轉(zhuǎn)換后的結(jié)果,輸出范圍0255。本項(xiàng)目由于接線原因,寫入選通道地址和讀出轉(zhuǎn)換結(jié)果地址不一樣,而且,總線的分時復(fù)用比較復(fù)雜,對本項(xiàng)目造成了極大的挑戰(zhàn)。6.2. 74HC138本項(xiàng)目中38譯碼器

8、的功能是實(shí)現(xiàn)地址譯碼,由單片機(jī)P2口輸出地址高八位,經(jīng)38譯碼器譯碼輸出。6.3.ULN2803ULN2803低電平驅(qū)動電流大,驅(qū)動蜂鳴器、數(shù)碼管。邏輯上為集成非門。6.4. 74HC573八進(jìn)制三態(tài)非反轉(zhuǎn)透明鎖存器。實(shí)驗(yàn)中多次用到74HC573鎖存器,其作用是將D0D7邏輯鎖存,Q0Q7輸出。原理圖中,U10為數(shù)碼管段碼寄存器,決定顯示什么數(shù)字;U11為數(shù)碼管位碼寄存器,決定哪個數(shù)碼管亮;兩路PWM波由U14的Q0、Q1分別輸出,分別接示波器觀察。Ø LE:Latch Enable Input 鎖存使能輸入。Ø OE:3 State

9、 output Enable Input (Active LOW)3態(tài)輸出使能輸入。6.5. Digitron或Nixie tube,用于顯示數(shù)字。本項(xiàng)目使用6位共陽極數(shù)碼管,段碼由U10驅(qū)動;位碼由U11驅(qū)動。等效面積法中用于顯示信號波被分割為若干份后每份間隔點(diǎn)數(shù)Ns;逐點(diǎn)比較法中用于顯示鋸齒波STW的周期點(diǎn)數(shù)。6.6.晶振和復(fù)位振蕩電路是每個具有時序邏輯電路必不可少的重要角色。本項(xiàng)目采用晶振振蕩電路,一般有并聯(lián)式和串聯(lián)式兩種接法。顯然本項(xiàng)目中使用的是并聯(lián)式,振蕩周期為11.0592MHz。本項(xiàng)目中有上電復(fù)位和手動復(fù)位。6.7. AT89C5

10、2核心器件,“中央處理”單元,芯片控制、數(shù)據(jù)處理等。 本程序原理圖P0/P2口構(gòu)成地址總線,P0口為雙向數(shù)據(jù)總線。地址總線選通芯片,數(shù)據(jù)總線選通AD通道,接收AD轉(zhuǎn)換數(shù)據(jù)以及PWM輸出等等。晶振頻率為11.0592MHz。INT0/INT1分別為外部中斷信號,連接鍵盤,實(shí)現(xiàn)鍵盤的輸入,對應(yīng)T0/T1為高電平則為下降沿觸發(fā),反之為低電平觸發(fā)。7. 原理圖8. PCB圖9. 程序代碼兩個共用Subfunctions: serial_initial.c、bDisplay.c。每種方法各一個主函數(shù)文件。9.1.比較調(diào)制法逐點(diǎn)比較法.c/*-Main body-*/*-Head files-*/#inc

11、lude<reg52.h>#include<stdio.h>#include<intrins.h>#include<absacc.h>/*-This is ending line-*/*-macro definitions-*/#define unchar unsigned char#define unint unsigned int#define unlong unsigned long/*-This is ending line-*/*-Chips and ports definitions-*/#define pwm XBYTE0xffff

12、/74573unsigned char xdata *ADC0809;/ADC0809/unsigned char xdata *HC_573;/控制蜂鳴器的74HC573地址sbit EOC=P16;sbit it_0=P34; /實(shí)際上it_0對應(yīng)的按鍵S3類似電腦鍵盤shift鍵sbit it_1=P35; /同上/*-This is ending line-*/*-Variables definitions-*/unchar result=0;/outputs of ADunchar preResult=0;/outputs of ADunchar channel=0x03; /Cha

13、nnel #3;unlong Ns=20;/points of sawtooth wave(STW)unlong preNs=20;/previous Nsunlong i=0; /both i and j are used as indexunint j=0;unlong p=0;unlong temp=1;unchar pwmTemp=0;/store pwm for a while unchar pwm_4=0; /pwm of #3unchar pwm_3=0; /pwm of #4/*-This is ending line-*/*-Subfunctions-*/void selec

14、tChannel(unchar channel);void read(unchar readSignal);extern serial_initial();/extern getNs(unlong N);extern bDisplay(unlong x);/*-This is ending line-*/*-Main Function-*/void main() /*-preparations-*/ serial_initial(); bDisplay(preNs);/Activate all nixie tube(數(shù)碼管) pwm=0xff;/set pwm high voltage /改1

15、 EX0=EX1=1;/允許外部中斷0、1申請中斷。 EA=1; /允許中斷總開關(guān) PX0=1; /higher priority PX1=0; /lower priority i=1;/*-This is ending line-*/ while(1) /*用于判斷S3是否按下*/ if(it_0=0) IT0=0; /低電平觸發(fā)else IT0=1; /下降沿觸發(fā)/*用于判斷S4是否按下*/if(it_1=0) IT1=0; /低電平觸發(fā)else IT1=1; /下降沿觸發(fā)/*-This is ending line-*/while(j<2)/*-converting-*/if(ch

16、annel=0x03)ADC0809=0x1ffb; /activate ADC0809;/*ADC0809=0x03; selectChannel(channel); /Select channel #3.C52 send a message of writing elseADC0809=0x1ffC; /activate ADC0809; selectChannel(channel); while(!EOC);/Waiting for EOC=1,conversion overADC0809=0X3FFF; read(0x04);/*-This is ending line-*/HC_57

17、3=0xBfff;/*if(Ns>55|Ns<10)*HC_573=0Xff;while(1);*/*HC_573=0X04;/Ns=getNs(Ns);/*-essence-*/if(Ns<2|Ns>80) Ns=15;if(Ns!=preNs)bDisplay(Ns);/display NspreNs=Ns;/printf("Ns:%Ldn",Ns);if(i>Ns) i=0;pwmTemp=0x01;/set pwm high voltage;elseif(result<=i*255/Ns)pwmTemp=0x00;/*else p

18、wmTemp=0x01;*/if(channel=0x03)pwm_3=pwmTemp;else pwm_4=pwmTemp;/printf("j:%Xn",j);channel=channel; /#3:011 #4:100/*if(channel=0x03)channel=0x04;elsechannel=0x03;*/j+;/*-This is ending line-*/j=0; /reset j=0pwm=(pwm_3<<1)+pwm_4; /pwm:0x00;0x01;0x02;0x03/*printf("pwm3:%Xn",pw

19、m_3);printf("pwm4:%Xn",pwm_4); printf("pwm:%Xn",pwm);*/i+; /next point/*-This is ending line-*/ /*-This is ending line-*/*-definitions of subfunctions-*/void selectChannel(unchar channel) *ADC0809=channel;/printf("Channel:%Xn",channel);void read(unchar readSignal) *ADC0

20、809=readSignal; result=*ADC0809; /0255/*-This is ending line-*/*-interrupt operating-*/void external_0(void)interrupt 0Ns+;/printf("i=%dn",i);void external_1(void)interrupt 2 /中斷1居然不是interrupt 1,真是誤導(dǎo)人吶!Ns+=-1;/printf("i=%dn",i);/*-all over-*/9.2.面積等效法PWM面積等效原理.c/*-Main body-*/*-H

21、ead files-*/#include<reg52.h>#include<stdio.h>#include<intrins.h>#include<absacc.h>/*-This is ending line-*/*-Macro definitions-*/#define unchar unsigned char#define unint unsigned int#define unlong unsigned long/*-This is ending line-*/*-Chips and ports definitions-*/#define

22、 pwm XBYTE0xffff /74573unsigned char xdata *ADC0809; /ADC0809/unsigned char xdata *HC_573; /控制蜂鳴器的74HC573地址sbit EOC=P16;sbit it_0=P34; /實(shí)際上it_0對應(yīng)的按鍵S3類似電腦鍵盤shift鍵sbit it_1=P35; /同上/*-This is ending line-*/*-Variables definitions-*/unchar result=0;/outputs of ADunchar channel=0x03; /Channel #3;unlong

23、 Ns=20; /width of each pulseunlong preNs=20; /previous Nsunlong S=0; /area of each pulseunlong i=1; /both i and j are used as indexunint j=0;unint k_3=0; /indexunint k_4=0; /another indexunint delta=0; /width of pluseunint delta_3=0; /width of pluse of #3unint delta_4=0; /width of pluse #4/unchar pw

24、mTemp=0;/store pwm for a while unchar pwm_4=0; /pwm of #3unchar pwm_3=0; /pwm of #4/*-This is ending line-*/*-Subfunctions declaring-*/void selectChannel(unchar channel);void read(unchar readSignal);extern serial_initial();/extern getNs(unlong N);extern bDisplay(unlong x);/*-This is ending line-*/*-

25、Main Function-*/void main() /*-preparation-*/ serial_initial(); bDisplay(preNs); /Activate nixie tube(數(shù)碼管) pwm_3=0x00; /set pwm low voltage pwm_4=0x00;/set pwm low voltage EX0=EX1=1; /允許外部中斷0、1申請中斷。 EA=1; /允許中斷總開關(guān) PX0=1; /higher priority PX1=0; /lower priority/*-This is ending line-*/ /*-do the task

26、 continuously-*/ while(1) /*用于判斷S3是否按下*/ if(it_0=0) IT0=0; /低電平觸發(fā)else IT0=1; /下降沿觸發(fā)/*用于判斷S4是否按下*/if(it_1=0) IT1=0; /低電平觸發(fā)else IT1=1; /下降沿觸發(fā)/*-This is ending line-*/while(j<2)/*-start sampling-*/if(j=0) /j=0<=>ADC0809=0x1ffb;/activate ADC0809;/*ADC0809=0x03; selectChannel(channel); /Select c

27、hannel #3.C52 send a message of writing else ADC0809=0x1ffc;selectChannel(channel); while(!EOC);/Waiting for EOC=1,conversion overADC0809=0X3FFF; /force AD to spit outputs read(0x04); /unnecessary and any number is welcome/i+=1;/*-This is ending line-*/if(Ns!=preNs) bDisplay(Ns); /display Ns on nixi

28、e tubepreNs=Ns;/store previous Ns/*-This is ending line-*/*-essence part-*/if(i=Ns/2) /if i=Ns/2,it means that C52 should creat a pluse/k_3=k_4=0; /S=result*Ns; /calculate areadelta=S/255; /and the pulse lasts deltaif(channel=0x03)pwm_3=0x01;delta_3=delta;k_3=0;/if k_3 increases to delta, the pluse

29、overelsepwm_4=0x01;delta_4=delta;k_4=0;/the same as k_3/*-This is ending line-*/*if(j=0)pwm_3=pwmTemp;else pwm_4=pwmTemp;*/printf("j:%Xn",j);channel=channel; /#3:011 #4:100/*if(channel=0x03)channel=0x04;elsechannel=0x03;*/ j+;/*-This is ending line-*/j=0; /reset j=0/*-This is ending line-*

30、/*-export pwm-*/if(k_3=delta_3)pwm_3=0x00;if(k_4=delta_4)pwm_4=0x00;pwm=(pwm_3<<1)+pwm_4; /pwm:0x00;0x01;0x02;0x03/*-This is ending line-*/if(i>=Ns) i=0;/*printf("pwm3:%Xn",pwm_3);printf("pwm4:%Xn",pwm_4); printf("pwm:%Xn",pwm);*/i+; /next pointk_3+;/increases

31、until delta_3k_4+; /increases until delta_4/*-This is ending line-*/ /*-This is ending line-*/*-definitions of subfunctions-*/void selectChannel(unchar channel) *ADC0809=channel;/printf("Channel:%Xn",channel);void read(unchar readSignal) *ADC0809=readSignal; result=*ADC0809; /0255/*-This i

32、s ending line-*/*-interrupt operating-*/void external_0(void)interrupt 0Ns+;/printf("i=%dn",i);void external_1(void)interrupt 2 /中斷1居然不是interrupt 1,真是誤導(dǎo)人吶!Ns+=-1;/printf("i=%dn",i);/*-all over-*/9.3.兩個子函數(shù)serial_initial.c#include<reg52.h>#include<stdio.h>#include<ab

33、sacc.h>#define HC_573 XBYTE0xBfff/控制蜂鳴器的74HC573地址void serial_initial(void) SCON=0X52;TMOD=0X20;TH1=0XF3;TR1=1;HC_573=0X04;/Make beer silentbDisplay.c/*-A display function for farther use-*/*-this code originates from textbook-*/#include <reg52.h>#include <stdio.h>#include <absacc.h

34、>#include <intrins.h>#define SEGMENT XBYTE0x8000/段碼寄存器地址#define BIT_LED XBYTE0xbfff/位碼寄存器地址#define fosc 11.0592/晶振頻率#define time02500/定時2500uSunsigned char data display_bit,display_buffer6;unsigned char data time0_h,time0_l;unsigned int data time0_times;unsigned long y;unsigned long a,b;uns

35、igned char get_code(unsigned char i);void display(void);/*Main body of function*/void bDisplay (unsigned long x) BIT_LED=0; /全滅(各位送0,經(jīng)2803反向成1)TMOD=0x21;/定時器/計數(shù)器0定時方式1time0_times=65536-time0*fosc/12; /計算定時初值time0_h =(time0_times/256 );time0_l =(time0_times%256);TH0=time0_h; TL0=time0_l; /高8位和低8位時間常數(shù)

36、TR0=1;/啟動定時器0EA=ET0=1;/允許中斷display_bit=0x01; /從第一個數(shù)碼管開始顯示y=x;a=y/100000; /分離各位b=y%100000;display_buffer0=a;a=b/10000;b=b%10000;display_buffer1=a;a=b/1000;b=b%1000;display_buffer2=a;a=b/100;b=b%100;display_buffer3=a;a=b/10;b=b%10;display_buffer4=a;display_buffer5=b;/*while(1)PCON=0x01;*/void time0_int(void) interrupt 1/中斷服務(wù)子程序TH0=time0_h; TL0=time0_l;display();/共需40m秒void display(void)unsigned char i;switch (display_bit) /根據(jù)亮哪一位,決定取哪個顯示數(shù) /即:display_bit?display_buffericase 1: i=0;break;case 2: i=1;bre

溫馨提示

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

評論

0/150

提交評論