您的当前位置:首页正文

电子工程学院电子工程学院创新项目结题报告书

来源:九壹网
 项目编号

电子工程学院创新项目结题报告

项目名称:基于单片机的简单函数波形发生器的设计. 项目成员:

XXXXXXXXXXXXXXXXXXXXXXXX .

项目联系人: 所在班级: 结题日期:

XXX .

XXXXXXXXXXXX . 2011年5月15日星期日 .

电子工程学院 二○一○年六月制

电子工程学院创新项目总结报告

项目编号: 填表日期:2011年05 月 15 日

以下内容由学生填写 项目名称:基于单片机的简单函数波形项目来源: √□学院发布 □学生自发生器的设计 项目时间 拟 2010 年 06 月 至 2011 年 5 月 项目组成员:(按工作量排序) 姓名 XXX XXX XXX 学号 电话 主要负责内容 硬件设计及制作 软件设计 方案设计及论证 主要内容 总结报告 1、项目总体情况介绍 制作出的实物可以实现单片机输出PWM波并占空比可调,能够输出变化的直流点评;实现三角波及锯齿的输出;实现正弦波输出;实现输出信号功率放大,项目总体是成功的。 总结报告 2、项目中采取的主要技术手段和方法,取得的重要成果 通过改变单片机输出高低电平持续时间(可由定时器或软件延时实现),即可输出占空比可调的PWM波。经过有源低通滤波器,PWM波中的高频成分将被滤去,从而实现直流电平输出。这也是一种新兴简易DA的实现原理。 利用DA不断改变输出电压,就能获得呈阶梯状起伏的波形。当持续时间足够短,阶梯足够多的时候,阶梯变化就可以忽略,输出就会是所需的平滑波形。在本设计中,利用PWM波通过低通滤波器的方式代替实际DA,通过不断改变占空比即可实现波形输出。 经过细致的分析,我们将重点放在了PWM频率及占空比控制部分。我们已经知道电压的变化依赖于PWM波占空 比的变化。要实现锯齿波及三角波的输出,只需PWM波的占空比按线性变化即可,然而要实现正弦波的输出,PWM波的占空比为非线性变化,须建立正弦表从而保证波形不失真。 滤波器的设计也是系统设计中的重点,为了保证能将高频分量滤去,而又不至于使输出波形失真。滤波器的各个参数都要认真计算。 实物满足预期要求。 整体电路图及其参数 电源图及其参数 试验程序: #include void delay(unsigned int nMs); unsigned char waveform; long PWM_fre,sample; unsigned char sin_tab[]={ 0x3F,0x42,0x45,0x48,0x4B,0x4E,0x51,0x54,0x57,0x5A,0x5D,0x60,0x62,0x65,0x67,0x6A ,0x6C,0x6E,0x70,0x72,0x74,0x75,0x77,0x78,0x7A,0x7B,0x7C,0x7D,0x7D,0x7E,0x7E,0x7E ,0x7E,0x7E,0x7E,0x7E,0x7D,0x7D,0x7C,0x7B,0x7A,0x78,0x77,0x75,0x74,0x72,0x70,0x6E ,0x6C,0x6A,0x67,0x65,0x62,0x60,0x5D,0x5A,0x57,0x54,0x51,0x4E,0x4B,0x48,0x45,0x42 ,0x3F,0x3C,0x39,0x36,0x33,0x30,0x2D,0x2A,0x27,0x24,0x21,0x1E,0x1C,0x19,0x17,0x14 ,0x12,0x10,0x0E,0x0C,0x0A,0x09,0x07,0x06,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03,0x04,0x06,0x07,0x09,0x0A,0x0C,0x0E,0x10 ,0x12,0x14,0x17,0x19,0x1C,0x1E,0x21,0x24,0x27,0x2A,0x2D,0x30,0x33,0x36,0x39,0x3C }; void main(void) { volatile unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop WDT FLL_CTL0 |= XCAP18PF; // Set load capacitance FLL_CTL1 &= ~XT2OFF; // Turn on XT2 // Loop until 32kHz crystal stabilizes do { IFG1 &= ~OFIFG; // Clear oscillator fault flag for (i = 50000; i; i--); // Delay } while (IFG1 & OFIFG); // Test osc fault flag FLL_CTL1 = SELS; // Select SMCLK source as XT2CLK P1DIR = 0xF8; P1IFG = 0x00; //clear all interrupt flags //Each PxIES bit selects the interrupt edge for the corresponding I/O pin. P1IES = 0x07; //Bit = 1: The PxIFGx flag is set with a high-to-low transition P1IE = 0x07; //enable interrupt P2DIR |= 0x01; // P2.0 output P2SEL |= 0x01; // P2.0 TA2 option waveform = 1; PWM_fre = 250; sample = 32; TACCR0 = PWM_fre; // PWM Period/2 TACCTL2 = OUTMOD_6; // TACCR2 toggle/set switch(waveform) { case 1: TACCR2 = sin_tab[sample]*PWM_fre/128; // TACCR2 PWM duty cycle break; case 2: TACCR2 = sample*PWM_fre/128; break; case 3: TACCR2 = sample*2*PWM_fre/128; break; default: break; }; TACTL = TAIE + TASSEL_2 + MC_1; // SMCLK, up-down mode _EINT(); _BIS_SR(CPUOFF); // Enter LPM0 } //定时器A中断服务子程序 #pragma vector=TIMERA1_VECTOR __interrupt void Timer_A (void) { switch(waveform) { case 1: if(sample<=126) { sample = sample + 1; TACCR2 = sin_tab[sample]*PWM_fre/128; } else { sample = 0; TACCR2 = sin_tab[sample]*PWM_fre/128; }; break; case 2: if(sample<=126) { sample = sample + 1; TACCR2 = sample*PWM_fre/128; } else { sample = 0; TACCR2 = sample*PWM_fre/128; }; break; case 3: if(sample <= 62) { sample = sample + 1; TACCR2 = sample*2*PWM_fre/128; } else if(sample <= 126) { sample = sample + 1; TACCR2 = (127-sample)*2*PWM_fre/128; } else { sample = 0; TACCR2 = sample*PWM_fre/127; }; break; default: break; }; _NOP(); } //中断按键 #pragma vector=PORT1_VECTOR __interrupt void key(void) { __disable_interrupt(); P1IFG=0x00; //清除所有的中断标志 delay(10); if(P1IN&0x07!=0x07) switch(P1IN&0x07) { case 0x06: if(waveform == 3) waveform = 1; else waveform = waveform + 1; break; case 0x05: if(PWM_fre <= 6125) PWM_fre = PWM_fre + 125; delay(500); while(P1IN&0x07 == 0x05 && PWM_fre <= 6125) PWM_fre = PWM_fre + 125; break; case 0x03: if(PWM_fre >= 250) PWM_fre = PWM_fre - 125; while(P1IN&0x07 == 0x03 && PWM_fre >= 250) delay(500); while(P1IN&0x07 == 0x03 && PWM_fre >= 250) PWM_fre = PWM_fre - 125; break; default: break; }; delay(10); P1IFG=0x00; //清除所有的中断标志 TACCR0 = PWM_fre; __enable_interrupt(); } //******延时n 毫秒(ms)*********************************** void delay(unsigned int nMs) { unsigned int i,j; for(i=nMs;i>0;i--) for(j=2000;j>0;j--); } 3、项目组成员各自的工作和贡献 xxx:硬件设计及制作 低通滤波器部分采用OP07搭建,作为通用放大器OP07可以方便的实现滤波器的设计。通用OP07的最大输出电流为±10mA左右,难以满足作为函数发生器的要求。因此,XXX还设计一个功率放大模块。考虑到输出频率较低,采用满足要求的普通推挽射极跟随器。 xxx:软件设计 项目采用MSP430作为主控制芯片,通过软件设计实现占空比连续变化的PWM波输出。XXX利用他精通的编程能力完成了MSP430占空比可变的PWM波程序 xxx:方案设计及论证 由于采用PWM的方式设计函数发生器并不流行,现成的资料并不多,因此为了保证设计方案的可行性以及可靠性,充足的理论分析是必不可少的。XXX收集了尽可能多的资料,例如用PWM实现正弦波的DDS方法,确保了方案的可行性 4、工作总结 在这次波形发生器的设计中,每位成员都尽职尽责,积极进行硬件电路的设计和程序的编写,碰到问题大家都积极在一起进行讨论、主动查找资料,最终在我们3位同学的协同工作下成功实现了波形发生器的功能,实现了预期目标。这个项目的成功完成离不开我们3位同学的齐心协力,由于大家对方案的设计、流程、原理都比较熟悉、所以对设计过程中问题的解决都比较及时,最终按时,成功地完成了该项目。通过这次电子工程学院举办的创新项目,我们不仅熟悉了一个项目的完整流程,而且对掌握16位单片机MSP430的软件设计流程,能够用MSP430输出占空比可调PWM波。能够通过有源低通滤波器将输出PWM波转换成直流电平,并进一步转换成锯齿波、三角波输出。 通过此次设计与制作,将所学理论知识良好地运用于实践之中。单片机软件设计过程能够加深对C语言的理解与应用:有源低通滤波器的设计与应用能够将《电路分析基础》与《模拟电路分析》中的知识运用于实践之中。 这次项目经历让我们受益匪浅,同时也为我们以后的科研工作和项目实施积累了丰富的经验。 以下内容由专家组填写 评 审综合评定: 情组长签名 况 年 月 日 成 姓名:xxx 绩 姓名:xxx 姓名:xxx 姓名:

说明:1、本表由学生、验收专家如实填写;

2、学院教务科汇总后,与有关论文、成果实物及其证明材料等一起备案。 3、专家组以答辩会的形式,根据项目组提交的报告及成果实物对项目进行评审

因篇幅问题不能全部显示,请点此查看更多更全内容

Top