即可求得。
方案二:
采用高精度恒误差测频法
计数器1和计数器2均有使能端和清零端。
控制电路产生的门控信号接到D触发器的数据端D,触发器的Q端接两个计数器的使能端。
输入信号经过迟滞比较器转换为同频率的方波,即被测信号。
门控信号是宽度为Tg的脉冲。
当单片机发出“开始测量相位”命令后,控制电路先输出一个清零脉冲,将两个计数器清零,随后并将门控信号置为高电平。
这时D触发器的Q端为低电平,两个计数器尚未开始计数。
被测信号的上升沿到来时,D触发器翻转,其Q端变为高电平,同时启动两个计数器。
计数器1和计数器2分别对标准频率方波信号(频率为f0)和被测信号(频率为fx)同时计数。
自门控信号被置为高电平起,经过Tg时间,控制电路将门控信号置为低电平。
被测信号的下一个上升沿到来时,两个计数器同时停止计数。
仿真时序如下图所示:
这样一来,两个计数器的工作时间Tw恰好为被测信号周期的整数倍。
工作时序见图5,图中可以看出,实际闸门时间Tw与预置闸门时增加Tg可提高测量精度。
本设计中取100ms,f0为10MHz,可以精确测量频率大于10Hz的信号,误差不大于10~5。
我们用CPLD来做高速计数器,单片机用软件实现高精度浮点运算并负责显示输出。
比较以上两种方案,方案二实现较容易,同时可做到高精度测量,因此选择方案二。
基本原理如下图所示:
二、相位测量方案论证
方案一:
相位电压转化法
将两路输入的正弦信号A和B分别通过电压比较器整形为方波,然后送数字鉴相器(二输入异或门)鉴相,再经过低通滤波后进行A/D转换。
根据相位差与电平成正比的关系,由单片机计算得到相位差值。
方案分析:
此方案原理简单,关键是硬件电路,软件部分较简单,但是低通滤波器设计较复杂。
方案二:
数值取样法
这种方法具有相当高的精度,它是利用同步取样技术获得两输入信号的取样值,经过对瞬间幅值的处理得到相位角,原理如下:
其中
为相位差。
方案分析:
此种方案随着取样点的增加,对于低频可以得到相当精确的结果,但是频率较高时,就需要高速的A/D转化芯片,价格较昂贵。
方案三:
相位差—时间转化法
1)基本原理:
设有不同相的两路信号B和C,它们的相位差为Ф,
B和C的波形如图所示,
这种测量,实际上是测量两个正弦信号两个相应点之间时间间隔,是测量信号过零点之间的时间间隔,当两个信号的幅度有区别时,可能测量误差较小。
2)具体方案:
将两路信号分别通过放大,整形成方波,然后经过异或门鉴相,整形后的信号为IN1和IN2,鉴相器的输出信号为Pout。
原理方框图如下图所示:
B
C
我们用一个上升沿触发的D触发器判断IN1是超前还是滞后IN2,电路如下图所示。
图中IN1接D触发器的时钟端,IN2接D触发器的数据端,当IN1发生正跳变时,若IN2是1,表明IN1落后于IN2;若IN2为0,则表明IN1超前于IN2,于是该D触发器就表明了两路信号的超前滞后关系。
3)改进方案:
事实上,只要能确保计数使能信号EN1的持续时间是输入信号周期的整数倍,那么相位差PD就可利用公式PD=N2/N1×180。
计算(EN1的边沿无需与IN1的上跳沿对齐)。
方案二对一个信号周期进行计数,这就要求每个信号周期中IN1只能有一个上跳沿。
若在一个信号周期IN1有多个上跳沿,那么EN1的持续时间便不足一个信号周期,测量结果无意义。
这对波形整形电路提出很高的要求,我们希望,IN1恰好在输入信号(一般为正弦信号)的每个过零点处翻转一次。
如果直接采用过零比较器,那么电压比较器在零点电位附近极有可能振荡(因为输入电压位于电压比较器的线性区),这样得到的IN1在跳变沿会有许多抖动,使得方案二根本无法工作。
我们知道迟滞型电压比较器可以很好地消除抖动。
然而从迟滞比较器获得的IN1与原输入正弦信号存在相位差,就是说IN1的上跳沿滞后于输入信号的过零点,输入信号幅度越小,滞后越多。
如果两路输入正弦信号幅度基本相等,而两个迟滞比较器的门限又很接近的话,迟滞比较器引入的相位差不会对测量精度造成多大影响。
但是,如果两路输入信号的幅度相差较大的话(例如一路信号峰一峰为5V,另一路为0.5V),两路迟滞比较器引入的相位差可能有较大差值(十余度),这使得相位计的误差大得难以接受。
另外比较器的输入失调电压也会引入一定的误差。
减小电压比较器引入的相位误差的一个直接办法是对输入信号进行放大,将两路信号放大到幅度大致相等后再送入迟滞型电压比较器(可使用自动增益控制技术)。
但是进行信号放大可能引入难以预测的附加相移,使得相位计的精度下降。
为了达到较好的精度,我们想出了一种使用双电压比较器的波形整理及相位测量办法。
简单地说,我们将两路输入信号经普通过零比较器整形得到的方波信号(边沿可能存在抖动)送入异或鉴相器,并将两路输入信号经过迟滞比较器得到的方波信号传给控制电路及“超前/滞后”判断电路。
电路的工作时序与方案二基本相同,相位差也用上面PD的公式计算得出。
这样的好处是,控制电路得到的方波信号没有抖动,不会产生误动作。
因为使用迟滞比较,计数使能信号EN1的跳变沿略滞后于信号的过零点。
由于EN1的上跳沿和下跳沿的滞后时间相同,那么EN1的持续时间恰好为一个信号周期,可保证测量精度不受影响。
异或鉴相器的输出PDout可能会有抖动,但由于抖动只在边沿处才有,对其脉冲宽度受到的影响不大。
实测表明,即便两路输入信号的幅度有较大差异,也不会影响测量精度。
通过测量多个周期后取平均值,也可减小误差。
三、移相网络方案论证:
方案一:
数字移相,单片机或者FPGA控制高速ADC,对一个周期内的信号进行多次采样,然后根据需要移相的大小,对量化的数据的地址加上一个相位偏移量后输出。
该方案优点是移相量可以很大,并且精度高,但对ADC要求较高。
方案二:
模拟移相,由RC组成移相网络的相频特性曲线如下图:
由于题目要求-45°—+45°可调,考虑到成本和实现难易程度,我们采用方案二。
四、数字式移相信号发生器
方案一使用锁相环频率合成实现信号发生器,频率稳定精确、并且在较大范围可变,但由于锁相环本身是一个惰性环节,锁定时间较长,故频率转换时间较长。
而且,由模拟方法合成的正弦波的参数,幅度和相位都很难控制。
方案二采用直接数字频率合成器(DDS):
利用FPGA来实现数字式移相信号发生器的原理方框图如下所示:
DDS的工作原理是用高速ROM存储所需波形的量化数据,按照不同频率要求,用频率控制字M为步进对相位增量进行累加,按照不同相位要求,用相位控制字K调节相位偏移量,用累加相位值加上相位偏移量后作为地址码读取存放在存储器的波形数据,经过DAC0800的转换,滤波即可得所需波形。
DDS具有相对带宽很宽,频率转换时间极短,相位误差小,合成波形失真度低的优点。
我们通过控制频率控制字M和相位控制字K,很方便可以实现频率20HZ步进以及相位0.7°步进。
本系统采用方案二:
因为要用高速ROM存放正弦波型数据,占用资源较多,因此我们采用XILINXSPARTAN3—S200来实现。
硬件设计
一、数字式相位测量仪
1.小信号处理部分
由于输入的两路信号幅度不确定,波形不确定,而FPGA对于TTL电平而言的,所以必须对信号进行放大整形。
电路及参数如下图所示:
设计任务要求输入阻抗大于100K
,我们采用同相放大,所以在输入端并上100K
的电阻。
电路中的运放都是用OP07,它有10M的带宽,可以很好的满足要求。
2.测相部分:
对于两路输入信号,我们在得到整形放大的方波信号后,在FPGA中对其进行异或操作,再在CPLD中对异或后的信号的脉冲t的宽度进行计数。
框图如下所示:
3.测频部分:
传统的测频方法,测量精度受频率的影响,由于输入信号频率变化范围较宽,所以我们采用与频率无关的等精度测量法,原理如图所示:
预置门信号的脉宽为T的脉冲,计数器BZQ和TSQ都是客空的计数器,标准频率从计数器的BZQ的时钟断输入,频率为Fs经整形后的信号从计数器TF的时钟端输入,其频率为Fxe,测得为Fx,当预置门控信号为高电平时,经整形后的被测信号的上升沿通过D触发器的Q端同时启动计数器BZQ和TSQ。
计数器BZH和TF分别对标准信号和整形后的待测信号进行计数;当预置门信号为低电平时,经整形后的被测信号的的一个上升沿将这两个计数器同时关闭。
设一次预置门信号时间T内,被测信号的计数值为N,得到下面的公式:
Fx/Nx=Fs/Ns;
Fx=(Fs/Ns)Nx;
相对误差为Ф=±(2/Ns+△Fs/Fs)
二、移相网络
移相网络硬件电路如图所示:
之前我们已经讨论过了RC移相网络的相频特性,可知当ω=ω0时,超前和滞后网络分别移相了±45度如果将两个信号叠加,设A信号为Asin(wt+45),B信号为Bsin(wt-45),叠加后的信号为C,则
C=s
改变A和B的值就可以改变叠加后信号的相位。
只有输入信号的频率和RC网络的谐振频率相同时,才有45度的移相,所以当输入频率变化时,RC网络也应有不同的转折频率。
根据公式:
得到
,因此可以计算出,当C=44
时,.输入频率为100Hz,得到R=36.189K
;当输入频率为1KHz时,R=3.6K
;当频率为10KHz时,R=360
。
从公式可以看出,输出信号的幅度有所下降,所以在输出后采用同相放大。
实际测相时相位只有-43°到+45°,误差主要为电阻电容引起。
三、移相信号发生器
1、频率部分:
一个N位字长的二进制加法器的一端和一个固定时钟脉冲取样的N位相位寄存器相连,另一个输入端是外部输入的控制字FTW。
这样在每个时钟周期到来时,前一次相位寄存器的值与当前的FTW相加,得到当前的数据地址,相位控制字FTW控制了每次增加的相位增量,参考频率固定,因此FTW也就控制了输出信号的频率。
考虑要求最高频率20kHz,步进20Hz,为了保证输出波形,取数据表数据个数为512个,频率控制字FTW取24位。
FPGA小系统上晶振频率为50MHz,对其进行10分频,得到5MHz的参考频率。
输出频率为
因此只要控制FTW就可实现频率步进和范围。
2、相位部分:
相位寄存器的输出与相位控制字K相加,使最终输出的数据产生
的相移,
的值与相位控制字K和数据表的长度有关,由于数据表长度为512,因此相位控制字K每改变1,
的值就改变
。
因此只要改变K的值就可以实现相位差的步进。
软件设计
单片机采用keilc环境编译,FPGA在ISE环境下用verilogHDL语音编程。
1、FPGA部分:
波形发生原理图
波形发生时序仿真图,DA1和DA2为两路数据输出。
测频和测相部分原理图
测频和测相仿真时序图
2、单片机部分
波形发生器部分单片机只要显示预置的频率和相位,读取按键信息,并将频率控制字FTW和相位控制字K传送给FPGA即可。
单片机与FPGA之间通信采用单片机读写RAM的方法,在FPGA内部例化一个存储器。
测频测相部分单片机要显示测量结果,读取按键信息进行频率和相位校准。
单片机与FPGA之间通信同样采用读写RAM的方式。
由于要显示的信息并不多,因此采用数码管显示。
测试报告
DDS测频测相
输入频率
1000
100
5000
100000
频率(hz)
998
100
4992
9984
45.5
相位(°)
47.3
46.6
45.9
49.1
频率
90.3
相位
90.7
92.3
93.3
90.8
频率
180.6
相位
178.6
180.2
180.6
179.7
频率
270.2
相位
271.8
274.8
274.4
254.5
频率
300.3
相位
300.6
311.6
302.6
311.6
发生器测试数据
相位/频率
20hz
60hz
100hz
500hz
1Khz
5Khz
20Khz
45.5°
相位(°)
46.08
43.19
50.4
50.4
48.9
50.2
50.4
频率(hz)
19.97
59.95
99.83
499.19
998.37
4991.82
19995.76
90.3°
相位
89.28
86.38
86.4
86.4
86.36
86.5
86.53
频率
19.98
59.89
100.24
500.45
998.98
4998.45
20003.78
180.6°
相位
180
181.4
187.2
172.8
180.5
180.9
180.95
频率
19.87
59.69
100.45
499.67
998.67
4998.36
19998.45
270.2°
相位
273.6
280.74
280.8
273.6
273.9
275.5
278.9
频率
20.14
59.56
99.08
500.89
998.86
4994.47
19994.56
358.4°
相位
360
357.2
360
360
358.5
359
359.5
频率
20.48
60.58
99.36
498.46
998.37
4996.48
19993.57
移相网络的测试数据
输入频率
移相范围
正相位差
负相位差
100hz
27.6
-27.5
1khz
27.3
-27.1
10khz
26.8
-27.2
心得体会:
这是我们组首次做低频题目,基本完成了所有功能,感觉挺有成就感的,有很多收获。
第一,相位测量虽然原理较为简单,但精度难以很好的保证,受频率测量精度、信号整形效果等多方面影响较大,尤其是在小信号情况下,整形后的信号的过零点存在抖动,使得相位测量出现跳变,不能有很好的稳定度。
第二,用FPGA实现DDS移相信号发生器波形和移相效果较好,移相范围从0—360可调,步进0.7,彰显了FPGA在数字电路中强大的功能,学好FPGA对电子设计方面的帮助将是巨大的。
第三,这次竞赛我们给联调较多的时间,感觉只有在联调中才能发现各个模块中存在的诸多问题,才能逐个击破、逐步解决。
同时,联调也增加了我们队友之间团结协作的精神,为下一步的电子设计竞赛打下了良好的基础。
总之,每次做完电子设计后都有不同的体会和收获,能从做题中提高实践能力,从与老师的交流中获得宝贵知识,从与队友的合作中增进团结。
下一步我们还要更进一步,为全国大学生电子设计大赛做好准备。