北邮课程设计-简易信号发生器.doc
《北邮课程设计-简易信号发生器.doc》由会员分享,可在线阅读,更多相关《北邮课程设计-简易信号发生器.doc(29页珍藏版)》请在冰豆网上搜索。
word文档整理分享
课程设计
题目:
简易数字信号发生器
学院:
电子工程学院
专业:
光电信息科学与工程
班级:
一、课程设计要求
以msp430单片机为核心,通过一个DA(数字模拟)转换芯片,将单片机输出的方波、三角波、正弦波(数字信号)转换为模拟信号输出。
提供芯片:
msp430G2553/msp430f5529、DAC0832、REF102、LM384、OP07。
1.基本要求
(1)供电电压VDD=5V~12V;
(2)信号频率:
5~500Hz(可调);
(3)输出信号电压可调范围:
≥0.5*VDD,直流偏移可调:
≥0.5*VDD;
(4)完成输出信号切换;
(5)方波占空比:
平滑可调20%~80%;
(6)通带内正弦波峰峰值稳定度误差:
≤±10%(负载1K);
(7)提交设计报告。
2.发挥部分
(1)信号频率:
5~2000Hz(可调);
(2)多通道同时输出同频正弦波,方波,三角波。
(频率可调);
(3)输出频率与幅度可调的正弦波与余弦波,相位误差≤±5度;
(4)自由发挥。
二、系统硬件和软件框图
1、系统硬件框图
MSP430GDAC0832
LM358
放大模块
控制按键
DAC0832
电源模块
图1系统硬件框图
2、软件框图
主函数
按键中断函数
定时器中断函数
图2系统软件框图
各函数的作用和相互关系:
在主函数中首先对系统的时钟、I/O口、定时器进行了初始化。
初始化完毕,开启总中断。
接着进入循环等待定时器中断子程序的执行。
按键中断函数主要对三个菜单按键的动作进行处理。
这三个菜单按键可以实现波形的切换,频率的加减,信号的使能输出。
在按键中断函数中修改的信号频率大小和波形的种类这两个参数会被主函数和定时器中断函数调用。
三、硬件系统设计
1、方案论证与选择
方案一:
利用DAC0832的11号管脚做为信号输出端,8号管脚输入基准电压,将其输出的电流信号再转换为电压信号进行检测调试。
方案二:
利用DAC0832的8号管脚做为信号输出端,11号管脚输入基准电压,其输出直接为电压信号,可以直接利用示波器进行检测调试。
综上,方案二省去了电流信号转电压信号的过程,实行起来更加简便。
所以最终采用方案二。
2、硬件电路系统设计
系统主控部分采用MSP430G2452LaunchPad开发板;外围电路主要包括DAC模块、放大电路、电源及按键模块。
(1)DAC模块:
DAC模块采用的是DAC0832。
DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
其主要特性如下:
*分辨率为8位;
*电流稳定时间1us;
*可单缓冲、双缓冲或直接数字输入;
*只需在满量程下调整其线性度;
*单一电源供电(+5V~+15V);
*低功耗,20mW
其引脚功能如下:
*D0~D7:
8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
*ILE:
数据锁存允许控制信号输入线,高电平有效;
*CS:
片选信号输入线(选通数据锁存器),低电平有效;
*WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
*XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
*WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
*IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
*IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
*Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
*Vcc:
电源输入端,Vcc的范围为+5V~+15V;
*VREF:
基准电压输入线,VREF的范围为-10V~+10V;
*AGND:
模拟信号地;
*DGND:
数字信号地。
DAC电路原理图如下:
(2)放大模块:
放大电路模块只要采用的是LM358运算放大器。
LM358内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式。
其主要特性如下:
*内部频率补偿
*直流电压增益高(约100dB)
*单位增益频带宽(约1MHz)
*源电压范围宽:
单电源(3—30V);双电源(±1.5一±15V)
*低功耗电流,适合于电池供电;低输入偏流
*低输入失调电压和失调电流
*共模输入电压范围宽,包括接地
*差模输入电压范围宽,等于电源电压范围
我们采用的是单电源同相放大。
同时为了给信号加入偏置电压,采用了加法器的设计。
LM358引脚图及引脚功能如图所示。
放大电路原理图如下:
(3)电源模块:
实验中用到的电压主要有12V,5V,3.5V
①12V:
12V电压主要是给DAC0832,REF102以及LM358提供工作电压,其来源是由稳压电源直接产生的。
②5V:
5V电压主要是做为基准电压源,其产生来源是REF102与运放OP07搭建产生的。
其电路图如图所示
③3.5V:
其作用主要是给DAC0832的19管脚置于高电平。
其来源是msp430G2553的VCC管脚产生的。
3、总电路原理图
4、焊接的万能板
四、软件系统设计
1、程序主流程
如图8所示为程序主流程图:
2、程序设计
系统程序主要分为以下几个模块:
初始化程序、主程序、输出程序和中断函数。
2.1初始化程序
初始化程序主要完成的引脚的配置
voidIO_init(void)
{
P1DIR=0xf0;
P1REN|=BIT1+BIT2+BIT3;
P1IE|=0x0E;
P1IES|=0x0E;
P2DIR=0x0f;//P2的低四位作为输出
}
2.2主程序
主程序要负责总体程序管理功能以及AD使能。
intmain(void)
{
//Stopwatchdogtimertopreventtimeoutreset
WDTCTL=WDTPW+WDTHOLD;
IO_init();
DCO_init();
ADC_init();
_enable_interrupts();
Timer_A0_init();
while
(1)
{
ADC10CTL0|=ENC+ADC10SC;
}
//return0;
}
2.3按键中断程序
主要完成按键的读取,以及相应的输出量赋值。
#pragmavector=PORT1_VECTOR
__interruptvoidPORT1_ISR(void)
{
//-----启用Port1事件检测函数-----
P1_IODect(); //检测通过,则会调用事件处理函数
P1IFG=0; //退出中断前必须手动清除IO口中断标志
}
voidP1_IODect(void)
{
unsignedintPush_Key=0;
//-----排除输出IO的干扰后,锁定唯一被触发的中断标志位-----
Push_Key=P1IFG&(~P1DIR);
//-----延时一段时间,避开机械抖动区域-----
__delay_cycles(10000); //消抖延时
//----判断按键状态是否与延时前一致-----
if((P1IN&Push_Key)==0) //如果该次按键确实有效
{
//----判断具体哪个IO被按下,调用该IO的事件处理函数-----
switch(Push_Key){
// caseBIT0:
P10_Onclick(); break;
caseBIT1:
{
WaveSelect+=5;
tt=1;
switch(WaveSelect)
{
case5:
break;
case10:
break;
case15:
break;
//case20:
break;
default:
WaveSelect=5;break;
}
}; break;
caseBIT2:
{
if(tt==1)
{
num=num+1;
Tccr0=keynum[num];
}
if(num==100)num=1;
} break;
caseBIT3:
{
if(tt==1)
{
num=num-1;
Tccr0=keynum[num];
}
if(num==0)num=99;
}
break;
default:
break; //任何情况下均加上default
}
}
}
2.4输出程序
使用TimerA0计数器进行输出使能
#pragmavector=TIMER0_A0_VECTOR
__interruptvoidTimer_A0(void)//CCIFG中断被响应后,该标志位自动清零
{
if(WaveSelect==5)
{
if(j<200)
{
write_dac(sindata[j]);//正弦波产生
//j++;
j+=4;
}
else
j=0;
TA0CCR0=Tccr0;
}