基于stm32的信號發(fā)生器設(shè)計_第1頁
基于stm32的信號發(fā)生器設(shè)計_第2頁
基于stm32的信號發(fā)生器設(shè)計_第3頁
基于stm32的信號發(fā)生器設(shè)計_第4頁
基于stm32的信號發(fā)生器設(shè)計_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計報告設(shè)計課題: 信號發(fā)生器 專業(yè)班級: 電子信息科學(xué)與技術(shù)一班學(xué)生姓名: 馬天琪 指導(dǎo)教師: 李浩宇 設(shè)計時間: 2013.9.202013.10.7 信號發(fā)生器一實驗概述本系統(tǒng)以低功耗單片機stm32為主控器件,分為微控制器、FPGA、DA轉(zhuǎn)換器、功率放大等模塊,實現(xiàn)了一個能產(chǎn)生任意波形的波形發(fā)生器。本設(shè)計利用單片機生成各種波形的數(shù)據(jù),將數(shù)據(jù)傳輸給RAM存儲器,通過后級的DA轉(zhuǎn)換器實現(xiàn)波形的產(chǎn)生。系統(tǒng)采用觸摸屏方式輸入波形參數(shù)和手繪波形,頻率1HZ步進可調(diào),峰-峰值可在0到10V之間任意調(diào)節(jié)。電路設(shè)計條理清晰,人機交互界面友好,控制方便,很好地完成了題目的所有基本和發(fā)揮要求。二實驗要

2、求與目的實驗要求:設(shè)計簡易函數(shù)信號發(fā)生器系統(tǒng)實驗?zāi)康模赫莆諔?yīng)用嵌入式系統(tǒng)生成函數(shù)信號的方法三實驗內(nèi)容與實驗設(shè)備實驗內(nèi)容:a) 設(shè)計程控放大器電路b) 設(shè)計嵌入式系統(tǒng)電路及程序,實現(xiàn)信號發(fā)生器基本功能,可以產(chǎn)生三種標(biāo)準(zhǔn)波形:正玄波、三角波和方波;c) 編寫嵌入式系統(tǒng)程序,實現(xiàn)函數(shù)信號發(fā)生器功能,可以對標(biāo)準(zhǔn)波形設(shè)計頻率、周期、最大值、最小值、峰峰值、偏移量和方波占空比。d) 編寫嵌入式系統(tǒng)程序,實現(xiàn)隨機信號發(fā)生器功能,輸出在手寫板上描繪的波形。e) 編寫嵌入式系統(tǒng)程序,實現(xiàn)通訊功能,可以通過RS232接口設(shè)置輸出信號。實驗設(shè)備:a) 示波器、信號發(fā)生器、萬用表b) STC單片機開發(fā)板、C8051F

3、開發(fā)板、STM32開發(fā)板實驗器件: STM32F103ZET6、ADUC7026四方案比較1.1 波形生成方案 方案一:采用鎖相式頻率合成方案 這種方案利用鎖相環(huán)將壓控振蕩器VCO的輸出頻率鎖定在所需頻率上。這種方案具有很好的窄帶跟蹤特性,很好的選擇所需頻率。但由于模擬方法合成的正弦波參數(shù)(如:幅度,頻率,相位)都很難被控制,難以滿足實現(xiàn)任意波形的要求。方案二:采用STM32單片機生成波形,由于是軟件濾波,所以不會有寄生的高次諧波分量,生成的波形比較純凈。它的特點是價格低、性能高,在低頻范圍內(nèi)穩(wěn)定性好、操作方便、體積小、耗電少。經(jīng)比較,方案二既可滿足課程設(shè)計的基本要求又能充分發(fā)揮其優(yōu)勢,電路簡

4、單,易控制,性價比高,所以采用該方案1.2 任意波形的生成原理 方案一:觸摸屏繪制波形 以觸摸屏作為操作界面,用戶可在觸摸屏上輸入波形參數(shù)及繪制波形。此方法操作簡易,并且可繪制任意波形,但是對編程者要求較高,故選擇相對簡單的用鍵盤輸入數(shù)據(jù)。方案二:用鍵盤輸入數(shù)據(jù)采用鍵盤輸入,這是最基本的方法。優(yōu)點是輸入值精確。但用戶自定義輸入時無法自由輸入想要的特殊波形,而且輸入數(shù)據(jù)繁瑣,操作麻煩,由于實現(xiàn)相對簡單,故本實驗采用該方案。五系統(tǒng)設(shè)計分析(A)硬件部分STM32液晶屏D/A運放示波器鍵盤輸入控制 (B) 微控制器軟件實現(xiàn): 微控制器主要用于完成數(shù)據(jù)的采集,顯示以及處理,生成各種波形數(shù)據(jù),本系統(tǒng)采樣

5、256個數(shù)據(jù),采用8位DA轉(zhuǎn)換器,因此RAM地址位設(shè)置為8位,數(shù)據(jù)位設(shè)置為8位。微控制器先進行數(shù)據(jù)收集處理,生成各種波形的歸一化數(shù)據(jù),然后存儲在256位的數(shù)組里,根據(jù)幅值要求乘以相應(yīng)的系數(shù),最終生成可以存放在RAM里的數(shù)據(jù)。 本系統(tǒng)采用12位DA轉(zhuǎn)換器,最大輸出電壓為5Vpp,功率放大為2倍,所以系統(tǒng)最大的輸出電壓可以達(dá)到10Vpp,可計算出最小電壓分辨率為:電壓分辨率:K=10/4096(V)主流程初始化液晶顯示鍵盤輸入處理判斷波形方波正弦波三角波鋸齒波中斷返回定時中斷開始 (A)是波形發(fā)生器的主流圖,由系統(tǒng)初始化和人機交互模塊組成,其中液晶顯示子模塊和鍵盤輸入處理子模塊占用單片機主要處理時

6、間,單片機反復(fù)運行該模塊程序人機交互模塊相當(dāng)于系統(tǒng)的監(jiān)控程序;(B)是定時中斷服務(wù)流程圖,波形發(fā)生模塊放置在定時中斷服務(wù)程序中,系統(tǒng)每隔一定時間,產(chǎn)生一個定時中斷,暫停主流程運行,轉(zhuǎn)到定時中斷服務(wù)程序起始處,執(zhí)行波形發(fā)生模塊,該模塊輸出一個樣值后,結(jié)束此次中斷服務(wù),返回主流程斷點處繼續(xù)運行。反復(fù)多次定時中斷服務(wù),從而完成波形生成。(C)鍵盤輸入處理子模塊在具體實現(xiàn)時,鍵值識別部分作為主程序,鍵功能處理部分作為子程序,它們之間的關(guān)系是主程序調(diào)用子程序。鍵盤的工作過程:(1)掃描鍵盤,獲得列掃描碼和行狀態(tài)碼,從而確定被按下的按鍵的鍵值;(2)根據(jù)鍵值,通過散轉(zhuǎn)表,跳轉(zhuǎn)到相應(yīng)的鍵功能處理部分;(3)

7、進入鍵處理部分,完成鍵功能;(4)完成一次鍵輸入工作。通過鍵盤對單片機系統(tǒng)進行設(shè)置,每按一次鍵,鍵盤都會有上述的處理過程,每次僅能完成一個鍵功能。在實際設(shè)置波形參數(shù)時,一個參數(shù)需要多個鍵功能來實現(xiàn),那么相應(yīng)的鍵盤也要多次完成鍵值識別,跳轉(zhuǎn)鍵處理的工作過程。(D)函數(shù)參數(shù)設(shè)置(1)正弦波歸一化數(shù)據(jù)生成函數(shù) S(t)=sin(t) /(2K) (2)三角波歸一化數(shù)據(jù)生成函數(shù)T(t)=t/(63 *2K) (t<64) T(t)=(127-t)/(63 *2K) (64<t<128)T(t)=(t-128)/(63 *2K) (128<t<192)T(t)=(255-t

8、)/(63 *2K) (192<t<256)(3)方波歸一化數(shù)據(jù)生成函數(shù) 根據(jù)電壓分辨率可以得出方波歸一化數(shù)據(jù)生成函數(shù)為: F(t)= 1/(2k) (0<t<128) F(t)= - 1/(2k) (128<t<256)(4)5次諧波數(shù)據(jù)的生成函數(shù) W(t)=a*sin(t)+ b*sin(2t+m)+ c*sin(3t+n)+d* sin(4t+p)+ e*sin(5t+q) 此函數(shù)要求幅值和相位參數(shù):a.b.c.d.e.m.n.p.q (5)正弦波、方波、三角波線性組合波數(shù)據(jù)生成函數(shù) D(t)=a*S(t)+ b*F(t+m)+ c*T(t+n)(E)

9、實驗參考程序/*-* 功 能 :STM32 DAC 數(shù)模轉(zhuǎn)換(正弦波/矩形波/三角波)輸出實驗 * 說 明 :按 SW5 輸出正弦波 / 按 SW4 輸出矩形波 / 按 SW3 輸出三角波, 輸出端口 PA4 *-*/#include <stdio.h>#include <stm32f10x_lib.h> / STM32F10x Library Definitions#include "STM32_Reg.h" / STM32 register and bit Definitions#include "STM32_Init.h"

10、/ STM32 Initialization#include "common.h"#include "sine_wave_1024.h"/ 輸出端口 : PA4#define SINE_WAVE1/sine 正弦波#define RECT_WAVE2/rectangular矩形波#define HACKLE_WAVE3/hackle三角波UINT8 flag = 0;UINT8 func = SINE_WAVE;/*- MAIN function *-*/int main (void) UINT16 i = 0; UINT32 *pDAC_BASE =

11、(UINT32 *)DAC_BASE; stm32_Init(); / STM32 setup LED_Init(); /打開DAC時鐘使能 RCC->APB1ENR |= (UINT32)(1 << 29); /設(shè)置DAC控制參數(shù) *(pDAC_BASE + 0x00) = (0x01 << 0)| (0x00 << 2) | (0x04 << 3) | (0x03 << 6) | (0x0b << 8); *(pDAC_BASE + 0x04) = 0x01 printf(" - Program sta

12、rt - rn"); while (TRUE)/ Loop forever if(!Get_SW5()func = SINE_WAVE;else if(!Get_SW4()func = RECT_WAVE;else if(!Get_SW3()func = HACKLE_WAVE; switch(func)case SINE_WAVE:/-#ifdef SINE_WAVE if(i < 1024) i+=2; else i = 0; *(pDAC_BASE + 0x08) = Sine_WAVEi << 4;#endif/-break;case RECT_WAVE:

13、#ifdef RECT_WAVEfor(i=0;i<2000;i+)*(pDAC_BASE + 0x08) = 0x0fff;for(i=0;i<2000;i+)*(pDAC_BASE + 0x08) = 0;#endif/-break;case HACKLE_WAVE:#ifdef HACKLE_WAVE if(flag) flag = 0;while(TRUE) if(i < 4096) i += 1; else break; *(pDAC_BASE + 0x08) = i; else flag = 1;while(TRUE) if(i > 0) i -= 1; e

14、lse break; *(pDAC_BASE + 0x08) = i; #endifbreak;default:break;/- / end while / end main/*- * 設(shè)置方向 *-*/void Set_IO_direction(UINT8 PORT, UINT8 GPIO, UINT8 Value) RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; if(PORT = PORT_A) if(GPIO < 8) GPIOA->CRL &= (0x0f << (GPIO * 4);/Clr used bit GPIOA

15、->CRL |= (Value << (GPIO * 4);/Set used bitelse GPIOA->CRH &= (0x0f << (GPIO * 4 - 8 * 4);/Clr used bit GPIOA->CRH |= (Value << (GPIO * 4 - 8 * 4);/Set used bit if(PORT = PORT_B) if(GPIO < 8) GPIOB->CRL &= (0x0f << (GPIO * 4);/Clr used bit GPIOB->CRL

16、 |= (Value << (GPIO * 4);/Set used bitelse GPIOB->CRH &= (0x0f << (GPIO * 4 - 8 * 4);/Clr used bit GPIOB->CRH |= (Value << (GPIO * 4 - 8 * 4);/Set used bit if(PORT = PORT_C) if(GPIO < 8) GPIOC->CRL &= (0x0f << (GPIO * 4);/Clr used bit GPIOC->CRL |= (Val

17、ue << (GPIO * 4);/Set used bitelse GPIOC->CRH &= (0x0f << (GPIO * 4 - 8 * 4);/Clr used bit GPIOC->CRH |= (Value << (GPIO * 4 - 8 * 4);/Set used bit if(PORT = PORT_D) if(GPIO < 8) GPIOD->CRL &= (0x0f << (GPIO * 4);/Clr used bit GPIOD->CRL |= (Value <&

18、lt; (GPIO * 4);/Set used bitelse GPIOD->CRH &= (0x0f << (GPIO * 4 - 8 * 4);/Clr used bit GPIOD->CRH |= (Value << (GPIO * 4 - 8 * 4);/Set used bit if(PORT = PORT_E) if(GPIO < 8) GPIOE->CRL &= (0x0f << (GPIO * 4);/Clr used bit GPIOE->CRL |= (Value << (GPI

19、O * 4);/Set used bitelse GPIOE->CRH &= (0x0f << (GPIO * 4 - 8 * 4);/Clr used bit GPIOE->CRH |= (Value << (GPIO * 4 - 8 * 4);/Set used bit /*- SendChar Write character to Serial Port. *-*/int SendChar (int ch) while (!(USART2->SR & USART_FLAG_TXE); USART2->DR = (ch &am

20、p; 0x1FF); return (ch);/*- GetKey Read character to Serial Port. *-*/int GetKey (void) while (!(USART2->SR & USART_FLAG_RXNE); return (int)(USART2->DR & 0x1FF);void LED_Init(void)Set_IO_direction(PORT_E,LED1,OUTPUT);Set_IO_direction(PORT_E,LED2,OUTPUT);Set_IO_direction(PORT_E,LED3,OUTP

21、UT);Set_IO_direction(PORT_E,LED4,OUTPUT);Set_IO_direction(PORT_B,SW2,INPUT);Set_IO_direction(PORT_B,SW3,INPUT);Set_IO_direction(PORT_E,SW4,INPUT);Set_IO_direction(PORT_E,SW5,INPUT);Turn_OFF_LED1();Turn_OFF_LED2();Turn_OFF_LED3();Turn_OFF_LED4();/*- insert a delay time. *-*/void delay(unsigned int nC

22、ount) for(; nCount != 0; nCount-);正弦波歸一化程序:tosin256=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,0

23、xf7,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

24、,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

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論