三相信号源设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息与控制工程学院硬件课程设计说明书三相信号发生器设计
学生学号:
学生姓名:
专业班级:
指导教师:
职称:
起止日期:2013.4.22~2013.5.10
吉林化工学院
Jilin Institute of Chemical Technology
硬件课程设计任务书
一、设计题目:三相信号发生器设计
二、设计目的:
1.掌握三相信号发生器设计方法。
2.了解MSP430F169单片机硬件结构。
3.掌握MSP430F169系统的设计方法。
4.掌握直流稳压电源设计方法。
三、设计任务及要求
1.学习MSP430F169单片机等器件的工作原理及各引脚的说明,掌握该单片机系统的工作原理和设计方法。
利用MSP430F169等元器件完成单片机系统设计和焊装、调试。
2.使用单片机和运算放大器等电子元件实现三相正弦信号发生器电路设计。
3.完成基于MSP430F169单片机的三相正弦信号发生器程序设计和系统电路硬件焊装、调试。
四、设计时间及进度安排
硬件课程设计任务书 (1)
引言 (3)
第一章系统设计方案与论证 (4)
1.1总体方案选择 (4)
1.2 器件的选择 (4)
1.2.1控制芯片选择 (4)
1.2.2 显示器选择 (4)
1.2.3 键盘模块选择 (5)
第二章系统硬件电路设计 (6)
2.1 单片机小系统设计 (6)
2.1.1MSP430F169单片机及内部模块介绍 (7)
2.1.2复位电路设计 (8)
2.1.3按键电路设计 (8)
2.2 A相信号输出电路 (8)
2.2.1隔直滤波电路设计 (8)
2.2.2放大电路设计 (9)
2.3 B相信号输出电路 (9)
2.4C相信号输出电路 (9)
2.4.1求和电路设计 (10)
2.4.2放大电路设计 (10)
2.5 显示电路设计 (10)
2.6 电源电路设计 (11)
2.6.1 单相桥式整流电路 (11)
2.6.2 滤波电路 (12)
2.6.3 稳压电路 (12)
第三章程序设计 (13)
3.1程序部分参数计算 (13)
3.2各程序流程图 (13)
3.2.1主程序流程图 (13)
3.2.2看门狗 (14)
第四章测试数据及测试结果分析 (15)
4.1 测试工具 (15)
4.2 测试数据 (15)
结果分析 (15)
结论 (16)
参考文献 (17)
附录 (18)
引言
在现代电子系统的测试和应用中,信号源是必不可少的。
根据不同系统对信号的不同要求,人们希望信号源输出波形信号的幅值、频率可调,且频率准确、稳定;甚至在一些情况下还希望信号源能够输出相位关系确定的多路信号。
因此,传统的模拟信号源已经远远不能满足目前的电子设计要求,而是直接采用数字化合成技术产生的全数字化信号源。
以数字化为基础的智能信号源,不仅在性能上有质的飞跃,功能上也更强大,操作更简单。
经过考虑,我决定设计一台三相信号源,来代替电网的高压三相电,满足部分电力系统实验的模拟和研究,同时,还可以用做测试信号。
第一章系统设计方案与论证
1.1总体方案选择
方案一:利用模拟开关和电阻网络产生阶梯波,从而拟合出正弦信号。
但为了准确的增益阶跃,选取精密电阻十分困难,而且为了消除模拟开关导通电阻的影响,需要加电位器微调,即麻烦,又不能达到精度要求。
方案二:以单片机为控制核心,利用单片机片发出数字量通过DAC转换器输出所需波形。
控制单片机写入到数模转换器的数字量,即可控制其输出的模拟电压值。
波形发生程序控制单片机输出到DAC模块的数据,使其产生所需波形的模拟电压。
改变更新输出数据的时间间隔,控制输出波形的频率。
可将一个周期正弦波分为72个时段,每时段起始正弦值存入数组,DAC 用该数组数据拟合正弦波。
当单片机的两路DAC输入数据在所存数组中相差24个单元,即可保证DAC0和DAC1输出正弦波相位相差120°。
设DAC0和DAC1对应三相正弦交流电中的u A和u B相电压,相电压u C =-(u A+ u B)。
因此,可将DAC0和DAC1输出经反相加法器合成为相电压u C,使信号发生器同时输出三相基波信号。
此方案输出信号稳定,电路设计也相对简单。
方案三:从电网引入三相交流电,通过变压器降压,再通过滤波电路滤去高频杂波,得到三相信号。
再通过一些后续电路实现频率及其幅值的调整,以达到设计要求。
此方案得到的信号频率固定,后续调整较为麻烦。
综合考虑我们选择方案二。
1.2 器件的选择
1.2.1控制芯片选择
方案一:采用目前比较通用的51系列单片机。
此单片机的运算能力强,软件编程灵活,自由度大。
虽然该系统采用单片机为核心,能够实现对外围电路的智能控制,但核心控制部件使用89C51时,为达到设计的要求,外围电路必须加上D/A芯片,这就使得整个系统硬件电路变得复杂,而且D/A器件价格较高,使得系统的性价比偏低。
方案二:采用MSP430F169单片机。
此单片机功能较强,性价比高、集成度高、易扩展、可靠性高、功耗小及具有较高的数据处理和运算能力。
由于MSP430F169单片机内部集成了D/A 转换器,不需外加D/A。
这种方案既能实现智能化的特点,简化硬件电路,提高测量精度,这给调试、维护和功能的扩展、性能的提高,带来了极大的方便。
鉴于上面考虑,我们采用方案二。
1.2.2 显示器选择
方案一:采用LED显示,把测量所得到的高度通过数码管显示。
数码管亮度高,体积小,
重量轻。
再配上74HC164(串行输入转并行输出),使其不需要时时更新吧,节省CPU资源,而且可以使数据稳定,以达到静态显示的目的。
方案三:采用12864LCM点阵显示器,点阵显示界面友好,显示信息量丰富,接口电路简单,可以和单片机直接相连。
考虑到本题显示信息较少,只需要显示三相信号的频率,12864LCM点阵显示器性价比较差,所以,我们决定选择LED数码管作为本系统的显示模块。
1.2.3 键盘模块选择
方案一:采用普通按键模式,通过点阵显示器索显示的信息对系统进行控制,方便快捷,易于实现。
方案二:采用4×4矩阵键盘,其优点是按键数目较多,方便数据输入,但需要单片机对其进行动态扫描,耗电量较高,编程较难。
考虑到本系统的输入信息较少,我们选择普通按键作为本系统的键盘模块。
第二章系统硬件电路设计
本设计采用MSP430F169单片机作为系统控制单元,单片机通过按键或上位机读取用户设置的输出信号频率,再通过D/A转换发出给定值,并通过滤波和放大产生A相和B相信号,再将A相和B相信号反向求和得到B相信号,设置及输出信号参数通过LED显示屏显示。
系统结构框图如图2-1所示。
图2-1 系统结构框图
2.1 单片机小系统设计
采用MSP430F169单片机作为系统控制单元,外配4MHz主晶振和32768Hz的辅助晶振、复位电路、按键电路、LM12864显示器构成单片机小系统,MSP430F169单片机小系统电路如图2-2所示。
图2-2 MSP430F169单片机小系统电路
2.1.1MSP430F169单片机及内部模块介绍
MSP430F169是TI公司进入中国市场的MSP430F系列单片机中功能最强的芯片。
内部模块如下:
(1)CPU(中央处理单元):执行程序,处理16位二进制数据,自动执行。
(2)振荡器系统时钟:与外电路配合产生方波时钟信号,驱动CPU按时钟节拍工作。
(3)JTAG接口:与计算机系统连接,下载、仿真运行程序,自动执行。
(4)只读存储器(ROM):容量64KB,存储程序、常数数据,执行过程中不能改动,掉电不丢失。
下载时自动完成。
MSP430F413的F是指该单片机采用FLASH型只读存储器。
(5)随机存储器(RAM):容量64KB,存储数据,执行过程中可改动,掉电丢失。
自动执行。
(6)上电复位:与芯片58脚(/RST-RESET)配合,芯片供电后引脚电平由低到高,CPU 开始工作,自动执行。
(7)PIO端口:并行(8条引脚对应8位二进制数)输入输出接口,实现微控制器与外电路连接。
P1至P6输入输出功能相同,但P1和P2具有中断功能。
(8)看门狗定时器:实现定时功能,。
(9)增计数模式:捕获/比较寄存器CCR0用作Timer_A增计数模式的周期寄存器,因为CCR0为16位寄存器,所以该模式适用于定时周期小于65536的连续计数情况。
计数器TAR可以增计数到CCR0的值,当计数值与CCR0的值相等(或定时器值大于CCR0的值)时,定时器复位并从0开始重新计数。
增计数模式的计数过程如图2-3所示。
通过改变CCR0值,可重置计数周期。
图2-3增计数模式示意图
2.1.2复位电路设计
当系统一上电先经RC电路对电容充电,电容电压不能跃变,为低电平,单片机自动复位,当电容充电过1/2VCC时,为逻辑高电平,单片机完成复位,开始正常工作状态。
当出现紧急情况需要复位时,按下按键,电容对地放电,当电容电压低于1/2VCC时,单片机复位,松开按键,再重复上过程。
我还配以保护二极管用以钳制引入单片机的电压不大于5V,从而保护单片机。
2.1.3按键电路设计
按键引入经过二极管的电源电压VCC1,再经下拉电阻接地,当按键没有按下时,单片机读入低电平,当按键按下时读入高电平,大约4.3V。
2.2 A相信号输出电路
单片机DA转换器产生的A相信号经过RC滤波电路,产生正弦信号,由电压跟随器送入反向比例放大电路放大输出,如图2-4所示。
图2-4A相信号输出电路
2.2.1隔直滤波电路设计
单片机DAC输出电压范围0—2.5V(峰—峰值),中心轴(偏移量)对应1.25V,没有负压。
所以必须经过隔直滤波,将DAC输出的信号整体下移1.25V,使中心轴对应0V,从而
模拟产生正弦信号。
我设计选用RC隔直滤波。
2.2.2放大电路设计
由于经过隔直滤波产生的电压信号是幅值为1.25V的正弦信号,幅值和要求的比较太小,需要功率放大,我选用同向比例放大电路将幅值放大。
放大比例关系如式2-2-2。
Rf
R
=(2-2-2)
V
+
VA⨯
out
_
1
_o
)5
/1
1(
为了避免隔直滤波电路和放大电路之间的干扰,再在两者之间加电压跟随器,将两者隔离。
2.3 B相信号输出电路
单片机的另一路DA转换器产生B相信号,原理和电路设计和A相完全相同,电路设计如图2-5所示。
图2-5 B相信号输出电路
2.4C相信号输出电路
由三相交流电的基本特性u C=-(u A+ u B),将产生的A,B两相信号引入反相加法器求和,再经放大电路放大输出,电路如图2-6 所示。
图2-6 C相信号输出电路
2.4.1求和电路设计
MSP430F169单片机只有两路DAC,没办法产生C相信号,所以,我考虑用A,B两相信号合成并取反产生。
并设计选择了A,B两相通过反向比例求和电路产生C相。
合成产生C相信号关系式如式2-4-1
o
R
V
V
-
=(2-4-1)
o
+
V⨯
oc
R
/2
_R
8
_
)7
(
_
/1
6
2.4.2放大电路设计
同A相完全一样。
(略)
2.5 显示电路设计
LED显示模块与单片机连接电路如图2-7 所示。
图2-7LED显示模块与单片机连接电路
由单片机的P4.0发出数据,P1.0发出移位时钟信号,从而驱动74HC164,完成串行输入转并行输出用以驱动LED数码管。
74HC164芯片内部结构如图2-8 所示。
图2-8 74HC164芯片内部结构
2.6 电源电路设计
为了给三相信号源系统供电,电源电路如图2-9所示,输出±5V直流电压。
图2-9电源电路
2.6.1 单相桥式整流电路
变压器的作用是将交流电网电压u变成整流电路要求的交流电压;四只整流二极管D1~D4接成电桥的形式,固有桥式整流电路之称。
在电源电压u的正、负半周内电流通过负载方向相同,属全波整流,将交流电变为脉动。
2.6.2 滤波电路
滤波电路用于滤去整流输出电压中的纹波,一般由电抗元件组成,如在负载电阻两端并联电容器C,或在整流电路输出端与负载间串联电感器L,以及由电容、电感组合而成的各种滤波电路。
对小负载的电源,仅采用电容虑波即可。
2.6.3 稳压电路
稳压电路是将不稳定的直流电压变为稳定的直流电压的集成电路,一般均采用稳压芯片制作稳压电路。
由于稳压芯片具有稳压精度高、工作稳定可靠、外围电路简单、体积小、重量轻等显箸优点,在各种电源电路中得到了普遍的应用。
常用的稳压芯片有78XX和79XX系列,其中78XX系列为正电压输出,79XX系列为负电压输出,输出电压有±5V、±9V、±12V、±15V、±18V等规格,最大输出电流为1.5A。
它的内部含有限流保护、过热保护和过压保护电路,采用了噪声低、温度漂移小的基准电压源,工作稳定可靠,使用十分方便。
第三章 程序设计
3.1程序部分参数计算
DAC 输出电压范围0—2.5V (峰—峰值),对应输入数字量范围0—0FFFH ;中心轴(偏移量)对应1.25V (数字量800H );最大值1.25V (数字量800H )。
若将一个正弦周期分为72个点,个点对应的DAC 输入数值计算公式如下:
2048))5sin(1(0⨯⋅+=N Din (再变为十六进制数)。
其中N 为各时段序号,Din 为DAC 输入数值。
逐段求出后基波数据后,转换成十六进制数
用常量数组存入单片机(常量数组占用ROM )。
定时中断时间常数计算公式:2
1_N N F
TB Buf ⋅=
其中:Buf_TB 是MSP430F169单片机定时器B 定时中断时间常数;F 是单片机定时器B 所选时钟频率(8MHz );N1是一个基波周期所分时段数;N2是基波频率数。
3.2各程序流程图
3.2.1主程序流程图
图3-1主程序流程图
3.2.2看门狗定时器流程图
图3-2看门狗定时器流程图
第四章测试数据及测试结果分析
4.1 测试工具
本设计采用频率计,示波器,万用表等进行测试。
4.2 测试数据
(1)测定输出信号频率
测试数据如下:
结果分析
经测量我们得到上面的数据,当设定输出为正弦波信号频率时,输出信号的频率误差小于0.02Hz,达到了题目要求。
误差引起的因素包括硬件电路的设计,外界的干扰,算法的选择以及测量工具本身灵密度造成的测量误差等。
结论
本设计能够输出正弦波信号,输出频率范围10~99Hz可调,步进1Hz,能够通过LED数码管显示输出信号参数。
从这次的电子竞赛中,我真正地意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,知识只有在经常的温习使用的过程中才能提高升华。
还有要锻炼自己的动手能力,不能一味地去学习理论而不实践。
随着科学的迅猛发展,新技术的广泛应用,会有很多领域是我们未曾接触过的,只有敢于去尝试才能有所突破,有所创新。
也不仅仅是通过几项工种所要求我们锻炼的几种能力,更多的则需要我们每个人在竞赛结束后根据自己的情况去感悟,去反思。
只有勤奋自勉,才能有所收获。
参考文献
[1]胡大可.MSP430系列FLASH型超低功耗16位单片机.北京:北京航空航天大学出版社,2001
[2]秦龙.MSP430单片机常用模块与综合系统.北京:电子工业出版社,2007
[3]曹磊.MSP430单片机C程序设计与实践.北京: 北京航空航天大学出版社,2007
[4]康华光.电子技术基础模拟部分. 北京:高等教育出版社.2002
[5]时景荣,李立春.C语言程序设计.北京:中国铁道出版社.2007
附录
/***********************************************************
* MSP430F169双路正弦波发生器程序清单
************************************************************/
#include <msp430x16x.h>
/***********************************************************
* 双路正弦波数据表,存入ROM区
************************************************************/
const int NUM_SIN0[72]={ //正弦波数据表
0x800,0x8b2,0x963,0xa12,0xabc,0xb61,0xc00,0xc96,0xd24,0xda8,0xe20,0xe8d, // 0_55度
0xeed,0xf40,0xf84,0xfba,0xfe0,0xff8 ,0xfff,0xff8,0xfe0,0xfba,0xf84,0xf40, //60_115度
0xeed,0xe8d,0xe20,0xda8,0xd24,0xc96,0xc00,0xb61,0xabc,0xa12,0x963,0x8b2, //120_175度
0x800,0x74d,0x69c,0x5ed,0x543,0x49e,0x400,0x369,0x2db,0x257,0x1df,0x172, // 180_235度
0x112,0x0bf,0x07b,0x045,0x01f,0x007,0x000,0x007,0x01f,0x045,0x07b,0x0bf, //240_295度
0x112,0x172,0x1df,0x257,0x2db,0x369,0x400,0x49e,0x543,0x5ed,0x69c,0x74d}; //300_355度const int NUM0[8]={0X00,0X00,0X80,0X80,0X80,0X80,0X80,0X80};
const unsigned short int N1=72; // 一个周期分组数
int xs[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};
const unsigned long int F=8000256; //高速时钟频率
short int Buf_TB,N_sin,N_sin1; //定时器中断周期、sin分组数
unsigned int xdata=50,indata,setdata,aindata,setadata,N2=50,i,a,b;
unsigned int a1,a2,b1,b2,i;
/***************************************************************
* 串行输入转并行输出(数码管驱动显示)子程序
***************************************************************/
void czb(void)
{
a1=xdata/10; a2=xdata%10;
b1=xs[a1];b2=xs[a2];
i=0;
while(i<16)
{if(i<8)
{ P4OUT=b1&0x01;
P1OUT=0x01;
P1OUT=0x00;
b1=b1/2;
}
if(i>7)
{ P4OUT=b2&0x01;
P1OUT=0x01;
P1OUT=0x00;
b2=b2/2;
}
i++;
}
}
/*************************************************************** * 设置TimerB输出PWM的工作模式
***************************************************************/ void init_TB(void)
{
Buf_TB=(int)(F/(N1*N2));
TBCCR0 = Buf_TB;
TBCTL = TBSSEL_2 + TBCLR+ SHR_0 ; // SMCLK, clear TBR, TBCCTL0 = CCIE; // 中断使能CCR0
TBCTL |= MC0; // 设置递增模式
}
/***********************************************************
*Timer B0中断服务程序
************************************************************/
#pragma vector=TIMERB0_VECTOR //中断程序入口地址
__interrupt void timer_B (void)
//interrupt[TIMERB0_VECTOR] void Timer_B (void)
{
DAC12_0DAT = NUM_SIN0[N_sin]; // ccr1 Pwm cycle
N_sin1 = N_sin+24;
if(N_sin1 > 71)
{ N_sin1 =N_sin1-72; }
DAC12_1DAT = NUM_SIN0[N_sin1]; // ccr1 Pwm cycle
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)
{
indata = P2IN & 0x07;
if(indata!=0)
{
switch(indata)
{
case 1: xdata =xdata+1; if(xdata > 99) { xdata = 10 ; } break;
case 2: xdata =xdata-1 ; if(xdata <10) { xdata = 99 ; } break;
case 4:
setdata = xdata; N2 = setdata;
init_TB();
break;
}
czb();
}
}
/***********************************************************
main函数
***********************************************************/
void main(void)
{
WDTCTL = WDT_ADL Y_250; // WDT间隔时间为250ms(ACLK)
BCSCTL1 = ~XT2OFF+SELS; // 清零位= 高频xtal on
BCSCTL2 = SELS; // 选择SMCLK = HF xtal
P4DIR |= 0x01;
P4OUT=0x00;
P1DIR |= 0x01;
P1OUT=0x00;
ADC12CTL0 = REF2_5V + REFON; // 内部2.5V 参考源接通DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // 内部参考源为1
DAC12_1CTL = DAC12IR + DAC12AMP_5 + DAC12ENC; // 内部参考源为1
DAC12_0DAT = 0x800; // 1.25V
DAC12_1DAT = 0x800; // 1.25V
IE1 |= WDTIE; // 使能WDT中断
init_TB();
_EINT(); // 使能中断
xdata=50;
a1=a2=b1=b2=0;
czb();
while(1)
{
_BIS_SR(CPUOFF); //关CPU
_NOP();
}
}
20。