低成本双路正弦波发生器汇编.docx

上传人:b****6 文档编号:15788825 上传时间:2023-07-07 格式:DOCX 页数:44 大小:452.93KB
下载 相关 举报
低成本双路正弦波发生器汇编.docx_第1页
第1页 / 共44页
低成本双路正弦波发生器汇编.docx_第2页
第2页 / 共44页
低成本双路正弦波发生器汇编.docx_第3页
第3页 / 共44页
低成本双路正弦波发生器汇编.docx_第4页
第4页 / 共44页
低成本双路正弦波发生器汇编.docx_第5页
第5页 / 共44页
低成本双路正弦波发生器汇编.docx_第6页
第6页 / 共44页
低成本双路正弦波发生器汇编.docx_第7页
第7页 / 共44页
低成本双路正弦波发生器汇编.docx_第8页
第8页 / 共44页
低成本双路正弦波发生器汇编.docx_第9页
第9页 / 共44页
低成本双路正弦波发生器汇编.docx_第10页
第10页 / 共44页
低成本双路正弦波发生器汇编.docx_第11页
第11页 / 共44页
低成本双路正弦波发生器汇编.docx_第12页
第12页 / 共44页
低成本双路正弦波发生器汇编.docx_第13页
第13页 / 共44页
低成本双路正弦波发生器汇编.docx_第14页
第14页 / 共44页
低成本双路正弦波发生器汇编.docx_第15页
第15页 / 共44页
低成本双路正弦波发生器汇编.docx_第16页
第16页 / 共44页
低成本双路正弦波发生器汇编.docx_第17页
第17页 / 共44页
低成本双路正弦波发生器汇编.docx_第18页
第18页 / 共44页
低成本双路正弦波发生器汇编.docx_第19页
第19页 / 共44页
低成本双路正弦波发生器汇编.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

低成本双路正弦波发生器汇编.docx

《低成本双路正弦波发生器汇编.docx》由会员分享,可在线阅读,更多相关《低成本双路正弦波发生器汇编.docx(44页珍藏版)》请在冰点文库上搜索。

低成本双路正弦波发生器汇编.docx

低成本双路正弦波发生器汇编

 

低成本双路正弦波发生器(D题)

摘要

本作品基于DDS工作原理,利用CPLD编程实现NCO功能,进而实现题目中要求产生正弦波,每路信号的频率、幅度及两路信号的相位差均可程控设置。

以P89V51RD2芯片为本设计的控制核心,通过单片机与CPLD的连接实现对波形的频率、幅度及相位差的程控可调,并且可实现取消微处理器单元,控制逻辑单元也能实现独立设置特定参数信号功能。

参数设定与相关信息通过液晶屏显示。

关键字:

DDS原理,微处理器,可编程逻辑,CPLD

任务:

设计、制作一个低成本双路正弦波发生器,每路信号的频率、幅度及两路信号的相位差均可程控设置。

除工作电源外,正弦波发生器由微处理器单元(含键盘显示)、控制逻辑单元和模拟电路单元三部分组成。

要求控制逻辑单元不使用任何存储器资源,模拟电路单元不使用集成DAC且无可调阻容件。

正弦波发生器结构框图如下所示,微处理器单元以串行方式向控制逻辑单元发送参数控制字,控制逻辑单元产生若几个频率稳定的逻辑脉冲输出给模拟电路单元,模拟电路单元经过信号变换后得到预定参数的双路正弦波。

系统框图如下:

主要由键盘显示,微处理单元,控制逻辑单元,模拟电路单元构成。

本任务中推荐采用的信号变换原理有:

PWM信号经低通滤波后可变换为直流电压,窄带范围内的方波经低通滤波后可变换为相应频率的正弦波,两路不同频率的正弦波经差频与低通滤波后可变换为另一低频正弦波。

要求

基本要求

(1)两路正弦波的频率范围1Hz—1kHz,步进值不大于1Hz,频率准确度不低于0.1%;

(2)两路正弦波输出最大幅度不低于3V,幅度设置,设置分辨率不低于12bit;

(3)正弦波信号在整个频率设置范围内,波形失真度不大于2%;

(4)两路信号的相位差可以在0—359度内可调,设置分辨力不大于1度;

(5)所有参数均可程控设置;

(6)微处理器单元与控制逻辑单元信号连线应不超过3条。

发挥部分

(1)控制逻辑单元输出给模拟电路单元的信号线应不超过5条;

(2)当两路信号频率为1到10间的倍频关系时能同步,示波器观测两路波形稳定;

(3)设定的输出信号电压值在整个频段内,变换量小于5%;

(4)两路正弦信号幅度设置为零时,输出噪声小于5mV;

(5)取消微处理器单元,控制逻辑单元也能实现独立设置特定参数信号的输出;

(6)其他,主要考核硬件成本、技术指标提升和工艺水平。

 

一、方案论证与比较

1.1键盘显示比较与选择

方案一:

选用独立键盘按键和数码管显示,独立键盘的特点是程序编制简单,但是每个按键占用一条I/0口,当按键较多时,I/O口的利用率不高,适用于所需按键较少的场合。

采用数码管显示时一般采用动态显示,需要用I/O口发送段选与位选数据,若同时用独立键盘,则会造成I/O口的数量不够的问题,又因动态显示利用人眼余晖来实现八位数的动态显示,而且还具有可靠性不高,易烧毁的问题。

方案二:

该方案选用4*4矩阵式键盘和12864液晶。

采用矩阵式键盘可大大提高了I/O口的利用率,而采用液晶显示则可以通过控制单元对液晶提供各种控制命令,如:

清屏、字符闪烁、光标闪烁、显示移位等多种功能,显示内容丰富,并且具有微功耗、体积小,超薄轻巧的特点。

综上所述,由于本设计要用到16个按键,经过两种方案的比较,最终采用4*4矩阵式键盘和液晶屏显示的组合完成键盘显示单元。

1.2微处理器比较与选择

方案一:

选用MSP430系列单片机,拥有强大的处理能力 MSP430 系列单片机是一个 16 位的单片机,采用了精简指令集( RISC )结构,具有丰富的寻址方式(7 种源操作数寻址、 4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在 8MHz 晶体驱动下指令周期为 125ns 。

这些特点保证了可编制出高效率的源程序。

方案二:

选用P89V51RD2单片机,P89V51RD2单片机的典型特性是它的X2方式选项。

利用该特性可使应用程序以传统的80C51时钟频率(每个机器周期包含12个时钟)或X2方式(每个机器周期包含6个时钟)的时钟频率运行,选择X2方式可在相同时钟频率下获得2倍的吞吐量。

从该特性获益的另一种方法是将时钟频率减半而保持特性不变,这样可以极大地降低电磁干扰(EMI)。

Flash程序存储器支持并行和串行在系统编程(ISP)。

并行编程方式提供了高速的分组编程(页编程)方式,可节省编程成本和上市时间。

综上所述:

根据两个方案不同的特点,综合比较选用方案二中的P89V51RD2单片机作为微处理器单元。

1.3控制逻辑单元选择与比较

方案一:

逻辑控制单元选用CPLD,CPLD属于大规模集成电路范围,是一种用户根据各自需要而自行构造逻辑功能的数字集成电路,它具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点。

方案二:

FPGA它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

 CPLD和FPGA的主要区别是他们的系统结构。

CPLD是一个有点限制性的结构。

这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器。

这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。

而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。

CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的记忆体。

因此一个有关的重别是很多新的FPGA支持完全的或者部分的系统内重新配置。

允许他们的设计随着系统升级或者动态重新配置而改变。

一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行

综上所述:

方案一结合了方案二的优点而且也节约了实验成本,所以选择方案一来完成控制逻辑单元。

1.4模拟单元中放大器的方案比较:

方案一:

TL084,双列14脚封装,高阻输入结型场效应输入,电压反馈性运算放大器,工作电压等于正负18V静态电流等于1.4mA,输入偏置电流等于30pA,转换速率等于16V/μs功耗等于680mW,增益带宽等于3MHz,输入失调电压等于2~5mV。

方案二:

TL082是一个双运算放大器,通过小电压信号的变化控制大电压信号。

方案三:

LM324具有电源电压范围宽,静态功耗小,可单电源使用价格低廉等优点。

综上所述:

方案二继承了其他方案的许多的特点,也满足实验要求,因此选择方案二最合适。

1.5电源方案比较:

方案一:

使用自己设计的线性电源,设计时比较麻烦达到预期的目的很是不易,而且产生供电不稳定。

方案二:

 使用AC/DC模块。

此模块有良好的隔离、保护作用。

而且也能进行电压变换,也有很强的降低噪生的功能,但是成本较高。

综上所述,为了达到实验目的且考虑节约实验成本和实验资源有限,则选用实验室内的微机电源,虽

然需要持续充电但是仍然能达到实验效果。

二、系统方案描述与论证:

2.1总体设计:

系统工作流程为:

用P89V51RD2单片机作为微处理器,通过键盘输入需要输出的双相信号参数(频率、幅值、相位差、占空比),将相应参数通过液晶屏显示,同时数据输入到CPLD中,CPLD完成了NCO及其他所需功能,根据设计要求生成相应的频率与相位可调的数据,通过比较器与占空比控制字进行比较,产生频率、相位及占空比可调的脉冲信号f(t)。

通过比较器进产生一路占空比可调的矩形波,然后通过低通滤波器生成直流常量用于调节幅值,并通过电子开关改变脉冲信号f(t)的幅值,若想输出正弦波形,则再通过滤波器与运放即可得到。

由单片机P89V51RD2控制输出所需的波形参数,改变CPLD中的相关数据,波形信号可方便、快捷、精确输出。

此方案符合设计题目要求,具有易操作,稳定性强等优点。

方案系统框图如图1-3所示。

图1-3方案系统框图

2.2单元电路设计:

2.2.1CPLD部分:

12位移位寄存器的SCK、SOI端口和13位译码器的LOAD端口接到单片机上,寄存器的高4位做译码器的地址,低8位做锁存器输出的数据,6位锁存器的输出作为NCO内24位锁存器的信号端,当DLTA[23,0]信号输入到NCO内部时,开始进行循环相加,每计数到2^24时则输出最高位进入下一位进行计数,而下一位则为每2^12来记一次数直到最高位输出,此信号为

FRQA。

Fsys为连接CPLD内部的晶振,此信号连接在14位计数器上,由SET[5,0]来控制信号的脉冲,根据公式Fout=40M/2^12得到Fout的频率为9.7KHZ,此频率为基频。

FBASE≈10KHZ。

通过锁存器输出的信号一部分进入了NCO系统内部,另一部分则进入了鉴频器,VA[13,0]和Fout[13,0]进行鉴频比较,从而实现调节占空比即可调节幅度的作用,即输出信号PWMA,同理另一路输出PWMB则也是如此。

FX[11,0]为第二路NCO内部的输出与预置的正弦波的相位差PH[11,0]进行相加进行混频,从而得到信号FRQB。

将PWMA、PWMB、FBASE、FRQA、FRQB五个信号接入到模拟电路中去。

2.2.2模拟部分:

将矩形波输入到一个低通滤波器中,分别得到正弦波和余弦波,通过开关,将得到基频信号,再一次经过两个低通滤波器,得到频率不同的正弦和余弦信号,而信号再次通过开关得到混频,经过积分电路和低通滤波器,得到想要的正弦波。

其流程图如下:

图1

由于电源产生的电压为-12V--+12V大于电路中所用的电压,因此需要改进。

将电流通过由R1和R2并联的电阻经过电压跟随器得到+5V的电压,在经过一阶放大和反向电压跟随器得到-5V的电压。

图2

将得到的电源接和幅值为5的PWMA信号接到芯片4053上,在VA0输出幅度为2.44KHZ的信号。

这是一个占空比可调的信号,经过三阶滤波得到占空比为50%的DCA+,经过跟随得到占空比为25%的DCA-,再次使用多路开关得到幅度可调的方波信号。

此过程为第一级。

将第一级的信号经过三阶低通滤波器进行两次滤波得到相对稳定的正弦波,经过跟随放大得到SA+和SA-两种信号,该信号由频率为9.7KHZ基频信号控制,再次经过控制开关得到方波信号。

此过程为第二级。

将第二级得到的信号送入第三级,仍然经过两次三阶低通滤波得到正弦波,而这一级由差频控制其信号。

根据和差化积公式可得,sinA*sinB=-1/2(cos(A+B)-cos(A-B))得到由方波和正弦波的混频,而经过低通滤波器和积分电路,最终得到想要的相位差可调的正弦波。

其两路的频率分别为10~11KHZ和9.7~10.7KHZ。

2.2.3理论计算和分析:

我们的频率设计:

采用36bitNCO,40MHz有源晶振,准确度等于晶振准确度,频率设置采用24bit长,频率上限约为9.7KHz,因滤波器幅频特性限定,选1.2KHz。

根据公式:

40M/2^36=Fx/Δf得到Fxmin=40M/2^36=0.000582Hz≈0.5mHz,频率分辨率高于1mHz,实际测量时可以验证我们的幅度设计:

设置PWM脉宽为14bit可调,模拟部分采用正负12V电源,设定最大输出为5V,根据公式:

5/2^14=Vx/Δv

得到Vxmin=5/2^14=0.0003052V≈0.3mV,保证了有效分辨率优于12bit,且分辨率为1mV,实际测量时可以验证我们的相位设计:

根据控制逻辑单元相位偏移采用12bit,根据公式:

Φx/ΔΦ=360/2^12

得到Φxmin=360/2^12≈0.08789º,相位分辨率优于0.1度,实际测量时可以验证。

三、软件设计:

主控制芯片为P89V51RD实现,由于处理器速度较快,所以采用c语言编程方便简单.软件流程图如下:

四、系统测试:

测试所用仪器:

数字多用表34401A,示波器TDS1012,失真度仪GAD2019

幅频特性测试

频率

通道1峰-峰值(V)

通道2峰-峰值(V)

50

10.0

10.2

100

10.1

10.2

150

10.1

10.2

200

10.1

10.3

300

10.1

10.2

350

10.0

10.2

400

10.0

10.2

450

10.0

10.2

500

10.0

10.2

550

10.0

10.1

600

10.0

10.1

650

10.0

10.1

700

10.0

10.1

750

10.0

10.1

800

10.0

10.1

850

10.2

10.2

900

10.2

10.2

950

10.2

10.2

1000

10.2

10.2

经过测试得到两路正弦波的频率范围1Hz—1KHz,步进值不大于1Hz,频率的准确度不低于0.1%,两路正弦波输出最大幅度不低于3V,分辨率不低于12bit,设定的输出信号电压值在整个频段内,变换量小于5%

相位测试:

两路信号的相位差可在0—359度内可调,设置分辨力可达到0.1度

零点测试:

F=50Hz

AC(mV)

DC(mV)

通道一

1.5

0.8

通道二

2.3

0.8

经过测试,两路正弦信号幅度设置为零时,输出噪声未达到5mV.

通过测试使得相位,幅度,频率,零点的指标都得到了提升,2个4053单个成本为2.5,2个082单个成本为1.5,8个免费OPA2227,晶振成本为5,CPLD成本为20

结论

结论:

由于系统架构设计合理,功能电路实现较好,系统性能优良、稳定,较好地达到了题目要求的各项指标。

(1)两路正弦波的频率范围1Hz—1.2kHz,步进值0.001Hz,频率准确度0.1%;

(3)两路正弦波输出最大幅度5V,幅度设置,设置分辨力0.001V;

(3)正弦波信号在整个频率设置范围内,波形失真度小于2%;

(4)两路信号的相位差可以在0—359度内可调,设置分辨力0.1度;

(5)所有参数均可程控设置;

(6)微处理器单元与控制逻辑单元信号连线3条。

(7)控制逻辑单元输出给模拟电路单元的信号线5条;

(8)当两路信号频率为1到10间的倍频关系时同步,示波器观测两路波形稳定;

(9)输出信号电压值在整个频段内变换量小于5%;

(10)两路正弦信号幅度设置为零时输出噪声小于5mV;

(11)取消微处理器单元,控制逻辑单元也能实现独立设置特定参数信号的输出;

参考文献

《信号与系统》,ALANV.OPPENHEIM著,西安:

西安交通大学出版社,1997年;

《数字图像处理学》,元秋奇著,北京:

电子工业出版社,2000年;

《模拟电子线路基础》,吴运昌著,广州:

华南理工大学出版社,2004年;

《数字电子技术基础》,阎石著,北京:

高等教育出版社,1997年;

《数据结构与算法》,张晓丽等著,北京:

机械工业出版社,2002年;

《单片机原理及应用》,李建忠著,西安:

西安电子科技大学,2002年;

 

附录

附录1程序设计

#include

//#include

//#include

//#include

#include

#include"wanmei12864.h"

#definesuanfa_f(m)(m*1717.9869184)

//#definesuanfa_v(m,s)((8192+1638.4*m)*s)

#definesuanfa_v0(m)(2396.95*m)

#definesuanfa_v1(m)(2205.78*m)

#definesuanfa_p0(m)(m*4096/360.0)

#definesuanfa_p1(m)(m*4096/360.0)

#defineKEYBUSP2

sbitsda=P0^0;

sbitscl=P0^1;

sbitload2=P0^2;

staticlongdoublem,comd1,comd2,f[2]={1000.0,1000.0};

staticlongintch_f[2]={suanfa_f(1000.0),suanfa_f(1000.0)},

ch_v[2]={suanfa_v0(2.5),suanfa_v1(2.5)},

ch_p[2]={suanfa_p0(0.0),suanfa_p1(0.0)},

comi1,comi2,s;

/*9个静态参数*/

unsignedchartime=0;

unsignedcharN=20;

staticunsignedcharflag_s=0;

unsignedcharflag_ForVorP[3]=0;

unsignedcharstr_1chpf1[]="0Hz";

unsignedcharstr_1chpf2[]="1000Hz";

unsignedcharstr_1chpv1[]="0V";

unsignedcharstr_1chpv2[]="2.5V";

unsignedcharstr_1chp1[]="0°";

unsignedcharstr_1chp2[]="0°";

unsignedcharstr_2chpf1[]="0Hz";

unsignedcharstr_2chpf2[]="1000Hz";

unsignedcharstr_2chpv1[]="0V";

unsignedcharstr_2chpv2[]="2.5V";

unsignedcharstr_2chp1[]="0°";

unsignedcharstr_2chp2[]="0°";

unsignedcharcodestr_errf[]={"频率:

0-1200.00Hz"};//第一行汉字内容

unsignedcharcodestr_errv[]={"幅度:

0-5.000V"};//第二行汉字内容

unsignedcharcodestr_errp[]={"相位:

0-359.9°"};//第三行汉字内容

unsignedcharstr_td1[]="设置通道1:

";

unsignedcharstr_td2[]="设置通道2:

";

unsignedcharstr_td3[]="设置通道3:

";

unsignedcharstr_td[]="";

 

unsignedcharstr_title[]="双路信号发生";

unsignedcharstr_ch1[]="通道1";

unsignedcharstr_ch2[]="通道2";

unsignedcharstr_t[]="(按键选择通道)";

voiddelayx()

{;;}

voidwrite_byte(unsignedintadr,unsignedintdate)

{

unsignedinti,temp;

adr=adr<<8;

temp=adr|date;

load2=0;

scl=1;

sda=1;

for(i=0;i<16;i++)

{

temp=temp<<1;

scl=0;

delayx();

sda=CY;

delayx();

scl=1;

delayx();

scl=0;

delayx();

}

load2=1;

delayx();

delayx();

load2=0;

delayx();

scl=0;

delayx();

sda=1;

delayx();

}

voidKey_scan(unsignedint*key)//键盘扫描程序

{

unsignedcharH4=0,L4=0,KeyCode=0;//定义变量

//unsignedcharb[10];

KEYBUS=0xF0;

delay_ms(10);

if(KEYBUS!

=0xF0)//判断是否有键按下

//delay_ms(10);//去除抖动

if(KEYBUS!

=0xF0)//再次判断是否有键按下

H4=KEYBUS;//将第一次检测值放入寄存器a

KEYBUS=0x0F;

//delay_ms(10);//第二次检测

L4=KEYBUS;//将第二次检测值放入寄存器c

while(KEYBUS!

=0x0f);

KeyCode=H4|L4;

//if(KeyCode!

=0x7e)//如果“执行”键未按下,则继续扫描

switch(KeyCode)//对比数据值

{

case/*0x77*/0xee:

*key=1;break;//键入“1”键

case/*0xb7*/0xed:

*key=2;break;//键入“2”键

case/*0xd7*/0xe7:

*key=3;break;//键入“3”键

case/*0xe7*/0xeb:

*key=4;break;//键入“4”键

case/*0x7b*/0xde:

*key=5;break;//键入“5”键

case/*0xbb*/0xdd:

*key=6;break;//键入“6”键

case/*0xdb*/0xd7:

*key=7;break;//键入“7”键

case/*0xeb*/0xdb:

*key=8;break;//键入“8”键

case/*0x7d*/0xbe:

*key=9;break;//键入“9”键

case0xbd:

*key=0;break;//键入“0”键

case/*0xdd*/0xb7:

*key='b';break;//键入“退格/小数点”键

case/*0xed*/0xbb:

*key='u';break;//键入“向上”键

case0x7e:

*key='e';break;//键入“执行”键

case/*0xbe*/0x7d:

*key='m';break;//键入“菜单”键

case/*0xde*/0x77:

*key='c';break;//键入“取消”键

case/*0xee*/0x7b:

*key='d';break;//键入“向下”键

default:

*key='n';

}

}

 

voidchuanwei(unsignedchar*p)

{

unsignedchary;

for(y=3;y<11;y++)

p[y]=p[y+1];

}

voidfanchuan(unsignedchar*p)

{

unsignedcha

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2