28335-DSP實驗報告_第1頁
28335-DSP實驗報告_第2頁
28335-DSP實驗報告_第3頁
28335-DSP實驗報告_第4頁
28335-DSP實驗報告_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、 研究生實驗報告XXXXXX大學研究生實驗報告課程名稱: DSP技術應用 綜合設計名稱:電量參數(shù)計算和發(fā)送 學生姓名: 班級學號: 學科名稱: 2012年5月25日11一、綜合實驗題目和要求1、 實驗設計要求要求1:對給定的波形信號,采用TMS320F28335的浮點功能計算該信號的以下時域參數(shù):信號的周期T(頻率f也需要計算),信號的均方根大小Vrms、平均值Vavg(即直流量)、峰峰值Vpp。其中,均方根Vrms的計算公式(數(shù)字量的離散公式)如下:式中,N為采樣點數(shù),u(i)為采樣序列中的第i個采樣點。要求2:所設計的軟件需要計算采樣的波形周期個數(shù),并控制采樣點數(shù)大于1個波形周期,小于3個

2、波形周期大小。要求3:對采樣的數(shù)據(jù)通過串口發(fā)送至PC界面。2、 實驗目的主要考核學生對TMS320F28335浮點處理器、A/D模塊、SCI模塊和信號時域分析等知識的掌握。產(chǎn)生的波形可選擇正弦波,也可以是其它任意波形。如果波形中添加了隨機噪聲,則建議采用軟件設計中加入數(shù)字濾波算法,否則可能計算中產(chǎn)生較大的誤差。實驗所需的頻率不能太大,(建議范圍:10Hz100kHz),采樣點建議在256點左右(自己任意設定也可,不少于32點)。二、硬件框圖圖1 系統(tǒng)硬件框圖圖1 給出了該綜合實驗的硬件框圖,首先通過小鍵盤設置波形的參數(shù),包括頻率、幅值以及波形等。然后通過信號發(fā)生器產(chǎn)生模擬信號,由DSP2833

3、5的AD通道6進行采樣處理。DSP與PC機之間通過串口進行通信,由DSP28335的SCIb通道處理。ADC模塊有16個轉換通道,可配置成兩個獨立的8通道轉換模塊,分別對應于管理器A和B,根據(jù)用戶需求,兩個獨立的8通道轉換模塊可以級聯(lián)成一個8通道模塊,在ADC模塊中盡管可以多通道輸入和有兩個排序器,但只有一個A/D轉換器可以。兩個8通道模塊可以自動對一系列轉換進行排序,而且每個模塊都可以通過多路復用開關選擇任何一個通道。在級聯(lián)模式下,自動排序器將作為一個單一的8通道排序器。對于每個排序器,當轉換結束時,選擇通道的轉換結果被儲存在相應的結果寄存器中。在DSP28335,自動排序模式允許用戶對統(tǒng)一

4、通道進行多次采樣。模擬輸入與數(shù)字輸出的關系如下圖2ADC模塊結構框圖外設時鐘HSPCLK通過ADCTRL3寄存器的SDCCLKPS(3:0)位分頻,然后再通過通過ADCTRL1寄存器中的CPS位進行二分頻。另外,ADC模塊還可以通過擴展采樣/獲取周期,調整信號源的阻抗,這是由ADCTRL1寄存器中的ACQ_PS(3:0)位決定的。這些位并不影響采樣/保持和轉換過程,但可以通過增大脈沖長度增加采樣的時間長度。圖3ADC內核時鐘以及采樣/保持時鐘三、程序流程圖1、主程序流程圖程序使用兩個中斷:ADC中斷和CPU定時器2中斷。ADC用于對波形進行采樣、濾波、存儲以及計算波形的有效值、峰峰值、平均值,

5、并使用串口發(fā)送;CPU定時器2中斷用于計算波形周期和頻率。圖4 主程序流程圖圖4給出了主程序流程圖,該程序的主要步驟是進行初始化使能中斷等待中斷響應。2、子程序流程圖圖5 ADC中斷服務子程序圖6 定時器2中斷服務子程序圖7濾波程序段圖8求最大值最小值程序段圖9求有效值和平均值程序段圖10串口通信程序段圖5圖10給出了所有子程序的框圖,下面分別說明各個程序的設計思想:(1)AD中斷子程序(圖5):該程序對波形進行采樣,濾波以及存儲,并求出有效值,峰峰值和平均值。采樣后的波形存儲在一個長度為1024的數(shù)組里。為了減少CPU開銷,程序設定為采樣累計到1024個點后再進行波形的有效值,峰峰值和平均值

6、計算。(2)定時器2中斷子程序(圖6):該程序通過定時器中斷來實現(xiàn)對波形等時間間隔的判斷和處理,從而可以較為精確的計算出波形周期和頻率。在波形每次正向過零點時,計算出兩次過零點的時間間隔,并乘以定時器2中斷周期,從而得到波形的實際周期。定時器2中斷周期設置為10us。(3)濾波程序(圖7):該程序對1024個點進行了低通值濾波,根據(jù)本次采樣點和上次采樣點,來修正本次的采樣值。濾波公式如下,程序中取K=0.15。 (4)求最大值最小值程序(圖8):該程序定義數(shù)組第一個值為初值,再比較1023個點,如果找到更大的點,則賦給最大值對應的變量;如果找到更小的點就賦給最小值對應的變量。(5)求有效值和平

7、均值程序段(圖9):有效值的計算:將1024個點的平方值相加求平均后,再開根號。平均值的計算:將1024個點求和然后求平均。(6)SCI通信程序(圖10):PC端為串口接收助手,為了使顯示界面上顯示的是實際數(shù)值,發(fā)送之前將有關的數(shù)據(jù)量的個十百千位拆開,并轉換為ASCII碼進行發(fā)送。在發(fā)送之前檢測SCIb_buff是否為空,若不為空則等待。串口發(fā)送子程序定義了一個計數(shù)器,以控制串口發(fā)送的速率。 四、實驗結果和分析1、軟件調試結果圖11 900Hz 1200mV正弦波調試結果 (上圖)圖12 1700Hz 800mV正弦波調試結果 (上圖)圖13 800Hz 1000mV三角波調試結果 (上圖)2

8、、結果分析(1)從圖11所示的調試結果波形圖可以看出,濾波后的波形平滑度明顯變好,說明低通濾波效果良好。各個波形參數(shù)MIN(最小值)、MAX(最大值)、VRM(有效值)、FRE(頻率)、 PER(周期)均和實際輸入的指標誤差在5%以內,說明電參量的計算方法準確性良好。(2)從圖12所示的實驗波形可以看出,當輸入波形的電參量變化時,輸出電參量的值也發(fā)生了相同變化,且誤差值在5%以內。由ADC的采樣頻率可以得到,本程序可以計算出頻率最低為150Hz的正弦波的周期。(3)比較圖13和前兩幅波形可以得出,本程序在對三角波進行采樣時,波形濾波效果良好,電參量計算準確,也達到了良好的效果。由此驗證了本程序

9、的通用性,并進一步驗證了程序的準確性。(4)通過實驗結果總結出本程序在以下方面需要進一步改進:AD采樣的速率以及采樣窗口的大小目前為確定值,當波形頻率變化范圍較大時,會影響到采樣的結果,如:當頻率過大時,采樣波形每個周期的點數(shù)減小,將直接影響各個電參量的計算結果;當頻率過小時,采樣的窗口不能采樣出一個完整的波形周期,也將直接影響各個電參量的計算結果。這是需要進一步作出改進的地方。五、源程序#include "DSP2833x_Device.h" / DSP2833x Headerfile Include File#include "DSP2833x_Example

10、s.h" / DSP2833x Examples Include File#include "math.h"/ Prototype statements for functions found within this errupt void adc_isr(void);interrupt void ISRTimer2(void);void number_count(void);/確定周期采樣點,計算頻率和有效值并發(fā)送數(shù)據(jù)void scib_fifo_init();void InitScibGpio(void);/串口初始化程序void number

11、_C(unsigned long i); /數(shù)字各位拆分函數(shù)#if (CPU_FRQ_150MHZ) / Default - 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz#endif#if (CPU_FRQ_100MHZ) #define ADC_MODCLK 0x2 / HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz#endif#define ADC_CKPS 0x1 / ADC

12、 module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz#define ADC_SHCLK 0xf / S/H width in ADC module periods = 16 ADC clocks#define AVG 1000 / Average sample limit#define ZOFFSET 0x00 / Average Zero offset#define BUF_SIZE 160 / Sample buffer size/Global variables used in this example:Uint16 Lo

13、opCount;Uint16 ConversionCount;Uint16 Voltage11024;Uint16 i = 0;Uint16 j = 0;Uint16 Ticker50;/在AD采樣的例程基礎上修改,以下為新定義的變量:Uint16 ADt1,ADt2,ADt,ADt3,ADt4;/AD時間間隔Uint16 Voltagelb1024;Uint16 vref=500; /參考值int PreConversion=0;int crosszero=0;Uint32 t1,t2,t,t3,t4;/定時器時間間隔float Data=0.0;float Vavg=0.0;/平均值flo

14、at Vmax=0.0;/最大值float Vmin=0.0;/最小值float Vrms=0.0;/有效值float Vpp=0.0;/峰峰值float frequency=0;float period=0;float MAX=0.0;float MIN=0.0;/以下為整型變量,用于串口發(fā)送Uint16 T=0;/周期msUint16 F=0;/Uint16 V=0;/有效值mvUint16 max=0;/最大值mvUint16 min=0;/最小值mvunsigned int TX_flag = 0;/串口發(fā)送時間間隔標志unsigned int TX_Ticker = 500;/串口發(fā)

15、送的周期間隔main()/ Step 1. Initialize System Control:/ PLL, WatchDog, enable Peripheral Clocks/ This example function is found in the DSP2833x_SysCtrl.c file. InitSysCtrl();/ Step 2. Initialize GPIO:/ This example function is found in the DSP2833x_Gpio.c file and/ illustrates how to set the GPIO to it

16、9;s default state. InitGpio(); / Skipped for this example InitScibGpio();/*起初遺漏了這句話*/ Step 3. Clear all interrupts and initialize PIE vector table:/ Disable CPU interrupts DINT;/ Initialize the PIE control registers to their default state./ The default state is all PIE interrupts disabled and flags/

17、 are cleared./ This function is found in the DSP2833x_PieCtrl.c file. InitPieCtrl();/ Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;/ Initialize the PIE vector table with pointers to the shell Interrupt/ Service Routines (ISR)./ This will populate the entire ta

18、ble, even if the interrupt/ is not used in this example. This is useful for debug purposes./ The shell ISR routines are found in DSP2833x_DefaultIsr.c./ This function is found in DSP2833x_PieVect.c. InitPieVectTable();/ Interrupts that are used in this example are re-mapped to/ ISR functions found w

19、ithin this file. EALLOW; / This is needed to write to EALLOW protected register PieVectTable.ADCINT = &adc_isr; PieVectTable.TINT2 = &ISRTimer2; EDIS; InitXintf();/*設置CPU*/ InitCpuTimers(); ConfigCpuTimer(&CpuTimer2, 150, 10);/中斷時間10us.1MHz StartCpuTimer2(); CpuTimer2Regs.TCR.all = 0x400

20、1; / Use write-only instruction to set TSS bit = 0 /*開中斷*/ IER |= M_INT14;/ Enable TINT0 in the PIE: Group 1 interrupt 7 PieCtrlRegs.PIEIER1.bit.INTx7 = 1;/ Step 4. Initialize all the Device Peripherals:/ This function is found in DSP2833x_InitPeripherals.c/ InitPeripherals(); / Not required for thi

21、s example InitAdc(); / For this example, init the ADC scib_fifo_init();/ Step 5. User specific code, enable interrupts:/ Enable ADCINT in PIE PieCtrlRegs.PIEIER1.bit.INTx6 = 1; IER |= M_INT1; / Enable CPU Interrupt 1 EINT; / Enable Global interrupt INTM ERTM; / Enable Global realtime interrupt DBGM

22、LoopCount = 0; ConversionCount = 0; AdcRegs.ADCTRL1.bit.ACQ_PS = ADC_SHCLK; AdcRegs.ADCTRL3.bit.ADCCLKPS = ADC_CKPS; AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; / 0 Non-Cascaded Mode; 1 Cascaded Mode AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 0x1; AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; AdcRegs.ADCCHSELSEQ1.bit.CONV00 =

23、0x6; AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 15; AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ; for(i=0;i<1024;i+) Voltagelbi = 0; / Wait for interrupt for(;);/*此中斷完成AD采樣以及相關波形參數(shù)的計算(除周期外)*interrupt void adc_isr(void)/*采樣并濾波*Voltage1ConversionCount=AdcRegs.ADCRESULT0 >>4;PreConversion=ConversionCount-1;if(

24、PreConversion<0) PreConversion=1024; VoltagelbConversionCount= Voltage1ConversionCount*0.15+ VoltagelbPreConversion*0.85;/一階滯后濾波 if(ConversionCount = 1024)ConversionCount = 0;/*計算有效值,平均值,峰峰值程序段*/Vavg平均值,Vmax最大值,Vmin最小值,Vrms有效值,Vpp峰-峰值Vavg = 0;Data = 0;Vmax=Voltagelb0;Vmin=Voltagelb0;for(i=0;i<

25、1024;i+)Data+=Voltagelbi*Voltagelbi; Vavg+=Voltagelbi;if(Vmax<Voltagelbi) Vmax=Voltagelbi;if(Vmin>Voltagelbi) Vmin=Voltagelbi;Data=Data/1024;Vrms=sqrt(Data);/計算有效值 Vavg=Vavg/1024;/計算平均值Vpp=Vmax-Vmin;/計算峰-峰值/*計算有效值,平均值,峰峰值程序段結束*/ T=period*1000000; F=frequency; Vrms=Vrms*3/4095; MAX=Vmax*3/4095;

26、MIN=Vmin*3/4095;V=Vrms*1000;max=MAX*1000; min=MIN*1000;/得出的整型值單位均為mv number_count();/調用串口發(fā)送else ConversionCount+; / Reinitialize for next ADC sequence AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; / Reset SEQ1 AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; / Clear INT SEQ1 bit PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; / Ack

27、nowledge interrupt to PIE AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1 ; return;/*此中斷中計算波形周期,10us執(zhí)行一次*interrupt void ISRTimer2(void)CpuTimer2.InterruptCount+;/32位無符號整型:最大4294967295if(CpuTimer2.InterruptCount>4294967290) CpuTimer2.InterruptCount=0;if(VoltagelbPreConversion<vref)&&(vref<Voltage

28、lbConversionCount)&&(crosszero=0)/第1個交點crosszero=1;t1=CpuTimer2.InterruptCount;ADt1=ConversionCount; if(VoltagelbPreConversion>vref)&&(vref>VoltagelbConversionCount)&&(crosszero=1)/第2個交點crosszero=2;t2=CpuTimer2.InterruptCount;ADt2=ConversionCount;if(VoltagelbPreConversi

29、on<vref)&&(vref<VoltagelbConversionCount)&&(crosszero=2)/第3個交點crosszero=0;t3=CpuTimer2.InterruptCount;ADt3=ConversionCount;if(t3<=t1) /計算一個周期的定時器間隔t=4294967295+t3-t1;elset=t3-t1;period=t*0.00001;frequency=1/period; PieCtrlRegs.PIEACK.all|=0x01;/清除中斷響應位void number_count(void)

30、/此處定時發(fā)送數(shù)據(jù)TX_flag+;/記錄發(fā)送時間間隔標志if( TX_flag >= TX_Ticker )TX_flag = 0;/需要發(fā)送頻率、有效值、最大值、最小值ScibRegs.SCITXBUF= ''while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'M'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'I'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);Sc

31、ibRegs.SCITXBUF= 'N'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ':'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(min);ScibRegs.SCITXBUF= 'm'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'v'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs

32、.SCITXBUF= ','while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'M'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'A'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'X'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ':

33、9;while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(max);ScibRegs.SCITXBUF= 'm'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'v'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ','while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'V'whil

34、e(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'R'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'M'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ':'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(V);ScibRegs.SCITXBUF= 'm'while(ScibRe

35、gs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'v'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ','while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'F'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'R'while(ScibRegs.SCIFFTX.bit.TXFFS

36、T != 0);ScibRegs.SCITXBUF= 'E'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ':'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(F);ScibRegs.SCITXBUF= 'H'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'Z'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);

37、ScibRegs.SCITXBUF= ','while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'P'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'E'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 'R'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= &

38、#39;:'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);number_C(T);ScibRegs.SCITXBUF= 'u'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 's'while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= ''while(ScibRegs.SCIFFTX.bit.TXFFST != 0);ScibRegs.SCITXBUF= 't'

39、;while(ScibRegs.SCIFFTX.bit.TXFFST != 0);/清有效值和周期采樣點數(shù),為下周期做準備 void scib_fifo_init()/串口B初始化ScibRegs.SCICCR.all = 0x0007; / 1個停止位、無奇偶校驗ScibRegs.SCICTL1.all = 0x0003; / 使能TX、RXScibRegs.SCICTL2.all = 0x0003;ScibRegs.SCICTL2.bit.TXINTENA = 1;ScibRegs.SCICTL2.bit.RXBKINTENA = 1;ScibRegs.SCIHBAUD = 0x0001;

40、ScibRegs.SCILBAUD = 0x00e7;/波特率9600ScibRegs.SCICCR.bit.LOOPBKENA =0; /禁止自檢模式ScibRegs.SCICTL1.all =0x0023;ScibRegs.SCIFFTX.bit.TXFIFOXRESET=0;ScibRegs.SCIFFRX.bit.RXFIFORESET=0;ScibRegs.SCIFFTX.all=0xE040;ScibRegs.SCIFFRX.all=0x204f;ScibRegs.SCIFFCT.all=0x0;void InitScibGpio(void)EALLOW;GpioCtrlRegs.GPAPUD.bit.GPIO18 = 0;/ GPIO18

溫馨提示

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

評論

0/150

提交評論