北京邮电大学课设基于MSP430的简单信号发生器的设计 本文关键词:北京,邮电大学,信号发生器,简单,设计
北京邮电大学课设基于MSP430的简单信号发生器的设计 本文简介:基于MSP430的信号发生器设计报告学院:电子工程学院班级:2013211212组员:唐卓浩(2012211069)王旭东(2013211134)李务雨(2013211138)指导老师:尹露课程设计报告——基于MSP430的信号发生器的设计学院:电子工程学院班级:2013211212小组成员:唐卓浩
北京邮电大学课设基于MSP430的简单信号发生器的设计 本文内容:
基于MSP430的信号发生器
设计报告
学院:电子工程学院
班级:2013211212
组员:唐卓浩(2012211069)
王旭东(2013211134)
李务雨(2013211138)
指导老师:尹露
课程设计报告——基于MSP430的信号发生器的设计
学院:电子工程学院班级
:2013211212
小组成员:
唐卓浩(2012211069)
王旭东(2013211134)李务雨(2013211138)
一、摘要
信号发生器是电子实验室的基本设备之一,目前各类学校广泛使用的是标准产品,虽然功能齐全、性能指标较高,但是价格较贵,且许多功能用不上。本设计介绍一款基于MSP430G2553
单片机的信号发生器。该信号发生器虽然功能及性能指标赶不上标准信号发生器,但能满足一般的实验要求,且结构简单,成本较低。本次需要完成的任务是以MSP430
LaunchPad的单片机为控制核心、DAC模块作为转换与按键电路作为输入构成的一种电子产品。MSP430
LaunchPad单片机为控制核心,能实时的进行控制;按键输入调整输出状态,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单片机(Texas
Instrument);DAC0832模数转换芯片;REF102高精度电压基准;OP07运算放大器;阻值不同的电阻及电位器若干;电容若干;导线若干。
1、
MSP430G2553单片机
TI的MSP430G2系列Launchpad开发板是一款适用于TI最新MSP430G2xx系列产品的完整开发解决方案。其基于USB
的集成型仿真器可提供为全系列MSP430G2xx器件开发应用所必需的所有软、硬件。LaunchPad具有集成的DIP插座,可支持多达20个引脚,从而使MSP430
Value
Line器件能够简便地插入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)高精度输出:+10V
0.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)
变量及宏定义
#define
SWITCH_SIG_TYPE(BIT0)
//P1.0
#define
ADD_FREQ(BIT1)
//P1.1
#define
SUB_FREQ(BIT2)
//P1.2
#define
DAC_WR(BIT3)
//P1.3
#define
ADC10_IN_PORT(BIT4)
//P1.4
#define
P1_IN_PORTS
~(SWITCH_SIG_TYPE
+
ADD_FREQ
+
SUB_FREQ
+
ADC10_IN_PORT)
#define
P1_OUT_PORTSDAC_WR
//
3:DAC
WR
#define
P1_INTERRUPT
(SWITCH_SIG_TYPE
+
ADD_FREQ
+
SUB_FREQ)
#define
P2_OUT_PORTS
(0xff)
//
DAC
data
in
#define
TOTAL_SAMPLING_POINTS100
#define
MAX_FREQ_STEPS400
#define
ENABLE_WR_PORTP1OUT
//当前的波形,0表示正弦波,1是三角波,2是方波
inttccr0_now;
//表示当前的计数初值
uintccr0_idx;
//表示当前计数初值在表中的索引号
ucharpoint_now;
//表示现在采用点的索引值
intduty_circle;
//表示当前的方波高电平的点数,用于表示占空比。
const
long
tccr0_table[MAX_FREQ_STEPS]={32000,.,78,75
};
//5-2000Hz每隔5Hz频率对应的计数器初值表,一个400个频点。
const
uchar
sin_data[TOTAL_SAMPLING_POINTS]={.};
//正弦值表,100点。
const
uchar
tria_data[TOTAL_SAMPLING_POINTS]={.};
//三角波值表,100点。
(2)
基本时钟系统
MSP430x2xx家族的单片机的基本时钟系统模块如下图所示:
MSP430有四个时钟源:LFXT1CLK、XT2CLK、DCOCLK和VLOVLK,系统时钟使用BCSCTL1寄存器设置。下面的初始化代码将系统的时钟时钟源设置为16MHz,DCO的频率设置为16MHz。
void
init_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位为0表示将SMCLK的时钟源设置为DCOCLK
(3)
定时器A
定时器A是一个16位的计时器,有三种计数模式,可配置任意时钟源驱动,多种capture/compares模式和寄存器。
定时器A的工作模式如下表所示
MCx
模式
工作方式
00
Stop
停止计时
01
Up
mode
从0到TACCR0循环计数
10
Continous
mode
从0到0FFFFH循环计数
11
Up/down
mode
从0计时到TACCR0再回到0循环
定时器的计数模式和时钟源的选择由寄存器TACTL设置。
定时器的中断的产生主要依赖capture/compare寄存器的设置。MSP430x2xx家族一共有三套独立的capture/compare寄存器,可以独立产生中断。
本程序使用的是连续计数模式,计数和中断产生方式如下图所示。本程序只是用了capture/compare寄存器TACCR0和TACTL0产生中断。
void
init_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。
初始化函数如下:
void
init_ADC10(void){
ADC10CTL1
|=
INCH_4;
//
A4通道,P1.4输入模拟值。
ADC10CTL1
|=
SHS_0;
//
Sample-and-hold
source
select
ADC10SC
ADC10CTL1
|=
ADC10SSEL_3;//
时钟源为SMCLK
ADC10CTL1
//
数据存储格式,表示使用ADC10MEM的低十位存储数据
ADC10CTL1
|=
CONSEQ_0;//
单通道单转换模式
ADC10AE0
=
ADC10_IN_PORT;//P1.4输入模拟值
ADC10CTL0
//
屏蔽中断
ADC10CTL0
|=
SREF_1
+
ADC10SHT_0
+
REF2_5V
+
REFON;
//
VR+
=
2.5V,VR-
=
Vss
=
0
//REFON开启内部参考电平
ADC10CTL0
//
REFOUT位置1会将参考电压输出到P1.3和P1.4上,不需要因此置0.
ADC10CTL0
|=
ADC10ON;//打开ADC10
}
主程序循环如下,采集数据到占空比的转换算法为右移4位再加20:
while(1){
ADC10CTL0
//关闭采样使能
while(ADC10CTL1
//检测是否忙
ADC10CTL0
|=
ENC
+
ADC10SC;//打开采样使能,开始转换
while(ADC10CTL1
//检测是否忙
int
adc_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的模拟输入口
输入
主要初始化端口方向、功能以及中断,程序如下:
void
init_port_io(void){
P2DIR=
P2_OUT_PORTS;//
设置输出端口P2.0~P2.7
P2REN=0x00;//
不使用上/下拉电阻
P2SEL=0x00;//
端口的功能为IO
P2SEL2=0x00;//
端口的功能为IO
P1DIR//
P1.0
P1.1
p1.2
p1.4输入
P1DIR|=
P1_OUT_PORTS;//
P1.3输出给DAC
WR
P1REN=0x00;
P1SEL=0x00;
P1SEL2=0x00;
}
void
init_port_interrupt(void){
P1IES|=
P1_INTERRUPT;//相应位置1表示下降沿触发
P1IE|=
P1_INTERRUPT;//输入位中断使能
P1IFG//清除标志位
}
五、功能实现
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、
三角波和方波没有波形
最开始三角波的每一个采样点的值是由程序计算出来的,程序如下所示:
case
1:
//triangle
if
(point_now
#define
SWITCH_SIG_TYPE(BIT0)
//P1.0
#define
ADD_FREQ(BIT1)
//P1.1
#define
SUB_FREQ(BIT2)
//P1.2
#define
DAC_WR(BIT3)
//P1.3
#define
ADC10_IN_PORT(BIT4)
//P1.4
#define
P1_IN_PORTS
~(SWITCH_SIG_TYPE
+
ADD_FREQ
+
SUB_FREQ
+
ADC10_IN_PORT)
#define
P1_OUT_PORTSDAC_WR
//
3:DAC
WR
#define
P1_INTERRUPT
(SWITCH_SIG_TYPE
+
ADD_FREQ
+
SUB_FREQ)
#define
P2_OUT_PORTS
(0xff)
//
DAC
data
in
#define
TOTAL_SAMPLING_POINTS100
#define
MAX_FREQ_STEPS400
#define
ENABLE_WR_PORTP1OUT
inttccr0_now;
uintccr0_idx;
ucharpoint_now;
intpush_key;
intduty_circle;
const
long
tccr0_table[MAX_FREQ_STEPS]={
32000,16000,10666,8000,6400,5333,4571,4000,3555,3200,2909,2666,2461,2285,2133,2000,1882,1777,1684,1600,1523,1454,1391,1333,1280,1230,1185,1142,1103,1066,1032,1000,969,941,914,888,864,842,820,800,780,761,744,727,711,695,680,666,653,640,627,615,603,592,581,571,561,551,542,533,524,516,507,500,492,484,477,470,463,457,450,444,438,432,426,421,415,410,405,400,395,390,385,380,376,372,367,363,359,355,351,347,344,340,336,333,329,326,323,320,316,313,310,307,304,301,299,296,293,290,288,285,283,280,278,275,273,271,268,266,264,262,260,258,256,253,251,250,248,246,244,242,240,238,237,235,233,231,230,228,226,225,223,222,220,219,217,216,214,213,211,210,209,207,206,205,203,202,201,200,198,197,196,195,193,192,191,190,189,188,187,186,184,183,182,181,180,179,178,177,176,175,174,173,172,172,171,170,169,168,167,166,165,164,164,163,162,161,160,160,159,158,157,156,156,155,154,153,153,152,151,150,150,149,148,148,147,146,146,145,144,144,143,142,142,141,140,140,139,139,138,137,137,136,136,135,135,134,133,133,132,132,131,131,130,130,129,129,128,128,127,126,126,125,125,125,124,124,123,123,122,122,121,121,120,120,119,119,118,118,118,117,117,116,116,115,115,115,114,114,113,113,113,112,112,111,111,111,110,110,109,109,109,108,108,108,107,107,107,106,106,105,105,105,104,104,104,103,103,103,102,102,102,101,101,101,100,100,100,100,99,99,99,98,98,98,97,97,97,96,96,96,96,95,95,95,94,94,94,94,93,93,93,93,92,92,92,91,91,91,91,90,90,90,90,89,89,89,89,88,88,88,88,87,87,87,87,86,86,86,86,86,85,85,85,85,84,84,84,84,83,83,83,83,83,82,82,82,82,82,81,81,81,81,81,80,80,80,78,75};
//
cpu_freq
//
ccr0
=
-----------------------------------
//
sig_freq
total_sampling_points
const
uchar
sin_data[TOTAL_SAMPLING_POINTS]={127,135,143,151,159,167,174,182,189,196,203,209,215,221,226,231,235,239,243,246,249,251,253,254,254,254,254,253,252,250,247,245,241,237,233,228,223,218,212,206,199,192,185,178,171,163,155,147,139,131,123,115,107,99,91,83,76,69,62,55,48,42,36,31,26,21,17,13,9,7,4,2,1,0,0,0,0,1,3,5,8,11,15,19,23,28,33,39,45,51,58,65,72,80,87,95,103,111,119,127};
const
uchar
tria_data[TOTAL_SAMPLING_POINTS]={0,5,10,15,20,26,31,36,41,46,52,57,62,67,72,78,83,88,93,98,104,109,114,119,124,130,135,140,145,150,156,161,166,171,176,182,187,192,197,202,208,213,218,223,228,234,239,244,249,255,255,249,244,239,234,228,223,218,213,208,202,197,192,187,182,176,171,166,161,156,150,145,140,135,130,124,119,114,109,104,98,93,88,83,78,72,67,62,57,52,46,41,36,31,26,20,15,10,5,0};
#pragma
vector
=
TIMER0_A0_VECTOR
__interrupt
void
timer_A0(void){
if(point_now
>=
TOTAL_SAMPLING_POINTS){
point_now
=0;
}
switch(curr_signal_type){
case0:
//
sin;
write_dac(sin_data[point_now]);
break;
case1:
//
triangle
write_dac(tria_data[point_now]);
break;
case2:
//
box
if(point_now
=3){
curr_signal_type
=0;
}
}elseif(push_key
if(ccr0_idx
>=
MAX_FREQ_STEPS){
ccr0_idx
=0;
}
tccr0_now
=
tccr0_table[ccr0_idx];
}elseif(push_key
if(ccr0_idx
>=
MAX_FREQ_STEPS){
ccr0_idx
=
MAX_FREQ_STEPS
-1;
}
tccr0_now
=
tccr0_table[ccr0_idx];
}
P1IFG
//清除标志位
}
void
init_vars(){
curr_signal_type
=0;
point_now
=0;
ccr0_idx
=
MAX_FREQ_STEPS
/2-1;//初始
1kHz
tccr0_now
=
tccr0_table[ccr0_idx];
duty_circle
=
TOTAL_SAMPLING_POINTS
/2;//初始50%
占空比
}
void
init_DCO(){
BCSCTL1=
CALBC1_16MHZ;
DCOCTL=
CALDCO_16MHZ;
BCSCTL2=
SELM_1
+
DIVM_0;
//
select
DCO
as
the
source
of
MCLK
BCSCTL2
//
select
DCO
as
the
source
of
SMCLK
}
void
init_timer_A0(void){
TACTL|=
TASSEL_2
+
MC_2;//
SMCLK
source
and
Mode
continous
TACCR0=
tccr0_now;
TACCTL0
|=
CCIE;//
interrupt
enable
_EINT();
}
void
init_port_io(void){
P2DIR=
P2_OUT_PORTS;//
P2
11111111b
all
out
P2REN=0x00;//
disable
pull
up/down
resistor
P2SEL=0x00;//
io
function
is
selected
P2SEL2
=0x00;
P1DIR
//
P1.0
P1.1
p1.2
p1.4
in
P1DIR
|=
P1_OUT_PORTS;//
P1.3
for
DAC
WR
P1REN=0x00;
P1SEL=0x00;
P1SEL2
=0x00;
}
void
init_port_interrupt(void){
P1IES|=P1_INTERRUPT;//置1,下降沿触发
P1IE|=P1_INTERRUPT;//中断使能
P1IFG//清除标志位
}
void
init_ADC10(void){
ADC10CTL1
|=
INCH_4;//
A4
channel
for
convertion,P1.4
in
ADC10CTL1
|=
SHS_0;
//
Sample-and-hold
source
select
ADC10SC
ADC10CTL1
|=
ADC10SSEL_3;//
SMCLK
16M
ADC10CTL1
//
straght
binary
format
ADC10CTL1
|=
CONSEQ_0;//
Single
channel
single
convertion
ADC10AE0=
ADC10_IN_PORT;//
P1.4
in
ADC10CTL0
//
disable
interrupt
ADC10CTL0
|=
SREF_1
+
ADC10SHT_0
+
REF2_5V
+
REFON;
//
V+
=
2.5V,V-
=
Vss
=
0
ADC10CTL0
//
diasable
refout
to
p1.3
p1.4
ADC10CTL0
|=
ADC10ON;//
enable
adc
}
void
main(void){
WDTCTL
=
WDTPW
|
WDTHOLD;//
Stop
watchdog
timer
init_vars();
init_port_io();
init_port_interrupt();
init_DCO();
init_timer_A0();
init_ADC10();
_bis_SR_register(GIE);//全局中断使能
while(1){
ADC10CTL0
//关闭采样使能
while(ADC10CTL1
//检测是否忙
ADC10CTL0
|=
ENC
+
ADC10SC;//打开采样使能,开始转换
while(ADC10CTL1
//检测是否忙
int
adc_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%
之间
}
}
28
/
29
篇2:北京邮电大学高等教育自学考试本科毕业生学士学位申请表
北京邮电大学高等教育自学考试本科毕业生学士学位申请表 本文关键词:申请表,北京,学士学位,高等教育自学考试,本科毕业生
北京邮电大学高等教育自学考试本科毕业生学士学位申请表 本文简介:北京邮电大学高等教育自学考试本科毕业生学士学位申请表填表日期:200*年*月*日姓名准考证号性别民族籍贯出生日期*年*月*日职务或职称电话工作单位或地址所学专业学习考试期限年月至年月参加自考本科考试前的学历学习层次毕业学校所学专业毕业时间参加外国语等级考试的情况考试名称成绩考试时间毕业时间自学考试课
北京邮电大学高等教育自学考试本科毕业生学士学位申请表 本文内容:
北京邮电大学高等教育自学考试本科毕业生学士学位申请表
填表日期:200*年*月*日
姓名
准考证号
性别
民族
籍贯
出生日期*年*月*日
职务或职称
电话
工作单位或地址
所学专业
学习考试期限
年
月至
年
月
参加自考
本科考试
前的学历
学习层次
毕业学校
所学专业
毕业时间
参加外国语等级考试的情况
考试名称
成绩
考试时间
毕业时间
自学考试课程考试成绩
免考课程
课程名称
课程名称
1.
3.
2.
4.
加
考
课程
课程名称
成绩
课程名称
成绩
1.
4.
2.
5.
3.
6.
本科段
考
试
课
程
课程名称
课程名称
1.
12.
2.
13.
3.
14.
4.
15.
5.
16.
6.
17.
7.
18.
8.
19.
9.
20.
10.
21.
11.
22.
毕业论文题目
评定成绩
入学以来科研成果(包括实际工作的突出贡献和公开发表的论文著作)
︵
思
工想
作品
单德
位和
推政
荐治
意表
见现
︶
单位
(公章)
负责人(签字)*年*月*日
同
行意
专
家
审见
核
组
长(签字)*年*月*日
学
位
评审
定核
分意
委见
员
会
主
席(签字)*年*月*日
学
位
评审
定核
委意
员见
会
主
席(签字)*年*月*日
备注
篇3:20XX年北京邮电大学804信号系统考研经验
2014年北京邮电大学804信号系统考研经验 本文关键词:北京,邮电大学,信号,考研,经验
2014年北京邮电大学804信号系统考研经验 本文简介:2014年北京邮电大学804信号系统考研经验先说下我自己的情况,以便给考研的学弟学妹们一点参考。我本科是一所很很普通的2本,本科读的是信息安全专业,出于对本专业的热爱,经过深思再三最终报考了北邮计算机院的信息安全专业,本科没有啥项目经历。好了,我的804今年是123分,不算高的分数,所以就我自己的经
2014年北京邮电大学804信号系统考研经验 本文内容:
2014年北京邮电大学804信号系统考研经验
先说下我自己的情况,以便给考研的学弟学妹们一点参考。我本科是一所很很普通的2本,本科读的是信息安全专业,出于对本专业的热爱,经过深思再三最终报考了北邮计算机院的信息安全专业,本科没有啥项目经历。
好了,我的804今年是123分,不算高的分数,所以就我自己的经历说下804的复习,以供参考。有啥说的不对的地方,还希望有人可以更正。
我是快到9月份才开始确定报考北邮的,起初的定的是北交和北邮2所高校。北交的信安专业课是操作系统,北邮的是804,那时候网上报名的时候也是申请了2个号,2个学校都报考了,等到定的时候,最终还是选择了北邮,因为我想拼一把!
我本科学习过信号系统,所以基础还是有的,我就先用了一个月的时间把《信号与系统》上下册的那种对照着考试大纲,看了一遍,这个过程大概用了一个月的时间。这个时候就10月份了,然后又再网上买了本804必备的《信号系统考研指导》吕玉琴老师编写的。买好书后大概就到10月10号左右了(我的进度确实是有点慢),这个慢的主要原因:是我的犹豫不决导致的(在北邮和北交2所学校徘徊),这个很吃亏,所以我提醒13年考试的一定要尽早选定学校,要不到最后耽误的是自己!
买好参考书后,我用了大概1个多月的时间又把参考书过了一遍。上面的公式及其推到过程都自己证明和思考了一遍,这种思考是很有必要的,一定要经常思考,不能照搬书上的。这样的学习才能有效率!另外要对着大纲看书。离散的好多年没有考过了,信号这几年考试都没有离散信号方面的。为了安全起见,我报了新祥旭的专业课辅导班,老师帮我理清思路,答疑解惑,效果比较明显。
这2本书看完后,大概就到了11月中旬了吧,当时我感觉就看这2本书是远远不够的。11月中旬到12月中旬,这1个月我又买了804的视频,当时时间紧迫,这1个月我就每天下午看《指导》,晚上看视频,视频我每天都是晚上10点回去,洗洗然后就坐在那看,一直到晚上2点。看视频的日子持续了有半个月,那段时间真的是熬得不行了,晚上2点睡觉后,早上还要7点多点就起床,去背英语和政治。因为我前期浪累了太多的时间。看视频前要有笔有纸,这样可以一边看,一边演算,一边思考。这1个月那个《指导》我又看了3遍。题目也是每题都自己演算。视频看了1遍。中间还穿插这真题(《指导》后面带的有)。这过程下来后,就大概就快到考试了,最后的时间也是温习前面做过的题目。
个人的感觉:804这几年题量大,题目难度有逐步上升的趋势。所以一定要练习下自己的做题速度,在考场上也要懂得取舍,今年题目我就有1个半大题没有写完。不过要保证你做过的小题都是对的!这才是王道!
804必备神器:
1.《信号与系统》上下册,或者1本的都行郑君里编。
2.《信号与系统考研指导》吕玉琴编
3.真题,不过2中包含的有,也不用打印了。
考试前,我1过了1遍,2过了4遍,3过了2遍。
考研个人经验:
1.一定要尽早确定报考院校,不要徘徊不定。
2.尽量找几个志同道合的人一块复习。
3.初试分数要尽可能的高。
4.要对自己有信心!这点是最重要的!