搜档网
当前位置:搜档网 › 波形发生器

波形发生器

题目: 波形发生器 指导老师: 队员及年级 学校及院系:

摘要:本次设计实现了一个波形发生器,可以产生锯齿波,三角波,方波,正玄波,并且可M 以通过电源复位及四个按键随意切换波形的形状,该设计实验中,通过TI 提供的MSP430 launch pad 多路混合信号发射平台,外搭载g2553芯片,通过烧录程序到芯片中,提供各种函数信号所需的数字信号,本设计采用常用的D/A 转换器件DAC0832来使单片机输出的数字信号转换为模拟信号,然后再通过运算放大器HA17741,把D/A 输出的电流信号转换为电压信号输出,这样以便用示波器对波形信号进行测量。这样就完成了D/A 转换器的核心部分的设计。将电流信号转为示波器可测试的电压信号-----函数。该函数发生器系统稳定,能很好地实现多种波形自由切换。

关 键 词: 单片机 DAC0832 HA17741 锯齿波 三角波 方波 正弦波

一、作品简介:

根据题目要求,此波形发生器包括四个模块部分,launch pad 发射平台及 MSP430g2553芯片,DAC0832数模转换器,HA17741集成运放芯片,可将电流信号转换为可测试的电压信号,通过开关和四个可开闭合开关,可将四种波形任意切换。 二:系统方案的论证

(1)总体方案的设计思路:

总体思路:为了实现函数波形发生器,可产生锯齿波,三角波,方波,正玄波等,通过按钮开关切换波形的形状,数字信号可由TI 提供的MSP430 launch pad 多路混合信号发射平台,外搭载g2553芯片提供,在输出数字信号的同时,外部可由D/A 转换电路实现数字信号到模拟信号的转变,在输出模拟信号的同时为了得到可测试化的电压信号,本设计采用常用的D/A 转换器件DAC0832来使单片机输出的数字信号转换为模拟信号,然后再通过运算放大器HA17741,把D/A 输出的电流信号转换为电压信号输出,这样以便用示波器对波形信号进行测量。这样就完成了D/A 转换器的核心部分的设计。

运用launch pad 搭载MSP430单片机,由于MSP430系列单片机寄存器多,低功耗,精简指令,丰富的片内外设,功能强大,通过采用常用的D/A 转换器件DAC0832来使单片机MSP430输出的数字信号转换为模拟信号,然后再通过运算放大器HA17741,把D/A 输出的电流信

输出

单片机

复位电路 显示电路

D/A 数模转换电路

放 大 输出电 路

键盘电路

号转换为电压信号输出,且通过按键外设接地,避免了过多的程序设计,且方便易行。

1.1 数字信号的实现方案

根据题意系统要得到稳定的数字信号信号输出,可采用TI提供的MSP430 系列芯片,launch pad 多路混合信号发射平台,外搭载g2553芯片提供需要的数字信号。

1.2 模拟信号的实现方案

在系统输出数字信号的同时,可用实验中常规的DAC0832数模转换芯片实现数字信号到模拟信号的转换。

1.3 电压信号的实现方案

由于经过DAC0832芯片的转换,得到的是电流信号,在外围模块上加上放大器HA17741将电流信号转换为示波器可测试的电压信号

1.4 波形切换的实现方案

通过按键复位和四个可开闭合按键的切换可得到想要的四种设置波形。

三:电路设计

(1)以lanch pad为平台,搭载MSPg2553芯片由于系统运行时开启的功能模块不同,即采用不同的工作模式,芯片的功耗有着显著的不同。在系统中共有一种活动模式(AM)和五种低功耗模式(LPM0~LPM4),通过一般I/O口输出数字信号来实现。

(2) DAC0832

DAC0832为一个8位D/A转换器,是计算机控制系统中常用的接口器件,它可以直接控制被控对象单电源供电,它也可以很方便的产生各种输出波形,如矩形波,三角波,该转换器由输入寄存器和DAC寄存器构成两级数据输入锁存。当LE=0时,输入数据被锁存;当LE=1时,数据不锁存,锁存器的输出紧跟输入变化。DAC0832为电流输出形式,其两个输出端的关系为Iout1+Iout2=常数。

(3)电流到电压的输出

为了得到电压输出,可在电流输出端接一个运算放大器,如图3-1所示。需要指出的是,

0832运算放大器内部已经有反馈电阻,其阻值为15K。若需要加大阻值,则可以外接反馈电

阻。在此运用HA17741放大器将电流信号转为电压信号。其与DAC0832的连接图如下:

图3-1 DAC0832与运放连接图

四、软件设计

通过对I/O口输值,“1”和“0”来实现,幅度和频率的改变通过改变I/O输出高低电平的有效端口电平高低和持续时间来实现。在TI公司提供的launch pad平台上以MSP430g2553的芯片作为信号发生平台,通过Code Composer studio v5软件实现相关程序调试并将程序烧录到MSP430系列芯片中(相关程序见附录)

软件功能结构:

开始

关闭看门狗

初始化

扫描开关状态

五:测试方案:

通过仿真实现了锯齿波,三角波,矩形波,正玄波的任意切换

锯齿波三角波方波正玄波

通过制板在硬件上通过示波器观测,四种波形相继出现。

六:总结与展望

经过一天的电路设计,程序设计调试,焊接调试,最终完成了整个规定的设计,从最终的结果来看达到了预期的要求:通过TI提供的launch pad 搭载MSP430g2553芯片,外接扩展模块,实现了数字电路到模拟电路的转换,且通过复位开关和四个对应按键的切换,很好的实现了函数波形的转换,通过这次设计也让我们更加明白团队合作分工的重要性,在完成设计要求很好发挥各自的优势的同时,也更加让我们学到了平时生活中难以学到的东西。在该设计中若能嵌入LCD液晶显示,和声音模块,在每次复位和切换按键的同时通过LCD和外围声音模块相应提醒,功能将更加适应操作者要求。

致谢

基于MSPg2553单片机的D/A信号转换器的设计终于告一段落了,在此我想对帮助我们的老师们和同学们真诚的说声谢谢。

本实验设计的研究和报告的相关数据工作是在各位成员的合作下完成的。论文的每一步进展都倾注着团队的努力。当然我们团队的相关理论知识倾注着老师渊博的知识和丰富经验,这更使我们受益匪浅,导师言传身教,不仅使我开拓了视野,增加了知识,更重要的是使我系统的掌握了科学研究的方法和自己动手的能力。在这里,向我们的指导老师表示我由衷的谢意!与此同时也非常感谢在设计过程中给予我们帮助和互相鼓励的团队们。

最后,还要向所有关心和帮助过我们团队的人致以最衷心的感谢!

参考文献:

参考文献

[1] 杨振江,等.单片机应用与实践指导,西安:西安电子科技大学出版社,2010.

[5] 谢维成等.单片机原理与应用及C51程序设计(第二版)清华大学出版社

[8] 21IC中国电子网. https://www.sodocs.net/doc/5e11514958.html,

附录:

/*

* main.c

* 函数发生器产生的函数有方波、三角波、锯齿波、正玄波

* 通过四个按钮选测输出的波形

* 利用上电复位改变函数输出开机之前必须按住某一个键的到相应的波形输出*

*/

#include

#include

unsigned char tab[112]={ //正玄波数据

254,254,253,253,252,250,248, //1

244,242,239,236,232,229,225, //2

216,212,207,202,197,192,186, //3

175,169,163,157,151,145,138, //4

126,119,113,107,101, 95, 89, //5

77, 71, 65, 60, 55, 50, 45, // 6

36, 31, 27, 23, 20, 16, 13, //7

8, 6, 4, 2, 1, 0, 0,

0, 0, 0, 1, 2, 3, 5, //9

9, 12, 15, 18, 22, 25, 29,

38, 42, 47, 52, 57, 63, 68, //11

80, 86, 92, 98,104,110,116,

129,135,141,148,154,160,166, //13

178,183,189,194,200,205,209,

219,223,227,231,234,237,240, //15

245,248,249,251,252,253,254

};

unsigned char kscan();//独立按键扫描

void main(void)

{

unsigned char kvalue;

unsigned char i;

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

P1DIR = 0xff;

P1OUT = 0xff;

kvalue=kscan();

switch(kvalue)

{

case 1: //锯齿波

{

while(1){

for(i=0;i<0xff;i++)

{

P1OUT |=i; //写入需转换的数据

P2OUT &=0xfc; //使能0832的片选信号和写信号线wr1

P2OUT |=0x03; //关闭使能

}

}

}

case 2: //三角波

{

while(1){

for(i=0;i<0xff;i++)

{

P1OUT |=i; //写入需转换的数据

P2OUT &=0xfc; //使能0832的片选信号和写信号线wr1

P2OUT |=0x03; //关闭使能

}

for(i=0xff;i>0;i++)

{

P1OUT |=i; //写入需转换的数据

P2OUT &=0xfc; //使能0832的片选信号和写信号线wr1

P2OUT |=0x03; //关闭使能

}

}

}

case 3: //方波

{

while(1){

P1OUT |=0x255; //写入需转换的数据

P2OUT &=0xfc; //使能0832的片选信号和写信号线wr1

P2OUT |=0x03; //关闭使能

//DAC0832=255;

for(i=0;i<0xff;i++)

{

_NOP();

_NOP();

_NOP();

}

P1OUT |=0; //写入需转换的数据

P2OUT &=0xfc; //使能0832的片选信号和写信号线wr1

P2OUT |=0x03; //关闭使能

//DAC0832=0;

for(i=0xff;i>0;i--)

{

_NOP();

_NOP();

_NOP();

//_NOP();

}

}

}

case 4: //正玄波

{

while(1){

for(i=0;i<0x112;i++)

{

P1OUT |=tab[i]; //写入需转换的数据

P2OUT &=0xfc; //使能0832的片选信号和写信号线wr1

P2OUT |=0x03; //关闭使能

//DAC0832=i;

}

}

}

}

}

void delayus(unsigned char n) //us级延时

{

while(--n);

}

void delay(unsigned int t) //ms级延时

{

while(t--)

{

delayus(245);

delayus(245);

}

}

unsigned char kscan() //独立按键扫描{

P2DIR |= 0xc0;

P2OUT |=0xc0;

delay(10);

P2DIR &=~0xc0;

switch(P1IN & 0x0f)

{

case 0x0e: return 1;

case 0x0d: return 2;

case 0x0b: return 3;

case 0x07: return 4;

default: return 0; } }

相关主题