基于MSP430单片机三相正弦波形发生器设计
吉林化工学院毕业设计说明书
基于MSP430单片机三相正弦波形发生器设计
Design of Three-phase Sine Wave Generator Based on
MSP430 Microcomputer
学生学号: 11510321 学生姓名: 周俊龙 专业班级: 自动1103 指导教师: 吴兴波 职 称: 副教授 起止日期: 2015.03.09~2015.06.26
吉 林 化 工 学 院
Jilin Institute of Chemical Technology
吉林化工学院毕业设计说明书
摘 要
随着科技的发展和现代科研的需要,信号发生器已经成为了很多行业进行研究测试不可或缺的工具。信号发生器是指产生所需参数的电测试信号的仪器。按信号波形可分为正弦信号、函数(波形)信号、脉冲信号和随机信号发生器四大类。信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应。本系统采用MSP430F169单片机为控制核心,通过对单片机内部的D/A进行编程,在单片机的DAC0和DAC1两端输出两相相位差为120度的A相和B相正弦波,正弦波的频率由编程决定。通过外接反相加法器(uc=-ua-ub),合成为C相电压。外接程控放大电路,对输出的正弦波形进行幅值放大,最后通过显示器LCD1602将输出的幅值和频率显示出来。
波形的产生是通过MSP430单片机执行波形发生程序,向D/A转换器的输入端按一定的规律输入数据,从而在D/A转换电路的输出端得到相应的电压波形。通过软件编程来确定波形的形状、幅值和频率。此方案的特点是电路原理比较简单,实现起来比较容易。
关键词:MSP430F169;信号发生器;LCD1602;D/A转换器
- I -
基于MSP430单片机三相正弦波形发生器设计
Abstract
With the development of science and technology and modern scientific research, the signal generator has become a tool for many sectors of research and testing indispensable. Signal generator means generates electrical test signals required parameters for the instrument. Press the signal waveform can be divided into a sinusoidal signal, function (waveform) signals, pulse signal and random signal generator four categories. Also known as the signal source signal generator or oscillator, in production practices and technology areas it has a wide range of applications. The system uses MSP430F169 microcontroller core, microcontroller via the internal D / A to be programmed at both ends of the microcontroller DAC0 and DAC1 output two-phase phase difference of 120 degrees of A-phase and B-phase sine wave, sine wave frequency is Programming decisions. Anti-adder (uc = -ua-ub) by an external, synthesized as C-phase voltage. External programmable amplifier, the output sine wave Amplitude amplification, amplitude and frequency Finally LCD1602 display output is displayed.
Waveform generation is performed through MSP430 microcontroller waveform generation program, the D / A converter input of the input data according to certain rules, so that D / A conversion circuit of the output of the corresponding voltage waveform. To determine the shape, amplitude and frequency of the waveform by software programming. This program features is a circuit principle is relatively simple, relatively easy to implement.
Keywords: MSP430F169; signal generator; LCD1602; D / A converter
- II -
吉林化工学院毕业设计说明书
目 录
摘 要 .................................................................................................................................... I Abstract ..................................................................................................................................... II 第1章 概 述 ........................................................................................................................... 1
1.1 信号发生器设计背景 ............................................................................................... 1 1.2 信号发生器的发展现状 ........................................................................................... 1 1.3 本设计采用的研究方法和技术路线 ...................................................................... 2 第2章 芯片介绍 ..................................................................................................................... 3
2.1 MSP430单片机技术的发展特点及应用 ............................................................... 3
2.1.1 MSP430单片机技术的发展特点 ................................................................. 3 2.1.2 单片机的应用 ................................................................................................ 5 2.2 MSP430F169概述 ..................................................................................................... 5
2.2.1 DAC模块的主要性能指标........................................................................... 9 2.2.2 MSP430F169单片机中的D/A功能 ........................................................... 9 2.1.3 MSP430F169单片机的引脚 ...................................................................... 10 2.2 LCD1602液晶显示器简介 ................................................................................... 11
2.2.1 LCD1602液晶显示器的引脚说明............................................................ 11 2.2.2 寄存器选择控制表 ..................................................................................... 11
第3章 系统硬件设计 ......................................................................................................... 13
3.1 基于MSP430F169信号发生器构成及工作原理 .............................................. 13 3.2 MSP430F169小系统构成 ..................................................................................... 14 3.3 信号发生器的键盘电路 ........................................................................................ 15 3.4 反相加法器电路设计 ............................................................................................ 16 3.5 程控放大电路设计 ................................................................................................ 16 3.6 信号发生器的LCD1602显示模块 ..................................................................... 18 3.7 正弦基波数值计算方法 ........................................................................................ 19
3.7.1 幅值计算方法 ............................................................................................. 19 3.7.2 定时中断时间常数计算方法 .................................................................... 19 3.7.3 A和B相相位移调整方法 ........................................................................ 19 3.8 电源电路设计 ........................................................................................................ 20 3.7 本章小结 ................................................................................................................. 21 第4章 系统软件设计 ......................................................................................................... 22
- III -
基于MSP430单片机三相正弦波形发生器设计
4.1 数据定义 ................................................................................................................. 23 4.2 定时器初始化与中断程序.................................................................................... 24 4.3 按键控制程序 ........................................................................................................ 25 4.4 液晶显示程序 ........................................................................................................ 26 结 论 ..................................................................................................................................... 27 参考文献 ................................................................................................................................ 28 附录A 硬件电路 .................................................................................................................. 29 附录A 硬件电路(续) ..................................................................................................... 30 附录B 软件程序 .................................................................................................................. 31 致 谢 ................................................................................................................................. 40
- IV -
吉林化工学院毕业设计说明书
第1章 概 述
1.1 信号发生器设计背景
随着计算机和集成技术的高速发展,电子电路的分析与设计及相应专业课程的教学与实验所采用的方式与方法都发生了重大变化,特别是电子设计自动化系统中所包含的测试测量技术已经成为现代教育技术的重要组成部分, 在高校的各个电子相关的实验室中,都需要开发和测试各种复杂的电路或子系统,其通常要求从没有上市的或很难获得的元器件或传感器中提取额外的信号,由此可见信号发生器已经成为了很多行业进行研究测试不可或缺的工具。
信号发生器又称信号源或振荡器,在生产实践和科技领域中有着广泛的应用。各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。例如在通信、广播、电视系统中,都需要射频(高频)发射,这里的射频波就是载波,把音频(低频)、视频信号或脉冲信号运载出去,就需要能够产生高频的振荡器。在工业、农业、生物医学等领域内,如高频感应加热、熔炼、淬火、超声诊断、核磁共振成像等,都需要功率或大或小、频率或高或低的振荡器。
(1)用分立元件组成的函数发生器:通常是单函数发生器且频率不高,其工作不很稳定,不易调试。
(2)可以由晶体管、运放IC等通用器件制作,更多的则是用专门的函数信号发生器IC产生。
(3)利用单片集成芯片的函数发生器:能产生多种波形,达到较高的频率,且易于调试。
(4)利用专用直接数字合成DDS芯片的函数发生器:能产生任意波形并达到很高的频率,但成本较高。
1.2 信号发生器的发展现状
信号发生器既可以构成独立的信号源,也可以是高性能网络分析仪、频谱仪及其它自动测试设备的组成部分。信号发生器的关键技术是多种高性能仪器的支撑技术,因为它能够提供高质量的精密信号源及扫频源,可使相应系统的检测过程大大简化,降低检测费用并极大地提高检测精度。
- 1 -
基于MSP430单片机三相正弦波形发生器设计
美国安捷伦生产的33250A型函数/任意波形发生器可以产生稳定、精确和低失真的任意波形,其输出频率范围为1μHz~80MHz,而输出幅度为10mVpp~10Vpp;该公司生产的8648D射频信号发生器的频率覆盖范围更可高达9kHz~4GHz。
美国泰克生产的DTG5000信号发生器的采样率达到最高3.35Gb/s(数据)。 国产SG1060数字合成信号发生器能双通道同时输出高分辨率、高精度、高可靠性的各种波形,频率覆盖范围为1μHz~60MHz。
国产S1000型数字合成扫频信号发生器通过采用新技术、新器件实现高精度、宽频带的扫频源,同时应用DDS和锁相技术,使频率范围从1MHz~1024MHz能精确地分辨到100Hz,它既是一台高精度的扫频源,同时也是一台高精度的标准信号发生器。还有很多其它类型的信号发生器,他们各有各的优点,但是信号发生器总的趋势将向着宽频率覆盖、高频率精度、多功能、多用途、自动化和智能化方向发展。
1.3 本设计采用的研究方法和技术路线
首先去图书馆借阅有关MSP430单片机的书籍资料,了解MSP430单片机的工作原理、内部结构、功能模块、各种寄存器以及汇编语言,从整体上对MSP430单片机的使用方法和编程原理进行理解。然后利用网络资源查阅单片机的C语言编程实例和视频讲解,对单片机每个功能模块的使用有所了解。最后根据自己的题材基于MSP430单片机的信号发生器设计指定相应的策略想办法完成编程。
波形的产生是通过MSP430单片机执行某一波形发生程序,向D/A转换器的输入端按一定的规律发生数据,从而在D/A转换电路的输出端得到相应的电压波形。在MSP430学习板的键盘按键,通过软件编程来选择波形的幅值和频率,按不同按键产生不同的信号。此方案的有点是电路原理比较简单,实现起来比较容易。
具体就是系统采用MSP430F169单片机为控制核心,利用单片机内置的AD芯片,通过程序产生A、B两相正弦,根据三相正弦波之和为零的原理,通过反相加法器电路,得到C相正弦波,在经过程控放大电路放大信号。通过按键来控制波形的复制及频率,然后通过单片机控制显示到LCD1602上。
本设计由电源、显示模块和控制模块组成,其中显示模块用LCD显示实现波形、频率和幅值,控制模块通过单片机控制程控放大器来实现。
- 2 -
吉林化工学院毕业设计说明书
第2章 芯片介绍
2.1 MSP430单片机技术的发展特点及应用
MSP430系列单片机是美国德州仪器(TI)1996年开始推向市场的一种16位超低功耗、具有精简指令集(RISC)的混合信号处理器(Mixed Signal Processor)。称之为混合信号处理器,是由于其针对实际应用需求,将多个不同功能的模拟电路、数字电路模块和微处理器集成在一个芯片上,以提供“单片”解决方案。该系列单片机多应用于需要电池供电的便携式仪器仪表中[1]。 2.1.1 MSP430单片机技术的发展特点
德州仪器1996年到2000年初,先后推出了31x、32x、33x等几个系列,这些系列具有LCD驱动模块,对提高系统的集成度较有利。每一系列有ROM 型(C)、OTP 型(P)、和 EPROM 型(E)等芯片。2000 年推出了11x/11x1系列。这个系列采用20脚封装,内存容量、片上功能和 I/O 引脚数比较少,但是价格比较低廉。2000年7月推出了F13x/F14x 系列,在2001年7月到2002年又相继推出F41x、F43x、F44x。这些全部是 Flash 型单片机。2001年TI 公司又公布了BOOTSTRAP LOADER技术,利用它可在烧断熔丝以后只要几根线就可更改并运行内部的程序。这为系统软件的升级提供了又一方便的手段。BOOTSTRAP 具有很高的保密性,口令可达到 32个字节的长度[1]。
1.处理能力强
MSP430系列单片机是一个16位的单片机,采用了精简指令集(RISC)结构,具有丰富的寻址方式(7 种源操作数寻址、4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令。这些特点保证了可编制出高效率的源程序。
2.运算速度快
MSP430 系列单片机能在25MHz晶体的驱动下,实现40ns的指令周期。16位的数据宽度、40ns的指令周期以及多功能的硬件乘法器(能实现乘加运算)相配合,能实现数字信号处理的某些算法(如 FFT 等)。
3.超低功耗
MSP430单片机之所以有超低的功耗,是因为其在降低芯片的电源电压和灵活而可控的运行时钟方面都有其独到之处。首先,MSP430系列单片机的电源电压采用的是1.8-3.6V电压。因而可使其在1MHz的时钟条件下运行时,芯片的电流最低会在165μA左右,RAM保持模式下的最低功耗只有0.1μA。其次,独特的时钟系统设计。在MSP430
- 3 -
基于MSP430单片机三相正弦波形发生器设计
系列中有两个不同的时钟系统:基本时钟系统、锁频环(FLL和FLL+)时钟系统和DCO数字振荡器时钟系统。可以只使用一个晶体振荡器(32768Hz),也可以使用两个晶体振荡器。由系统时钟系统产生 CPU 和各功能所需的时钟。并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。由于系统运行时开启的功能模块不同,即采用不同的工作模式,芯片的功耗有着显著的不同。在系统中共有一种活动模式(AM)和五种低功耗模式(LPM0~LPM4)。在实时时钟模式下,可达2.5μA,在RAM 保持模式下,最低可达0.1μA。
4.片内资源丰富
MSP430 系列单片机的各系列都集成了较丰富的片内外设。它们分别是看门狗(WDT)、模拟比较器A、定时器A0(Timer_A0)、定时器A1(Timer_A1)、定时器B0(Timer_B0)、UART、SPI、I2C、硬件乘法器、液晶驱动器、10位/12位ADC、16位Σ-Δ ADC、DMA、I/O端口、基本定时器(Basic Timer)、实时时钟(RTC)和USB控制器等若干外围模块的不同组合。其中,看门狗可以使程序失控时迅速复位;模拟比较器进行模拟电压的比较,配合定时器,可设计出A/D转换器;16 位定时器(Timer_A和Timer_B)具有捕获/比较功能,大量的捕获/比较寄存器,可用于事件计数、时序发生、PWM等;有的器件更具有可实现异步、同步及多址访问串行通信接口可方便的实现多机通信等应用;具有较多的I/O端口,P0、P1、P2 端口能够接收外部上升沿或下降沿的中断输入;10/12位硬件A/D转换器有较高的转换速率,最高可达200kbps,能够满足大多数数据采集应用;能直接驱动液晶多达160段;实现两路的12位D/A转换;硬件I2C串行总线接口实现存储器串行扩展;以及为了增加数据传输速度,而采用的DMA模块。MSP430系列单片机的这些片内外设为系统的单片解决方案提供了极大的方便。
5.方便高效的开发环境
MSP430系列有OPT型、FLASH型和ROM型三种类型的器件,这些器件的开发手段不同。对于OPT型和ROM型的器件是使用仿真器开发成功之后烧写或掩膜芯片;对于FLASH型则有十分方便的开发调试环境,因为器件片内有JTAG调试接口,还有可电擦写的FLASH存储器,因此采用先下载程序到FLASH内,再在器件内通过软件控制程序的运行,由JTAG接口读取片内信息供设计者调试使用的方法进行开发。这种方式只需要一台PC机和一个JTAG调试器,而不需要仿真器和编程器。开发语言有汇编语言和C语言。
- 4 -
吉林化工学院毕业设计说明书
2.1.2 单片机的应用
MSP430单片机具有体积小,功耗低,易于产品化,面向控制,抗干扰能力强,适用温度范围宽,它广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:
1.在智能仪器仪表上的应用
单片机的体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,使其广泛应用于仪器仪表中。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。
2.在工业控制中的应用
单片机可以方便的实现多机和分布式控制,用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。
3.在家用电器中的应用
可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,无所不在。
4.在计算机网络和通信领域中的应用
现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从小型程控交换机、楼宇自动通信呼叫系统、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。
5.单片机在医用设备领域中的应用
单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。
2.2 MSP430F169概述
MSP430F169是TI公司进入中国市场的MSP430F系列单片机中功能最强的芯片。具有60K程序存储区、2K的数据存储区、8路快速12位A/D转换器、双路12位D/A转换器,两个通用连续同步/异步通信接口(USART)、I2C、DMA数据传送模块和48个I/O口等外围模块。结构框图如图2-1所示。
- 5 -
基于MSP430单片机三相正弦波形发生器设计
图2-1 MSP430F169芯片的结构框图
MSP430F169单片机为64引脚封装,其中大部分引脚有复用功能,见表2-1。在波形发生器设计中使用两路DAC通道产生任意波形。在使用高速时钟和端口时要根据需要将其初始化。
表2-1 MSP430F169引脚功能表
引脚名称 引脚编号 I/O 描述
AVCC AVSS
64 62
- 6 -
模拟正电源端,
模拟负电源端,内部连接于DVCC。
吉林化工学院毕业设计说明书 续表2-1 MSP430F169引脚功能表
引脚名称 引脚编号 I/O 描述
DVCC DVSS VREF+ VeREF+ VREF–/VeREF–
XT2IN XT2OUT P5.7/TBoutH/
1 63 7 10 11 53 52
I/O I/O
数字正电源端,提供所有部件电源(由AVCC供电的除外)。 数字地,所有部件的接地端(由AVCC/AVSS供电的除外)。
ADC12正向参考电压。 外部参考电压输入。
参考电压负端,内部参考电压, 或应用外部参考电压
晶振XT2输入。 晶振XT2输出。
通用数字I/O;交换所有PWM 数字输出端口到定时器_B7的 TB0
到TB6高电平端, SVS比较器输出。 通用数字I/O;辅助时钟ACLK输出。 通用数字I/O;子时钟SMCLK输出。 通用数字I/O;主要系统时钟MCLK输出。
通用数字I/O;外部时钟输入端。
通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。
51
SVSOUT P5.6/ACLK P5.5/SMCLK P5.4/MCLK P5.3/UCLK1† P5.2/SOMI1† P5.1/SIMO1† P5.0/STE1† P3.7/URXD1† P3.6/UTXD1† P3.5/URXD0 P3.4/UTXD0 P3.3/UCLK0/SCL P3.2/SOMI0 P3.1/SIMO0/SDA P3.0/STE0
50 49 48 47 46 45 44 35 34 33 32 31 30 29 28
I/O
I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O
- 7 -
基于MSP430单片机三相正弦波形发生器设计
续表2-1 MSP430F169引脚功能表
引脚名称 引脚编号 I/O 描述
P2.7/TA0 P2.5/Rosc P2.4/CA1/TA2 P2.3/CA0/TA1 P2.2/CAOUT/TA0 P2.1/TAINCLK P2.0/ACLK P1.7/TA2 P1.6/TA1 P1.5/TA0 P1.4/SMCLK P1.3/TA2 P1.2/TA1 P1.1/TA0 P1.0/TACLK P4.0/TB0 P4.1/TB1 P4.2/TB2 P4.3/TB3† P4.4/TB4† P4.5/TB5† P4.6/TB6† P4.7/TBCLK P6.0/A0
27 25 24 23 22 21 20 19 18 17 16 15 14 13 12 36 37 38 39 40 41 42 43 59
I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O I/O
O I/O I/O I/O I I/O I/O I/O I/O
通用数字I/O;定时器_A比较方式:OUT0输出。
通用数字I/O。
通用数字I/O;比较器A输入端;比较方式:OUT2输出。 通用数字I/O;比较器A输入端;比较方式:OUT1输入。 通用数字I/O;比较器A输出端;捕获方式:CCIOA输入。
通用数字I/O。
通用数字I/O;辅助时钟ACLK输出。 通用数字I/O;定时器_A比较方式:OUT2输出。 通用数字I/O;定时器_A比较方式:OUT1输出。 通用数字I/O;定时器_A比较方式:OUT0输出。
通用数字I/O;SMCLK信号输出。
通用数字I/O。 通用数字I/O。 通用数字I/O。
通用数字I/O;定时器A时钟输入。
通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。
- 8 -
吉林化工学院毕业设计说明书 续表2-1 MSP430F169引脚功能表
引脚名称 引脚编号 I/O 描述
P6.1/A1 P6.2/A2 P6.3 P6.4 P6.5 P6.6 P6.7 RES/NMI XIN XOUT
60 61 2 3 4 5 6 58 8 9
I/O I/O I/O I/O I/O I/O I/O I I I/O
通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。 通用数字I/O。
复位输入或非屏蔽中断输入端。
基本振荡器XT1输入端。可以连接标准晶体或晶体振荡器。
晶体振荡器XT1输出端。
2.2.1 DAC模块的主要性能指标
目前,只有MSP430F15/16X系列单片机具有DAC(数模转换)模块,可以将MSP430运算处理的数字量转换为模拟量。MSP430F169的DAC模块是12位电压输出的数模转换模块(DAC12)。
分辨率:这项指标反映了数字量在最低位上变化1位时输出模拟量的最小变化。一般用相对值来表示。对于8位的DAC模块来说,分辨率为最大输出幅度的0.39%,即1/256。而对于12位DAC模块来说,分辨率可以达到0.024%,即1/4096。
偏移误差:它是指输入数字量为0时,输出模拟量对0的偏移值。 线性度:是指DAC模块的实际转移特性与理想直线之间的最大偏差。 转换速度:即每秒钟可以转换的次数,其倒数为转换时间。 参考源电压源:是影响模拟量输出的基准值。 2.2.2 MSP430F169单片机中的D/A功能
MSP430F169的DAC12模块包含两个DAC转换通道:DAC12_0和DAC12_1,这两个通道在操作上完全平等。输入数字量与输出电压关系如图2-2所示:
- 9 -
输出电压2.5V2.1.3 MSP430F169单片机的引脚
输出电压量也就从0到2.5V变化。
MSP430F169单片机的引脚如图2-3所示。
图2-2 DAC12输出量示意图
基于MSP430单片机三相正弦波形发生器设计
选用内部2.5V参考源电压源,当输入DAC12的数字量从0x0到0xFFF变化时,对应的
DAC12的主要特征:12位分辨率,可选用内部或外部参考电压,输入二进制数。若
图2-3 MSP430F169单片机的引脚图
- 10 -
输入数字0FFFH
吉林化工学院毕业设计说明书
2.2 LCD1602液晶显示器简介
工业字符型液晶,能够同时显示16x02即32个字符(16列2行)。1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样 2.2.1 LCD1602液晶显示器的引脚说明
LCD1602液晶显示器的引脚说明如表2-2所示。
表2-2 LCD1602的引脚功能说明
符号 VSS VDD
功能说明 一般接地 接电源(+5V)
液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼
影”,使用时可以通过一个10K的电位器调整对比度)。
R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
E(或EN)端为使能(enable)端,下降沿使能。 低4位三态、 双向数据总线 0位(最低位)
高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 高4位三态、 双向数据总线 7位(最高位)(也是busy flag)
背光电源正极 背光 电源负极
V0
R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 BLA BLK
2.2.2 寄存器选择控制表
控制寄存器的控制指令说明如表2-3所示。
- 11 -
基于MSP430单片机三相正弦波形发生器设计
表2-3 控制寄存器的控制表
RS 0 0 1 1
R/W 0 1 0 1
操作说明
写入指令寄存器(清除屏等)
读busy flag(DB7),以及读取位址计数器(DB0~DB6)值
写入数据寄存器(显示各字型等)
从数据寄存器读取数据
- 12 -
吉林化工学院毕业设计说明书
第3章 系统硬件设计
3.1 基于MSP430F169信号发生器构成及工作原理
三相正弦波发生器是一种常用的信号源,广泛应用于科学研究、生产实践和教学实验等领域。目前常见的信号发生器[1]有3种,第1种是由分立元件(或集成电路)构成,采用振荡电路实现,第2 种是采用专用波形集成芯片,通过改变外围参数实现,第3种是采用单片机、FPGA、DDS芯片等,用现代电子技术实现。由现代电子技术实现的波形发生器主要有“单片机+低速D/A转换”和“FPGA+高级D/A转换”两种,前者用于低频,价位低,后者主要用于高频或高精度场所,价位高。采用现代电子技术通过编程实现的信号源,从技术上克服了元器件分散性造成波形失真的问题,本设计以MSP430F169为控制核心,通过硬件和软件设计,实现了输出相位差互为120°的三相正弦波,输出波形频率和幅值可实时调节。本设计三相正弦波形发生器适用于电子技术实验室作为信号源[2]。
信号发生器电路主要由MSP430F169系统、键盘电路、LCD1602显示电路、DAC5571芯片、电源电路等组成。系统原理方框图如图3-1所示。
电源LED显示器程控放大DAC0端输出A相正弦波按键电路程控放大DAC1端输出B相正弦波MSP430F169单片机程控放大反相加法器合成C相正弦波时钟和复位电路
图3-1系统原理方框图
工作原理:选用的MSP430F169单片机内部只有两路DAC12[4],通过对单片机内部的D/A 进行编程,控制输入到DAC0和DAC1的数字量,即可控制其输出量的大小。当输入的数据随时间按正弦规律变化时,即可在DAC0和DAC1的输出端得到A相和B
- 13 -
基于MSP430单片机三相正弦波形发生器设计
相正弦波。本设计编程时将一个周期信号分为72个时段[5],每时段起始值存入数组,DAC 用该数据拟合出正弦波形。当两路DAC12输入数据在所存数组中相差24个单元时,即可保证DAC0和DAC1 输出的A相和B相正弦波相位相差120°,依据三相交流电瞬时值之和为零的原理设计反相加法器电路,用反相加法器将A相和B相正弦波进行合成,输出C相正弦波。输出的C相正弦波与A相正弦波和B相正弦波的相位差[6]也为120°。
为了达到设计要求:频率和幅值均可调,频率调节方面,通过按键改变单片机控制程序中的输出波形频率设定值,从而改变输出波形的频率。幅值调节方面,通过程控放大器控制输出波形的幅值。频率和幅值通过LCD1602[7]来显示。
3.2 MSP430F169小系统构成
MSP430F169小系统由169芯片、复位电路、低速时钟电路(32768Hz)、高速时钟电路(8MHz)、电池和发光二极管电路构成,如图3-2所示。可通过发光二极管是否闪烁,判定小系统电路是否正常工作。
C12VCC646362616059585756555453525150491BT1(3.6V)15pXTAL_8MHzC215pAVccDVssAVssP6.2/A2P6.1/A1P6.0/A0/RST/NMITCKTMSTDITDO/TDIXT2INXT2OUTP5.7/TBOUTH/SVSOUTP5.6/ACLKP5.5/SMCLK470217181920212223242526272829303132P1.5/TA0P1.6/TA1P1.7/TA2P2.0/ACLKP2.1/TAINCLKP2.2/CAOUT/TA0P2.3/CA0/TA1P2.4/CA1/TA2P2.5/RoscP2.6/ADC12CLK/DMAE0P2.7/TA0P3.0/STE0P3.1/SIMO/SDAP3.2/SOMI0P3.3/UCLK0/SCLP3.4/UTXD012345Vout_sin16Vout_sin27XTAL_32768HzVCC21891N484210/RSTD5R0111R0212100k1K13141522pFC3161DVccP6.3/A3P6.4/A4P6.5/A5P6.6/A6/DAC0P6.7/A7/DAC1/SVSINVref+XINXOUT/TCLKVeref+Vref-/Veref-P1.0/TACLKP1.1/TA0P1.2/TA1P1.3/TA2P1.4/SMCLKMSP430F169P5.4/MCLKP5.3/UCLK1P5.2/SOMI1P5.1/SIMO1P5.0/STE1P4.7/TBCLKP4.6/TB6P4.5/TB5P4.4/TB4P4.3/TB3P4.2/TB2P4.1/TB1P4.0/TB0P3.7/URXD1P3.6/UTXD1P3.5/URXD048474645444342414039383736353433 图3-2 MSP430F169小系统电路图
- 14 -
吉林化工学院毕业设计说明书
MSP430最小系统的外围电路很少,甚至可以不要。在本系统中有外围电路也很少,只有一个复位电路和晶振电路。复位电路很简单,复位只需要给单片机一个几微秒的低电平时就可以让单片机复位。所以只要给单片机复位引脚接地就可以,这样的复位电路会有抖动,这样不好为了去抖在复位电路中加入了电阻和电容和一个二极管。晶振电路更简单只要一个晶振和起振电容。
单片机的时序单位:
振荡周期:晶振的振荡周期,又称时钟周期,为最小的时序单位。
状态周期:振荡频率经单片机内的二分频器分频后提供给片内CPU的时钟周期。因此一个状态周期包含2个振荡周期。
机器周期:1个机器周期由6个状态周期12个振荡周期组成,是计算机执行一种基本操作的时间单位。
指令周期:执行一条指令所需的时间。一个指令周期由1-4个机器周期组成,依据指令不同而不同。
3.3 信号发生器的键盘电路
输出波形的频率由单片机程序来决定的,为了方便控制,使用按键来改变程序中的设定值,从而改变输出波形的频率。由独立按键来完成。
按键接口电路,连接电路如图3-3所示。
K1P1.0K210K5VP1.1K310K5VP1.2K410K5VP1.5K510K5VP1.65V
图3-3 键盘模块电路
按键电路的主要功能为:
1.当K1按下时,每按一下频率增加0.1Hz; 2.当K2按下时,每按一下频率增加10Hz; 3.当K3按下时,每按一下频率增加100Hz;
- 15 -
基于MSP430单片机三相正弦波形发生器设计
4.当K4按下时,每按一下幅值增加0.1V; 5.K5为确定键,确定按下的键值。
3.4 反相加法器电路设计
由于MSP430F169单片机本身自带两路DAC12,只能发出A、B两相正弦波,设计要求输出三相正弦波,根据电路理论中三相交流电瞬时值之和为零的原理,设计反相加法器电路[8]得到C相正弦波,即:
uc = - ( ua + ub) (3-1)
反相加法器的电路如图3-4所示。
Sin 1R1110KR1210KR1310K15V3+2-1Sin 3Sin 2OP07R143.3K-15V
图3-4 反相加法器电路
反相加法器电路的合成公式如公式(2-2)所示.
ucR13(
当R11=R12=R13=10kΩ时,即得反相加法器的合成公式如(3-1)所示.
uaub) (3-2) R11R123.5 程控放大电路设计
本设计输出波形的幅值由程控放大器[9]决定的,方法是由DAC0832和运放OP07构成的程控放大器,通过按键控制放大器的放大倍数,以此来控制幅值大小。下面是对程控放大器的介绍。DAC0832是电流输出型的8位数/模转换器。
输出电流IOUT1如公式(3-3)所示:
- 16 -
吉林化工学院毕业设计说明书
IOUT1
VD (3-3) REFRI256其中:VREF为输入的基准电压,R为内部电阻,DI为输入数字量的加权和(十进制数)。由公式(3-3)可见,输出的模拟量与输入的数字量成正比,从而实现了从数字量到模拟量的转换。一个8位D/A转换器有8个输入端。输入可有256个不同的二进制组态,对应有256个输出值。将待放大的输入信号接到DAC0832的参考电压端(VREF),DI由单片机控制,互补输出端IO1和IO2引脚分别接放大器OP07的反向输入端和同向输入端。DAC0832[10]的互补输出端IOl、IO2均为电流信号,需外接一个放大器实现电流信号到电压信号转换。输出端通过一反馈电阻Rfb接DAC0832的RFB端,构成程控放大器,从而调节了输入信号的幅值。输出电压公式如公式(3-4)所示:
VOUTRf
VREFDI (3-4) R256其中:Rf =Rfb+Ref,VREF为输入的电压,R为内部电阻,DI为输入数字量。程控放大器的电路如图3-5所示。
5V78OP07R4 100KSin1C1222PF23515V615V12181719P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7765416154-5V1R5 2KC13100PFCSWR1WR2XFERILED0D1D2D3D4VEERfb 500KTIP41C-A0 NPN15V27OP07VrefRfIO13IO25R6 51K861VOUT4-15VTIP42C-A1 PNPR8 10K15VR9 10KR7 2K1413D5D6D73AGND10DGNDDAC0832-15V 图3-5 程控放大电路
- 17 -
基于MSP430单片机三相正弦波形发生器设计
3.6 信号发生器的LCD1602显示模块
LCD1602液晶显示器的电路图如图3-4所示。本电路的功能是显示当前输出的波形及该波形的幅值及频率。
VCC123R29 1KP3.0P3.1P3.2P4.0P4.1P4.2P4.3P4.4P4.5P4.6P4.74567891011121314151610ΩVCCVSSVCCVEERSR/WED0D1D2D3D4D5D6D7VCCVSS1602
图3-4 LCD1602电路图
指令集如表3-1所示。
表3-1 LCD1602的控制指令集
指令 写指令38H 写指令08H 写指令01H 写指令06H 写指令0cH
操作
对1602进行复位操作 对1602进行显示关闭操作 对1602进行显示清屏操作 写字符时整体不移动 显示开,不开游标,不闪烁
- 18 -
吉林化工学院毕业设计说明书
3.7 正弦基波数值计算方法
控制输入到DAC0和DAC1的数字量,即可控制数模转换器输出的模拟电压[11]。当输入的数据随时间按正弦规律变化时,即可在输出端得到正弦波信号。若使输入到两通道的正弦数据相差120°,其输出波形也相差120°。编程时将一个基波周期分为72个时段,每时段起始值存入数组,DAC用该数组数据拟合出相应波形。当DAC0、DAC1输入数据在所存数组中相差24个单元,即可保证DAC0和DAC1输出正弦波相位移为120°=24*5°。 3.7.1 幅值计算方法
MSP430F169单片机片内DAC输出电压范围0~2.5V,对应数字量范围0-4095;中点电压1.25V(对应数字量2047)。若将一个正弦周期分为72个时段,相邻数据相位差为5°。各时段对应的DAC 输入数值计算公式如下所示:
Din=(1+sin(5·N)°)×2047(N=0、1、2、„„、71) (3-5)
其中N为各时段序号,Din为DAC输入数值。逐段求出后基波数据后,转换成十六进制数,用常量数组存入单片机。 3.7.2 定时中断时间常数计算方法
D/A转换器逐段更新数据的时间间隔由定时器中断程序完成,定时中断时间常数计算公式如下所示:
Buf_TB=
其中:Buf_TB 是MSP430F169单片机定时器B定时中断时间常数[12],送入定时器寄存器;F是单片机定时器B所选时钟频率(8MHz);N1是一个基波周期所分时段数(72);N2是基波频率数,由按键输入。 3.7.3 A和B相相位移调整方法
因为存入的常量数组相邻单元数据对应相位差为360°/72=5°,所以调整送入DAC0、DAC1数据间隔单元数即可调整A相和B相间相位移。该相位差确定了本设计相位移调整分辨率为5°。
F (3-6)
N1N2- 19 -
基于MSP430单片机三相正弦波形发生器设计
3.8 电源电路设计
本设计中需要对MSP430F169,DAC0832、运放OP07及液晶供电。对于MSP430F169需要+5V直流稳压供电,OP07和DAC0832需要±15V直流稳压供电 ,液晶则需要+5V直流稳压电供电。在实际生活生产中最常用的是220交流电,要将220V交流电源进行转换,转换为直流稳压电压源。此过程中需要进行变压—整流—滤波—稳压等,电压转化流程图如图3-5所示。
AC 220V 交流变压器整流电路滤波电路稳压电路DC
图3-5 电源设计基本框图
现实生活中的220V交流电为强电,对人身生命有极大地危险,所以第一步进行变压处理。降压过程中我要考虑需要电压的范围,单片机和液晶供电为+5V,选用LM7805稳压芯片,最佳输入电压范围是7~12V。220V交流电经变压后成为低压交流电,再经整流桥将交流电转换为直流电。然后用大电容进行滤波处理,使其变为较稳定的直流电压,最后输入到稳压芯片,输出稳定电压。输出电压后为了防止外界环境干扰,在稳压后加入电容以得到更加稳定的电压。电源电路接线图如图3-6所示。
5VV17805V0C5470ufT1220V7.5V7.5VC4470ufGNDC6470ufV1C7470uf7905V0-5V15VV17815V0C9470ufT218V18VC8470ufGNDC10470ufV1C11470uf7915V0-15V
图3-6 电源电路
- 20 -
吉林化工学院毕业设计说明书
选用常用的78系列三端稳压芯片进行电源设计[6]。三端集成稳压器大多采用串联稳压方式。它由启动电路、基准电路、误差放大器、调整管、取样电阻及保护电路等组成。它与分立元件的串联调整稳压器电路工作原理完全相同。一般三端集成稳压电路的最小 输入、输出电压差约为2V,否则不能输出稳定的电压,一般应使电压差保持在4-5V,即经变压器变压,二极管整流,电容器滤波后的电压应比稳压值高一些。
由于系统中需要正负电源,在选择变压器时,输出绕组需要带中心抽头的,并将中心抽头作为输出地。变压器次级经整流桥整流在经过电容滤波,最后接入三端稳压芯片进行稳压,从而得到所需的正负电压。
3.7 本章小结
本章在上一章的基础上,结合MSP430单片机信号发生器的基本功能介绍了它的工作 流程、硬件组成和工作原理,设计了键盘电路、LCD1602显示电路、反相加法器电路、程控放大电路等,各电路根据需要连接到MSP430F169单片机的接口上,就构成了一个功能强大的基于MSP430单片机的信号发生器设计。
- 21 -
基于MSP430单片机三相正弦波形发生器设计
第4章 系统软件设计
软件部分采用模块化程序设计的方法,由主控制程序、液晶显示部分子程序、键盘服务子程序构成。我选用MSP430F169单片机微控制器。MSP430F169为16-Bit RISC架构,最高运算速度8MIPS的单芯片微控制器,可低电压动作的Flash模块(read1.8V、write2.7V)可作为控制器程序代码载体和数据的存取。2KB随机存取内存(RAM),在LPM4待机模式下,储存在RAM内的数据仍可保持。2路12位数字模拟转换(Digital to analog)电压输出模块,两组D/A可由程序控制同步输出。六组I/O接口P0~P6,计48pin脚可供输入、输出。在其编译环境下可以内嵌C高级语言,C函数与汇编函数可以很方便的相互调用,所以编程效率高而且可靠。
三相正弦波信号发生器软件程序流程为:
1.初始化程序,开启看门狗,读取EEPROM参数,同时通过键盘对各参数进行设置、修改,然后保存到EEPROM中,以备随时调用。参数有正弦波频率变化率、正弦波频率值。
2.一旦确定运行,打开定时器,开始读取正弦波数值表,调用显示子程序。 3.同时通过键盘查询子程序,改变频率参数。然后根据频率参数,调整定时器时间常数,从而完成正弦波频率值的变化。
4.保证输出的三相正弦波频率连续可调,输出波形实时反映设置的频率值。 本设计的软件设计的总体流程如图4-1所示。
开始初始化波形产生程序按键扫描液晶显示程序结束
图4-1 总体流程图
- 22 -
吉林化工学院毕业设计说明书
4.1 数据定义
由于单片机处理的是数字信号,而输出的具有可控相位的正弦波是一个连续变化的模拟量,所以就必须对一个周期内的正弦波形进行描点(斩波处理)。当然,希望获得的是接近理想的真实模拟波形,就需要在一个周期内描出尽可能多的点.但另一方面,由于单片机处理的速度有限.点数如果描取过多,单片机就只能一直处在中断送数的过程中,无法处理其它的采集程序,进而导致死机在该项目中,在一个周期内(一个周期)选择72点.即每隔5度。计算一个正弦函数值,由单片机中断送出。
由于单片机处理正弦函数的计算会耗去很长时间,如果单片机在中断送数的过程中,还要计算下一个点的正弦函数值,在速度响应上就会存在问题,即可能下一点数据还没计算出结果,单片机又开始中断送数,这样只能送出错误的数据,因此,需要定义一个正弦波数据表来满足这一要求,其数据定义的程序如下:
#include ﹤msp430f169.h﹥
Const long int NUM_SIN[72]={
0x800,0x8b2,0x963,0xa12,0xabc,0xb61,0xc00,0xc96,0xd24, 0xda8,0xe20,0x8ed,0xeed,0xf40,0xf84,0xfba,0xfe0,0xff8, 0xfff,0xff8,0xfe0,0xfba,0xf84,0xf40,0xeed,0xe8d,0xe20, 0xda8,0xd24,0xc96,0xc00,0xb61,0xabc,0xa12,0x963,0x8b2, 0x800,0x74d,0x69c,0x5ed,0x543,0x49e,0x400,0x369,0x2db, 0x257,0x1df,0x172,0x112,0x0bf,0x07b,0x450,0x01f,0x007, 0x000,0x007,0x01f,0x045,0x07b,0x0bf,0x112,0x172,0x1df,
0x257,0x2db,0x369,0x400,0x49e,0x543,0x5ed,0x69c,0x74d}; //正弦波数据表
初始化程序流程图如图4-2所示。进入初始化阶段,信号发生器的各个部分依次初始化,为后期的程序执行做好准备。初始化中有一些具体的要初始化的子系统。如图4-2所示:
开始关闭看门狗初始化LCD初始化键盘开中断并等待开始
图4-2 初始化程序流程图
- 23 -
基于MSP430单片机三相正弦波形发生器设计
上面初始化函数部分应先开晶振开等待晶振起振后设定相应的时钟频率再对其它部分进行初始化。
4.2 定时器初始化与中断程序
定时器B中断程序:定时器B 按所设时间间隔中断,更新DAC0和DAC1数据,输出所设波形。定时器B 中断优先权高于定时器A,定时器A中断不影响波形信号输出。
为了使单片机的DAC0和DAC1端输出正弦波,使用定时器B来完成,定时器B的中断时间常数Buf_TA的定义方式为:
Buf_TA=(int)(F/(N1*N2))
其中N1为一个周期的分组数据;N2为产生波形频率数。在使用定时器之前必须进行定时器初始化[11]。定时器初始化和中断服务程序如下:
Void init_TB(void)
{
Buf_TA=(int)(F/(N1*N2)); TBCCR0=Buf_TA;
TBCTL=TBSSEL_2+TBCLR+SHR_0;//SMCLK,clear TBR TBCCTL0=CCIE; // 中断使能CCR0 TBCTL|=MC0; // 设置递增模式 }
Timer B0中断服务程序: Interrupt[
TIMERB0_VECTOR] void timer_B(void) //中断服务入口地址
{
DAC12_0DAT=NUM_RAM0[N_sin]; N_sin1=N_sin+24; //设置相位差为120° If(N_sin1>71)
{ N_sin1=N_sin1-72;} }
DAC12_1DAT=NUM_SIN0[N_sin]; N_sin=N_sin+1; If(N_sin==72) {
N_sin=0; }
_NOP();
- 24 -
吉林化工学院毕业设计说明书
}
WDT中断服务程序
#pragma vector=WDT_VECTOR //中断程序入口地址 _interrupt void watchdog_timer(void)
//interrupt[WDT_VECTOR]void watchdog_timer(void) //关看门狗 {
cont=cont+1;
P1OUT=0X10; //taggle P1.4 using exclusive-OR If(cont==4) {
cont=0} }
4.3 按键控制程序
在硬件设计使用独立按键,按键数目少,但是要实现输出波形频率和幅值的精确调节,所以软件设计中必须要有合理的逻辑设计。设计要求中,输出波形的频率范围为1Hz~2KHz,幅值范围为0V~10V,由于频率的调节范围大,必须用合理的按键设置来满足波形频率的变化。按键程序设计的基本流程图如图4-3所示。
开始按键扫描K1按下Y调用相应子程序YK5按下YNYNK2按下NK3按下NK4按下结束
图4-3 按键程序基本流程图
在此设计中有两个方案:第一种,在按住累加键不松开,开始为每秒增加1Hz;一段时间后每秒增加10Hz,持续按键时间再长就为每秒增加100Hz的加,直到调节到我想要
- 25 -
基于MSP430单片机三相正弦波形发生器设计
的频率。第二种方案则是3个增加键,第一个设为每按键一次频率增加1Hz,第二个设置为每按一次增加10Hz,第三个设置为每按一次增加100Hz。在两种方案中第一种调节速度快,但是不易控制到精确地频率,而且编程比较麻烦,第二种方案调节速度较慢,但是可以精确控制,而且编程简单,所以选用第二种方案。幅值范围为0V~10V,范围不大,因此,设计一个按键来控制就行,每次按键增加0.1V。
4.4 液晶显示程序
为了驱动液晶显示屏,使其能够显示出需要的数据,必须对其进行编程控制,在液晶程序设计中主要依据数据手册,按照其时序图在程序中写入子程序来驱动液晶显示屏。液晶显示程序的基本流程图如图4-4所示。
开始初始化LCD设置显示位置显示字符结束 图4-4 液晶显示程序基本流程图
- 26 -
吉林化工学院毕业设计说明书
结 论
信号发生器已经成为了众多行业进行研究测试不可或缺的工具。 本文主要介绍了三相正弦波信号发生器的硬件电路结构及其中的原理。所设计的信号发生器可以产生三相正弦波以及波形的幅值及频率的增减功能。信号发生器输出波形的频率范围为100Hz~20KHZ,输出波形幅度范围为0~10V,结合所用的MSP430F169芯片,具有低功耗的特点。波形的产生是将正弦波信号数据先存入单片机,利用单片机定时器来控制片内DAC0和DAC两路数模转换模块按所存数据更新输出,发出A相B相正弦波,依据三相交流电瞬时值之和为零的原理合成C相正弦波,幅值、频率均可调,幅值通过程控放大器放大,频率通过单片机设定。此方案的有点是电路原理比较简单,实现起来比较容易。
随着信号发生器信号整合相关技术的不断完善,数字化、智能化、小型化的信号发生器必将为各领域的科学研究带来极大的便利,信号发生器的发展前景也必将更加广阔。
- 27 -
基于MSP430单片机三相正弦波形发生器设计
参考文献
[1] 雷发禹,刘泽华,姚自强等.基于单片机的信号发生器设计与仿真[J].邵阳学院学
报,2009(6):40-41.
[2] 赵宏亮.一种实用任意波形信号发生器的设计[J].仪表技术,2008(2):14-18.
[3] 沈建华,杨艳琴.MSP430系列16位超低功耗单片机原理与应用[M].北京:清华大学出版社,
2004.
[4] 张唏,王德银,张晟.MSP430系列单片机实用C语言程序设计[M].北京:人民邮电出版社,
2005.
[5] 刘刚,刘霞,孙香涛.三相基波发生器的设计[J].吉林化工学院学报,2010(1):59-60. [6] Datasheet.Direct Digital Synthesizer[J].ANALOGDEVICES,1997(43):24-28. [7] 杨泽民,刘培兴,王永丹.液晶显示器原理与应用[M].沈阳:东北工学院出版社,2002. [8] 清华大学电子学教研组.数字电子技术基础[M].5版.北京:高等教育出版社,2006. [9] 许胜辉.程控波形发生器的研究[J].武汉职业技术学院学报,2007(5):91-93.
[10] Dick Chris,Harris Fred.Direct digital synthesis-someoption for FPGA[J].Proceeding
of SPIE,1999(38):23-27.
[11] Syamsuddin Eniman Y,Martanto A CPLD.Implementationof function generator
[J].Systerms and Applications,2001(9):13-16.
[12] 魏小龙.MSP430系列单片机接口技术及系统设计实例[M].北京:北京航空航天大学出版社,
2002.
- 28 -
吉林化工学院毕业设计说明书
附录A 硬件电路
C12VCC646362616059585756555453525150491BT1(3.6V)15pXTAL_8MHzC215pAVccDVssAVssP6.2/A2P6.1/A1P6.0/A0/RST/NMITCKTMSTDITDO/TDIXT2INXT2OUTP5.7/TBOUTH/SVSOUTP5.6/ACLKP5.5/SMCLKVCC123R29 1KP3.0P3.14567891011121314151610ΩVSSVCCVEERSR/WED0D1D2D3D4D5D6D7VCCVSS1602P1.5/TA0P1.6/TA1P1.7/TA2P2.0/ACLKP2.1/TAINCLKP2.2/CAOUT/TA0P2.3/CA0/TA1P2.4/CA1/TA2P2.5/RoscP2.6/ADC12CLK/DMAE0P2.7/TA0P3.0/STE0P3.1/SIMO/SDAP3.2/SOMI0P3.3/UCLK0/SCLP3.4/UTXD012345Vout_sin16Vout_sin27XTAL_32768HzVCC21891N484210/RSTD5R0111R0212100k1K13141522pFC3161DVccP6.3/A3P6.4/A4P6.5/A5P6.6/A6/DAC0P6.7/A7/DAC1/SVSINVref+XINXOUT/TCLKVeref+Vref-/Veref-P1.0/TACLKP1.1/TA0P1.2/TA1P1.3/TA2P1.4/SMCLKMSP430F169P5.4/MCLKP5.3/UCLK1P5.2/SOMI1P5.1/SIMO1P5.0/STE1P4.7/TBCLKP4.6/TB6P4.5/TB5P4.4/TB4P4.3/TB3P4.2/TB2P4.1/TB1P4.0/TB0P3.7/URXD1P3.6/UTXD1P3.5/URXD048474645444342414039383736353433P3.2P4.0P4.1P4.2P4.3P4.4P4.5P4.6P4.7470217181920212223242526272829303132VCCK1P1.0K2Sin 1R1110KR1210KR1310K15V3+2-1Sin 310K5VP1.1K310K5VP1.2Sin 2K410K5VP1.5OP07R143.3K-15VK510K5VP1.65V
- 29 -
基于MSP430单片机三相正弦波形发生器设计
附录A 硬件电路(续)
5VV17805V0C5470ufT1220V7.5V7.5VC4470ufGNDC6470ufV1C7470uf7905V0-5V15VV17815V0C9470ufT218V18VC8470ufGNDC10470ufV1C11470uf7915V0-15V
R4 100KSin1C1222PF2355V78OP0715V615V12181719P2.0P2.1P2.2P2.3P2.4P2.5P2.6P2.7765416154-5V1R5 2KC13100PFCSWR1WR2XFERILED0D1D2D3D4VEERfb 500KTIP41C-A0 NPN15V27OP07VrefRfIO13IO25R6 51K861VOUT4-15VTIP42C-A1 PNPR8 10K15VR9 10KR7 2K1413D5D6D73AGND10DGNDDAC0832-15V
- 30 -
吉林化工学院毕业设计说明书
附录B 软件程序
#include #define TOP 0 // 竖直方向零点 #define BOTTOM 64 // 竖直方向坐标最大值 #define LEFT 0 // 水平方向坐标最小值 #define RIGHT 128 // 水平方向坐标最大值 #define EN_WIDTH 8 // 数字字符串的长度 #define CH_WIDTH 128 // 中文字符串的长度 unsigned char px, // 显示字符串的X位置 py, // 显示字符串的Y位置 width; // 字符串的宽度 int data; // 显示数字 // write_Command(),用于写命令到LCD,CS(片选)在此函数外设置 void write_Command(char cmd) { P3OUT &= 0xfb; //禁止 EN P5DIR = 0xff; P3OUT &= 0xfc; //rs=0 ,r/w=0 P5OUT = cmd; P3OUT |= 0x04; //使能 P3OUT &= 0xfb; //禁止 } // 初始化LCD void init_LCD(void) { P5DIR = 0xff; // 设置P5输出模式 P5OUT = 0x00; // 初始值为0 P3DIR |= 0xcf; // P4.0~P5,P4.6,p2.7 置为输出模式 P3OUT |= 0x48 ; // cs1,cs2 为1,reset=0 _NOP(); _NOP(); - 31 - 基于MSP430单片机三相正弦波形发生器设计 _NOP(); P3OUT |= 0x04; // en=1 P3OUT |= 0x80; write_Command(0xc0); // write_Command(0x3f); //显示开 clear_Rect(0,0,8,64); //清除第一块 clear_Rect(0,64,8,64); //清除第二块 } #include ﹤msp430f169.h﹥ Const long int NUM_SIN[72]={ 0x800,0x8b2,0x963,0xa12,0xabc,0xb61,0xc00,0xc96,0xd24, 0xda8,0xe20,0x8ed,0xeed,0xf40,0xf84,0xfba,0xfe0,0xff8, 0xfff,0xff8,0xfe0,0xfba,0xf84,0xf40,0xeed,0xe8d,0xe20, 0xda8,0xd24,0xc96,0xc00,0xb61,0xabc,0xa12,0x963,0x8b2, 0x800,0x74d,0x69c,0x5ed,0x543,0x49e,0x400,0x369,0x2db, 0x257,0x1df,0x172,0x112,0x0bf,0x07b,0x450,0x01f,0x007, 0x000,0x007,0x01f,0x045,0x07b,0x0bf,0x112,0x172,0x1df, 0x257,0x2db,0x369,0x400,0x49e,0x543,0x5ed,0x69c,0x74d};// 正弦波数据表 Const unsigned short int N1=72; //一个周期分组数 Const unsigned short int N2=50; //初始频率 Const unsigned long int F=800256; // 高速时钟频率 Short int buf_TA,N_sin,N_sin1;// 定时周期计数值和数组指针 Unsigned int cont; 计数储变量 Void init_TB(void) { Buf_TA=(int)(F/(N1*N2)); TBCCR0=Buf_TA; TBCTL=TBSSEL_2+TBCLR+SHR_0;//SMCLK,clear TBR TBCCTL0=CCIE; // 中断使能CCR0 TBCTL|=MC0; //设置递增模式 } Timer B0中断服务程序 Interrupt[ TIMERB0_VECTOR] void timer_B(void) //中断服务入口地址 { DAC12_0DAT=NUM_RAM0[N_sin]; N_sin1=N_sin+24; //设置相位差为120° - 32 - 吉林化工学院毕业设计说明书 If(N_sin1>71) { N_sin1=N_sin1-72;} } DAC12_1DAT=NUM_SIN0[N_sin]; N_sin=N_sin+1; If(N_sin==72) { N_sin=0; } _NOP(); } WDT中断服务程序 #pragma vector=WDT_VECTOR //中断程序入口地址 _interrupt void watchdog_timer(void) //interrupt[WDT_VECTOR]void watchdog_timer(void) { cont=cont+1; P1OUT=0X10; //taggle P1.4 using exclusive-OR If(cont==4) { cont=0} } 主程序 Void main(void) {unsigned char tmpv_1; WDTCTL=WDT_ADLY_250; // WDT间隔时间为250ms BCSCTL1=XT2OFF+SELS; //清零位 BCSCTL2=SELS; //选择SMCLK=HF xtal P1DIR=0x80; //Set P1.4 to output direction ADC12CTL0=REF2_5V+REFON; // 内部2.5V参考源接通 DAC12_0CTL=DAC12IR+DAC12AMP_5+DAC12ENC;//内部参考源为1 DAC12_1CTL=DAC12IR+DAC12AMP_5+DAC12ENC;//内部参考源为1 DAC12_0DAT=0x80; //初值1.25V DAC12_1DAT=0x80; //初值1.25V IE1|=WDTIE; //使能EDT中断 - 33 - 基于MSP430单片机三相正弦波形发生器设计 init_TB(); _EINT(); //使能中断 cont=0; for(tmpv_1=0;tmpv_1<72;tmpv++) {NUM_RAM0[tmpv_1]=NUM_SIN0[tmpv_1]; NUM_RAM1[tmpv_1]=NUM_SIN1[tmpv_1]} xdata=50;aindata=setadata=24; Init_LCD(); void init() { WDTCTL=WDTPW+WDTHOLD; //关看门狗 BCSCTL1 =DIVA1+DIVA0; //设定DCO为1MHZ DCOCTL =DCO2+DCO1+DCO0; TACTL=TASSEL1+TACLR+ID_3; //定时器A时钟源为MCLK,\\式 CCR0 =65535; //计数值为65535个ACLK周期 CCTL0|=CCIE; TACTL|=MC1; //连续计数模式 #include \"msp430f169.h\" //按键程序 /*****************宏********定********义***************** * 命令字定义 * ********************************************************/ #define uchar unsigned char #define uint unsigned int /******************************************************** 按键定义 ********************************************************/ //选用端口定义 #define KEYDIR P1DIR #define KEYIES P1IES #define KEYIE P1IE #define KEYIN P1IN #define KEYIFG P1IFG //定义键盘管脚 #define KEY1 BIT0 #define KEY2 BIT1 - 34 - 吉林化工学院毕业设计说明书 #define KEY3 BIT2 #define KEY_MOD (KEY0+KEY1+KEY2+KEY3) #define KEY_TIME 50 //连续按键经过此时间,按键次数加1 #define KEY_NONE 0 //无键按下 #define KEY_P10 0x01 //P1.0键值 #define KEY_P11 0x02 //P1.1键值 #define KEY_P12 0x04 //P1.2键值 #define KEY_P10 0x08 //P1.5键值 #define KEY_P10 0x09 //P1.6键值 /********************按键变量定义***********************/ uchar KeyZhi=KEY_NONE; //经过确认的键值 uchar KeyDown=KEY_NONE; //被按下的键 uchar ajsmsq; //按键扫描计数器 uchar KeyTime; /*************************************************************************** 键盘初始化 **************************************************************************** void InitKey() { KEYDIR &= ~(KEY0+KEY1+KEY2+KEY3); //设置端口为输入 KEYIES |= (KEY0+KEY1+KEY2+KEY3); //设置下降沿中断 KEYIE |= (KEY0+KEY1+KEY2+KEY3); //打开端口中断 } /*************************************************************************** 打开或者关闭键盘中断 sw: 0:关闭 100:打开 *****************************************************************************/ void GoKey(uchar sw) { if(sw==0) KEYIE &= ~(KEY0+KEY1+KEY2+KEY3); //关闭端口中断 - 35 - 基于MSP430单片机三相正弦波形发生器设计 else KEYIE |= (KEY0+KEY1+KEY2+KEY3); //打开端口中断 } /*************************************************************************** 获得键值 返回值:按下的有效的键的键值 *****************************************************************************/ uchar GetKeyZhi(void) { uchar temp; temp=KeyZhi; KeyZhi=KEY_NONE; //清除键值 return temp; } /***************************************************************************** 判断按键的有效性 *****************************************************************************/ void IsKey() { if((KEYIN&KEY_MOD)==KEY_MOD) { //没有键按下 KeyDown=KEY_NONE; //TACTL&=~TAIE; //关闭定时器A溢出中断 GoKey(100); //打开键盘中断 } else { if(KeyTime==0) - 36 - 吉林化工学院毕业设计说明书 //P1.0按键按下 if K1==1&K5==1; i=i+1; i++; else uchar ajsmsq; { //P1.1按键按下 if K2==1&K5==1; i=i+10; i++; else uchar ajsmsq; } { //P1.2按键按下 if K3==1; i=i+100; i++; else uchar ajsmsq; } { //P1.4按键按下 if K4==1&K5==1; V=V+0.1; V++; else uchar ajsmsq; } else { KeyDown=KEY_NONE; //TACTL&=~TAIE; //关闭定时器A溢出中断 GoKey(100); //打开键盘中断 } else { KeyTime--; - 37 - 基于MSP430单片机三相正弦波形发生器设计 } } P3SEL = 0X00; P3DIR = 0XFF; P3OUT = 0X00; P4SEL = 0X00; P4DIR = 0XFF; P4OUT = 0X00; P3OUT&=~BIT1; P3OUT&=~BIT2; write_com(0x38);//显示模式设置 write_com(0x0c); //显示开及光标设置 write_com(0x04); write_com(0x01); //显示清屏 delay(10); lcd_pos(0x01);//设置显示位置 i = 0; while(dis1[i] != '\\0') { lcd_wdat(dis1[i]);//显示字符 i++; } lcd_pos(0x42);// 设置显示位置 v = 0; while(dis2[i] != '\\0') { lcd_wdat(dis2[i]);// 显示字符 v++; } _EINT(); // RW口为-0 //EN口为-0 - 38 - 吉林化工学院毕业设计说明书 _BIS_SR(GIE); } while(1) { _BIS_SR(CPUOFF); //关CPU _NOP(); //C-spy使用 } } } - 39 - 基于MSP430单片机三相正弦波形发生器设计 致 谢 从大学到现在,从课题开始到论文的顺利完成,我满怀欣喜,回想求学之路,快乐而艰辛,在这本科生涯即将结束之际,一直都离不开父母、老师、同学、朋友给我热情的帮助,在这里请接受我诚挚的谢意! 毕业设计,让我将学到的知识运用与实践的这样一次挑战。将知识以工程项目的形式展现出来。这次毕业设计让我收获很多。是在学校四年来所学知识的结合运用。我在整个设计过程中得到了许多朋友、老师的帮助,在这里我想对你们的无私帮助表示感谢。首先,我要感谢的是我的导师吴兴波老师。吴老师平日里工作繁多,但在我做毕业设计的每个阶段,都给予我耐心的指导和帮助。可以说,没有吴老师的耐心指导和帮助,我是不可能顺利完成我的毕业设计的。另外,吴老师严谨的治学态度以及对待学生极端负责的精神,给我留下很深的印象,并将影响我今后的学习和工作。其次,我还要感谢学校,感觉图书馆,学校实验室给我提供的良好的学习氛围。是你们让我学得到如此多的知识,让我从对单片机、数字信号处理、数字电路等等相关知识一窍不通的门外汉变成了一个集单片机、数电、模电、信号系统等多门学科知识于一身的专业人士! 总之,感谢每一位关心过我,爱护过我的人。滴水之恩,当涌泉相报。最后,再次感谢我的导师吴老师。此外,我还要对在这次设计中,帮助和支持我的同学,表示感谢! 恩情似海,永生难忘!衷心祝愿老师身体健康,工作顺利,生活幸福美满!祝朋友们心想事成,美梦成真! - 40 - 因篇幅问题不能全部显示,请点此查看更多更全内容