武汉理工大学第四届电工电子创新设计大赛设计报告

  • 格式:doc
  • 大小:1.56 MB
  • 文档页数:14

题号: A武汉理工大学第四届电工电子创新设计大赛设计报告题目:波形发生器参赛者:xx学院班级:信息工程学院电信1006班联系方式:评分标准:项目满分得分基本要求总分摘要本系统以430系列单片机msp430f149为核心设计,采用四个部分构成,其一使用DDS芯片ad9834产生正弦波、方波、三角波三种周期性波形;其二通过电压增益放大器VCA810控制幅值步进;其三通过后级运放电路实现幅值稳定放大控制;其四通过液晶LCD12864实现数据的显示。

输出波形频率范围1Hz~3000kHz,频率调节步进为1Hz,幅度范围-5V~+5V(峰-峰值),可按步进0.1V(峰-峰值)调整。

显示部分能够显示当前波形种类、频率和幅值。

当负载为100Ω时,输出电压幅度变化不大于10%。

本系统设计是仿真设计和实物制作,DDS最高可实现频率3M hz的波形输出。

关键词: 430单片机;波形;DDS;压控;DAC;频率;幅值1.方案选择与论证方案一:采用STC89C51单片机通过软件控制多种波形的生成和输出,软件部分通过定时器控制两个内部中断,外加一个外部触发中断,此处使用按键触发。

其中一个内部中断用来对波形数据存储数组进行循环读取。

当设定进入一次中断时间一定时,减小波形数据数组可以增大输出波形频率,当波形数组数据数量恒定时,减小每次进入中断的时间也可以增大输出的频率;对于幅值的控制可通过波形的一个算法公式控制。

另外一个内部中断用来对输出波形频率进行计算检测。

按键触发的外部中断用以对输出波形的类型,频率增减,幅值增减进行触发选择。

此系统设计的硬件部分为8为的DAC0832,对每一次波形数据数组的读取进行DA转换。

在软件调试过程中,还要注意到对于时钟定时器优先级进行调整,设定PX0 = 1,提高T1的优先级,否则两个定时器同时工作时,当T0进入中断过快时,对显示部分会照成很大影响。

但是该方案虽然能多种波形的输出,但对于51单片机输出波形的最高频率只有1K 赫兹,远不能满足设计要求,所以放弃该方案。

方案二:采用msp430f149的定时器功能实现纯软件的波形发生器的制作。

使其内部定时器的时钟控制在1us一次中断。

选择此方案时选择的是定时器B的时钟中断,每进入一次中断对正弦波等波形幅值数组进行读取,并赋予外DAC0832进行信号输出。

但在实际操作过程中因为定时器B的中断设置需要占据一定的时间,使得对于一个周期的信号输出比理论的周期值要大,从而使得频率达不到100K,使用8M晶振实际最高输出只有20K,且波形不平滑,所以放弃该方案。

方案三:用msp430单片机控制DDS ad9834数字芯片产生高稳定度,宽频段的正弦波,三角波以及方波信号,并可通过矩阵键盘实现1hz频率步进,最高频率可达到3M赫兹。

再又通过压控增益放大器配合运算放大电路控制信号的幅值输出和步进。

该方案输出的三种波形平滑稳定。

显示部分采用LCD12864液晶,较之lcd1602能够显示中文汉字。

该方案能满足设计要求和部分扩展要求,所以本次设计包括实物制作,采用该方案。

2.系统设计2.1核心控制模块采用MSP430 单片机作为信号发生器的核心控制单元。

MSP430具有处理能力强、运算速度快、超低功耗、片内资源丰富等优点。

这些优点保证了信号发生器能够快速、准确地实现其控制功能。

2.2波形的生成本系统使用msp430f149单片机控制直接数字式频率合成器DDS ad9834产生10Hz~3MHz频率可调的正弦波,三角波和方波信号。

参照ad9834的PDF资料进行硬件搭建,ad9834有两个寄存器,每个有16位。

通过软件程序对ad9834写入正弦波,三角波,方波控制字,分别为正弦波0x2100,0x2000;三角波0x2100,0x2002;方波为0x2100,0x2028;从引脚19或20脚输出正弦波或三角波,16脚出方波。

幅值约为680mv.图一MCU DDS 原理图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产生正弦波,三角波和方波12864液晶显示矩阵键盘控制触发MSP430F149单片机VCA810幅值控制双运放 NE5532差分放大,同相放大波形处理示波器显示DAC0832图六整体电路原理图4.软件设计核心程序设计包括:波形的产生与参数设定部分、输出参数的显示部分。

波形的产生与参数设定部分需要完成:波形类型的选择、频率档位电压输入、频率步进值和电压步进值的设定。

输出参数的显示部分需要完成:输出信号的类型、幅度、频率显示。

程序设计由C 语言实现。

NY图五 程序流程图开始 有键按下?进行键盘扫描 关开门狗,初始化LCD ,DDS ,矩阵键盘 Key 为1,2,3分别对应正弦波,三角波和方波选通,并用液晶显示读取键值,根据键值进行操作key 为4,5,6,7分别对应频率增步进,减步进,电压幅度增步进,减步进。

并用液晶显示DA 控制输出电压增减MCU 向ad9834 寄存器写入对应波形控制字和频率数据ad9834输出波形MCU 向ad9834 寄存器写入对应波形控制字和频率数据5.仿真测试430模块:ad9834测试模块:DAC控制模块:矩阵键盘模块:6.实物制作测试整体实物波形效果液晶显示7.结论分析基本要求发挥要求实现功能具有产生正弦波、方波、三角波三种周期性波形的功能实现,通过矩阵键盘按键选通波形。

显示部分能够显示当前波形种类、频率和幅值实现,采用LCD12864液晶显示输出三种波形的频率可调范围都为10Hz~10kHz,频率调节步进≤1Hz。

输出波形频率范围扩展至10Hz~100kHz实现,且输出三种波形的最高频率都可达到3Mhz,最低达到1Hz,实现1hz步进输出波形幅度范围-5V~+5V(峰-峰值),可按步进0.1V(峰-峰值)调整实现,且通过改变后级信号放大倍数或者DAC参考电压可实现更小幅值步进增加稳幅输出功能,当负载为100Ω时,输出电压幅度变化不大于10%实现特色与创新采用DDS芯片输出波形更为平滑稳定,使设计扩展性更强8.附件DDS ad9834控制程序#include "msp430x14x.h"#include "SystemConfig.h"void ad9834_delay(){int time;for(time=0;time<100;time++);}/***************************************************** 函数名:ad9834_init ad9834初始化函数*****************************************************/ void ad9834_init(){AD9834_EN|=(A0+A1+A2+A3);AD9834 =(A0+A1+A2+A3);}/***************************************************** 函数名:DATA_OUT 向ad9834频率寄存器1写频率数据*****************************************************/ void DATA_OUT(int ad9834_data){int data,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写控制字*****************************************************/ void COMD_OUT(int ad9834_comd){int comd,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;}/***************************************************** 函数名:void AD9834_USES 控制ad9834输出正弦波*****************************************************/ void AD9834_USES(float ad9834_dat){int ad9834_dat1,ad9834_dat2;long ad9834_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); //0x2000DATA_OUT(ad9834_dat1);DATA_OUT(ad9834_dat2);}/***************************************************** 函数名:void AD9834_USES 控制ad9834输出三角波*****************************************************/ void AD9834_USET(float ad9834_dat){int ad9834_dat1,ad9834_dat2;long ad9834_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输出方波**********************/ void AD9834_USEF(float ad9834_dat){int ad9834_dat1,ad9834_dat2;long ad9834_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);}。