基于单片机的相位测量仪

更新时间:2024-03-23 10:17:01 阅读量: 综合文库 文档下载

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

第1章 绪论

相位测量仪是电力部门、工厂和矿山、石油化工、冶金系统进行二次回路检查的理想的高精度仪表。尤其适用于电能计量、用电检查、继电保护、差动检测、电力建设和变送电工程等。是电力系统各部门的必备仪器之一。 1.1 课题研究背景 在电子测量技术中,相位测量时最基本的测量手段之一,相位测量仪式电子领域的常用仪器。随着相位测量技术广泛应用于科学研究、实验、生产实践等各个领域,对相位测量技术的要求也向高精度高智能化方向发展,在低频范围内,相位测量在电力、机械等部门具有非常重要的意义。 基于数字式相位测量仪的高精度、高智能化、直观化的特点,工业上常常用此进行低频信号相位差的精确测量。同频信号间相位差的测量在电力系统、工业自动化、智能控制及通信、电子、地球物理勘探等许多领域都有着广泛的应用。尤其在工业领域中,相位不仅是衡量安全的重要依据,还可以为节约能源提供参考。

1.2 课题研究内容 1.2.1 相位测量 相位差的测量原理主要有三种:过零检测法——基于对信号波形的变换比较;倍乘法——基于对傅氏级数的运算;矢量法——基于对三角函数的运算。 过零点检测法是一种将相位测量变为时间测量的方法。其原理是将基准信号的过零时刻与被测信号的过零时刻进行比较,由二者之间的时间间隔与被测信号周期的比值推算出两信号之间的相位差.这种方法的特点是电路简单,且对启动采样电路要求不高,同时还具有测量分辨率高、线性好和易数字化等优点. 倍乘法:任何一个周期函数都可以用傅氏级数表示,即用正弦函数和余弦函数构成的无穷级数来表示,倍乘法测量相位差所用的运算器是一个乘法器,2个信号是频率相同的正弦函数,相位差为?,运算结果经过一个积分电路,可以得到一个直流电压?coskV?,电路的输出和被测信号相位差的余弦成比例,因此其测量范围在45°以内,为使测量范围扩展到360°,需要附加一些电路才可以实现.倍乘法由于应用了积分环节,可以滤掉信号波形中的高次谐波,有效抑制了谐波对测量准确度的影响. 矢量法:任何一个正弦函数都可以用矢量来表示,如各个正弦信号幅度相等、频率相同,运算器运用减法器合成得到矢量的模2/sin2?EV?.矢量法用于测量小角度范围时,灵敏度较好,可行度也较高;但在180°附近灵敏度降低,读数困难且不准确.由于系统输出为一余弦或正弦函数,因此这种方法适用于较宽的频带范围。 上述3种测量相位的方法各有优势,从测量范围、灵敏度、准确度、频率特性和谐波的敏感性等技术指标来看,过零检测法的输出正比于相位差的脉冲数,且易于实现数字化和自动化,故本研究采用过零检测法。 1.2.2 基本要求 本设计研究了一种可测20Hz-20kHz内任意频率数字式相位测量仪的设计方法。主要内容是以AT89C51为控制核心,实现对音频范围内的正弦交流信号的相位的测量,可测的信号相位差在0~360度范围内,测量精度可达0.1度。 两路信号(同频、不同相,一路为待测信号,另一路为参考信号)通过过零比较器电路整形成矩形波信号,再通过鉴相器,得到相位差信号。这样就构成了相位测量系统的测量电路。再将该相位差信号送入单片机的外部中断端口,通过单片机对数据的处理,最后方可得到所要测量的相位差,并在液晶上显示出测量结果。

第2章 方案论证 本设计中,相位测量仪主要是对被测网络的输入、输出信号的相位差进行测量。这样的两路待测信号为同频不同相的正弦交流信号,频率范围为20Hz-20kHz,幅度为0V~500V。相位差测量的基本原理为:对信号波形的变换、比较及相关数学运算。即对于被测信号是同频不同相的两路正弦交流信号,为了准确地测量出该相位差,需要对输入信号的波形进行整形,本设计利用LM339组成整形电路,使输入信号变成矩形波信号,再经异或门组成的鉴相器电路,输出即为相位差信号,再结合单片机的数据处理功能,最后通过液晶即可显示出该相位差。由于单片机的工作电压在5V左右,所以在进行相位测量前,还需将被测信号进行分档降压处理。 2.1 自动量程控制原理论证 本设计中,待测信号是0V~500V正弦交流信号,要想进行相位测量,则需先将该信号进行降压处理。常见的交

流降压法有降压变压器降压法、电容降压法、电感降压法、纯电阻电路降压法,考虑到本设计中的降压过程不得引入新的相移,否则影响下一步的相位测量的精准度,此处选择最后一种方法,即纯电阻电路的降压法,该电路实现起来直观、简易且误差小。 本设计中,将待测信号分成三个档位:500V、50V、5V。结合继电器的自动开关作用,即当待测信号的满足其中某一档位的指标时,则相应的被控电路导通,从而自动量程控制电路转入相位测量电路进行后续数据处理等功能。

2.2 相位测量原理论证 由数学关系可知,时间差和相位差有如下关系: T:360=Tg:g (2.1) 由此可得:

=(Tg/T)*360?? (2.2) 其中,?Tg是相位差g?对应的时间差,T是信号周期。

式2.2表明,相位差?与时间差?Tg有着一一对应的关系,只要通过测量时间差? Tg及信号周期T,就可以求得相位差?,这就是相位差的基本测量原理。

显然,相位差g?的测量本质上是时间的测量。而时间的测量方法有很多种,本设计结合51单片机的特点,采用过零点检测法。其原理是将基准信号通过零的时刻与被测信号通过零的时刻进行比较,由二者之间的时间间隔推算出两信号之间的相位差。这种方法的特点是电路简单,对启动电路要求不高,同时该方法还具有测量分辨率高、线性好、易于数学化等优点。 将该相位差信号送入单片机的外部中断接口,对该信号的脉冲宽度进行计数,从而得到对应于相位差的时间差和周期,再根据上述求解相位差的公式便可得到所求,并由液晶显示最终测得的相位差。

第3章 硬件设计 本章主要阐述了系统各单元的硬件电路设计思想及具体硬件组成,本设计共包括以下模块:单片机主控电路、显示电路、稳压电路、自动量程控制电路、AD转换电路、继电器驱动电路、超限报警电路及相位测量电路共8个部分。 系统总体框图如图3.1所示。

图3.1 系统总体框图 3.1 主控电路设计

这部分是由单片机、晶振电路、复位电路组成。本设计中充分利用了单片机较强的运算能力和控制能力这一特点,使用单片机外部中断INT0、INT1接收外部送来的相位差信号,并在单片机内部完成相应的处理及相关运算。 图3.2为AT89C51主控电路图。

图3.2 主控电路图

3.1.1 AT89C51单片机

本设计中采用的核心控制器是AT89C51,它是美国ATMEL公司生产的一款低电压,高性能CMOS 8位单片机,片内含4K字节FLASH可反复擦写的只读程序存储器(EPROM)和128 字节的随机数据存储器(RAM),器件采用ATMEL

公司的高密度、非易失性存储技术生产,与工业标准的MCS-51指令集和输出管脚相兼容,片内内置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C51单片机可提供高性价比的应用场合,可灵活应用于各种控制领域。因此,在这里我选用AT89C51单片机来完成。

3.1.1.1 主要性能参数:

?与MCS-51产品指令系统完全兼容 ?4K字节可编程Flash存储器 ?1000次擦写周期

?全静态工作:0hz-24hz ?三级加密程序存储器 ?128×8位内部RAM ?32个可编程I/O口线 ?2个16位定时/计数器 ?5个中断源

?可编程串行UART通道 ?低功耗空闲和掉电模式 3.1.1.2 管脚说明: VCC:供电电压。 GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当 P0口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1

口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1 口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH 编程和校验时,P1口作为低八位地址接收。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2 口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”

时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2

口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2 口输出地址的高八位。在给出地址“1”

时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH

编程和校验时接收高八位地址信号和控制信号。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个 TTL门电流。当P3口写入“1”

后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。

P3口也可作为AT89C51的一些特殊功能口,如表1所示: 表1 P3口第二功能表 管脚 功能 P3.0

RXD(串行输入口) P3.1

TXD(串行输出口)

P3.2 /INT0(外部中断0) P3.3

/INT1(外部中断1) P3.4

T0(记时器0外部输入)

P3.5 T1(记时器1外部输入)

P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号。

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR 8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。. /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH) ,不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当 /EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加 12V编程电源(VPP)。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性:XTAL1和XTAL2 分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振

荡均可采用。

如采用外部时钟源驱动器件,XTAL2 应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 3.1.2 晶振电路的设计

晶振是一种能把电能和机械能相互转化,产生稳定、精确的共振频率的元件。它结合单片机内部电路产生单片机所需的时钟频率。单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率的基础之上的。在通常工作条件下,普通晶振频率绝对精度可达百万分之五十。AT89C5l 中有一个用于构成内部振荡器的高量程反相放大器,引脚 XTAL1 和 XTAL2 分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器,振荡电路参见图3.3。

图3.3 晶振电路 外接石英晶体(或陶瓷谐振器)及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1、C2

虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,如果使用石英晶体,我们推荐电容使用30pF±10pF,而如使用陶瓷谐振器建议选择40pF±10F。也可以采用外部时钟,这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。本设计采用前一种方法,选用33pF的电容和12MHz的石英晶体相配合,这样可以提供准确而又稳定的us级定时时钟。 3.1.3 复位电路的设计

单片机在启动时都需要复位,以使CPU及系统各部件处于确定的初始状态,并从初态开始工作。89系列单片机的复位信号是从RST引脚输入到芯片内的施密特触发器中的。当系统处于正常工作状态时,且振荡器稳定后,如果RST引脚上有一个高电平并维持2个机器周期(24个振荡周期)以上,则CPU就可以响应并将系统复位。单片机系统的复位方式有:手动按钮复位和上电复位。 1、手动按钮复位 手动按钮复位需要人为在复位输入端RST上加入高电平。一般采用的办法是在RST端和正电源Vcc之间接一个按钮。当人为按下按钮时,则Vcc的+5V电平就会直接加到RST端。由于人的动作再快也会使按钮保持接通达数十毫秒,所以完全能够满足复位的时间要求。

2、上电复位 AT89C51的上电复位,只要在RST复位输入引脚上接一电容至Vcc端,下接一个电阻到地即可。对于CMOS型单片机,由于在RST端内部有一个下拉电阻,故可将外部电阻去掉,而将外接电容减至1uF。上电复位的工作过程是在加电时,复位电路通过电容加给RST端一个短暂的高电平信号,此高电平信号随着Vcc对电容的充电过程而逐渐回落,即RST端的高电平持续时间取决于电容的充电时间。为了保证系统能够可靠地复位,RST端的高电平信号必须维持足够长的时间。上电时,Vcc的上升时间约为10ms,而振荡器的起振时间取决于振荡频率,如晶振频率为10MHz,起振时间为1ms;晶振频率为1MHz,起振时间则为10ms。当Vcc掉电时,必然会使RST端电压迅速下降到0V以下,但是,由于内部电路的限制作用,这个负电压将不会对器件产生损害。另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。如果系统在上电时得不到有效的复位,则程序

计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序。 3、积分型上电复位 常用的还有上电或开关复位电路,上电后,由于电容的充电和反相门的作用,使RST持续一段时间的高电平。当单片机已在运行当中时,按下复位键后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。 本设计采用的是上电复位,如图3.3所示,原理是上电时,C3充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C3充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态。工作期间,按下S1,C3放电。S1松开,C3又充电,在10K电阻上又出现电压,使得单片机复位。几个毫秒后,单片机又进入工作状态。

图3.3 复位电路

3.2 显示电路的设计 本设计采用由液晶LCD1602组成的显示的电路。单片机将处理后的数据送到LCD1602中进行输出显示。显示电路如图3.4所示。

图3.4 液晶LCD1602显示电路

LCD1602液晶显示屏以其微功耗、体积小、显示内容丰富、超薄轻巧等诸多优点,在袖珍式仪表和低功耗应用系统中得到广泛的应用。其各管脚功能如表3.4所示。 表3.4 LCD1602管脚功能表

编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 4~6 RS、RW、E 数据命令选择 2 VDD 电源正极 7~14 DE0~DE7 数据I/O

3 V0 液晶显示偏压信号 15~16 BLA、BLK 背光源正、负极

由管脚功能表可知,VSS接地,VDD接5V电源正极,V0为液晶显示器对比度调整端(接正电源时对比度最弱,接地电源时对比度最高), 通过一个10K的电位器R3调整对比度。背光源根据其正负极分别与电源正负极相连接。

单片机的P3.7~P3.5口分别与LCD1602液晶显示屏的RS、RW、E引脚相连接,来控制LCD的初始化及显示模式。P1.0~P1.7口分别与LCD1602液晶显示屏的DE0~DE7引脚相连接,来显示所测量的数据。 3.3 稳压电路的设计

电路提供+5V的稳定电源,主要用于单片机(AT89C51)及周边外围电路、液晶显示、AD转换、相位测量、超限报警等电路。

图3.5 7805稳压电路

图3.5所示,电源电路采用集成稳压管LM7805进行稳压。电池提供的12V直流电压通过LM7805可以输出稳定的5V电压。电池提供的12V电压可用于驱动继电器的工作。

LM7805是美国四家半导体公司的三端固定稳压集成电路,用于将输入的电压稳压集为5V后提供给有关电路,其应用十分广泛,在视频、音频、计算机、游戏机等各种电器上均有应用。LM7805是最常用到的稳压芯片。他使用方便,用很简单的电路就可以输入一个直流稳压电源,它的输出电压恰好为5V,刚好是51系列单片机工作所需的电压,它有很多的系列,如KA7805、ADS7805、CW7805等等,性能上有微小差别,用的最多的还是LM7805,。LM7805有三个引脚,分别为Vin:输入引脚,电压为12V;Vout:输出引脚,电压为5V;GND:接地端。 3.4 超限报警电路的设计 蜂鸣器俗称喇叭,是广泛应用于各种电子产品的一种元器件,它用于提示、报警、音乐等许多应用场合。蜂鸣器与家用电器上面的喇叭在用法上也有相似之处,通常工作电流比较大,电路上的TTL电平基本上驱动不了蜂鸣器,需要增加一个电流放大的电路才可以。本设计采用了一种很简单的电路来实现蜂鸣器的联结,而且增加了三极管来增加通过蜂鸣器的电流。

如图3.6所示,蜂鸣器的负极性的一端接地,正极性的一端接在PNP三极管的集电极上,三极管的基极由P2.7管脚来控制,当待测信号不在规定的测量范围时,P2.7脚为低电平,三极管导通,这样蜂鸣器电路形成回路,发出警报声;在没有超限的情况下,该管脚为高电平,则三极管截止,蜂鸣器不响。

图3.6超限报警电路

3.5 时差检测电路的设计

时差检测电路主要包含以下几个主要模块:自动量程控制、继电器驱动、AD转换、相位测量四个部分。主要完成量程的自动选择和相位差信号的获得。以下将阐述各个部分的具体设计方法。

3.5.1 自动量程控制电路的设计 本设计中,相位测量仪主要是对被测网络的输入、输出信号的相位差进行测量。这样的两路待测信号为同频不同相的正弦交流信号,幅度为0V~500V,而单片机和相位测量电路的工作电压是5V,因此在进行相位测量前必须做分档降压的处理。本设计中选用纯电阻电路的降压法,这样电路实现起来简单可行,最重要的是不会引入新的相移。具体电路如图3.7所示。

图3.7 自动量程控制电路

从图3.7可以看到,自动量程控制分为两个支路,分别是被测网络的输入和输出两部分,被

测网络的输出作为待测信号(上面一条支路),被测网络的输入作为参考信号(下面一条支路),每一路信号都将经过三个档位的选择电路,从上至下分别为500V档、50V档、5V档。选通开关这里用的是电磁式继电器,选通原理是这样的:当继电器驱动电路检测到对应的IO口为低电平时,则继电器吸合,对应的档位同时被选通。降压电路里分压电阻的取值因输入信号的幅值的不同而不同,若设参考信号的幅值为2.5V,与接地端直接相连的电阻取1k,待测信号的幅值为Vm,则有 5.211* ??k Rxk Vm (3.1)

由此可知,

kVm kRx15 .2* 1?? (3.2)

因此,当Vm分别为500V、50V、5V时,Rx对应的分别为199k、19k、1k。

3.5.2 继电器驱动电路的设计

电磁式继电器一般用功率接口集成电路或晶体管驱动。在使用较多继电器的系统中,可用功率接口集成电路驱动,例如SN75468等。一片SN75468可以驱动7个继电器,驱动电流可达500mA,输出端最大工作电压为100V。本设计采用晶体管来驱动继电器。如图3.8所示。

图3.8 继电器驱动电路

继电器的动作由单片机的P2.0、P2.1、P2.2口控制。当三者之一输出低电平时,对应的继电器J吸合,同时分档电路里对应的继电器也吸合,对应档位导通;若为高电平,继电器J释放。采用这种控制逻辑可以使继电器在上电复位或单片机受控复位时不吸合。

继电器J由晶体管9013驱动,9013可以提供300mA的驱动电流,适用于继电器线圈工作电流小于300mA的场合。基于光电耦合器有较高的电流传输比,且最小值为50%。晶体管9013的电流放大倍数大于50。当继电器线圈工作电流为300mA时,光耦需要输出大于6.8mA的电流,其中9013基极对地的电阻分流0.8mA。输入光耦的电流必须大于13.6mA,才能保证向继电器提供300mA的电流。

这里的二极管D的作用是保护晶体管9013。当继电器J吸合时,二极管D截止,不影响电路工作。继电器释放时,由于继电器线圈存在电感,这时晶体管9013已经截止,所以会在线圈的两端产生较高的感应电压。这个感应电压的极性是上负下正,正端接在T的集电极上。当感应电压与12V电源电压之和大于晶体管的集电结的反向耐压时,晶体管有可能损坏。加入二极管后,继电器线圈产生的感应电流由二极管D流过,因此不会产生很高的感应电压,晶体管便得到了保护。

关于电磁继电器:电磁继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)释放。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。 3.5.3 AD0832转换电路的设计

3.5.3.1 AD0832工作原理

如图3.9所示,选通的待测信号输入到AD0832的CH1端,但先要经过整流二极管,将交流转换为直流后方可输入到AD0832中进行转换和判断。

图3.9?AD转换电路

判断依据是:对于未知的输入信号,首选的是将信号送入最大档位进行测量。若经过整流二极管转换后的待测信号幅值Vm满足1V?Vm?2.5V,表示该档是合理的档位,可以将其送入相位测量电路进行后续处理;若Vm<1V,表示该信号相对于当前档位偏小,则选通下一档位,采用相同的方法进行比较判断;若Vm>2.5V,表示该信号超过了本设计规定的测量范围,同时发出超限报警信号。 3.5.3.2 AD0832简要介绍

ADC0832是NS(National Semiconductor)公司生产的具有Microwire/Plus串行接口的8位A/D转换器,通过三线接口与单片机连接,功耗低,性能价格比较高,芯片引脚少,适宜在袖珍式智能仪器中使用。主要特点有:8位分辨率,逐次逼近型,基准电压为5V;输入模拟信号电压范围为0~5V;输入和输出CMOS兼容;在250KHz时钟频率时,转换时间为32us;具有两个可供选择的模拟输入通道;功耗低,15mW。

ADC0832有DIP和SOIC两种封装,本设计额中采用的是DIP封装,如上图3.9所示。 各引脚说明如下:

CS为片选端,低电平有效。

CH0,CHl为两路模拟信号输入端。 DI为两路模拟输入选择输入端。 D0为模数转换结果串行输出端。 CLK为串行时钟输入端。

VCC/REF为正电源端和基准电压输入端。 GND为电源地。

配置位说明:ADC0832工作时,模拟通道的选择及单端输入和差分输入的选择,都取决于输入时序的配置位。当差分输入时,要分配输入通道的极性,两个输人通道的任何一个通道都可作为正极或负极。ADC0832的配置位逻辑表如表1所列。 表3.5 ADC0832配置位的说明 输入格式 配置位 选择通道号 CH0 CHl CH0 CHl

差分 L L + - L H - + 单端 H L + H H +

表中“+”表示输入通道的端点为正极性;“-”表示输入端点为负极性;H或L表示高、低电平。输入配置位时,高位(CHO)在前,低位(CHl)在后。

工作时序:当CS由高变低时,选中ADC0832。在时钟的上升沿,DI端的数据移人ADC0832内部的多路地址移位寄存器。在第一个时钟期间,DI为高,表示启动位,紧接着输入两位配置位。当输入启动位和配置位后,选通输入电平与吼和模拟通道,转换开始。转换开始后,经过一个时钟周期延迟,以使选定的通道稳定。ADC0832接着在第4个时钟下降沿输出转换

数据。数据输出时先输出最高位(D7~DO);输出完转换结果后,又以最低位开始重新输出一遍数据(D7~DO),两次发送的最低位共用。当片选CS为高时,内部所有寄存器清0,输出变为高阻态。如果要再进行一次模数转换,片选CS必须再次从高向低跳变,后面再输入启动位和配置位。

3.5.4 相位测量电路的设计

相位测量模块主要包括整形电路的设计和鉴相器电路的设计。其中,整形电路采用的是过零比较法将待测信号变成矩形波信号,然后再送给鉴相器电路进行下一步的处理。而且,为了避免待测信号和参考信号在整形电路中产生附加相移或者发生相对相移,本设计对两路信号采用了相同的整形电路,这样即使发生相移,也能保证二者的相对相移为0。具体电路如图3.10所示。其中,Ua、Ub分别是待测信号和参考信号;Uc、Ud分别是经过过零比较整形后的两路矩形波信号;Ue、Uf分别是经过三极管转换电路得到的只有0、1电平的矩形波信号,用以作为JK触发器的时钟信号;Ug、Uh分别是经JK触发器后的二分频信号,同时也是鉴相器的输入信号;Ui、Uj分别是相位差信号及其取反后的信号。 为了避免待测信号在过零点时含有干扰,这里用LM339组成如下图所示的整形电路,还应注意的是,LM339的输出端相当于一只不接集电极电阻的晶体三极管,在使用时输出端到正电源一般须接一只电阻(称为上拉电阻,选3-15K)。选不同阻值的上拉电阻会影响输出端高电位的值。因为当输出晶体三极管截止时,它的集电极电压基本上取决于上拉电阻与负载的值。所以要加上拉电阻才能保证有高电平输出,本设计中采用的是10K的上拉电阻。

图3.10 相位测量电路 3.5.4.1 LM339简要介绍

LM339电压比较器芯片内部装有四个独立的电压比较器,图3.11是很常见LM339引脚图的集成电路图。利用lm339可以方便的组成各种电压比较器电路和振荡器电路。该电压比较器的特点是:1)失调电压小,典型值为2mV;2)电源电压范围宽,单电源为2-36V,双电源电压为±1V~±18V;3)对比较信号源的内阻限制较宽;4)共模范围很大,为0~(Ucc-1.5V)Vo;5)差动输入电压范围较大,大到可以等于电源电压;6)输出端电位可灵活方便地选用。LM339集成块采用C-14型封装。由于LM339使用灵活,应用广泛,所以世界上各大IC生产厂、公司竟相推出自己的四比较器,如IR2339、ANI339、SF339 等,它们的参数基本一致,可互换使用。

图3.11 LM339管脚图

LM339类似于增益不可调的运算放大器。每个比较器有两个输入端和一个输出端。两个输入端一个称为同相输入端,用“+”表示,另一个称为反相输入端,用“-”表示。用作比较两个电压时,任意一个输入端加一个固定电压做参考电压(也称为门限电平,它可选择LM339输入共模范围的任何一点),另一端加一个待比较的信号电压。当“+”端电压高于“-”端时,输出管截止,相当于输出端开路。当“-”端电压高于“+”端时,输出管饱和,相当于

输出端接低电位。两个输入端电压差别大于10mV就能确保输出能从一种状态可靠地转换到另一种状态,因此,把LM339用在弱信号检测等场合是比较理想的。LM339可构成 单限比较器、 迟滞比较器 、双限比较器(窗口比较器) 、振荡器等;还可以组成高压数字逻辑门电路,并可直接与TTL、CMOS电路接口。 3.5.4.2 JK触发器工作原理的简要介绍

相位测量电路中用到两个JK触发器,二者工作原理一样,这里以前者为例来加以阐述:JK触发器的J端、K端及电源端均接到+5V上,清零端通过C9接地,当接通电源瞬间,清除端通过C9处于低电平,使Q端置为低电平;C9逐渐充电完毕,这时清零端通过R30处于高电平。当CLK端接收到触发脉冲时,Q端有低电平变为高电平;当下一个脉冲到来,Q端又由高电平变为低电平,如此不断反复。

74LS113为双下降沿J-K触发器,有预置位端。其管脚图如图3.12所示。

图3.12 74LS113管脚图 引脚介绍:

/CP1、/CP2 时钟输入端(下降沿有效) J1、J2、K1、K2 数据输入端 Q1、Q2、/Q1、/Q2 输出端

/SD1、/SD2 直接置位端(低电平有效) 功能表如表3.6所示: 表3.6 74LS113功能表

(说明:H—高电平,L—低电平,X—任意,?—高到低电平跳变)

3.5.4.3 鉴相器电路的设计

鉴相器就是异或门电路,在鉴相器的输入波形Ug、Uh中,正脉冲宽度就是Ug和Uh相位差所对应的时间差?T,由此可见,

鉴相器在相位测量电路中起到了测量时间差的重要作用。如图3.13所示。

图3.13 鉴相器输入输出波形图 由图可知,鉴相器的输出信号是两输入信号的二倍频信号,而该输入信号是经过JK触发器的二分频信号,由此可知,该相位差信号和待测信号是同频的。

- 23 - 第4章 软件设计 在目前的单片机软件开发中,常用的语言是汇编语言和C语言两种。汇编语言是一种文字用助记符来表示机器指令的符号语言,其优点是程序占用资源少、运行速度快、执行效率高,

但具有缺乏通用性、程序可移植性差、编程比高级语言困难等缺点。C语言是是一种结构化程序设计语言,可产生紧凑代码。C语言作为一种非常方便的语言而得到广泛的支持,C语言程序本身并不依赖于机器硬件系统,基本上不做修改就可以根据单片机的不同较快的移植过来。鉴于C语言编程有众多优点,在本设计中,采用的是C语言编写程序。 4.1 C语言的简介 4.1.1 C语言特点

C是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

C语言功能齐全。具有各种各样的数据类型,并引入指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。

C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。

4.1.2 C语言的优势 C语言是一种结构化的高级语言。其优点是可读性好,移植容易,是普遍使用的一种计算机语言。C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备汇编语言的功能。C语言有功能丰富的库函数、运算速度快、编译效率高、有良好的可移植性,而且可以直接实现对系统硬件的控制。C语言是一种结构化程序设计语言,它支持当前程序设计中广泛采用的由顶向下结构化程序设计技术。此外,C语言程序具有完善的模块程序结构,从而为软件开发中采用模块化程序设计方法提供了有力的保障。因此,使用C语言进行程序设计已成为软件开发的一个主流。用C语言来编写目标系统软件,会大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完备的系统。

4.2系统软件设计思想 本系统对核心测量电路——相位测量部分进行了详细的软件设计。该软件设计主要包括主程序的设计、中断服务子程序的设计、液晶显示程序的设计。首先要对相位差的测量过程有个基本的了解,经分档降压后的待测信号输入相位测量电路,经过整形、鉴相一系列处理后,最终得到了相位差信号,将该相位差信号送入P3.2口(INT0),再将取反后的相位差信号送入P3.3口(INT1)。通过软件计数的方法对相位差信号的高电平和低电平分别计数10个,同时开启定时器,记录相应的时间。具体算法如下: 设相位差信号高电平的时间为t1,低电平的时间为t2,则相位差t为

t=t1/(t1+t2)*360 (4.1)

其中,相位差信号高电平的时间为t1,通过INT1测得,因为INT1管脚接入的是相位差取反后的信号,而取反信号低电平的时间就是原信号高电平的时间,当外部中断INT1的中断服务子程序启动时,软件计数也同时开始了,定时器T0开始定时,没来一次下降沿,软件计数自动加1,知道计数值为10,关闭定时器T0,并记录此时所用时间,改时间相当于10倍的t1;同理,相位差低电平的时间为t2,通过INT0测得,相位差信号直接送了INT0口,所以记录INT0低电平的时间即为t2,当外部中断INT0的中断服务子程序启动时,同样软件计数的方法,并结合定时器T1定时,最后可求得相当于10倍t2的时间。再根据式4.1方可得到所测相位差,并通过液晶显示出来。若有不清楚之处,可参见下图帮助理解。

图4.1 主程序流程图 本设计用到了两个外部中断,二者原理相同,故此处不再赘述,以INT1中断服务子程序为例,有一下流程图,如图4.2所示。

图4.2 INT1中断服务子程序 4.3 Keil3的使用

本设计的软件设计是在Keil3中完成的,下面就来介绍一下他的使用步骤。打开Keil μVision3,在菜单栏中选择“Project”—“New Project”,弹出“Create New Project”对话窗口,选择目标路径,在“文件名”栏中输入项目名后,如图4.2所示。

图4.2 “CreateNewProject”对话窗口 单击“保存(S)”按钮,弹出“Select Device for Target”对话窗口。在此对话窗口的“Database”栏中,单击“Atmel”前面的“+”号,或者直接双击“Atmel”,在其子类中选择“AT89C51,确定CPU类型,如图4.3所示。

图4.3 选择CPU

在Keil μVision3的菜单栏中选择“File”一“New”命令,新建文档,然后在菜单栏中选择“File”一“Save”命令,保存此文档,这时会弹出“Save As”对话窗口,在“文件名(N)”一栏中,为此文本命名,注意要填写扩展名“.c”,如图4.4所示。

图4.4 保存文件

单击“保存(S)”按钮,这样在编写C语言时,Keil会自动识别该语言的关键字,并以不同的颜色显示,以减少在输入代码时出现的语法错误。 程序编写完后,再次保存。 在Keil中“Project Workspace”子窗口中,单击“Targetl”前的“+”号,展开此目录。在“Source Group1”文件夹上单击鼠标右键,在右键菜单中选择“Add File to Group‘GroupSourcel’”,弹出“Add File to Group”对话窗口,在此对话窗口的“文件类型”栏中,选择“C Source File(*.c)”,并找到刚才编写的“.c”文件,双击此文件,将其添加到Source Group中,此时的“Project Workspace”子窗口如图4.5所示。

图4.5 “Project Workspace”子窗口

在“Project Workspace”窗口中的“Target 1文件夹上单击鼠标右键,在弹出的右键菜单中选择“Option for Target”选项,这时会弹出“Options for Target”对话窗口,在本设计中,根据实际需要,需要将时钟频率变为12.0MHz并生成HEX文件。在此对话窗口中选择“Output”选项卡,选中“Create HEX File”选项,如图4.6所示。

图4.6 “Options for Target”对话窗口

在Keil的菜单栏中选择“Project'”一“Build Target”命令,编译源文件。如果编凋成功,则在Keil的“Output Window”子窗口中会显示如图4.7所示的信息;如果编译不成功,双击“Output Window”窗口中的错误信息,则会在编辑窗口中指示错误的语句。

图4.7 编译源文件

程序调试完毕后,再次在菜单栏中选择“Debug”—“Start/Stop Debug Session”选项,退出调试环境。

第5章 实验调试

本章主要介绍了本设计的仿真调试环境以及调试结果、误差来源等相关问题。 5.1 Proteus中仿真图的绘制与调试 5.1.1 仿真图的绘制

打开Proteus ISIS编辑环境,如图5.1所示。添加器件AT89C51,注意在Proteus中添加的CPU一定要与Keil中选择的CPU相同,否则无法执行Keil生成的.hex文件。其工作界面分为原理图编辑窗口(Editing window)、预览窗口(Overview window)和工具栏。

图5.1 Proteus ISIS 编辑环境 a.新建*.dsn 打开绘图界面后,首先新建一个绘图文件,选择“File”—“New Design”,并保存成.dsn型文件。 b.绘制仿真原理图 (1

)添加元器件:元件拾取共有两种办法,一种是按类别查找和拾取元件,另一种是直接查找和拾取元件。我采用的是前一种方法,元件通常以其英文名称或器件代号在库中存放。我们在取一个元件时,首先要清楚它属于哪一大类,然后还要知道它归属哪一子类,这样就缩小了查找范围,然后在子类所列出的元件中逐个查找,根据显示的元件符号、参数来判断是否找到了所需要的元件。双击找到的元件名,该元件便拾取到编辑界面中了。右侧列表中自上而下分别为元件图形和元件封装。具体如图5.2所示。

图5.2 分类拾取元件示意图

(2)元件的放置 在原理图编辑区的蓝色方框内,单击鼠标左键即完成元件的释放。如图5.3所示。

图5.3 元件的放置示意图

(3)电路连线 PROTEUS的连线是非常智能的,它会判断你下一步的操作是否想连线从而自动连线,而不需要选择连线的操作,只需用鼠标左键单击编辑区元件的一个端点拖动到要连接的另外一个元件的端点,先松开左键后再单击鼠标左键,即完成一根连线。如果要删除一根连线,右键双击连线即可。完成连线后即可得到图5.4所示的仿真原理图。

图5.4 连线后的完整原理图

(4)导入.HEX文件 选中AT89C51并单击鼠标左键,打开“Edit Component”对话窗口,在此窗口中的“Program File”栏中,选择先前用Keil生成的.HEX文件,如图5.5所示。

图5.5 “Edit Component”对话窗口

在Proteus ISIS的菜单栏中选择“File”—“Save Design”命令,保存设计。在保存设计文件时,最好将与一个设计相关的文件(如Keil项目文件、源程序、Proteus设计文件)都存放在一个目录下,以便查找。

单击Proteus ISIS界面左下角的 II 按钮,进入程序调试状态。

5.1.2 仿真图的调试

当两路信号的相位差在0~360°范围内改变时,对于20Hz,100 Hz,1kHz,10kHz的信号来说,相位差会是怎么变化呢?下面由表5.1来进行详细说明。 表5.1 相位差测量数据表

相位差 频率 5° 50° 129° 359° 20 Hz 5.0 50.0 129.0 359.0 100 Hz 5.0 50.0 129.0 359.0 1 kHz 4.9 49.7 129.3 358.9

10 kHz 4.2 49.2 128.4 359.3 5.2误差分析

本设计中,相位测量部分采用了软件计数的方法,而且是沿触发状态,对相位差脉冲进行计数(每来一个上升沿,计数值加1),因此其误差来自所计脉冲数,此误差最大,为一个脉冲,因此,最大误差为

(1/f)*10% (5.1)

其中,f为待测信号的频率。可见,测高频时误差较小,而测低频时误差相对较大。

除了软件上带来的误差外,实际电路方面也会因相互间的干扰带来误差。但这些误差都可以保证在本设计允许的误差范围之内。

第6章 结语

经过测试,可以看到系统能够正常工作,测量结果都能保证在允许的误差范围之内,本设计基本实现了预期目标,通过软硬件的完美结合,克服了以往只能测量某一频率信号相位的局限。整个电路用到的芯片和元器件均为平时常用的电路中的,其价格比较便宜,市面上也很容易购买到,总体性能符合任务要求,界面美观友好,操作简单方便。因此,本次电路设计的性价比相对较高。

当然系统中还存在很多的不足,与目前市场上普遍使用的三相伏安相位仪相比还有很大的差距,还有许多需要改进的地方。本系统仅设计了几个核心模块供使用,但是在未来随着个人能力的不断完善和发展,还可以开发更多的功能模块来满足其需求。

电子技术的飞速发展带动了很多行业的发展,它带给人们最直观的价值就是减少了人力物力的投资,到处都是数字化的影子,这也提高了人们的工作质量和工作效率,从而提高了整个社会的生产力。

参考文献

[1] 高卫东 辛友顺 韩彦征. 51单片机原理与实践,[M]北京:北京航空航天大学出 版社,2008年. P85-96

[2] 孙俊逸 盛秋林 张铮. 单片机原理及应用,[M] 北京:清华大学出版社,2006年 3月.P28-52

[3] 张红润 刘秀英 张亚凡. 单片机应用设计200例, [M] 北京:北京航空航天大学 出版社,2006年. P120-125

[4] 石著. 数字电子技术基础.[M]北京:高等教育出版社,2005.P93-335 [5] 戴伏生主编.基础电子电路设计与实践.[M]北京:国防工业出版社, 2002.P102-105

[6] 孙肖子,邓建国主编.电子设计指南.[M]北京:高等教育出版社,2006.P98-120 [7] 李银华主编.电子线路设计指导.[M]北京:航空航天大学出版社2005.P78-132

[8] 陈光明等主编.电子技术课程设计与综合实训.[M]北京:北京航空航天大学出 版社,2007.P158-160

[9] 高卫东. 辛友顺. 韩彦征. 51单片机原理与实践. [M]北京:北京航空航天大学 出版社,2008年。P85-96

[10] 张靖武 周灵彬. 单片机原理、应用与PROTEUS仿真, [M]北京:电子工业出版 社,2007年4月.P63-86

[11] 周润景 张丽娜 基于PROTUSE的电路及单片机系统设计与仿真,[M]北京航空航 天大学出版社,2006年.P54-59

[12] 张毅刚 等编.新编MCS-51单片机应用设计[M].哈尔滨:哈尔滨工业大学出版社, 2003年7月.

[13] 潘永雄,刘殊.单片机原理及应用[M].西安:西安电子科技大学出版社,2000. [14] 谢沅清,邓钢编著.通信电子线路[M].北京:电子工业出版社,2007年7月.

[15] 操长茂,秦工.数字式相位差测量仪.仪表技术,2003,(2):18-19 [16] 白鹏,王建华,刘君华.基于虚拟仪器的相位测量算法研究.电测与仪表, 2002,(8):20-26 [17] 邓新蒲,卢启中,孙仲康.数字式相位差测量方法及精度分析.国防科技大学学 报,2002,(5):70-74

[18] 胡文军,李震梅,饶明忠.基于虚拟仪器的电网信号相位差测量的研究.山东理 工大学学报,2003,17(2):90-93

[19] A Nemat.A digital frequency independent phase meter.IEEE Trans.Instrum.Meas. 1990,39(4):665-667

[20] R.A.Krajewski.Coincidence phase meter with quasi-quadrature signal. Int.J. Electron-ics,1993,74(3):451-458

附录Ⅰ 程序清单 #include #include #include

#define uint unsigned int #define uchar unsigned char uint a = 0; uint b = 0; uint c = 0; uint d = 0; long t1 = 0; long t2 = 0;

float t = 0;

sbit RS=P3^7; sbit RW=P3^6; sbit E =P3^5;

//***************************延时子程序*********************** void delay(uint i) {

uint j;

for(;i>0;i--) for(j=0;j<125;j++); }

//***************************写指令程序*********************** void write_com(uchar com)

{ RS=0;

RW=0; P1=com; E=1; delay(1); E=0; }

//**************************写数据子程序*********************** void write_dat(uchar dat) {

RS=1; RW=0; P1=dat; E=1; delay(1); E=0; }

/********************光标定位函数****************************** void LcdPos (uchar Xpos,uchar Ypos) {

uchar tmp; Xpos&=0x0f; Ypos&=0x01; tmp=Xpos; if(Ypos==1) tmp|=0xc0; tmp|=0x80;

write_com(tmp); }

//********************LCD初始化子程序************************ LCDRset(void) {

E=0;//**************使能端禁止 write_com(0X38); delay(1);

write_com(0X01);//**清屏 delay(1);

write_com(0X0C);//**开显示光标不显示 delay(1);

write_com(0x06);//**光标加一 delay(1); }

//**************在指定行列显示字符子程序******************** void writeChar(uchar Xpos,uchar Ypos,char c)

{

LcdPos(Xpos,Ypos); write_dat(c); }

//****************在指定行列写入指定字符串********************* void writeString(uchar Xpos,uchar Ypos,char s[]) {

uchar p=0; while(1) {

writeChar(Xpos,Ypos,s[p]); p++; if(s[p]==0) break;

if(++Xpos>15) {

Xpos=0;

Ypos^=1;//异或运算 } } }

//*********************显示子程序**************************** void Display(void) {

uchar e[16];

memset(c,0,sizeof(c)); memset(d,0,sizeof(d)); memset(e,0,sizeof(e)); t=((float)t1)/(t1+t2)*360; //sprintf(c,\ //writeString(0,0,c);

//sprintf(d,\ //writeString(0,1,d);

sprintf(e,\

writeString(6,0,\ writeString(11,1,e); }

void main(void) {

IE = 0X0f;

TMOD = 0X99; IT0 = 1; IT1 = 1;

TR0 = 0; TR1 = 0; EA = 1; LCDRset();

while(1) {

if(t1!=0 && t2!=0) {

Display(); delay(50); } else {

writeString(0,0,\ delay(50);

writeString(0,0,\ delay(50);

writeString(0,0,\ delay(50); }

} }

int1() interrupt 2 {

if(a == 0) {

TR0 = 1; TH0= 0; TL0 = 0; b = 0; }

a++;

if(a == 10) {

TR0 = 0; a = 0;

t1 = b*65536+TH0*256+TL0; }

}

int_t0() interrupt 1 { b++; }

int0() interrupt 0 {

if(c == 0) {

TR1 = 1; TH1 = 0; TL1 = 0; d = 0; } c++;

if(c == 10) {

TR1 = 0; c = 0;

t2 = d*65536+TH1*256+TL1; }

}

int_t1() interrupt 3 { d++; }

}

int_t0() interrupt 1 { b++; }

int0() interrupt 0 {

if(c == 0) {

TR1 = 1; TH1 = 0; TL1 = 0; d = 0; } c++;

if(c == 10) {

TR1 = 0; c = 0;

t2 = d*65536+TH1*256+TL1; }

}

int_t1() interrupt 3 { d++; }

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

Top