
基于CPLD数字鉴相系统设计.doc
5页基于CPLD数字鉴相系统设计摘要:本文以CPLD为核心,采用脉冲计数填充法设计了 一种数字鉴相系统,并应用到石英晶体电参数测试系统中, 实现石英晶体电参数测试该系统由丸网络模块,相位检 测模块、控制模块三个部分组成CPLD实现对信号的分频、 鉴相、数据采集等逻辑功能;计算机完成对数据的读取、处 理和显不功能关键字:丸网络,石英晶体电参数测试,相位差检测, CPLD1引言目前对石英晶体电参数(谐振频率、谐振电阻等参数) 的测试方法主要有阻抗计法、H网络最大传输法和n网络 零相位法等其中n网络零相位法是国际电工委员会(IEC) 推荐的石英晶体的标准检测方法n网络零相位法是将石英 晶体置于网络中,在理想状态下,当3T网络两端信号的 相位差为零时,石英晶体处于谐振状态,等效为纯电阻,此 时的激励信号的频率即为石英晶体的串联谐振频率因此相 位检测是基于丸网络零相位法石英晶体电参数测试系统的 关键技术之一,准确判别零相位点有利于提高测试系统的测 试精度相位差检测方法有很多,整体上可分为模拟和数字两种 方法模拟方法是将两路正弦信号相乘,然后对乘积项信号 进行积分,得到相位差信息这种办法对相位差非零时检测 精度较高,但相位差为零时检测精度低,而石英晶体电参数 测试系统就是检测相位差是否为零来判定石英晶体是否处 于谐振状态。
数字方法是利用脉冲填充法,用高频计数脉冲 对相位差脉冲进行填充,计算计数脉冲个数,利用相位差与 计数脉冲个数之间的关系式求出相位差值因此采用数字方 法鉴相可以很容易检测出相位差为零,且计数脉冲频率越高, 测量精度越高本文正是采用数字方法并结合CPLD设计数 字鉴相系统,并把该鉴相系统应用到石英晶体电参数测试系 统中2数字鉴相原理与系统设计2. 1把相位差转换为时间差的测量原理设At为相位差时间,T为被测信号的周期,△为相 位差,则两被测信号的相位差表达式为:4)n∆;=∆;2/tT (1)利用脉冲填充法进行数字测量时,设为计数脉冲周 期,fc为其频率,f为被测信号的频率,N为计数值,则数 字相位差测量的表达式为:4)n ji o &W8710; =∆; ==2/2/360/tTNTNffc(2)当fc=360f时,△6=N,即计数脉冲的个数就是相位差的大小,此时的测量精度为1当fc>360f时,精度将大于 lo,因此计数脉冲频率一般都选取不小于360倍被测信号频率2.2石英晶体电参数测试系统设计整体框图:图1是石英晶体电参数测试系统框图,该测试系统由计 算机、PCI接口电路、CPLD控制电路、信号源、JI网络、补 偿网络、混频/鉴幅电路、鉴相电路、数据采集电路等组成。
信号源产生三路幅度、初相位和频率均可独立可调的正弦信号、和这三路信号中,、为同频信号,与、的频率 差为450kHz ,作为混频器的本振信号,作为n网络的激励信号,输入补偿网络作为相位校准信号CPLD部分完成分 频,数字鉴相,计数和数据采集等逻辑功能,通过PCI接口 电路连接到计算机上计算机读取CPLD采集到的数据,并 根据读取数据计算相应的相位差2.3数字鉴相部分:相位差检测方法有很多,整体上可分为模拟和数字两种 方法,具体可以有波形变换法、外差鉴相法、变换法、过零 检测法等过零检测法是利用两正弦信号的相位差与相邻过零点 之间的间隔之间的关系,只要检测出两路信号相邻过零点的 时间间隔的大小,就能测出两信号的相位差外差法鉴相是 利用混频器将两高频信号混频至固定低频信号,再对低频信 号进行相位检测属于模拟鉴相法;变换法是用 转换器把 相位差转换成一个频率与相位差成正比的脉冲列,计算在一 定时间内的脉冲的个数来检测相位差,属于数字鉴相法本 系统就是利用该方法设计的下面介绍基于CPLD的数字鉴 相法,图2是数字鉴相框图其中虚线部分在CPLD内实现,其中混频/鉴幅实现对被 测信号的幅度检测和对两路高频信号进行混频至低频信号; 施密特触发器实现对混频/鉴幅器出来的波形进行整形,已 达到CPLD所要求的波形;D触发器为了实现对两路同频信号 进行超前和滞后的判断,这样可以实现0o〜180。
分频 器的目的是进一步降低检测信号的频率但相位信息不发生 改变;锁相环产生高频计数脉冲,将其产生的高频脉冲和相 位差脉冲一起送入与门,实现相位差检测鉴相器主要是利用异或门实现,如图3:3 CPLD应用我们采用Altra公司的EPM7128芯片来实现CPLD的功 能,EPM7128是Altra公司的MAX7000系列CPLD芯片的一种, 含有128个宏单元,具有编程和调试能力该芯片能实 现ISA总线接口,DDS芯片,数字鉴相和数据采集部分的编 程接口之间的连接,提高了测试模块的集成度和可靠性 Altra公司提供了功能强大的开发环境MAX+ p luse II,大 大提高了开发效率由于篇幅问题,这里只介绍由CPLD实现的分频器功能,VHDL程序如下:library ieee;use ieee. std_logic_1164. all;use ieee.std logic unsigned, all;entity div360 isport ( clki : in std^logic;clko : out std logic);end entity;architecture a of div360 issignal n : integer range 0 to 179;signal cp : std logic;beginprocess (clki)beginif clki event and clki= ‘1’ thenif n。












