北京邮电大学课设基于某MSP430地简单信号发生器地设计.docx
- 文档编号:10969402
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:35
- 大小:986.18KB
北京邮电大学课设基于某MSP430地简单信号发生器地设计.docx
《北京邮电大学课设基于某MSP430地简单信号发生器地设计.docx》由会员分享,可在线阅读,更多相关《北京邮电大学课设基于某MSP430地简单信号发生器地设计.docx(35页珍藏版)》请在冰豆网上搜索。
北京邮电大学课设基于某MSP430地简单信号发生器地设计
基于MSP430的信号发生器
设计报告
学院:
电子工程学院
班级:
2013211212
组员:
唐卓浩(2012211069)
王旭东(2013211134)
李务雨(2013211138)
指导老师:
尹露
一、摘要
信号发生器是电子实验室的基本设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全、性能指标较高,但是价格较贵,且许多功能用不上。
本设计介绍一款基于MSP430G2553
单片机的信号发生器。
该信号发生器虽然功能及性能指标赶不上标准信号发生器,但能满足一般的实验要求,且结构简单,成本较低。
本次需要完成的任务是以MSP430LaunchPad的单片机为控制核心、DAC模块作为转换与按键电路作为输入构成的一种电子产品。
MSP430LaunchPad单片机为控制核心,能实时的进行控制;按键输入调整输出状态,DAC0832将单片机输出的数字信号转化为模拟量,经运放放大后,在示波器上输出。
在本次程序设计中充分利用了单片机内部资源,涉及到了中断系统、函数调用等。
关键字:
信号发生器MSP430单片机数模转换
二、设计要求
以msp430单片机为核心,通过一个DA(数字模拟)转换芯片,将单片机输出的方波、三角波、正弦波(数字信号)转换为模拟信号输出。
提供芯片:
msp430G2553、DAC0832、REF102、LM384、OP07。
参考框图如下:
图1硬件功能框图
1、基本要求
(1)供电电压VDD=5V~12V;(√)
(2)信号频率:
5~500Hz(可调);(√)
(3)输出信号电压可调范围:
≥0.5*VDD,直流偏移可调:
≥0.5*VDD;(√)
(4)完成输出信号切换;(√)
(5)方波占空比:
平滑可调20%~80%;(√)
(6)通带内正弦波峰峰值稳定度误差:
≤±10%(负载1K)。
(√)
2、发挥部分
(1)信号频率:
5~2000Hz(可调);(√)
(2)多通道同时输出同频正弦波,方波,三角波。
(频率可调);
(3)输出频率与幅度可调的正弦波与余弦波,相位误差≤±5度;
(4)自由发挥。
三、实验器材
MSP430G2553单片机(TexasInstrument);DAC0832模数转换芯片;REF102高精度电压基准;OP07运算放大器;阻值不同的电阻及电位器若干;电容若干;导线若干。
1、MSP430G2553单片机
TI的MSP430G2系列Launchpad开发板是一款适用于TI最新MSP430G2xx系列产品的完整开发解决方案。
其基于USB的集成型仿真器可提供为全系列MSP430G2xx器件开发应用所必需的所有软、硬件。
LaunchPad具有集成的DIP插座,可支持多达20个引脚,从而使MSP430ValueLine器件能够简便地插入LaunchPad电路板中。
此外,其还可提供板上Flash仿真工具,以直接连接至PC轻松进行编程、调试和评估。
此外,它还提供了从MSP430G2xx器件到主机PC或相连目标板的9600波特率的UART串行连接。
MSP430G2系列Launchpad开发板的特性:
(1)USB调试与编程接口无需驱动即可安装使用,且具备高达9600波特的UART串行通信速度;
(2)支持所有采用PDIP14或PDIP20封装的MSP430G2xx和MSP430F20xx器件;
(3)两个按钮可实现用户反馈和芯片复位;
(4)器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板。
(5)由此易知,MSP430单片机将用于系统的控制部分。
2、DAC0832模数转换芯片
DAC模块主要由DAC0832和OPA227PA运算放大器组成。
DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
其主要参数如下:
(1)分辨率为8位;
(2)电流稳定时间1us;
(3)可单缓冲、双缓冲或直接数字输入;
(4)只需在满量程下调整其线性度;
(5)单一电源供电(+5V~+15V);
(6)低功耗,20mW
其引脚功能如下:
(1)D0~D7:
8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
(2)ILE:
数据锁存允许控制信号输入线,高电平有效;
(3)CS:
片选信号输入线(选通数据锁存器),低电平有效;
(4)WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变化换,LE1的负跳变时将输入数据锁存;
(5)XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
(6)WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
(7)IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
(8)IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
(9)Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
(10)Vcc:
电源输入端,Vcc的范围为+5V~+15V;
(11)VREF:
基准电压输入线,VREF的范围为-10V~+10V;
(12)AGND:
模拟信号地;
(13)DGND:
数字信号地
3、REF102高精度电压基准
REF102是高精度10V电压基准集成电路。
由于REF102无需外加恒温装置,因而功耗低、升温快、稳定性好、噪声低。
REF102的输出电压几乎不随供电电源电压及负载变化。
通过调整外接电阻,输出电压的稳定性及温度漂移可降至最校11.4V至36V的单电源供电电压及优异的全面性能使REF102成为仪器、A/D、D/A及高精度直流电源应用的理想选择。
REF102的特点:
(1)高精度输出:
+10V0.0025V
(2)超低温度漂移:
≤2.5ppm/℃
(3)高稳定性:
5ppm/1000小时(典型值)
(4)高负载调整率:
≤1ppm/V,≤10ppm/mA
(5)宽供电电压范围:
11.4VDC至36VDC
(6)低噪声
(7)低静态电流:
≤1.4Ma
REF102的引脚:
(2)为芯片电源脚,电压范围是11.4V~36V;(4)为公共引脚;(5)为外接调整电阻脚,调整输出电压稳定度及温度漂移;(6)为输出引脚;(8)为输出噪声衰减。
4、OP07运算放大器
OP07芯片是一种低噪声,非斩波稳零的双极性运算放大器集成电路。
由于OP07具有非常低的输入失调电压(对于OP07A最大为25μV),所以OP07在很多应用场合不需要额外的调零措施。
OP07同时具有输入偏置电流低(OP07A为±2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。
OP07芯片引脚功能说明:
1和8为偏置平衡(调零端),2为反向输入端,3为正向输入端,4接地,5空脚6为输出,7接电源。
四、硬件电路设计
1、整体设计思路
方案一:
控制部分由MSP430G2553实现,波形产生采用单片压控函数发生器(MAX038等),可同时产生频率可控可变的正弦波、三角波、方波。
优缺点:
简单易行,采用专用芯片,系统体积大大减小;但频率步进的步长很难控制,并且整个设计中MSP430G2553仅完成简单的控制功能,资源没有充分利用。
方案二:
由MSP430G2553实现对专门的DDS芯片(如AD9850)的控制,产生各种波形。
优缺点:
此方案产生波形的频率稳定度高,易于程控。
但DDS芯片价格高,系统成本高。
方案三:
由MSP430G2553结合DAC0832实现各种波形的产生。
优缺点:
此方案可以充分利用MSP430G2553上的资源,降低系统成本,但是产生波形频率较低。
综上,方案三充分利用MSP430G2553的资源,外围电路简单、系统成本较低,可以满足信号发生器的要求,所以最终采用方案三。
2、硬件控制模块
这次试验共有三个按键输入,分别作为切换波形,加频,减频。
一个滑动变阻器作为占空比的调节,一个作为幅度的调节,一个作为直流偏置的调节。
按键直接采用分压法给一个高电位,当按下去的时候相当于接地也就输出了低电平。
占空比的调节在于分压法,让滑动变阻器所占电压在0~2.5伏,从而输给芯片产生相应的占空比,再输出。
3、DAC0832的模块
其八位数据输入接MSP430的八位数据输出,通过Iout1端口输出。
使能端与430相连,电源接12V。
Iout2接地,f不接。
4、放大模块
采用了反向放大电路,电源输入电压是12伏,放大了5倍左右。
同时在放大电路前并联一个滑动变阻器100K,通过它来调节整个DAC对应的输出负载电阻,也就可以达到改变电压的幅度的目的。
效果如下(由于该方波是2KHz的方波,频率较高因此边沿看上去不垂直):
5、直流偏置
采用反向加法电路通过改变直流的接入电阻调节直流电压的大小。
图如下,u1为放大之后的输入,u2为-12伏的电压。
R1,3,6都是5K的电阻,R2位100k的电位器。
则Uout1=12*5/R2-U1,这就达到了直流偏置的效果。
效果见下图:
五、
软件程序设计
1、设计指标与功能
(1)波形产生和切换。
正弦波、三角波和方波依次切换,采样点均为100个。
(2)频率调节。
从5Hz到2000Hz可调,步进5Hz,一共400个有效频率点。
(3)占空比调节。
从20%到83%平滑可调,使用ADC10连续采集滑动变阻输出电压实现。
2、软件模块介绍
(1)变量及宏定义
#defineSWITCH_SIG_TYPE(BIT0)//P1.0
#defineADD_FREQ(BIT1)//P1.1
#defineSUB_FREQ(BIT2)//P1.2
#defineDAC_WR(BIT3)//P1.3
#defineADC10_IN_PORT(BIT4)//P1.4
#defineP1_IN_PORTS~(SWITCH_SIG_TYPE+ADD_FREQ+SUB_FREQ+ADC10_IN_PORT)
#defineP1_OUT_PORTSDAC_WR//3:
DACWR
#defineP1_INTERRUPT(SWITCH_SIG_TYPE+ADD_FREQ+SUB_FREQ)
#defineP2_OUT_PORTS(0xff)//DACdatain
#defineTOTAL_SAMPLING_POINTS100
#defineMAX_FREQ_STEPS400
#defineENABLE_WR_PORTP1OUT&=~DAC_WR//WR->0
#defineDISABLE_WR_PORTP1OUT|=DAC_WR//WR->1
#definewrite_dac(data)P2OUT=data//writetoDAC
uintcurr_signal_type;//当前的波形,0表示正弦波,1是三角波,2是方波
inttccr0_now;//表示当前的计数初值
uintccr0_idx;//表示当前计数初值在表中的索引号
ucharpoint_now;//表示现在采用点的索引值
intduty_circle;//表示当前的方波高电平的点数,用于表示占空比。
constlongtccr0_table[MAX_FREQ_STEPS]={32000,...,78,75};
//5-2000Hz每隔5Hz频率对应的计数器初值表,一个400个频点。
constucharsin_data[TOTAL_SAMPLING_POINTS]={...};
//正弦值表,100点。
constuchartria_data[TOTAL_SAMPLING_POINTS]={...};
//三角波值表,100点。
(2)
基本时钟系统
MSP430x2xx家族的单片机的基本时钟系统模块如下图所示:
MSP430有四个时钟源:
LFXT1CLK、XT2CLK、DCOCLK和VLOVLK,系统时钟使用BCSCTL1寄存器设置。
下面的初始化代码将系统的时钟时钟源设置为16MHz,DCO的频率设置为16MHz。
voidinit_DCO(){
BCSCTL1=CALBC1_16MHZ;
DCOCTL=CALDCO_16MHZ;
}
上述的每一个时钟源都可以驱动时钟信号电路产生周期时钟信号,一共有三种独立的时钟信号,分别是MCLK、SMCLK和ACLK,其时钟源可以任意指定。
这些时钟由寄存器BCSCTL2设置。
BCSCTL2=SELM_1+DIVM_0;
//SELMx位置SELM_1,选择MCLK的时钟源为DCOCLK,DIVM_0分频比为1
BCSCTL2&=~SELS;
//SELS位为0表示将SMCLK的时钟源设置为DCOCLK
(3)定时器A
定时器A是一个16位的计时器,有三种计数模式,可配置任意时钟源驱动,多种capture/compares模式和寄存器。
定时器A的工作模式如下表所示
MCx
模式
工作方式
00
Stop
停止计时
01
Upmode
从0到TACCR0循环计数
10
Continousmode
从0到0FFFFH循环计数
11
Up/downmode
从0计时到TACCR0再回到0循环
定时器的计数模式和时钟源的选择由寄存器TACTL设置。
定时器的中断的产生主要依赖capture/compare寄存器的设置。
MSP430x2xx家族一共有三套独立的capture/compare寄存器,可以独立产生中断。
本程序使用的是连续计数模式,计数和中断产生方式如下图所示。
本程序只是用了capture/compare寄存器TACCR0和TACTL0产生中断。
voidinit_timer_A0(void){
TACTL|=TASSEL_2+MC_2;
//TASSELx置TASSEL_2选择SMCLK作为时钟源,
//MC_2设置技术模式为连续模式
TACCR0=tccr0_now;//设置捕获/比较寄存器0的初值
TACCTL0|=CCIE;//捕获/比较寄存器0的中断使能
}
(4)单片机ADC10
MSP430的ADC是一个十位的模数转换模块,转换出的数字范围为0~1023。
转换值的计算公式为:
ADC10一共有两大类工作方式,第一种是直接转换方式,该模式主要的特点是转换后的数据直接存放在ADC10MEM寄存器中。
第二种是数据传输方式,主要特点是会将数据自动存放在内存中用户定义好数组中。
在直接转换方式中又有四种模式:
CONSEGx
模式
工作方式
00
单通道单次转换
一个通道输入,只转换一次,下一次转换的触发需要用户手动设置。
01
多通道顺序转换
多通道输入,每个通道依次转换一次,下一次转换的触发需要用户手动设置。
10
单通道循环转换
一个通道输入,下一次转换的触发自动触发。
11
多通道顺序循环
多个通道输入,每个通道依次转换,下一次转换自动触发。
ADC10的中断可选择在数据在ADC10MEM里准备好后触发。
本程序使用的是单通道单次转换,并且不设置ADC10中断,而是在主函数的while
(1)循环中手动处理采集数据的时序。
之所以不采用中断模式是因为在MSP430中默认不能中断嵌套,当ADC10中断进入时,定时器中断就无法进入,从而影响定时器的精度,另外如果开启中断嵌套,那么中断处理将会更复杂,因此权衡考虑后选择该工作方式。
这种方式下ADC10在主程序中执行转换和处理,而定时器中断可以按时进入,保证了定时器的精度。
转换的流程如下图所示:
ADC10的参考电平可以有多种选择,如下所示:
本程序选择的是第二种参考电平设置。
其中VREF+是ADC10内置的参考电平,将ADC10CTL0寄存器的REF2_5V位置1,表示该电平为2.5V。
Vss是MSP430的20号引脚,将其接地,表示最低参考电平为0。
因此转换值的计算公式为NADC=1023*Vin/2.5。
初始化函数如下:
voidinit_ADC10(void){
ADC10CTL1|=INCH_4;
//A4通道,P1.4输入模拟值。
ADC10CTL1|=SHS_0;
//Sample-and-holdsourceselectADC10SC
ADC10CTL1|=ADC10SSEL_3;//时钟源为SMCLK
ADC10CTL1&=~ADC10DF;
//数据存储格式,表示使用ADC10MEM的低十位存储数据
ADC10CTL1|=CONSEQ_0;//单通道单转换模式
ADC10AE0=ADC10_IN_PORT;//P1.4输入模拟值
ADC10CTL0&=~ADC10IE;//屏蔽中断
ADC10CTL0|=SREF_1+ADC10SHT_0+REF2_5V+REFON;
//VR+=2.5V,VR-=Vss=0
//REFON开启内部参考电平
ADC10CTL0&=~REFOUT;
//REFOUT位置1会将参考电压输出到P1.3和P1.4上,不需要因此置0.
ADC10CTL0|=ADC10ON;//打开ADC10
}
主程序循环如下,采集数据到占空比的转换算法为右移4位再加20:
while
(1){
ADC10CTL0&=~ENC;//关闭采样使能
while(ADC10CTL1&ADC10BUSY);//检测是否忙
ADC10CTL0|=ENC+ADC10SC;//打开采样使能,开始转换
while(ADC10CTL1&ADC10BUSY);//检测是否忙
intadc_data=ADC10MEM;//读取数据
duty_circle=(adc_data>>4)+20;
//占空比限制在20(20%)~83(83%)之间
//采集到的数据是0~1023
//右移四位就是0~63
//加20就是20~83
//总采样点数是100点
//占空比就是20/100=20%~83/100=83%之间
}
(5)端口I/O与中断
MSP430有P1、P2一共十六个通用IO口。
其功能分配如下
端口
功能
I/O方向
P2.0–P2.7
输出8位数据到DAC
输出
P1.0
按键中断,切换波形
输入
P1.1
按键中断,增加频率
输入
P1.2
按键中断,减小频率
输入
P1.3
DAC的WR信号
输出
P1.4
ADC10的模拟输入口
输入
主要初始化端口方向、功能以及中断,程序如下:
voidinit_port_io(void){
P2DIR=P2_OUT_PORTS;//设置输出端口P2.0~P2.7
P2REN=0x00;//不使用上/下拉电阻
P2SEL=0x00;//端口的功能为IO
P2SEL2=0x00;//端口的功能为IO
P1DIR&=P1_IN_PORTS;//P1.0P1.1p1.2p1.4输入
P1DIR|=P1_OUT_PORTS;//P1.3输出给DACWR
P1REN=0x00;
P1SEL=0x00;
P1SEL2=0x00;
}
voidinit_port_interrupt(void){
P1IES|=P1_INTERRUPT;//相应位置1表示下降沿触发
P1IE|=P1_INTERRUPT;//输入位中断使能
P1IFG&=~P1_INTERRUPT;//清除标志位
}
五、功能实现
1、波形输出及切换
波形的输出主要靠定时器周期性触发中断,然后将波形值数组中的值依次循环写到P2上。
流程图如下:
波形切换靠按键中断以及改变波形类型标志变量curr_signal_type实现,流程图如下:
获得如下结果:
2、频率调节
波形的频率调节通过改变计时器初值TACCR0来实现,所需的频率计算公式为
波频率=CPU时钟频率/(采样点数*定时器初值)
流程图如下:
为了能够使得频率可达到2000Hz,需要适当减小采样点数。
在没有实现最大2000Hz时,采样电视为200点,将点数减少到100点,并适当减小DAC的WR信号的宽度,以达到在更高速的情况下能够将数据写入DAC。
结果如下。
产生5Hz的正弦波:
产生2.145KHz的正弦波
3、占空比调节
占空比的调节主要靠ADC10采集电位器输入电压并按照一定的算法算出高电平持续的点数duty_circle来表示占空比。
采集转换的流程图如下
相应的产生方波的逻辑为:
20%占空比:
80%占空比:
六、问题及解决方案
1、三角波和方波没有波形
最开始三角波的每一个采样点的值是由程序计算出来的,程序如下所示:
case1:
//triangle
if(point_now P1OUT=(uchar)(point_now); }else{ P1OUT=(uchar)(TOTAL_SAMPLING_POINTS-point_now-1); } break; case2: //box if(point_now P1OUT=(uchar) (1); }else{ P1OUT=(uchar)(0); } break; 观察到的方波和三角波的频率非常低,几乎无法形成波形,可能的原因是是由于在中断服务程序里进行计算以及类型转换比较耗时,将三角波的采样点值写入一个数组即可解决问题。 2、方波波形输出效果欠佳 示波器在AC档时方波不水平,将示波器的调到DC档即解决问题。 3、波形有大量白噪声 LM384放大器的热噪声严重,换用OP07后得以解决。 4、三角波和正弦波输出波形不够美观 未能解决。 首先排除了程序采样点误差的可能性。 其次可能是因为REF102的电压不稳,REF102的接法采样电流转电压的方案,而这种方案可能有一定的缺陷,但是并未证实。 最后可能是DAC本身的输出不够稳定,在最后几天焊板子之前并没有换DAC来证实这一猜想,因此也无法确实是否是DAC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京邮电 大学 基于 MSP430 简单 信号发生器 设计