基于MSP430实现的简易信号发生器
本文介绍了一种基于MSP430G2211的简易信号发生器的设计与实现,涵盖了系统时钟配置、定时器初始化、PWM波形生成及按键中断处理等功能。设计完成后,信号发生器能够输出0~100Hz的正弦波、三角波和锯齿波,幅度范围为0~10V,并提出了优化软件、增加LCD显示和改进硬件设计的建议。
type
status
date
slug
summary
tags
category
icon
password
MSP430G2系列Launchpad开发板应用实例作品
基于MSP430G2211实现的简易信号发生器
第二章 作品硬件系统设计第一节 MSP430G2系列Launchpad开发板介绍第二节 方案论证、比较与选择第三节 主要模块电路第四节 系统组成原理图及元器件清单第五节 PCB板的设计第六节 硬件的安装调试第三章 作品软件系统设计第一节 DDS原理及在作品中的实现第二节 程序流程图进行介绍第三节 子程序API介绍第四节 各功能子程序在CCS环境下的设计与调试第四章 总结与思考
第二章 作品硬件系统设计
第一节 MSP430G2系列Launchpad开发板介绍
TI的MSP430G2系列Launchpad开发板是一款适用于TI 最新MSP430G2xx 系列产品的完整开发解决方案。其基于USB 的集成型仿真器可提供为全系列MSP430G2xx 器件开发应用所必需的所有软、硬件。LaunchPad 具有集成的DIP目标插座,可支持多达20 个引脚,从而使MSP430 Value Line器件能够简便地插入LaunchPad电路板中。此外,其还可提供板上Flash 仿真工具,以直接连接至PC 轻松进行编程、调试和评估。此外,它还提供了从MSP430G2xx 器件到主机PC 或相连目标板的9600 波特UART 串行连接。其实物图如图2.1所示。
图2.1 MSP430G2系列Launchpad开发板实物图
MSP430G2系列Launchpad开发板的特性:
- USB 调试与编程接口无需驱动即可安装使用,且具备高达9600 波特的UART 串行通信速度
- 支持所有采用PDIP14 或PDIP20 封装的MSP430G2xx 和MSP430F20xx 器件
- 分别连接至绿光和红光LED 的两个通用数字I/O 引脚可提供视觉反馈
- 两个按钮可实现用户反馈和芯片复位
- 器件引脚可通过插座引出,既可以方便的用于调试,也可用来添加定制的扩展板
- 高质量的20引脚DIP插座,可轻松简便地插入目标器件或将其移除
本作品中所使用的MSP430G2211单片机的资源和功能:
- 16位RISC指令集处理器
- 128字节RAM(数据)+2K字节Flash存储器(代码)
- 一个16位TA定时器
- 内置数控振荡器(DCO),最高频率可达21MHz
- 9个双向I/O口,每个I/O口都可以作为中断源
- 自带BOR检测电路,能自动避开上电瞬间的毛刺并产生可靠的复位信号
- 内置低功耗低频振荡器(VLO)
- 可通过软件配置的8通道比较器
第二节 方案论证、比较与选择
- 方案一:
控制部分由MSP430G2211实现,波形产生采用低温漂、低失真、高线性单片压控函数发生器(如ICL8038、MAX038等)。它们可同时产生频率可控可变的三角波、正弦波、脉冲波等。用D/A转换器的输出来改变调节电压,也可以实现频率的数控调整。
优缺点:方法简单易行,采用单片专用芯片,系统体积大大减小。但由于压控的非线性,频率步进的步长控制困难。而且整个设计中MSP430G2211仅仅完成简单的控制功能,资源得不到充分的利用。
- 方案二:
控制部分由MSP430G2211实现,波形产生部分使用FPGA或CPLD芯片采用波形查找表结合高速的DAC产生。
优缺点:此方案自由度大,符合现在的发展趋势。但是,FPGA或CPLD芯片价格相对比较高,加上高速的DAC芯片,使设计成本大大提高。而且整个设计中MSP430G2211仅仅完成简单的控制功能,资源得不到充分的利用。
- 方案三:
由MSP430G2211实现对专门的DDS芯片(如AD9850、AD9833)的控制,来产生各种波形。
优缺点:利用此方案产生波形的频率稳定度高,易于程控。但是,专门的DDS芯片价格高,系统成本高。
- 方案四:
由MSP430G2211结合低通滤波器电路来模拟实现DDS芯片的功能,进而产生各种波形。
优缺点:利用此方案可以充分利用MSP430G2211上资源,使系统成本大大降低。但是此方案只能产生低频率的波形。
综上,方案四可以充分利用MSP430G2211的资源,外围电路简单、系统成本低,可以满足简易信号发生器的要求。所以本作品最终采用方案四。
第三节 主要模块电路
- 电源模块
本作品中总共使用了三种电源:5V、3.6V、-5V。其中3.6V的产生是在1117-3.3的参考端加了一个二极管1N5819。由于1N5819的导通电压大约为0.3V,可将1117-3.3的输出电压太高0.3V,变为3.6V。-5V由负压产生芯片ICL7660产生。电源模块电路如图2.2所示。
- 滤波电路模块
滤波电路模块主要有低通滤波器和高通滤波器(隔直电路)组成。前面的R15、R16、R17、C10、C11和C12组成三阶低通滤波器。3dB点为600Hz,可以有效的将信号中的高频成分滤除。
高通滤波器电路。C9和R19组成高通滤波电路,3dB点为362mHz,可以将信号中的直流成分有效的滤除。滤波电路如图2.3所示。
- 幅度调节及信号输出模块
幅度调节电路是由运算放大器LM358和一些电阻电容组成的反相放大电路。其中R10是精密可调电位器,方便用户对信号的幅度进行调节。
信号输出电路有一个50Ω的电阻和SMA头组成。50Ω的电阻可以保证整个信号发生器的输出阻抗为50Ω。信号幅度调节和输出部分电路如图2.4所示。
- 菜单按键和指示模块
作品设计了四个菜单按键,如下图所示。各自的功能见表2.1。
按键 | S3 | S4 | S5 | S6 |
功能 | 信号输出使能键 | 频率- | 频率+ | 信号选择键 |
表2.1 菜单按键功能
系统开机启动后,默认输出的波形是10Hz的正弦波。通过点按S5和S4可以实现频率的加1减1,长按可以实现频率的快速加减。通过点按S6,可以切换波形,同时相应的LED灯会亮(各LED灯代表的波形见表二)。切换波形时,为了保护用户电路,禁止信号输出。当用户切换到需要的波形时,可以点按S3,使能信号输出。
灯亮代表输出波形如表2.2所示。
LED灯 | D3 黄色LED灯 | D4 绿色LED灯 | D5 红色LED灯 |
输出波形 | 锯齿波 | 三角波 | 正弦波 |
表2.2 LED指示灯代表波形
菜单按键和LED信号指示灯的电路见图2.5。
第四节 系统组成原理图及元器件清单
系统组成的原理图请见图2.6。
元器件清单列表见表2.3。
Comment | Description | Designator | Footprint | Quantity |
10uf/10v | C1, C2,C3, C6, C14 | C1206 | 5 | |
104 | Capacitor | C4, C5, C7, C8, C10, C11, C12, C13 | 0805 | 8 |
106 | Capacitor | C9 | 1206 | 1 |
IN4007 | D1 | D1206-AK | 1 | |
YELLOW | D3 | D0805 | 1 | |
GREEN | D4 | D0805 | 1 | |
RED | D2,D5 | D0805 | 2 | |
5819 | D7 | D1206-AK | 1 | |
MSP430JTAG | MSP340 JTAG | J1 | IDC14-Z | 1 |
5VDC_JK | 5V电源插头 | J2 | PWRJK0 | 1 |
Relay-SPDT | Single-Pole Dual-Throw Relay | K1 | RELAY-HRB2-? | 1 |
Header 7X2 | LaunchPad在底板上的插座 | P1, P2 | HDR2X7 | 2 |
1PIN | 安装孔 | P3, P4, P5, P6 | PAD | 4 |
SMA | SMA头 | P7 | BNC_RA CON | 1 |
9013 | PNP Bipolar Transistor | Q1 | SOT-23T | 1 |
3K3 | R1, R3, R4, R5, R8, R22 | 0805 | 6 | |
4K7 | R2 | 0805 | 1 | |
100 | R6 | 0805 | 1 | |
330 | R7 | 0805 | 1 | |
RES | R9, R12, R14, R15, R16, R17, R18, R19, R21 | 0805 | 9 | |
Res Adj2 | 可调精密电位器 | R10 | VR_precise | 1 |
SW-SPDT | 继电器 | S1 | SW_1H | 1 |
SW-PB | S2,S3, S4, S5, S6 | KEYSB1 | 5 | |
TLV1117-33CDCY | U1 | SOT-223 | 1 | |
ICL7660 | U2 | SO-8 | 1 | |
LM358AD | Dual Operational Amplifier | U3 | SO-8 | 1 |
XTAL1 | Crystal | Y1 | XTAL1 | 1 |
表2.3 系统元器件清单列表
第五节 PCB板的设计
系统PCB板的顶层如图2.7所示。
系统PCB板的底层如图2.8所示
PCB设计的注意事项:
- 电源线尽量粗一点。比如主电源线可以选30mil,分支电源线可以选用15mil。
- 芯片的退耦电容应尽量靠近芯片。并且退耦电容的连接线尽量粗一点。
- 由于本作品是信号发生器,所以尽量保证地平面的完整性。
- 注意大型元器件的安装位置,不要影响LaunchPad的安装。比如本作品中的精密电位器体积比较大,应注意安装位置。
- 与用户交互功能的器件应注意安装位置。比如,四个菜单按键的位置,应该便于用户操作;信号指示灯的位置,应便于用户观察;精密电位器的位置,应便于用户调节;SMA信号输出头的位置,应便于用户连线。
第六节 硬件的安装调试
本作品的硬件系统是由信号产生模块、低通滤波器模块、高通滤波器模块、增益控制模块、菜单按键及指示模块和电源模块组成。
用户在安装调试的过程中,应该按照模块的先后顺序逐个调试。确保整个系统安装完成后,各个模块工作正常,整个系统板可以正常工作。避免没有调试各个模块的情况下,直接安装完整个系统,而系统不能正常工作,却不知道是哪个模块出现了故障。
安装调试的顺序:
- 安装电源模块。安装完成后测试各个电压输出是否正常。整个系统的电压有:+5V,+3.6V,-5V。
- 安装低通滤波器模块。可以先在LaunchPad板子上先写一个简单的信号测试程序,当低通滤波器安装完成后,测试输出波形是否正常。
- 安装高通滤波器模块。安装完成后测试波形中的低频(直流)成分是否滤除。
- 安装增益控制模块。安装完成后测试精密电位器是否能控制信号的增益。如果正常,说明信号处理电路部分已经可以正常工作。
- 安装菜单按键和指示模块。安装完成后写一个简单的程序进行调试,测试各个器件都可以正常工作。
如果以上步骤都正确完成,那么整个硬件电路已经成功安装完成。接下来就可以对系统的软件进行调试了。
整个系统安装完毕后实物图如2.9所示。
注意:本系统采用自己设计的电源模块。为使LaunchPad正常工作,需将LaunchPad中J3的跳线帽全部去掉。
第三章 作品软件系统设计
第一节 DDS原理及在作品中的实现
- DDS原理
DDS是直接数字式频率合成器(Direct Digital Synthesizer)的缩写。与传统的频率合成器相比,DDS具有低成本、低功耗、高分辨率和快速转换时间等优点,广泛使用在电信与电子仪器领域,是实现设备全数字化的一个关键技术。下面对DDS的原理进行介绍。
对于一个频率为 的正弦信号 ,可以用下式来描述:
其相位为:
现将正弦信号的相位和幅值均进行数字化,使用频率为 的基准时钟对正弦信号进行抽样
将2π切割成2N等份作为最小量化单位,从而得到 的数字量 M 为:
当M取1时,可以得到输出信号的最小频率步进为
由于正弦函数为非线性函数,很难实时计算,一般通过查表的方法来快速获得函数值。
- DDS在作品中的实现
下面以正弦波为例对DDS在作品中是如何实现的进行介绍,三角波和锯齿波同理。
首先,对正弦波的幅值进行量化,公式1中的A为256。之所以选择256,是由于本作品中生成的1024个点的正弦波相位和幅值量化表中的数值使用的是8位的char型。1024个点占用1K字节的存储空间。在正弦波相位和幅值量化表中存储的数值相对于是以256个时钟为总周期的PWM调制波的高电平值。
PWM调制的本质是改变波形中高电平的比例,实际是波形在一个周期内的“面积”。如果将PWM调制波进行低通滤波,取出其直流成分(平均值),滤除后的输出电压将线性正比于PWM的占空比。根据这个原理可以利用PWM输出作为低速DAC使用。
在软件中,DCO的时钟被配置为15.25MHz,但实际测试为15.802368MHz。SMCLK的时钟源为DCOCLK。定时器TA的时钟源为SMCLK。定时器TA的CCR0为256,而且为了得到稳定的幅值,让正弦波的一个点持续输出占空比相同的60个PWM波形。相当于采样频率为:
则由公式6得:
当M=2时,相当于在1029Hz的采样率下,一个波形只取了512个点,输出波形为2Hz。所以可得 。利用此原理本作品实现了1到100Hz正弦波的产生。
以上对DDS原理和如何在软件中实现进行了介绍,下面软件具体内容进行介绍。
第二节 程序流程图进行介绍
- 主程序流程图
开机后,主程序首先关闭看门狗,接着对相应的I/O口、系统时钟、定时器TA进行初始化,完成后开总中断。然后,执行main函数。主程序流程图如图3.1所示。
- 定时器中断服务程序流程图
定时器TA的中断服务程序中主要处理将相应频率的波转化成对应的PWM波输出。定时器中断服务程序流程图如图3.2所示。
- 按键中断服务程序流程图
按键中断服务程序中主要处理波形的选择、频率的加减、信号输出使能等功能。按键中断服务程序流程图见图3.3。
第三节 子程序API介绍
- 函数名:
void Port_init(void)
输入输出变量:无
功能:IO口初始化
- 函数名:
void Sys_clock_init(void)
输入输出变量:无
功能:系统时钟配置
- 函数名:
void TA_init(void)
输入输出变量:无
功能:定时器TA初始化
- 函数名:
__interrupt void TA_ISR (void)
输入输出变量:无
功能:定时器TA中断服务程序
- 函数名:
__interrupt void P1_ISR_KEYS(void)
输入输出变量:无
功能:P1口按键中断服务程序
- 函数名:
__interrupt void P2_ISR_KEYS(void)
输入输出变量:无
功能:P2口按键中断服务程序
- 正弦波幅值和相位量化表
第四节 各功能子程序在CCS环境下的设计与调试
本节对在各功能子程序在CCS环境下的设计与调试过程中遇到的问题进行举例说明。
- 主函数
main()
主函数中主要是对系统的一些初始化。如对I/O口的初始化函数
Port_init()
;系统时钟的初始化函数Sys_clock_init()
;TA的初始化函数TA_init()
。在设计的过程中,有时某个模块的初始化设置失败,则可通过CCS提供的断点、单步调试等功能查出错误。例如:在P2口的初始化语句为:
在第一次设计过程中,没有关闭P2.6,P2.7的第二功能,结果程序不能进P2口的中断服务程序。检测方法:在P2口中断服务程序中设置断点,全速运行程序,按下按键后程序不停止,说明没进中断程序。硬件检查没有问题,说明P2口初始化不正确。经过检查初始化语句后发现没关闭第二功能。因为P2.6,P2.7脚默认情况是晶体整荡器的两个输入脚,只有关闭第二功能后,才可以作为普通I/O口来使用。
- 定时器TA的中断服务程序
TA_ISR (void)
在设计过程中,曾经出现过这样一个问题:程序可以进入TA的中断服务程序中,单产生的PWM波形却不正常。
通过CCS的Registers观察窗口,发现TA0的标志位能正常置位,但却不能产生正确的波形。后来经过检查发现,是中断向量入口写错了,写成
#pragma vector=TIMERA1_VECTOR
;正确的应该是#pragma vector=TIMERA0_VECTOR
。改正后,波形产生正常。第四章 总结与思考
- 总结
- 优化软件程序,完善功能。MSP430G2211的Flash大小是2KB,作品中正弦波幅值和相位量化表是1024个点,在Flash中正好占用1KB的存储空间。相当于留给程序代码的空间只有1KB。由于受到代码空间大小的限制,本作品只产生了正弦波、三角波、锯齿波。因此可以对系统软件进行优化,充分利用这1KB的空间,开发出结构更紧凑,功能更完善的程序。
- 使用LCD显示。由于受Flash容量的限制,本作品使用LED来指示波形。除了对软件进行优化外,还可以减少部分功能,以实现LCD显示。这需要根据设计要求灵活掌握。作品的硬件设计中预先留有LCD端口。
- 优化硬件设计。可以在输出端增加功率放大电路,增加信号的驱动能力。如果实现了LCD显示,还可以使用MSP430G2231中的AD功能对输出信号的幅度进行回采,并显示。
本文完成了基于MSP430G2211的简易信号发生器的设计与实现,从硬件和软件两方面,对使用PWM波模拟DAC和利用DDS技术实现信号发生器进行了研究。经过近两个月的研究设计,完成了作品的设计与制作,输出波形稳定。可以输出0~100Hz的正弦波、三角波、锯齿波,波形幅度在0~10V范围内连续可调,波形频率可调。另外,作品还设计了输出使能的功能,使在切换波形时,禁止输出,保护后级电路的安全。
虽然本作品设计完成了一个简易的信号发生器。但由于时间仓促和本人能力有限,本作品还有许多需要完善和改进的地方。下面列出几条改进意见:
- 思考
- 如果不采用PWM波模拟DAC的方式,直接使用一个DAC芯片,电路会发生哪些改变?单片机资源是否够用?
- 进一步增加输出波形的种类,电路和软件需要做哪些修改?
- 如果使用FPGA+MSP430G2211的方式来实现一个函数信号发生器,MSP430G2211将在该系统中发挥什么样的作用?
在作品设计的过程中,曾经考虑过其他方案和实现方法。下面提出几个问题,以供大家思考:
Loading...