低频数字式相位测量仪

更新时间:2024-06-11 23:37:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2003年全国大学生 电子设计竞赛

低频数字式相位测量仪C1

青岛建筑工程学院

指导老师:赵艳秋 张民 张天开参赛队员:赵玉军 房瑞金 胡明辉

2003

年9月15日至18日 参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

技术要求:

1. 基本要求

⑴. 设计并制作一个相位测量仪,

a. 频率范围:20HZ —— 20KHZ。 b. 相位测量仪的输入阻抗≥100K

c. 允许两路输入正弦信号峰-峰值可分别在1V-5V范围内变化 d. 相位测量绝对误差≤2°

e. 具有频率测量及数字显示功能

f. 相位差数字显示:相位读数为0°~359.9°,分辨率为0.1° ⑵. 参考图2制作一个移相网络

a. 输入信号频率:100HZ,1KHZ,10KHZ b. 连续相移范围:-45°~+45°

c. A`,B`输出的正弦信号峰-峰值可分别在0.3V~0.5V范围

内变化。

2. 发挥部分

⑴. 设计并制作一个数字式移相信号发生器,用以产生相位测量仪所需

的输入正弦信号,要求:

a. 频率范围:20HZ-20KHZ,频率步进为20HZ,输出频率可预

置 b. A,B输出的正弦信号峰-峰值可分别在0.3v-0.5v范围内变

c. 相位差范围为0~359°,相位步进为1°,相位差可预置。 d. 数字显示预制的频率,相位差值。

⑵. 在保持相位测量误差和频率范围不变的条件下,扩展相位测量仪输

入正弦电压峰-峰值至0.3-0.5v范围

⑶.用数字信号发生器校验相位测量仪,自选几个频点,相位差值和不同

幅度进行校验 ⑷.其他

系统功能实现及特色:

相位测量仪

本设计保证了频率范围为20HZ-20KHZ,由于单片机的晶振为11.0592MHZ,它执行一个机器周期不到1us,所以,频率范围还可以进一步扩大。

输入阻抗的实现,我们采用了前端加射极跟随器的方式提高了输入阻抗 对于正弦峰-峰值,我们采用了过零比较器实现了信号周期的采集,芯片采用LS324其正负电压后为(-12,+12),完全满足1V-5V正弦波峰-峰值的要求

数字显示:我们利用了8个数码管,采用静态显示方式,最后两个‘米’字型16段数码管可显示26个英文字母和两个希腊字母,我们利用两个‘米’字数码管来显示单位。

相位差及周期的测量:把相位差转换成脉冲个数,由于机器的晶振固定这样就把相位差及周期问题转换成时间问题,同时利用单片机RD2内部资源定时

2

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

器0,定时器2,周期采用定时器2的捕捉方式。 移相网络:

本设计基于移相网络的原理,指导公式,分析判断出移相为-45°,45°, 0°时滑动电阻的状态,进一步设计

本设计基本完成了-45°到正+45°的移相网络 数字式移相信号发生器:

频率范围的设计:我们利用8253进行分频,4MHZ使得分频后的步进度虽不

是20HZ ,但比20HZ更细

dac0832的参考电压设计,使A,B正弦波信号幅值从0-5V分成255份,可

变化正弦波的幅值

相位通过CPLD设计完成了步进为1°,相位差可预置

我们该设计是用了中文液晶显示,实现了中文显示和图形显示。

特色:

CPU为RD2,大容量,内置看门狗,具有在线下载和在线调试功能 中文液晶显示,同时增加了图形显示功能

移植了DDS技术,使用了CPLD与单片机相结合技术 利用8253分频,提高分频能力

利用0832改变参考电压,实现了0-5V幅值可调 使用了16段‘米’字型数码显示 使用了定时器2的捕捉方式

摘要:

低频式数字相位测量仪的设计制作包括相位测量仪,和数字式移相信号发生器和移相网络三部分。

数字式相位测量仪利用单片机和逻辑电路相结合具有相位测量和液晶数字显示等功能

移相网络利用RC网络和电压跟随器及同相输入的比例放大电路和复杂的可变成逻辑器中(CPLD)

关键词:相位差,相位测量,移相信号发生器,可编程逻辑器件。

方案选择:

一.分离元件设计方案

本方案利用大量数字芯片,通过各种逻辑关系构成,但由于芯片无编程性,如果完成本次大赛的所有要求难度较大,只能完成部分功能,同时电路复杂 二.专用集成芯片设计方案

可利用专用移相芯片设计,对于本次大赛,失去了大赛的意义,所以也不采用 三.本着学习新技术,以高新技术为参赛原则,我们采用了DDS与CPLD机构结合的

原则,首先将DDS技术有机的移植到CPLD上,来作为组成的特色和亮点,DDS本身的原理是以数控震荡器的的方式产生频率,相位可控制的正弦波,电路一

3

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

般包括基准时钟,频率累加器,幅度/相位转换电路,D/A转换器和低通滤波器等,我们用CPLD完成了正弦波相位累加等 设计工作,利用2746存放的原始波形,DAC0832把数字量变成模拟量进行输出。

频率的改变:我们利用了外围芯片8253,其输入晶振为4MHZ,通过对4MHZ进行

分频处理而产生不同的频率值。

我们采用了双路正弦波产生电路设计方案,这样通过两路相同的设计实现了A,B两路的模拟信号,实现了A,B同周期信号的产生。

幅值的改变:由于0832的参考电压不同,则输出不同的特性,我们采用了一片

0832作为参考电压的产生,这样,8位数字量使得我们进一步把0-5V电压分成了256份,也就相当于把A,B两路的模拟信号幅值从0到5V分成了256份,进行了调幅。

移相网络部分

移相网络原理图

①移相原理公式:

?UC1?RR??UC2

1j?C1

1j?C????UUii11?j?CRR?j?C??Uij?CR?Ui1?j?CR 4

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

U?R41?R(U?C1?U?C2)?U?C23?R4?R3?j?CRR4

(RRj?CR)U?i3?4)(1?

(?2C2R2?R4?R3)?j?CR(R4?R3)?(R222Ui4?R3)(1??CR)

U?RfRf?2C2R2R4?R3?j?CR(R403?(1?R)U?1?(1?)?R3)(R2C2R2)U?i nRn4?R3)(1??

U0与Ui的相位差 ?CR(R4?R3)

??arctanR2

3??2CR2R4

可见,调节R4,R3及WCR均可调节相位,调节Rf,Rn,R3,R4,w,可以调节幅值 ②参数配合

若R4=R3时,£=0 若R4=0,R3=R1,£=-arctan(wcr) 取£= -45°时,wcr=1 若R3=0,R4=R1,£=arctan(1/wcr) 取£=45°时,wcr=1 RC=1/W=1/2Πf ⑴若f=100HZ C=100NF 则R=15.9K

⑵若f=1KHZ C=47NF 则R=3.38K ⑶若f=10KHZ C=7NF 则R=2.27K

数字式信号发生器部分

一. 信号发生原理

本模块是基于DDS技术,实现了数字式信号发生器,DDS原理上是一个分频器。

5

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

DDS(直接数字式频率合成器)原理框图如下: 参考信号 fc 频控字K 相位累加相位加法波形存储 器 器 器 相控字P fo 数字乘数模转低通滤幅控字A 法器 换器 波器 参考信号为高稳晶振,其输出信号用于提供DDS各种部件的同步工作,相位累加器是DDS的核心,它由一个N位字长的二进制加法器和一个由时钟fc取样的N位寄存器组成,作用是对频率控制字K进行线形累加,波形存储器中存储的是一张函数的波形查询表,对应不同的相位码址输出不同的相位码址输出不同的幅度编码。当相位控制字为0,幅度控制字为1时,相位累加器输出相位序列对波形存储器寻址,得到一系列离散的幅度编码。该幅度编码经D/A转换后得到对应的阶梯波,最后经低通滤波器平滑后得到想要的模拟波形。

二. 液晶显示模块

液晶显示模块是128×64点阵的汉字图形型液晶显示模块,可显示汉字及图形,内置国标GB2312码简体中文字库(16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。可与CPU直接接口,提供两种界面来连接微处理机:8-位并行及串行两种连接方式。具有多种功能:光标显示、画面移位、睡眠模式等 1.显示资料RAM(DDRAM)

显示资料RAM提供64×2个位元组的空间,最多可以控制4行16字(64个字)的中文字型显示,当写入显示资料RAM时,可以分别显示CGROM、HCGROM与CGRAM的字型;ST7920A可以显示三种字型 ,分别是半宽的HCGROM字型、CGRAM字型及中文CGROM字型 ,三种字型的选择,由在DDRAM中写入的编码选择,在0000H—0006H的编码中将自动的结合下一个位元组,组成两个位元组的编码达成中文字型 的编码(A140—D75F),各种字型详细编码如下:

1. 显示半宽字型 :将8位元资料写入DDRAM中,范围为02H—7FH的编码。 2. 显示CGRAM字型:将16位元资料写入DDRAM中,总共有0000H,0002H,0004H,

0006H四种编码

3. 显示中文字形:将16位元资料写入DDRAMK ,范围为A1A1H—F7FEH的编码。

2.绘图RAM(GDRAM)

6

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

绘图显示RAM提供64×32个位元组的记忆空间,最多可以控制256×64点的二维也纳绘图缓冲空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个8位元的资料到绘图RAM,而地址计数器(AC)会自动加一;在写入绘图RAM的期间,绘图显示必须关闭。

3.液晶硬件接口

1、逻辑工作电压(VDD):4.5~5.5V 2、电源地(GND):0V

3、LCD驱动电压(V0):0~-10V

4、工作温度(Ta):0~55℃(常温) / -20~70℃(宽温) 保存温度(Tstg):-10~65℃(常温)

本次大赛,为了充分体现人机界面的友好度,采用了这款中文带字库的液晶显

示屏,并采用了字库与图形方式相结合的显示方式,在系统运行时,加入了开机画面,系统菜单等,提高了与用户的互动性,用户可以根据界面来进行相应的操作。 液晶显示屏是挂在总线的接口上,采用了并行的输入输出方式,开机时液晶屏复位,同时开背光电源,进入等待状态。采用液晶显示器首先是显示的信息量大,可视性强,并且可以避免LED数码管的动态扫描,对程序的整体框架有了很大的改进。

二.最小系统模块

此最小系统板模块采用总线式结构,总线上挂有键盘,液晶显示器,以及ISP在线下载的串行口,最小系统是以PHILIP公司的89C51RD2为核心,RD2的工作频率高,对于系统速度有很很大的提高,内不有64K的程序存储区和1K的数据存储区,基本上可以满足开发着对大存储空间的要求,这款CPU还集成有看门狗,并且具有ISP在先下载和IAP在先调试功能,可以使用户方便的对系统进行调试和软件升级。其40引脚与INTEL公司的AT89C51完全兼容。

相位测量部分

一. 相位测量原理

7

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

射极过零比跟随 较器 A INT0 判断相异 位 或 EXF2 异B 或 射 极 过 零 比 VCC 跟随 较器

原理图

A,B为同周期正弦波信号,经过射极跟随器,送入过零比较器LM324,使之输出矩形波信号,并且具有相同的周期特性,但由于A,B两信号相位的差异,使得矩形波的高低电平时刻有差异,高低电平相反的时间段为相位差的时间,这样就把相位转换成了时间,通过异或门得到输出信号E是一个与A,B两信号之间的相位差成正比例的脉冲序列信号;脉冲序列信号输入到RD2CPU,经运算处理后,结果输出到显示器上显示,也可通过打印机接口打印输出。

阻抗的提高:由于设计要求输入阻抗,我们在信号输入比较器前加了射极跟随器。

相位的判别:在相位的超前,迟后的判断问题,我们选用了D触发器,V1整形后的信号送D触发器的D端,V2整形后的信号送CLK,那么如果Q端送CPU的P1口,V1超前V2则Q端为1,V2迟后V1则Q端为0

相位测量的方法: 1. 根据定义,周期同为T的两个同频信号,其相差为£,过零点的时间差为t, 则T/360=

t/£,即£=360*t/T,式中360/T为常数,可又用户在程序内部设定或直接在CPU中预置,t即为E信号的脉冲宽度。 2. CPU中有两个定时记数器,他们可以方便的进行内部定时和外部记数,若C/ ̄t=0时,

则CPU处于内部记数状态,此时,若设定 TR0=和GATE=1,则T0是否记数取决于INT0的信号;当INT0由0→1时,T0记数;当INT0由1→0时,停止记数。这样,将E信号接在INT0上,就可以方便的求出E的脉宽t 3. 相位差的脉冲宽度信号直接送CPU外部中断INT0,利用单片机定时器0的定时方式,

利用门控和单片机的时钟周期,测的脉冲个数,从而得出相位差 t int0

等E,

开T0 停止T0

脉冲宽度测量

4. 为了提高精度,可进行多次测量,并求其平均值。测量次数可由程序内定,也可由CPU口直接预制。

8

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

开始 № Y 启动T0开始记数 读参数:周期T,次 数n ,设定值 N INT0=0? 等待 计算 360/T 并保存 Y 起来 关闭T0进行用户 处理显示程序 Y P1.0=0? N n=0? Y 00H清零00H置位 END N 等待 INT0=1? № Y

相位脉宽测量

周期测量方法:

主要应用了定时记数器2的捕捉方式,其中EXEN2=1,在T2EX上的负跳变信号作用下,分别被捕获在RCAP2H和RCAP2L寄存器中。该负跳变信号将使外部标志EXF2置1。

二.最小系统

最小系统是以PHILIP公司的89C51RD2为核心,RD2的工作频率高,对于系统速度有很很大的提高,内不有64K的程序存储区和1K的数据存储区,基本上可以满足开发着对大存储空间的要求,这款CPU还集成有看门狗,并且具有ISP在先下载和IAP在先调试功能,可以使用户方便的对系统进行调试和软件升级。其40引脚与INTEL公司的AT89C51完全兼容。

9

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

三.键盘显示

设计方案

本设计采用串入并出74LS595通过级联实验,具体如电路原理图所视

本设计采用LED实现,其中8段数码管用了6个,16段彩色数码管2个。我们利用彩色数码管显示单位,如:微秒‘us’,赫兹‘HZ’,度‘°’。这样就解决了8段数码管所存在显示信息量少的问题。

同时,采用了10片74LS595级联,实现了8个数码管显示,采用74LS595,数据线通过SDAT输入时钟,通过一个SCLK信号,10片74LS95达到了时钟同步,同理,HOLD信号使10片74LS595同步锁存输出,采用74LS595,节省了CPU的口线,同时又逼开了动态扫描带来的定时扫描问题,为解决80个限流电阻问题,线路利用+5v电源通过4个硅二极管降压,每个二极管压降为0.5v~~0.7v,四个为2.0v~~2.8v,这样在每个发光二极管上的压降在2.2~~3.0v之间,也能使得发光二极管正常工作,同时也解决了多个排电阻焊接所带来的不便。 显示功能:

⑴.周期 XXXXX us ⑵.频率 HZ ⑶.相差 XXX.X ° ⑷.电子钟显示,可预置

结束语:

本次大赛的题目充分体现了当今时代对数字化的高要求,同时要求利用成熟的技术与新技术结合,充分发挥各自的功能,甚至提高到更高的性能,本着这个原则,我们充分利用的现有的条件,基本上完成了题目的要求,希望本次大赛能够圆满成

功!

10

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

低频数字式相位测量仪c11

石油大学(华东) 尚海燕 曹善甫 梁锴

摘 要

本系统由两片独立的CPU组成。用MSP430实现基本要求中的相位、频率、电压测量及其数字和图形显示功能;用AVRmega8515实现扩展要求中的数字式移相信号发生器及其设置频率和相位的功能。本设计充分利用了MSP430的高速硬件捕获功能来实现频率和相位的测量,并利用AD转换器对数据进行进一步处理,在高低频段分别采用多次测量、滤波算法、矢量分解、偏移修正等算法消除干扰提高精度,采用了大屏幕液晶显示测量的详细信息。利用AVRmega8515配合16.384MHz的高速晶振,采用软件DDFS实现双路数字式移相信号发生器,由于使用优化算法,实现了高达每秒655.36K次的双路相位计算,输出频率为20Hz-40.48KHz,可实现20Hz的步进,系统硬件结构简单,频率、相位稳定度高;采用数码管显示和按键设置频率及相位差。移相网络安题目要求由常规的模拟器件组成。本系统主要由相位测量、移相网络和数字式移相信号发生器三大模块组成。

一、 方案比较与论证

1 、 相位测量部分

方案一:传统的模拟法。该方案采用倍频、计数、门控等电路。此方法难以实现大频率范围的相位测量,精度低、稳定性差。

方案二:采用双通道高速A/D对输入的信号进行采集,然后FFT和基波的矢量分解的方法计算出这两个信号的基频和相位。该方案精度高,算法简单,对畸变波形有一定的处理能力。但要求在AD采集前作频率测量,在信号频率较高时,需要使用超高速AD转换器并且需要较高的计算能力,一般需要使用DSP进行信号处理。硬件复杂,难度较高。

11

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

方案三:整形鉴相法。将输入的两相位不同的正弦波通过比较器进行整形,变成方波。然后将两方波进行异或比较输出,从而得到两输入信号的过零时间差和两信号的周期,通过计算获得信号的频率和相位。该方案较简单,但普通单片机需要通过扩展外部电路,增强计时、计数能力才能达到满足题目要求的精度。

方案四:采用较高性能的混合信号处理器MSP430,采用方案三和方案二相结合的方式对输入信号进行处理,在高低频段混合采用矢量分解和两相比较器输出方波信号跳变时间的分析,准确计算出频率和相位差。此方法由于使用了混合信号处理器MSP430,集成度高,片内包含多路高速且有缓冲存储能力的俘获单元,可以准确记录方波信号跳变时间,片内包括速度高达200k sps且有连续操作和缓冲存储能力的12位ADC,为扩展各项功能提供了支持。软件部分实现了自动频率测量、相位测量、信号源电压测量、信号波形显示,用软件采用平均、矢量等算法进行多次复合测量消除噪声干扰、接触不良等引起的误差,并能在输入信号异常(如直流分量高、信号严重畸变、信号太小、输入信号超量称等)状态下自动报警,给出提示。此方案硬件比方案二和方案三都简单,而且测量精度高,功耗低,体积小。 2、数字式移相信号的产生部分

方案一: 采用单片机的定时器产生数字信号,通过滤波或锁相等环节输出正弦信号。该方案对单片机要求低,但产生的信号频率低,频率步进大,模拟部分产生较大相移,难以保证输出的相位精度,很难达到设计要求。方案二:采用硬件直接数字频率合成(DDFS)技术产生数字信号。直接频率合成方法具有频率转换时间短、近载频相位噪声性能好、精度高,产生的信号频率范围宽等优点,但由于需要采用地址,相位计算,访问存储器操作等环节,导致直接频率合成器结构复杂、体积庞大、成本高,功耗大。而且即使使用大规模的PLD,也需要单片机来实现键盘、显示的控制等工作。

方案三:采用软件DDFS方法产生数字信号。该方案硬件实现简单,产生的信号精度高,频率范围宽。采用高速的AVR单片机,使用16.384MHz的晶体振荡器可实现软件DDFS算法,可以以655.36K的速度刷新双D/A,可实现20Hz的频率步进和从20Hz到40.96KHz的可移相的0~360度的信号输出。完全可以满足题目的要求。此方案由于使用了较高性能的单片机和充分优化的软件结构,在不降低系统性能的条件下,硬件简单、成本低、功耗低、可靠性高,具有较高的实用性。 3、模拟移相部分

采用常见的模拟器件电阻,电位器,电容和运放的组合电路实现移相。直接对模拟信号进行移相,如阻容移相,变压器移相等,早期的移相通常采用这种方式。采用这种方式制造的移相器有许多不足之处,如:输出波形受输入波形的影响,移相操作不方便,移相角度随所接负载和时间等因素的影响而产生漂移等。该方案由于使用模拟器件,因此精度不是很高,硬件系统比较复杂。

此类方案形式较多,但都难以消除作为模拟系统的弱点,在此不作详细讨论。 题目的基本要求部分既是采用此方案,我们按要求完成了这部分电路。

二、 系统设计与计算

1、数字式相位测量仪的设计

总体设计:

数字式相位测量仪的设计框图如图2-1所示。使用高性能单片机MSP430F149为核心,前端的两路信号分别通过跟随器,直流耦合电路,提高了系统输入阻抗。然后使用LM339比较器进行整形,输入到单片机的捕获端。再令引一路信号,送给单片机的内部AD转换器。

12

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

通过单片机判断两通道的输入信号的上升沿和下降沿,对来自AD的数据进行处理,从而计算出两信号的相位差。 MSP430输入1输入2缓冲缓冲鉴相器鉴相器计时捕获单元液晶显示抗混叠滤波抗混叠滤波A/DCPU核图2-1 相位测量框图 软件实现流程图: 数字式相位测量仪的软件流程图如图2-2所示: 复位系统初始化用timerA捕获数据判断捕获数据N是否正常计算频率、Y相位差报警AD采样AD采样正交分解法计算相差显示波形显示频率、相差2-2 数字式相位测量仪的软件流程图

器件的选择与计算:

13

图参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

要使LM339比较器输出稳定,则要求其输入阻抗小于20K,而本题目要求系统输入阻抗大于100K,因此,在输入端我们选择使用一片LM324作为信号的输入缓冲,从而提高了系统的输入阻抗。为了减少噪声的影响,在输入端我们使用200K的电阻接地。如图2-3所示:

输入200K 图2-3 缓冲电路图 LM339比较器比较容易受干扰,因此,在电源部分使用鉭电容,将未用输入端接固定电平,以保证LM339的稳定性。

LM339的输出为OC结构,使用时要接上拉电阻和分压电阻,使输出电平符合单片机要求。如图2-4所示: 3.6V+5VCPU-5V图2-4 LM339输出电路 如果使用施密特触发器可以是比较信号更稳定。但这样影响相位的测量,因此本方案采用直接比较法,在软件中消除零点及噪声的干扰。

通过捕获处理后的两通道的方波,就可计算出频率和相位。原理如图2-5所示:

14

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

图2-5 相位计算示意图 计算公式为:???

?t t 根据题目要求在20KHz时,应保证2度的精度。可计算出单片机的计时分辨精度为:

20*103*360?3.6*106Hz 2当单片机的计时分辨精度优于3.6MHz时,才能保证题目要求的精度。我们使用的430F149使用8MHz的晶振,足可以保证精度的要求。

以上是本方案的基本原理,实际使用中采用噪声消除和零点平移修正来减少系统误差。本方案采用24位计时器,可以保证在被测信号周期为2秒时不会溢出。可以满足对被测信号的最低频率要求。 误差分析:

此方案中采用计时和鉴相处理。其中计时部分使用单片机系统时钟。此时钟来自于晶振,其误差很小可以忽略。鉴相部分精度取决于从信号输入端到单片机捕获端通过的跟随器、电压比较器所产生的相位差和时间滞后。本方案使用了直流耦合,使得由跟随器产生的相移误差几乎为零。而两通道的电压比较器的时间滞后相同,为130ns。此外,本设计中使用单片集成的运放和比较器,一致性好,不会对测量结果产生影响。

由于输入信号和运放、比较器固有特性都可能产生零点偏移,使比较器的输出不平衡。如果单边沿检测,显然影响精度。本方案使用上下边沿都检测,然后通过计算来修正由零点漂移引起的误差。

2、数字式移相信号发生器的设计

实现的基本原理:

DDFS原理:DDFS的基本原理框图如图2-6所示。

图2-6 DDFS 的基本原理图

DDFS包括信号幅值计算单元、存储正弦数据表的ROM存储器、DAC和输出滤波器组成。正弦波的信号幅值以数据表的形式存储在ROM存储器中,由信号幅值计算单元以恒定的速度进行相位累加计算,计算出当前时刻的输出正弦信号的相位,然后用此相位在ROM种查得应送往DAC的数值。

15

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

通常使用的相位累加器由N位加法器与N位累加寄存器级联构成。每来1个时钟脉冲,加法器将频率控制数据与累加寄存器输出的累积相位数据相加,把相加后的结果送至累加寄存器的数据输入端。累加寄存器将加法器在上1个时钟作用后所产生的新相位数据反馈到加法器的输入端,以使加法器在下1个时钟的作用下继续与频率控制数据相加。这样,相位累加器在参考时钟的作用下,进行线性相位累加,当相位累加器累积满量时就会产生1次溢出,完成1个周期性的动作,这个周期就是DDS合成信号的1个频率周期,累加器的溢出频率就是DDS输出的信号频率。用相位累加器输出的数据作为取样地址,对正弦波波形存储器进行相位-幅值转换,即可在给定的时间上确定输出的波形幅值。

数模转换及低通滤波器 :DAC将数字量形式的波形幅值转换成所要求合成频率的模拟量形式信号,低通滤波器用于滤除不需要的取样分量,以便输出特定频率段及平滑的正弦波信号。按照Nyquist准则,最高输出频率可达0.5fc。但考虑到实际低通滤波器性能的限制,实际最高输出频率一般取为40%fc。

通过对DDFS原理的分析,我们发现DDFS核心的是相位累加器、相位计算和ROM查表算发,通过CPU和软件完全可以完成同样的工作,本题需要输出移相信号,需要使用两路同频DDFS。经过理论计算和软件测试,我们选用了AVRmega8515单片机,使用优化算法实现了图2-6的算法,实现了高达每秒655.36K次的双路相位计算。软件DDFS与硬件DDFS的基本原理是相同的,同样输出频率下效果完全相同。但软件DDFS用高性能的单片机来代替过去用PLD、ROM和单片机才能实现的功能。从而使得操作更灵活、硬件电路更简单。

16位输出A低通滤波器A通道相位累加器地址变换A通道D/A转换器ROM波形存储器频控字KB通相控字P道B通道D/A转换器输出B低通滤波器图2-7 DDFS双通道移相算法总体设计: 数字式移相信号发生器的总体设计框图如图2-8所示:

16

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

按键输入LED显示单片机DA0800输出DA0800输出平滑滤波信号输出平滑滤波信号输出 图2-8 数字式移相信号发生器的设计框图

器件选择及相关的计算:

题目要求频率范围在20Hz-20KHz,步进20Hz可得:频控字K从最低输出频率到最高输出频率变化至少20KHz/20Hz=1000,因此至少使用10位计数器。从单片机的存储能力和计算能力考虑,使用16位无符号整形表示K,使用范围1-2048,即实际使用11位。根据要求,为了在最高频率20KHz时输出平滑波形,使用32点输出,因此选择了具有665.36KHz的DA输出速度的DA0800器件。在此频率下,在输出20.48KHz信号时保持32点输出,波形相当平滑。最高可以输出40.96KHz信号。在软件DDFS计算过程中,移位和计算ROM表的地址比较耗时,为了提高计算速度,使用了空间换时间的方法,在ROM表中连续构造每周波2048点的正弦表3个。通过这种方法,减少了计算地址移位的时间和避免了B相相位叠加后溢出的问题。通过优化,AVR CPU可以在25机器周期内完成两通道DDFS计算并送DA输出。因此我们选用了16.384MHz四脚晶振作为CPU时钟,实现了16.384MHz/25=665.36Khz的输出频率。软件DDFS算法如上图,程序如下:

Loop: LPM

OUT PORTA,R0 ADD R30,R18 ADC R31,R19 LPM

OUT PORTC,R0 NOP

ADD R28,R16 ADC R29,R17 MOVW R30,R28 LSR R31 ROR R30 LSR R31 ROR R30 LSR R31 ROR R30

17

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

LSR R31 ROR R30 ADD R31,R27 RJMP Loop

DA输出后经放大器,即可得到平滑的波形。即,用放大器实现了平滑滤波的作用。经实验发现其效果很好。

按键操作:本键盘由设置键、确定键、上下键和左右键六个键组成。可以实现频率和相位的参数设置。 软件流程图:

数字式移相信号发生器的软件实现流程图如图2-9所示:

复位开始 重设参数 参数初始化 调出原存储设置

检测按键 按键类型识别

启动键 上下键 左右键 修改频率设置 修改相位设置

存储参数 LED显示

图2-9 数字式移相信号发生器软件流程图

输出波形 18

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

3、模拟移相部分

此部分我们按照题目要求设计、安装并测试了移相网络 电路图设计:

移相网络的实现电路如图3-1所示(频率在100Hz时的电路图):

图3-1 移相网络硬件实现电路 当频率在100Hz和10KHz时,只需将电路中的R1 和R2分别同时换成16Koh和 160oh的电阻。

其理论仿真结果(在1KHz时)如图所示:

正相移时: 负相移时:

理论分析与计算

移相网络中各元件参数的选择:

设电源的电压为U,则由电路图3-1可得:

. 19

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

.参赛队员:赵玉军 房瑞金 胡明辉

.RU1?U (1)

R?j(2?fc).?j(2?fc). U2?U (2)

jR?2?fcU3?kU1?(1?k)U2 (k为变阻器得分阻系数,满足0?k?1) (3)

...U4?(1?R6R3)U3 (4)

由式 (1),(2),(3),(4)可得:

.....kR?(1?k)jjR?2?fcU4?(1?R6R3)[kU1?(1?k)U2]?(1?R6/R3)?由(5)式可知:U4与U的相位差为:

2?fcU (5)

.??arctan

11?k?arctan (6) 2?fc2?kfcR由题目要求相移范围在?45?~+45?可得:

1arctan()=45? 即:

2?fcR1Rc? (7)

2?f由此可知,当频率f一定时,Rc的乘积为定值。例如:

f=100Hz时,Rc=1/(2*3.1416*100)=1..592?10,只要确定一个参数的值,则另一个参数也可确定。

题目要求有三个频率点,考虑在每个频率点上,系统都有应有较大的电阻,再综合考虑实际器件的数值,我们可选择的参数如下:

在频率f=100Hz时,取R1=R2=16koh,c=0.1uF; 在频率f=1KHz时,取R1=R2=1.6koh,c=0.1uF; 在频率f=10KHz时,取R1=R2=160h,c=0.1uF; 变阻器R9是用来调相位的,阻值取1Koh即可。

由于A端的输出为电源电压的同相分压,所以其最大幅值为电源电压的幅值。题目要求A端的输出峰峰值最大为5v,因此,电源电压的幅值为2.5v。

由式(5)可得U4与U的幅值关系:

3R6k2R2?(1?k)2(4?2f2c2)U4?(1?)U (8) 2222R3R?1(4?fc)由上述结论可知R?1,所以当k=0或k=1时,根式里的值最大(为0.5),由于题目要2?fc求电压的最大峰峰值为+5v,因此要求R6与R3之间必须满足一定的关系,即:

(1?R6)?0.5?1 (9) R3由此得:R6=0.414*R3 我们取R3=6.7koh,则R6=2.8koh

20

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

由题目对最小峰峰值(0.3v)的要求,我们可知电阻R4、R5,以及变阻器R7,R8应满足: 0.3=R4/(R4+R7)*5=R5/(R5+R8)*5 (10) 由式(10),我们可选电阻R4=R5=620oh,R7=R8=9.7koh(我们取标称值10koh)。 由公式(9)可得,网络的最大输出峰峰值为:

(1?R62.8)?0.5?5?(1?)?0.5?5?5.013 R36.7R50.62*5?*5?0.292

R5?R80.62?10由公式(10)可得,网络的最小输出峰峰值为: R5/(R5+R8)*5=

完全满足题目的要求。

三、 测试

a) 测试仪器

HEWLETT PACKARO 5460B示波器 SAMPO CN3165频率测量仪

GW INSTEK GFG-8215A 函数信号发生器 UNIT UT70B万用表

b) 测试数据

1、移相网络输出电压及相位测试数据 频率 电压 相位差最大值 相位差最小值 100Hz 0.2V 44 -46 1.0V 46 -44 2.5V 46 -44 5.0V 46 -44 1000Hz 0.2V 44 -46 1.0V 44 -46 2.5V 44 -46 5.0V 45 -45 10000Hz 0.2V 45 -45 1.0V 46 -44 2.5V 45 45 5.0V 45 45 幅度测量 输出锻压值 题目要求 测试结果 5.0v 5.1v 最大电压 0.3v 0.27v 最小电压

由表可见,在不同频率下电压和相位均十分稳定,超出题目要求。 2、数字式移相信号发生器测量(测试条件 VP-P=3.0V) 1. 输出频率的测量 预值频率 实测频率 误差(%) 20Hz 20.00031 Hz 0.002 100Hz 100.0015 Hz 0.002 500Hz 500.0079 Hz 0.002 1000Hz 1000.015 Hz 0.002 21

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

5000Hz 5000.079 Hz 0.002 10000Hz 10000.15 Hz 0.002 20000Hz 20000.31 Hz 0.002 30000Hz 30000.45 Hz 0.002 40000Hz 40000.63 Hz 0.002 由表可见,频率稳定,实现和超出题目要求。 2. 相位差的测量(测试条件 VP-P=3.0V, F=1000Hz) 预值相位 实测相位差 相对误差(%) 绝对误差 0 0 1° 1.0° 0.5 20° 20.1° 0.1° 0.22 90° 90.1° 0.1° 0.20 100° 100.1° 0.1° 0.20 150° 150.1° 0.1° 0.11 180° 180.2° 0.2° 0.11 270° 270.2° 0.2° 0.10 300° 300.2° 0.2° 0.11 359° 359.2° 0.2° 由表可见,相位差稳定,绝对误差在题目要求范围之内。 3、数字相位仪数据测量数据 相位测量 频率测量 测量相位实测数据 绝对误差 相对误差(%) 测量频率实测数据 值 值 0 20 Hz 20.005 Hz 1° 1.0° 0° 100 Hz 100.03 Hz 20° 20.1° 0.5° 0.1° 1000 Hz 1000.3 Hz 90° 90.2° 0.22° 0.2° 5000 Hz 5000.1 Hz 150° 150.3° 0.20° 0.3° 0.2 10000 Hz 10003 Hz 180° 180.2° 0.11° 15000 Hz 15005 Hz 300° 300.3° 0.10° 0.3° 20000 Hz 20007 Hz 359° 359.4° 0.11° 0.4°

4、用数字移相信号发生器检验相位测量仪(相位测试条件为频率在1000Hz时) 电压幅度 相位 频率 (V P-P) 预值相位 实测相位误差(%) 预设频率 实测频率 差 0.3V 10.0 20Hz 19.997 Hz 1° 1.1° 1..3 100 Hz 99.998 Hz 75° 76.0° 0.60 1000 Hz 9999.8 Hz 180° 181.1° 0.07 10000 Hz 99999 Hz 300° 299.8° 1..90 20000 Hz 19998 Hz 359° 358.3° 1.0V 10.0 20Hz 20.000 Hz 1° 1.1° 0.90 100 Hz 100.02 Hz 75° 75.7° 0.33 1000 Hz 1000.2 Hz 180° 180.6° 误差(%) 误差(%) 0.015 0.02 0.02 0.01 0.01 0 0.02 0.02 22

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

2.0V 5.0V 7.0V 300° 359° 1° 75° 180° 300° 359° 1° 75° 180° 300° 359° 1° 75° 180° 300° 359° 300.2° 358.5° 1.0° 75.4° 180.8° 300.3° 358.6° 0.9° 75.5° 180.4° 299.6° 358.1° 0.9° 75.5° 180.3° 299.5° 358.0° 0.07 1..30 0 0.53 0.44 0.01 0.11 10.0 0.70 0.22 0.13 0.03 10.0 0.67 0.16 0.16 0.03 10000 Hz 20000 Hz 20Hz 100 Hz 1000 Hz 10000 Hz 20000 Hz 20Hz 100 Hz 1000 Hz 10000 Hz 20000 Hz 20Hz 100 Hz 1000 Hz 10000 Hz 20000 Hz 10002 Hz 20004 Hz 19.998 Hz 100.02 Hz 1000.3 Hz 10003 Hz 20006 Hz 20.004 Hz 100.02 Hz 1000.3 Hz 10004 Hz 20008 Hz 20.006 Hz 100.03 Hz 1000.3 Hz 10004 Hz 20008 Hz 0.02 0.04 0.01 0.02 0.03 0.03 0.03 0.02 0.02 0.03 0.04 0.04 0.03 0.03 0.03 0.04 0.04 四、 总结 我们设计的系统不仅完成了题目的基本要求和发挥要求,而且

某些指标远远超出发挥部分的要求。用MSP430实现基本要求中测量和显示功能;用AVRmega8515实现扩展要求中的数字式移相信号发生器。本设计充分利用了MSP430的高速硬件捕获功能来实现频率和相位的测量,并利用AD对数据进一步处理,在高低频段分别采用多次测量、滤波算法、矢量分解、偏移修正等算法消除干扰提高精度,采用了大屏幕液晶显示测量的详细信息。利用AVRmega8515采用软件DDFS实现双路数字式移相信号发生器,由于使用优化算法,实现了高达每秒655.36K次的双路相位计算,输出频率为20Hz-40.48KHz,可实现20Hz的步进,系统硬件结构简单,频率、相位稳定度高;采用数码管显示和按键设置频率及相位差。移相网络安题目要求由常规的模拟器件组成。

23

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

低频数字式相位测量仪c65

作者:吕锦柏 刘勇 冯科(山东理工大学) 赛前及文稿整理辅导教师: 姜吉顺 卢恒炜

摘 要

该数字式相位测量仪以单片机(89c52)为核心,通过高速计数器CD4040为计数器计算脉冲个数从,而达到计算相位的要求,通过8279驱动数码管显示正弦波的频率,不采用一般的模拟的振动器产生,而是采用单片机产生,从而实现了产生到显示的数字化.具有产生的频率精确,稳定的特点.相移部分采用一般的RC移相电路,节省了成本。

一 方案论证与比较:

1 常见正弦信号的测量方法:

方案一:采用模拟分离元件 如二极管,三极管等非线性元件,实现频率的测量,检相的功能,使用起来方便,价格便宜,但采用分离元件由于分散性太大,不便于集成及数字化,而且测量误差大。

方案二:采用集成的检相器,检频器实现频率及相位的测量。这种方法的实现框图如下:

正 相位及频率显 弦检相器 波

检频器

这种方法虽然可实现比较精确的测量,但由于模拟信号易受外界的干扰,不易调节,无法实现智能化,数字化的缺点,一般在要求较低的情况下使用。 方案三:此方案采用高速信号发生器产生20MHz的高频信号,其主要特点是采用CD4040高频计数器结合单片机,利用计数脉冲实现测量相位与频率的目标。这种方法克服了模拟电路的缺点,实现了数字化与集成化。本设计采用了这种方法。

这种方案的组成框图:

24

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

复位 显示 键盘 键盘显示接口 单 片 机 系 统 单 片 机 接 口 电 路

过零比较 过零比较 控 制 电 路 移相计 时电路 \\

二 系统总体设计

按照题目要求,我们设计的相位测量系统包括三部分:正弦波产生系统(包括频率调整电路),移相电路和相位显视系统,其总体框图如下: 正弦波产生 相位测量及显示电路

RC移相电路 (频率调整)

三 各部分硬件电路设计及参数计算 1、正弦波产生电路

(一)方案一:利用8038芯片或MAX038可以实现压控的函数发生器通过

改变少量的外围元件,可实现正弦波,方波,三角波,并可实现频率调节,但采用模拟器件由于元件分散性太大,即使使用单片函数发生器,参数也与外部元件有关,外接的电阻,电容对参数影响很大,因而产生的频率稳定度差,精度低,抗干扰能力差,调节困难,成本也高。而且灵活性差,不能实现智能化。实现步进更困难 (二)方案二:利用单片机89c52芯片,发送脉冲信号,在一定频率范围内,

再经过低通滤波,可以实现正弦信号。这种方法可以实现频律的步进与预置,实现数字智能化。它的原理框图:

25

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

89c52 高速可编程计数器1 计数器2 2964 存储器 DA 转换器 CP脉 这种方法的缺点是产生的波的频率较低,难以达到高频的要求。题目要求是:20HZ—20KHZ的正弦波,若对每个周期的信号取样64个点。则要求的CP脉冲的频率:1280HZ—1280KHZ可以实现。通过可编程计数器的计数初值的预置,调节计数器2的时序脉冲,设计中由于采样64个存储数据,所以计数器2为64进制计数器,即通过高速计数器送出64个脉冲后,实现一个周期的正弦波输出,这样计数器2处于不断的循环寻址中,从而存储器输出连续不断单位周期内64个采样正弦波数值,通过DA转换取得相应于正弦波形的电压,再通过电容滤波就可得到正弦波。由于全过程采用了数字化,容易实现高精度的步进控制,而且通过对计数器2起始计数时间的控制(如在计数器2前再加一计数器,使该计数器达到某一数值时计数器2开始计时寻址),还可实现数字化的相移。由于须采取两套相同的系统,本装置中没有采用。

2 移相电路:

根据题目的要求,要实现相移在-45度---+45度的调节,而提高部分要求移相在0—3 59度之间,且可实现步进1度要求。采用高精度的延时电路或移相电路,虽可实现数控和步进,但由于成本高,调节较困难,不易实现,我们采用了简单的RC移相电路,比较容易的实现了相移的连续调节。节省了制作成本,且达到了题目的基本要求。此电路的基本原理

图一 图二

其中图一是无源RC滞后网络 ,其传递函数为:h(jw)=1/(1+jwrc),相移角=arctan2*3。14*r*c, 图二为无源RC超前网络。其传递函数为:h(jw)=1/(1-j1/wrc),相移角=arctan(1/(2*3.14*r*c).

26

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

它们的相频特征曲线为 角度 频率 45o 90o 本设计使用的电路图: R331R12C2U1B576R25C162RW1731U3BR?R6R4R?U1A488U4ARW34R5R?RW2 ewb的仿真波形:

按照相移与F,R,C的关系式,在滞后电路中取相移角为:45o,有

27

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

tanA=2*3.14*r*c*f=1,当f=20hz时,r*c=0.008,当f=20khz 时,r*c=0.000008,从而取r= 4.7千欧 c=1微法。 在超前网络中,取相移为45o,有tanB=1/(2*3.14*r*c*f).当f=20hz时,r*c=0.008,当f=20khz时r*c=0.000008,从而取r=4.7kΩ ,c=1μF这样,相移可达+60o - -60o

3’相位测量及显示电路:

本部分电路不采用相敏整流法,避免了模拟电路得不好控制,不易数字化的缺点,而是采用单片机89c52,利用高频计数器cd4040和逻辑电路来实现的相位测量。这部分的电路图是

工作原理: 由于这部分的输入是有相移的两路正弦信号,而要实现其数字化,所以要把正弦信号转化成方波信号,其电路如下: 8INPUT132LM393132INPUT256U1B7U1A1U2A4OUTPUT output输出的波形为

LM393GND

output输出的波形再与固定的晶振脉冲 相与非产生新的脉冲信号,作为CD4040的CP脉冲,计算脉冲个数。CD4040工作方式:

当RST脚为“0”时,计数器开始计数,CLK脚为脉冲输入端;当RST脚为“+1”时,计数器的各脚清零。所以在output脚输出的信号的一个周期内,计数器计数一次。为扩大测量的相移差的范围,采用两片CD4040.达到24位的要求。计算参数如下:

设晶振的周期为Ts, 两个正弦波变换成方波后的周期为To,output输出的信号的

28

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

低电平的时间为T,则对应的相移对应的时间为To/2-T;CD4040计数的数值为N.则T=N*Ts,则T’=To-N*Ts;得相移对应的晶振个数N’=(To-N*Ts)/Ts;每个晶振个数对应一定的相移:A0,

则总的相移:A0*N’

在一个周期内,测得的计数脉冲的个数通过8255传给单片机89c52,进行计算,

从而达到通过软件达到现视的目的。此设计通过8279达到显示管的驱动。

四 系统软件设计:

1 系统软件工作流程图

1)测量及显示程序流程图:

系统自检

测频率吗? 89c52,8279,8255的初始化 NO测量相位 启动测量频率电路 4040和测相电路 计算频率 计算相位 数码管显示频率

YES RESET?

数码管显示相位

NO 退出 29

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

2)信号产生程序流程图:

发射 NO 发射固定频率100HZ,1KHZ,10KHz YES N N 频率设定好

了吗 YES 有步进相移吗 8255 初始化 设置 8253 计数值

YES N

相 步 进 移处理 发射频率

显示频率

2,主要程序:

见附页

五 测试指标:

1 测试仪器:

示波器:Hitachi V- 1060 频率计:SAMPO CN3165 万用表:DT9202

2 本设计能达到的技术指标:

1)相位测量:(a)频率范围:10HZ---100HZ.(b)相位测量仪的输入阻抗〉=100千欧。(c)允许两路输入正弦信号的峰峰值可在0.5v---5vf范围内变化。 (d)相位测量绝对误差<=2度。(e)具有频率测量及数字显示功能.(f) 相位差数字显示:相位读数为0o~359.9o,分辨力为0.1°

2)移相网络: (a)输入频率范围:20KHZ—200KHZ (b)连续相移范围-45度---+45度.(c)输出的正弦信号峰峰值可在0.3v—5v之间变化.

30

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开

参赛队员:赵玉军 房瑞金 胡明辉

3)信号产生:(a)频率范围:10HZ—20KHZ;(b)频率可实现可调.(c)输入相位可欲置.

六,结论

本设计基本完成了基本部分和发挥部分的要求,用单片机89C52产生了频率在10HZ—20KHZ的正弦波,实现了相移在-60度--+60度的连续可调,测量部分采用高速计数器与单片机实现了在0度—359.9度的测量。精确度达到了0.1度。其实现了数字化的相位测量。

但此设计在高频的性能稍差。有待改进。

附:

#pragma optimize(4) #include \#include \#include \#include \void start(); void cepin(); void cexwei(); void cexwei6(); void cerlc(); void good(); void disp(); void dispff(); void dispfa(); void int0(); void t0int();

code unsigned char led[36]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x58,0x5e,0x79,0x71,/***01...9AbcdEF***/ 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef, 0xf7,0xfc,0xd8,0xde,0xf9,0xf1,/*0.1...9.A.b...F.*/ 0x00,0xff,0x73,0x38/***灭,亮,P,L***/};

data unsigned char ld[8],i,j,ii,jj,iia,jja,iib,jjb,l; data unsigned char ms,it11,t1s; data unsigned char ix10,ix11; data unsigned char key; data unsigned int tt,tt1,tt2,tta,ttb; data unsigned int uuh=0; data unsigned int uul=0; data unsigned int aaa[6]; data float ff,fff,fa;

31

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

bdata bit bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7;

#define P8279D XBYTE[0x2000] #define P8279K XBYTE[0x2001] #define P8255A XBYTE[0x4000] #define P8255B XBYTE[0x4001] #define P8255C XBYTE[0x4002] #define P8255K XBYTE[0x4003] #define AD0 XBYTE[0x6000] #define AD1 XBYTE[0x6001] #define AD2 XBYTE[0x6002] #define AD3 XBYTE[0x6003] #define AD4 XBYTE[0x6004] #define AD5 XBYTE[0x6005] #define AD6 XBYTE[0x6006] #define AD7 XBYTE[0x6007] #define DA0832 XBYTE[0x8000] /* xdata signed int ua[255]; */

/*------------------INT------------------------*/ void int0() interrupt 0 using 1

{ P8279K=0x40; key=P8279D; key=key & 0x01; }

void t0int() interrupt 1 using 1 /*10ms !*/ { TL0=0xf0; TH0=0xd8; TR0=1; ms++;

if(ms==50) { bit0=0; } if(ms>=100){ ms=0; bit0=1;bit7=1; } }

/*---------------------------------------------*/ void start()

{TL0=0xf0; TH0=0xd8; /*T0=d8f0=55536=10ms*/ TL1=0; TH1=0; /*T1-- */ IE=0x83; IP=0x00; /*int1 is high */ TMOD=0x11; TCON=0x05;

P8279K=0xd1; for(i=0;i<98;i++ ){i++;} P8279K=0x00; P8279K=0x2f; P8279K=0x40; P8279K=0x90;

P8255K=0x89; /*PA,PB is output; PC is input;*/ i=j=l=0; key=0x0f; ms=t1s=0x00;

bit0=bit1=bit2=bit3=bit4=bit5=bit6=bit7=0; TR0=1; TR1=0; }

32

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

/*********************************************/ void cepin() { EA=0;

TR0=1;TR1=0;TH1=TL1=0; ii=0;jj=0;ff=0;tt=0; while(!T0){T0=1;}; TR1=1;

while( T0){T0=1;}; while(!T0){T0=1;}; TR1=0;ii=TH1;jj=TL1; tt=ii*0x100+jj ; ff=1000000.0/tt ; TR1=0;TH1=TL1=0; bit6=1;

if(tt<=9999){ TR1=0; TL1=0;TH1=0;TMOD=0x51; TL0=0xf0; TH0=0xd8; TR0=1; ms=98;bit7=0; EA=1; IE=0x82; bit6=0; while(!bit7){} TR1=1;bit7=0; while(!bit7){}

TR1=0;bit7=0; ii=TH1;jj=TL1; tt=ii*0x100+jj ; ff=tt ;

tt=1000000.0/ff;

TR1=0;TH1=TL1=0; } fff=ff;

TL0=0xf0; TH0=0xd8; TL1=0; TH1=0; /*T1-- */

IE=0x83; IP=0x04; /*int1 is high */ TMOD=0x11; TCON=0x05; TR0=1; EA=1; }

/*********************************************/ void cexwei() { EA=0;

TR0=1;TR1=0;TH1=TL1=0; ii=0;jj=0;ff=0;tt=0; while(!T0){T0=1;}; TR1=1;T0=1;

while( T0){ if(!T1) bit2=1;} T0=1;T1=1;

while(!T0){ if(bit2) {if(T1) {jjb=TL1,iib=TH1;bit2=0;}} else { if(!T1) bit2=1;} } TR1=0;iia=TH1;jja=TL1;

33

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

tta=iia*0x100+jja ; ff=1000000.0/tta ; ttb=iib*0x100+jjb ; tt=tta-ttb;

if(fff>20000.0) {tta=1000000.0/fff; } fa=360.0-360.0*tt/tta; if(fa<=0.0001) fa=0.001;

TL0=0xf0; TH0=0xd8; TL1=0; TH1=0; /*T1-- */

IE=0x83; IP=0x04; /*int1 is high */ TMOD=0x11; TCON=0x05; TR0=1; EA=1; }

void cexwei6() {

cexwei(); aaa[0]=fa; cexwei(); aaa[1]=fa; cexwei(); aaa[2]=fa; cexwei(); aaa[3]=fa; cexwei(); aaa[4]=fa; cexwei(); aaa[5]=fa;

fa=(aaa[0]+aaa[1]+aaa[2]+aaa[3]+aaa[4]+aaa[5])/6; }

/***************************************/ void cerlc() { EA=0;

TR1=0;TH1=TL1=0; while(!T0) {}; TR1=1;

while( T1) {}; while(!T1) {};

TR1=0;i=TH1;j=TL1; tt2=i*0x100+j ; EA=1;IE=0x83; TH1=TL1=0; }

/*--------------goodl,goodm------------------*/ void good(void)

{ /*P8279K=0xd1; for(i=0;i<0x80;i++ ){i++;}*/ P8279K=0x90;

if(bit0){ P8279D=0x6f;P8279D=0x5c;P8279D=0x5c;P8279D=0x5e;

P8279D=0x40;P8279D=0x40;P8279D=0x40;P8279D=0x40; } else { P8279D=0x6f;P8279D=0x5c;P8279D=0x5c;P8279D=0x5e; P8279D=0x80;P8279D=0x80;P8279D=0x80;P8279D=0x80; }

34

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

}

void disp()

{ P8279K=0x90;

P8279D=ld[0];P8279D=ld[1];P8279D=ld[2];P8279D=ld[3]; P8279D=ld[4];P8279D=ld[5];P8279D=ld[6];P8279D=ld[7]; } void dispff() { ff=fff;

uuh=ff; uul=100*ff-uuh*100;

if(uuh>=65000) {uuh=65000; uul=0;} ld[0]=0x71;

i=uuh/10000; ld[1]=led[i]; uuh=uuh-i*10000; i=uuh/1000; ld[2]=led[i]; uuh=uuh-i*1000; i=uuh/100; ld[3]=led[i]; uuh=uuh-i*100; i=uuh/10 ; ld[4]=led[i]; uuh=uuh-i*10; i=uuh; ld[5]=led[i+0x10]; i=uul/10 ; ld[6]=led[i]; uul=uul-i*10; i=uul; ld[7]=led[i];

if(ld[1]==0x3f) {ld[1]=0x00; if(ld[2]==0x3f) {ld[2]=0x00; if(ld[3]==0x3f) {ld[3]=0x00; if(ld[4]==0x3f) ld[4]=0x00; }}} }

void dispfa()

{uuh=fa; uul=100*fa-uuh*100; if(uuh>=360) {uuh=0; uul=0;} ld[0]=0x77; ld[1]=0x77; ld[2]=0x00;

i=uuh/100; ld[3]=led[i]; uuh=uuh-i*100; i=uuh/10 ; ld[4]=led[i]; uuh=uuh-i*10; i=uuh; ld[5]=led[i+0x10]; i=uul/10 ; ld[6]=led[i]; uul=uul-i*10; i=uul; ld[7]=led[i];

if(ld[3]==0x3f) {ld[3]=0x00; if(ld[4]==0x3f) ld[4]=0x00; } }

/*------------------------------------------------------*/ void main(void) {aaa: start();

while(key==0x0f) good(); bbb: cepin(); cexwei();

if(key==0) dispff(); else dispfa(); disp();

35

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

/* if(bit6) */ { bit6=0; while (bit0) {if(key==0) dispff(); else dispfa(); disp(); } while (!bit0){if(key==0) dispff(); else dispfa(); disp(); } }

goto bbb;

cepin();

cexwei(); cerlc();

if(tt2>=tt) fa=360.0-fa; dispff(); dispfa();

goto bbb;

/********************float************************ for (i=0;i<=49;i++){}

{for (j=i+1;j<=49;j++){if (ua[i]>ua[j]) {uu=ua[i];ua[i]=ua[j];ua[j]=uu;}}} uul=0;

for (i=10;i<=39;i++){uu=ua[i]; uul=uul+(long)uu;} uuf=(float)uul/30000.0; uuf=2.0+x0;x0++;

ff0=100.0*uuf*uuf+88.0; ff0=sqrt(uuf); ff0=ff0*0.1414; ff1=ff0*0.1732; ff1=cos(ff1); disp();

**********************float************************/ goto aaa; }

#pragma optimize(4) #include \#include \#include \#include \void start(); void cepin(); void cexwei(); void cexwei6();

36

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

void cerlc(); void good(); void disp(); void dispff(); void dispfa(); void int0(); void t0int(); void t1int();

code unsigned char led[36]=

{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x58,0x5e,0x79,0x71,/***01...9AbcdEF***/ 0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef, 0xf7,0xfc,0xd8,0xde,0xf9,0xf1,/*0.1...9.A.b...F.*/ 0x00,0xff,0x73,0x38/***灭,亮,P,L***/};

code unsigned char u[100]=

{0, 1, 2, 4, 6, 8, 12, 15, 19, 24, 29, 34, 40, 46, 52, 59, 66, 73, 80, 88, 95, 103, 111, 119, 127, 135, 143, 151, 159, 166, 174, 181, 188, 195, 202, 208, 214, 220, 225, 230, 235, 239, 242, 246, 248, 250, 252, 253, 254, 255, 254, 253, 252, 250, 248, 246, 242, 239, 235, 230, 225, 220, 214, 208, 202, 195, 188, 181, 174, 166, 159, 151, 143, 135, 127, 119, 111, 103, 95, 88,

80, 73, 66, 59, 52, 46, 40, 34, 29, 24, 19, 15, 12, 8, 6, 4, 2, 1, 0, 0 };

code unsigned char u0[100]=

{0, 1, 2, 4, 6, 8, 12, 15, 19, 24, 29, 34, 40, 46, 52, 59, 66, 73, 80, 88, 95, 103, 111, 119, 127, 135, 143, 151, 159, 166, 174, 181, 188, 195, 202, 208, 214, 220, 225, 230, 235, 239, 242, 246, 248, 250, 252, 253, 254, 255, 254, 253, 252, 250, 248, 246, 242, 239, 235, 230, 225, 220, 214, 208, 202, 195, 188, 181, 174, 166, 159, 151, 143, 135, 127, 119, 111, 103, 95, 88,

80, 73, 66, 59, 52, 46, 40, 34, 29, 24, 19, 15, 12, 8, 6, 4, 2, 1, 0, 0 };

data unsigned char ld[8],i,j,ii,jj,iia,jja,iib,jjb,l; data unsigned char ms,it11,t1s; data unsigned char intt1,intt2; data unsigned char ix10,ix11; data unsigned char key;

37

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

data unsigned int tt,tt1,tt2,tta,ttb; data unsigned int uuh=0; data unsigned int uul=0; data float ff,fa;

bdata bit bit0,bit1,bit2,bit3,bit4,bit5,bit6,bit7;

#define P8279D XBYTE[0x2000] #define P8279K XBYTE[0x2001] #define P8255A XBYTE[0x4000] #define P8255B XBYTE[0x4001] #define P8255C XBYTE[0x4002] #define P8255K XBYTE[0x4003] #define AD0 XBYTE[0x6000] #define AD1 XBYTE[0x6001] #define AD2 XBYTE[0x6002] #define AD3 XBYTE[0x6003] #define AD4 XBYTE[0x6004] #define AD5 XBYTE[0x6005] #define AD6 XBYTE[0x6006] #define AD7 XBYTE[0x6007] #define DA0832 XBYTE[0x8000] /* xdata signed int ua[255]; */

/*------------------INT------------------------*/ void int0() interrupt 0 using 1

{ P8279K=0x40; key=P8279D; TR1=0; TMOD=0x21;

if(key==0x40) {ff=100.00; TH1=TL1=156; intt1=intt2=0;} else if(key==0x41) {ff=1000.00; TH1=TL1=255; intt1=intt2=0;} else if(key==0x42) {ff=10000.00; TH1=TL1=255; intt1=intt2=0;} }

void t0int() interrupt 1 using 1 /*10ms !*/ { TL0=0xf0; TH0=0xd8; TR0=1; ms++;

if(ms==50) { bit0=0; } if(ms>=100){ ms=0; bit0=1;bit7=1;} }

void t1int() interrupt 3 using 2 {TR1=1;

if(key==0x41) {intt1=intt1+4; if(intt1>=100) intt1=0;}

else if(key==0x42) {intt1=intt1+5; if(intt1>=100) intt1=0;} else if(key==0x40) {intt1++; if(intt1>=100) intt1=0;} DA0832=u[intt1]; }

/*---------------------------------------------*/

38

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

void start()

{TL0=0xf0; TH0=0xd8; /*T0=d8f0=55536=10ms*/ TL1=0; TH1=0; /*T1-- */ IE=0x8b; IP=0x01; /*t1 is high */ TMOD=0x21; TCON=0x05;

P8279K=0xd1; for(i=0;i<98;i++ ){i++;} P8279K=0x00; P8279K=0x2f; P8279K=0x40; P8279K=0x90;

P8255K=0x89; /*PA,PB is output; PC is input;*/ i=j=l=0; key=0x0f; ms=t1s=0x00;

bit0=bit1=bit2=bit3=bit4=bit5=bit6=bit7=0; TR0=1; TR1=0; }

void cepin(){} void cexwei(){} void cerlc(){}

/*--------------goodl,goodm------------------*/ void good(void)

{ /*P8279K=0xd1; for(i=0;i<0x80;i++ ){i++;}*/ P8279K=0x90;

if(bit0){ P8279D=0x6f;P8279D=0x5c;P8279D=0x5c;P8279D=0x5e;

P8279D=0x40;P8279D=0x40;P8279D=0x40;P8279D=0x40; } else { P8279D=0x6f;P8279D=0x5c;P8279D=0x5c;P8279D=0x5e; P8279D=0x80;P8279D=0x80;P8279D=0x80;P8279D=0x80; } }

void disp()

{ P8279K=0x90;

P8279D=ld[0];P8279D=ld[1];P8279D=ld[2];P8279D=ld[3]; P8279D=ld[4];P8279D=ld[5];P8279D=ld[6];P8279D=ld[7]; } void dispff()

{ uuh=ff; uul=100*ff-uuh*100;

if(uuh>=65000) {uuh=65000; uul=0;} ld[0]=0x71;

i=uuh/10000; ld[1]=led[i]; uuh=uuh-i*10000; i=uuh/1000; ld[2]=led[i]; uuh=uuh-i*1000; i=uuh/100; ld[3]=led[i]; uuh=uuh-i*100; i=uuh/10 ; ld[4]=led[i]; uuh=uuh-i*10; i=uuh; ld[5]=led[i+0x10]; i=uul/10 ; ld[6]=led[i]; uul=uul-i*10; i=uul; ld[7]=led[i];

if(ld[1]==0x3f) {ld[1]=0x00; if(ld[2]==0x3f) {ld[2]=0x00; if(ld[3]==0x3f) {ld[3]=0x00;

39

参赛单位:青岛建筑工程学院 指导老师:赵艳秋 张民 张天开 参赛队员:赵玉军 房瑞金 胡明辉

if(ld[4]==0x3f) ld[4]=0x00; }}} }

void dispfa()

{uuh=fa; uul=100*fa-uuh*100; if(uuh>=360) {uuh=0; uul=0;} ld[0]=0x77; ld[1]=0x77; ld[2]=0x00;

i=uuh/100; ld[3]=led[i]; uuh=uuh-i*100; i=uuh/10 ; ld[4]=led[i]; uuh=uuh-i*10; i=uuh; ld[5]=led[i+0x10]; i=uul/10 ; ld[6]=led[i]; uul=uul-i*10; i=uul; ld[7]=led[i];

if(ld[3]==0x3f) {ld[3]=0x00; if(ld[4]==0x3f) ld[4]=0x00; } }

/*------------------------------------------------------*/ void main(void) {aaa: start();

while(key==0x0f) good();

bbb: while(bit0) { if(key==0x43) dispfa(); else dispff(); disp(); }

while(!bit0) { if(key==0x43) dispfa(); else dispff(); disp(); } TR1=1; goto bbb;

/********************float************************ for (i=0;i<=49;i++){}

{for (j=i+1;j<=49;j++){if (ua[i]>ua[j]) {uu=ua[i];ua[i]=ua[j];ua[j]=uu;}}} uul=0;

for (i=10;i<=39;i++){uu=ua[i]; uul=uul+(long)uu;} uuf=(float)uul/30000.0; uuf=2.0+x0;x0++;

ff0=100.0*uuf*uuf+88.0; ff0=sqrt(uuf); ff0=ff0*0.1414; ff1=ff0*0.1732; ff1=cos(ff1); disp();

**********************float************************/ goto aaa; }

40

本文来源:https://www.bwwdw.com/article/8zp6.html

Top