- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于MSP430单片机的多功能波形发生器设计
设计目的与任务
本次设计旨在利用msp430单片机设计一个多功能波形发生器,并且利用lcd12864液晶屏进行当前波形的特征值的测量及显示,例如频率。
设计指标与技术要求
(1)借助现有的单片机系统;
(2)能产生正弦波、方波、三角波、锯齿波等波形;
(3)各种波形频率可调,频率范围为100-3000Hz;
(4)正弦波输出电压为5V峰峰值,方波、三角波、锯齿波输出电压为5V
(5)采用8位D/A转换器;
(6)进行硬件平滑滤波;
(7)编写程序并调试;
(8)提供程序清单;
(9)能实物演示。
总体设计
图1.1所示是基于单片机的多波形发生器的总体设计流程图。
图1.1 总体设计流程图
3.1总体设计功能说明:
根据设计要求,分析得本次设计需要硬件和软件两部分。
硬件上,如图。键盘输入部分主要用于选择波形。键盘共设4个键,用于选择三角波、矩形波、锯齿波、正弦波4种不同的波形,。msp430单片机用来执行某一波形发生程序,向D/A转换器的输入端发送数据,将其转化成模拟量,并通过运算放大器调节波形的幅值,经过滤波器的滤波,从而在输出端得到所需的波形。
软件上,如图。可由硬件设计好后,再根据要求进行具体编写。程序的主要功能是:首先程序在开始后,先判断P0.0,P0.1 ,P0.2相应的波形,然后根据选择的波形输出相应的波形.程序将根据要求进行调节波形.再下一步程序再判断用户继续从键盘输入要输出的波形,可以进行必要的延迟。
3.2总体电路图3.2如下所示:
图1.2 总体电路图
3.3总体程序流程图3.2如下所示:
图1.3 总体程序流程图
总体设计
4.1 msp430单片机
MSP430单片机称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,处理能力强、运算速度快,功能强大
4.2 DAC0832芯片
图2.2 DAC0832芯片图
DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器。DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压。
DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。所以这个芯片的应用很广泛,关于DAC0832的引脚功能如下:
D0~D7:数字信号输入端。
ILE:输入寄存器允许,高电平有效。
CS:片选信号,低电平有效。
WR1:写信号1,低电平有效。
XFER:传送控制信号,低电平有效。
WR2:写信号2,低电平有效。
IOUT1、IOUT2:DAC电流输出端。
RfB:是集成在片内的外接运放的反馈电阻。
VREF:基准电压(-10~10V)。
Vcc:是源电压(+5~+15V)。
AGND:模拟地 NGND:数字地,可与AGND接在一起使用。
4.3 硬件滤波电路
图2.3 滤波电路图
由图知,截止频率w0 =w =1/RC,即f =1/2pRC,再根据公式Q=Rf/(2Rf-R2)及Rf∥R2=2R可算出Rf及R2的值。
5. 调试
实验调试过程需要使用到装有CCS的电脑、DP-51PRO单片机综合仿真实验仪以及示波器。
附:程序代码:
msp430控制的液晶、键盘、AD转换程序
此程序未加CD4051,只能实现对单通道AD的转换
MAIN函数部分
// 这一部分为主程序i,LCD,7289,程序详见附件
#include msp430.h
#includeZLG7289.h
#includeLCD12864.h
#define uchar unsigned char
#define uint unsigned int
uchar dis1[] = {电压值:};
uchar dis2[] = {上限电压:};
uchar dis3[]={0};
uchar number[];
uint column_num=0;
#define Num_of_Results 8
unsigned char index = 0;
double aver=0.0;
unsigned char text[40];
double num=0.0;
unsigned int results[Num_of_Results];
void main(void) {
WDTCTL = WDTPW
文档评论(0)