- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
填充计数式相位测量的分析与实现
录入:edatop.com 点击:
一. 填充计数测量相位的原理
要获得两个同频信号间的相位值有多种实现方法。较为常用的一种是采用过零鉴相法,这种方法的基本要点是:将两个同频被测信号整形为两个方波信号,其前后沿分别对应于被测信号的正向过零点和负向过零点,然后测量出这两个同频方波的前沿(或后沿)之间的时间差比例,即为这两个被测信号之间的相位差,简称相差。
而要获得这个时间差比例,通常采用填充计数法,其基本原理见图1,设A,B为两路同频待测的正弦波信号,两信号经整形后形成A'和B'两路方波,若A'的两个前沿之间(一个信号周期)的计数脉冲的个数为N个,A'与B'的两个相邻前沿之间的计数脉冲的个数为n个,则A,B两路之间的相位差为:
n/N * 360° (1) 二.计数脉冲频率与相位计算精度的关系
从上述方法测量相位的原理来看,要获得两个同频信号间的相位差,只要获得两个计数值N和n,通过(1)式计算即可。那么相位计算的分辩率就为3600/N ,也就是表示相差的最小单位。当被测信号的频率一定时,计数脉冲的频率就决定了相位测量的精度。如在一个信号周期内所获得的计数脉冲的个数为360个,则获得相差的最小单位是3600/360=10(可看作是每个脉冲代表10)。若在一个信号周期内所获得的计数脉冲的个数为3600个,则获得相差的最小单位就为3600/3600=0.10(可看作是每个脉冲代表0.10)。由此可见在一个信号周期内所获得的计数脉冲的个数越多,则获得相位差的最小单位也就越小,精度也就越高。要达到0.10以上的精度,则计数脉冲的频率必须是被测信号频率的3600倍以上。设被测信号频率为fx,计数脉冲频率为fa ,则设计时应满足:
fa>3600×fx (2)
三.利用MCS-51系列单片机片内资源实现相位测量的分析
由于需要进行计算,目前市场上流行的相位表,多数为单纯利用MSC─51系列机片内资源实现计数与计算。在典型的MSC-51系列单机片内,有2个16位的定时/计数器(CTC0,CTC1),5个中断源,时钟频率为3.8-12MHz ,这些都为实现相位差的测量与计算提供了一定的硬件基础。可利用片内2个定时/计数器,(CTC0,CTC1)分别记录前面所述的N和n的计数值。将CTC0,CTC1设置为定时方式(计片内机器周期数)。两个外部中断INT0,INT1,设置成下沿触发方式,并将上述A',B'两个方波信号接至INT0,INT1的输入端。利用INT0和INT1的中断服务程序来控制CTC0,CTC1的启动与停止,以此来获取N和n的计数值。
由于MCS-51系列单片机的最高工作频率为12MHZ,故CTC0,CTC1的最高计数频率为1MHz。16位字长的CTC0和CTC1计数范围是0ー65535。对于1MHz的计数频率而言,输入信号的频率响应范围的下限是:在一个信号周期内CTC的计数从零计到最大65535,而每一计数脉冲的周期是1μS(1MHz的计数脉冲)。故CTC从零计到最大值所需时间是:65535 * 1μS=65535μS,因而,输入信号的最低频率约为1/0.065535=15.26Hz。频率响应的上限是:虽然在一个信号周期内CTC的计数值大于零即可计算,但为了使计算结果具有足够的精度(至少0.10),故记录N值的CTC在一个信号周期内的计数值必须大于3600(因3600/3600=0.10)而CTC从零计数到3600所需时间为3600*1μS=3600μS。由此可得输入信号的最高频率约为1/0.0036=277.78Hz。
在最高的输入信号频率下,每一个计数脉冲即代表0.10机器每多计或少计一个脉冲就意味着带来一个0.10的误差。另外由于CTC的启停是由中断服务程序来控制的,那么CTC启停时刻不能绝对代表信号的下沿时刻,故误差是不可避免。当信号频率较低时,其误差尚可忽略。当信号频率越接近最高响应频率,其单片机所带来的误差就越不可忽略。以这样的方式构成的相位计,实际上的最高响应频率仅在100Hz左右。
四.高频计数的实现
从以上分析得知,若仅利用单片机的资源来实现相差的测量,是无法以高精度测得较高频率信号的相位差的。其关键所在是计数频率已无法再提高。鉴于这点笔者考虑到不用单片机内部的CTC计数,而是采用廉价的74系列芯片搭成高速计数,锁存电路。当计数值锁定这后,再读入单片机进行计算和显示。
具体实现的电路图如图2所示。高速计数器由4片74LS191串联组成16位计数器。计数脉冲的输入由一个触发器控制,触发器设计成自锁式,即由被测的周期信号A'锁定一个完整的信号周期后,封锁计数脉冲的输入 ,不再响应后一个周期,待单片机处理完该周期内的数据后,由单片机先对计数器清零,然后解除触发器的封锁,系统才继续采集下一个信号周期的数据。周期计数锁存器(记N值)由74LS373(U8),(U7)组成,相差计数锁存器(记n值)由74LS373(U6),(U5)组成,其中(U5),(U7)锁存低8位数据,(U6) ,(U8)锁存高8位数据,当A'信号的上沿来临时,由触发器打开U10门,开始计数。当B' 信号的上沿来临时,锁存U6,U5(获得n值)。当A'信号的上沿再次来临时,锁存U8,U7(获得N值)。并封锁触发器。通知单片机依次读入U5,U6,U7,U8的锁存值进行计算。高频振荡源采用高精度晶体振荡器,以提供高精度的计数脉冲。 [p] 考虑到硬件资源的充分利用,硬件设计时将某些部件设计成公用,如相差计数和周期计数共用一个计数器。由于0≤n≤ N,故相差信号(B'信号的上沿)必定会在一个信号周期内的某个时刻出现,可利用这一信号将相差计数值n从计数器上浮获而锁入相差计数锁存器。当一个完整的周期结束时(A'信号的上沿再次出现),锁存周期计数值N(见图3)。 五.计数脉冲频率的设置与实现
如前面所述16位计数器的计数范围是0--65535。根据(1)式要获得足够的细度,在某一信号频率下计数范围应在[3600,65535]区间内。由于计数器的计数值与被测信号的频率成反比,与计数脉冲的频率成正比。即在某一固定的计数脉冲频率下,被测信号的频率越低(周期越长)则一个周期内所获得的计数脉冲的个数越多。反之越少。或在某一个固定的被测信号的频率下,计数脉冲的频率越多,则在一个信号周期内所获得的计数脉冲的个数就越多,反之就越少。若计数值为C,被测信号频率为fx,计数脉冲频率为fa,则有下式:
C= fa/fx (3)
由于是16位的计数器,C值应满足3600 C 65525在某一个fa下,被测信号频率fx就会被限制在一定的范围内。即
fa/65536 fx fa/3600
也就是fx的下限为 fa÷65535 Hz,上限是fa÷3600 Hz,从(4)式中可以看出某个fa,所对应fx其范围是有限的。要做到fx有一个较宽的频范围,单靠16位的计数器,用一个fa是不行的。故笔者在设计时,将计数脉冲源设计成有多档振荡频率的信号源,兼顾被测信号的低频区和高频区。由单片机根据读取的N值和计数器的溢出信号,通过电子开关U11,自动切换。当读取的N值太小时,切换到较高的计数频率,当计数器有溢出时,就切换到较低的计数频率。为了简单说明笔者将fa设为2M和10M两档。根据(4)式分析入下:
当fa=2M时: fx的下限为 2×106÷65535=30.5Hz
fx的上限为 2×106÷3600=555.6Hz
当fa=10M时:fx的下限为 10×106÷65535=152.6Hz
fx的上限为 10×106÷3600=2777.8Hz
从以上分析来看,从152.6Hz到 555.6Hz,两档计数频率应对这一频率区的被测信号是重叠的,即在该频率区内,这两档计数频率都满足(4)式,这个重叠区的存在是必要的,它保证了自动切换计数脉冲频率的操作不发生振荡。但重叠区不必这么大,在实际应用中,为了保证测量精度可通过程序将重叠区限制在200Hz至250Hz 这个范围内。
要获得两个同频信号间的相位值有多种实现方法。较为常用的一种是采用过零鉴相法,这种方法的基本要点是:将两个同频被测信号整形为两个方波信号,其前后沿分别对应于被测信号的正向过零点和负向过零点,然后测量出这两个同频方波的前沿(或后沿)之间的时间差比例,即为这两个被测信号之间的相位差,简称相差。
而要获得这个时间差比例,通常采用填充计数法,其基本原理见图1,设A,B为两路同频待测的正弦波信号,两信号经整形后形成A'和B'两路方波,若A'的两个前沿之间(一个信号周期)的计数脉冲的个数为N个,A'与B'的两个相邻前沿之间的计数脉冲的个数为n个,则A,B两路之间的相位差为:
n/N * 360° (1) 二.计数脉冲频率与相位计算精度的关系
从上述方法测量相位的原理来看,要获得两个同频信号间的相位差,只要获得两个计数值N和n,通过(1)式计算即可。那么相位计算的分辩率就为3600/N ,也就是表示相差的最小单位。当被测信号的频率一定时,计数脉冲的频率就决定了相位测量的精度。如在一个信号周期内所获得的计数脉冲的个数为360个,则获得相差的最小单位是3600/360=10(可看作是每个脉冲代表10)。若在一个信号周期内所获得的计数脉冲的个数为3600个,则获得相差的最小单位就为3600/3600=0.10(可看作是每个脉冲代表0.10)。由此可见在一个信号周期内所获得的计数脉冲的个数越多,则获得相位差的最小单位也就越小,精度也就越高。要达到0.10以上的精度,则计数脉冲的频率必须是被测信号频率的3600倍以上。设被测信号频率为fx,计数脉冲频率为fa ,则设计时应满足:
fa>3600×fx (2)
三.利用MCS-51系列单片机片内资源实现相位测量的分析
由于需要进行计算,目前市场上流行的相位表,多数为单纯利用MSC─51系列机片内资源实现计数与计算。在典型的MSC-51系列单机片内,有2个16位的定时/计数器(CTC0,CTC1),5个中断源,时钟频率为3.8-12MHz ,这些都为实现相位差的测量与计算提供了一定的硬件基础。可利用片内2个定时/计数器,(CTC0,CTC1)分别记录前面所述的N和n的计数值。将CTC0,CTC1设置为定时方式(计片内机器周期数)。两个外部中断INT0,INT1,设置成下沿触发方式,并将上述A',B'两个方波信号接至INT0,INT1的输入端。利用INT0和INT1的中断服务程序来控制CTC0,CTC1的启动与停止,以此来获取N和n的计数值。
由于MCS-51系列单片机的最高工作频率为12MHZ,故CTC0,CTC1的最高计数频率为1MHz。16位字长的CTC0和CTC1计数范围是0ー65535。对于1MHz的计数频率而言,输入信号的频率响应范围的下限是:在一个信号周期内CTC的计数从零计到最大65535,而每一计数脉冲的周期是1μS(1MHz的计数脉冲)。故CTC从零计到最大值所需时间是:65535 * 1μS=65535μS,因而,输入信号的最低频率约为1/0.065535=15.26Hz。频率响应的上限是:虽然在一个信号周期内CTC的计数值大于零即可计算,但为了使计算结果具有足够的精度(至少0.10),故记录N值的CTC在一个信号周期内的计数值必须大于3600(因3600/3600=0.10)而CTC从零计数到3600所需时间为3600*1μS=3600μS。由此可得输入信号的最高频率约为1/0.0036=277.78Hz。
在最高的输入信号频率下,每一个计数脉冲即代表0.10机器每多计或少计一个脉冲就意味着带来一个0.10的误差。另外由于CTC的启停是由中断服务程序来控制的,那么CTC启停时刻不能绝对代表信号的下沿时刻,故误差是不可避免。当信号频率较低时,其误差尚可忽略。当信号频率越接近最高响应频率,其单片机所带来的误差就越不可忽略。以这样的方式构成的相位计,实际上的最高响应频率仅在100Hz左右。
四.高频计数的实现
从以上分析得知,若仅利用单片机的资源来实现相差的测量,是无法以高精度测得较高频率信号的相位差的。其关键所在是计数频率已无法再提高。鉴于这点笔者考虑到不用单片机内部的CTC计数,而是采用廉价的74系列芯片搭成高速计数,锁存电路。当计数值锁定这后,再读入单片机进行计算和显示。
具体实现的电路图如图2所示。高速计数器由4片74LS191串联组成16位计数器。计数脉冲的输入由一个触发器控制,触发器设计成自锁式,即由被测的周期信号A'锁定一个完整的信号周期后,封锁计数脉冲的输入 ,不再响应后一个周期,待单片机处理完该周期内的数据后,由单片机先对计数器清零,然后解除触发器的封锁,系统才继续采集下一个信号周期的数据。周期计数锁存器(记N值)由74LS373(U8),(U7)组成,相差计数锁存器(记n值)由74LS373(U6),(U5)组成,其中(U5),(U7)锁存低8位数据,(U6) ,(U8)锁存高8位数据,当A'信号的上沿来临时,由触发器打开U10门,开始计数。当B' 信号的上沿来临时,锁存U6,U5(获得n值)。当A'信号的上沿再次来临时,锁存U8,U7(获得N值)。并封锁触发器。通知单片机依次读入U5,U6,U7,U8的锁存值进行计算。高频振荡源采用高精度晶体振荡器,以提供高精度的计数脉冲。 [p] 考虑到硬件资源的充分利用,硬件设计时将某些部件设计成公用,如相差计数和周期计数共用一个计数器。由于0≤n≤ N,故相差信号(B'信号的上沿)必定会在一个信号周期内的某个时刻出现,可利用这一信号将相差计数值n从计数器上浮获而锁入相差计数锁存器。当一个完整的周期结束时(A'信号的上沿再次出现),锁存周期计数值N(见图3)。 五.计数脉冲频率的设置与实现
如前面所述16位计数器的计数范围是0--65535。根据(1)式要获得足够的细度,在某一信号频率下计数范围应在[3600,65535]区间内。由于计数器的计数值与被测信号的频率成反比,与计数脉冲的频率成正比。即在某一固定的计数脉冲频率下,被测信号的频率越低(周期越长)则一个周期内所获得的计数脉冲的个数越多。反之越少。或在某一个固定的被测信号的频率下,计数脉冲的频率越多,则在一个信号周期内所获得的计数脉冲的个数就越多,反之就越少。若计数值为C,被测信号频率为fx,计数脉冲频率为fa,则有下式:
C= fa/fx (3)
由于是16位的计数器,C值应满足3600 C 65525在某一个fa下,被测信号频率fx就会被限制在一定的范围内。即
fa/65536 fx fa/3600
也就是fx的下限为 fa÷65535 Hz,上限是fa÷3600 Hz,从(4)式中可以看出某个fa,所对应fx其范围是有限的。要做到fx有一个较宽的频范围,单靠16位的计数器,用一个fa是不行的。故笔者在设计时,将计数脉冲源设计成有多档振荡频率的信号源,兼顾被测信号的低频区和高频区。由单片机根据读取的N值和计数器的溢出信号,通过电子开关U11,自动切换。当读取的N值太小时,切换到较高的计数频率,当计数器有溢出时,就切换到较低的计数频率。为了简单说明笔者将fa设为2M和10M两档。根据(4)式分析入下:
当fa=2M时: fx的下限为 2×106÷65535=30.5Hz
fx的上限为 2×106÷3600=555.6Hz
当fa=10M时:fx的下限为 10×106÷65535=152.6Hz
fx的上限为 10×106÷3600=2777.8Hz
从以上分析来看,从152.6Hz到 555.6Hz,两档计数频率应对这一频率区的被测信号是重叠的,即在该频率区内,这两档计数频率都满足(4)式,这个重叠区的存在是必要的,它保证了自动切换计数脉冲频率的操作不发生振荡。但重叠区不必这么大,在实际应用中,为了保证测量精度可通过程序将重叠区限制在200Hz至250Hz 这个范围内。