武汉理工大学第四届电工电子创新设计大赛设计报告doc.docx
《武汉理工大学第四届电工电子创新设计大赛设计报告doc.docx》由会员分享,可在线阅读,更多相关《武汉理工大学第四届电工电子创新设计大赛设计报告doc.docx(17页珍藏版)》请在冰豆网上搜索。
武汉理工大学第四届电工电子创新设计大赛设计报告doc
题号:
A
武汉理工大学第四届电工电子
创新设计大赛设计报告
题目:
波形发生器
参赛者:
xx
学院班级:
信息工程学院电信1006班
联系方式:
评分标准:
项目
满分
得分
基本要求
总分
摘要
本系统以430系列单片机msp430f149为核心设计,采用四个部分构成,其一使用DDS芯片ad9834产生正弦波、方波、三角波三种周期性波形;其二通过电压增益放大器VCA810控制幅值步进;其三通过后级运放电路实现幅值稳定放大控制;其四通过液晶LCD12864实现数据的显示。
输出波形频率范围1Hz~3000kHz,频率调节步进为1Hz,幅度范围-5V~+5V(峰-峰值),可按步进0.1V(峰-峰值)调整。
显示部分能够显示当前波形种类、频率和幅值。
当负载为100Ω时,输出电压幅度变化不大于10%。
本系统设计是仿真设计和实物制作,DDS最高可实现频率3Mhz的波形输出。
关键词:
430单片机;波形;DDS;压控;DAC;频率;幅值
1.方案选择与论证
方案一:
采用STC89C51单片机通过软件控制多种波形的生成和输出,软件部分通过定时器控制两个内部中断,外加一个外部触发中断,此处使用按键触发。
其中一个内部中断用来对波形数据存储数组进行循环读取。
当设定进入一次中断时间一定时,减小波形数据数组可以增大输出波形频率,当波形数组数据数量恒定时,减小每次进入中断的时间也可以增大输出的频率;对于幅值的控制可通过波形的一个算法公式控制。
另外一个内部中断用来对输出波形频率进行计算检测。
按键触发的外部中断用以对输出波形的类型,频率增减,幅值增减进行触发选择。
此系统设计的硬件部分为8为的DAC0832,对每一次波形数据数组的读取进行DA转换。
在软件调试过程中,还要注意到对于时钟定时器优先级进行调整,设定PX0=1,提高T1的优先级,否则两个定时器同时工作时,当T0进入中断过快时,对显示部分会照成很大影响。
但是该方案虽然能多种波形的输出,但对于51单片机输出波形的最高频率只有1K赫兹,远不能满足设计要求,所以放弃该方案。
方案二:
采用msp430f149的定时器功能实现纯软件的波形发生器的制作。
使其内部定时器的时钟控制在1us一次中断。
选择此方案时选择的是定时器B的时钟中断,每进入一次中断对正弦波等波形幅值数组进行读取,并赋予外DAC0832进行信号输出。
但在实际操作过程中因为定时器B的中断设置需要占据一定的时间,使得对于一个周期的信号输出比理论的周期值要大,从而使得频率达不到100K,使用8M晶振实际最高输出只有20K,且波形不平滑,所以放弃该方案。
方案三:
用msp430单片机控制DDSad9834数字芯片产生高稳定度,宽频段的正弦波,三角波以及方波信号,并可通过矩阵键盘实现1hz频率步进,最高频率可达到3M赫兹。
再又通过压控增益放大器配合运算放大电路控制信号的幅值输出和步进。
该方案输出的三种波形平滑稳定。
显示部分采用LCD12864液晶,较之lcd1602能够显示中文汉字。
该方案能满足设计要求和部分扩展要求,所以本次设计包括实物制作,采用该方案。
2.系统设计
2.1核心控制模块
采用MSP430单片机作为信号发生器的核心控制单元。
MSP430
具有处理能力强、运算速度快、超低功耗、片内资源丰富等优点。
这些
优点保证了信号发生器能够快速、准确地实现其控制功能。
2.2波形的生成
本系统使用msp430f149单片机控制直接数字式频率合成器DDSad9834产生10Hz~3MHz频率可调的正弦波,三角波和方波信号。
参照ad9834的PDF资料进行硬件搭建,ad9834有两个寄存器,每个有16位。
通过软件程序对ad9834写入正弦波,三角波,方波控制字,分别为正弦波0x2100,0x2000;三角波0x2100,0x2002;方波为0x2100,0x2028;从引脚19或20脚输出正弦波或三角波,16脚出方波。
幅值约为680mv.
图一MCUDDS原理图
2.3波形的频率和幅值控制
实现频率的1hz步进可直接通过软件给ad9834写入频率数据,通过矩阵键盘按键触发;对于幅值步进,本系统直接使用程控放大器VCA810芯片,通过软件给DAC0832写入0到255的数值数据控制DAC的电压规律输出,将ad9834产生的波形信号和DAC的控制电压输入VCA810实现波形的幅值步进,压控增益放大器的控制电压为-2~0伏,对应的信号增益为-40dB到40dB,但实际控制幅度增益达不到最高理论值,但也可以完全满足设计要求,DA输出为0~5V本系统通过外围运放设定DA输出为正负2V,VCA810可控制原始波形幅值20mv步进,增长到最高电压峰峰值2伏电压。
通过矩阵键盘按键控制电压的步进。
图二DAC0832控制部分
2.4波形的峰-峰值,步进调整
为了使输出的信号幅度达到要求的正负5伏峰值,将从VCA810输出的波形通过一级差分放大和一级同相放大。
差分放大的作用是滤除波形中掺杂的直流信号,同相放大通过电位器改变放大倍数,实现幅值增长,此过程大约使信号放大5倍可实现0.1V步进。
由于实物设计后外加一个电压跟随器,提高了信号的带负载能力,当负载100欧姆时输出电压幅度变化不大于10%。
此处采用的是低噪声双运放NE5532。
图四NE5532同向放大和差分放大图五VCA810电路图
3总体设计
矩阵键盘控制触发
DDSad9834产生正弦波,三角波和方波
MSP430F149单片机
12864液晶显示
DAC0832
VCA810幅值控制
示波器显示
双运放NE5532
差分放大,同相放大波形处理
图五结构框图
图六整体电路原理图
4.软件设计
核心程序设计包括:
波形的产生与参数设定部分、输出参数的显示部分。
波形的产生与参数设定部分需要完成:
波形类型的选择、频率档位电压输入、频率步进值和电压步进值的设定。
输出参数的显示部分需要完成:
输出信号的类型、幅度、频率显示。
程序设计由C语言实现。
N
Y
图五程序流程图
5.仿真测试
430模块:
ad9834测试模块:
DAC控制模块:
矩阵键盘模块:
6.实物制作测试
整体实物
波形效果
液晶显示
7.结论分析
基本要求
发挥要求
实现功能
具有产生正弦波、方波、三角波三种周期性波形的功能
实现,通过矩阵键盘按键选通波形。
显示部分能够显示当前波形种类、频率和幅值
实现,采用LCD12864液晶显示
输出三种波形的频率可调范围都为10Hz~10kHz,频率调节步进≤1Hz。
输出波形频率范围扩展至10Hz~100kHz
实现,且输出三种波形的最高频率都可达到3Mhz,最低达到1Hz,实现1hz步进
输出波形幅度范围-5V~+5V(峰-峰值),可按步进0.1V(峰-峰值)调整
实现,且通过改变后级信号放大倍数或者DAC参考电压可实现更小幅值步进
增加稳幅输出功能,当负载为100Ω时,输出电压幅度变化不大于10%
实现
特色与创新
采用DDS芯片输出波形更为平滑稳定,使设计扩展性更强
8.附件
DDSad9834控制程序
#include"msp430x14x.h"
#include"SystemConfig.h"
voidad9834_delay()
{
inttime;
for(time=0;time<100;time++);
}
/*****************************************************
函数名:
ad9834_initad9834初始化函数
*****************************************************/
voidad9834_init()
{
AD9834_EN|=(A0+A1+A2+A3);
AD9834=(A0+A1+A2+A3);
}
/*****************************************************
函数名:
DATA_OUT向ad9834频率寄存器1写频率数据
*****************************************************/
voidDATA_OUT(intad9834_data)
{
intdata,i;
data=ad9834_data;SCLK_H;
ad9834_delay();FSY_L;SDATA_L;SCLK_L;
ad9834_delay();SCLK_H;
ad9834_delay();SDATA_H;SCLK_L;
ad9834_delay();SCLK_H;
ad9834_delay();
for(i=2;i<16;i++)
{
if((data&0x2000)==0)
{
SDATA_L;SCLK_L;
ad9834_delay();SCLK_H;
ad9834_delay();
}
else
{
SDATA_H;SCLK_L;
ad9834_delay();SCLK_H;
ad9834_delay();
}
data<<=1;
}
FSY_H;
}
/*****************************************************
函数名:
COMD_OUT向ad9834写控制字
*****************************************************/
voidCOMD_OUT(intad9834_comd)
{
intcomd,i;
comd=ad9834_comd;SCLK_H;FSY_H;
ad9834_delay();FSY_L;
ad9834_delay();SDATA_L;SCLK_L;
ad9834_delay();SCLK_H;
ad9834_delay();SDATA_L;SCLK_L;
ad9834_delay();SCLK_H;
ad9834_delay();
for(i=2;i<16;i++)
{
if((comd&0x2000)==0)
{
SDATA_L;SCLK_L;
ad9834_delay();
SCLK_H;
ad9834_delay();
}
else
{
SDATA_H;SCLK_L;
ad9834_delay();
SCLK_H;
ad9834_delay();
}
comd<<=1;
}
FSY_H;
}
/*****************************************************
函数名:
voidAD9834_USES控制ad9834输出正弦波
*****************************************************/
voidAD9834_USES(floatad9834_dat)
{
intad9834_dat1,ad9834_dat2;
longad9834_datl;
ad9834_datl=(long)(ad9834_dat*(268435456/30000000));
ad9834_dat1=ad9834_datl&0x3fff;
ad9834_dat2=(ad9834_datl>>14)&0x3fff;
ad9834_init();
COMD_OUT(0X2100);
ad9834_delay();
COMD_OUT(0X2000);//0x2000
DATA_OUT(ad9834_dat1);
DATA_OUT(ad9834_dat2);
}
/*****************************************************
函数名:
voidAD9834_USES控制ad9834输出三角波
*****************************************************/
voidAD9834_USET(floatad9834_dat)
{
intad9834_dat1,ad9834_dat2;
longad9834_datl;
ad9834_datl=(long)(ad9834_dat*(268435456/30000000));
ad9834_dat1=ad9834_datl&0x3fff;
ad9834_dat2=(ad9834_datl>>14)&0x3fff;
ad9834_init();
COMD_OUT(0X2100);
ad9834_delay();
COMD_OUT(0X2002);
DATA_OUT(ad9834_dat1);
DATA_OUT(ad9834_dat2);
}
/**********控制AD9834输出方波**********************/
voidAD9834_USEF(floatad9834_dat)
{
intad9834_dat1,ad9834_dat2;
longad9834_datl;
ad9834_datl=(long)(ad9834_dat*(268435456/30000000));
ad9834_dat1=ad9834_datl&0x3fff;
ad9834_dat2=(ad9834_datl>>14)&0x3fff;
ad9834_init();
COMD_OUT(0X2100);
ad9834_delay();
COMD_OUT(0X2028);
DATA_OUT(ad9834_dat1);
DATA_OUT(ad9834_dat2);
}