sunsun1 发表于 2017-3-28 18:17:17

fpga制作频率计问题

注册论坛很久了,第一次发帖,FPGA新手,手头有一个项目,是一个做一个显示高度的系统,但是高度传感器出来的是频率信号,如下图所示。

x轴是高度,Y轴是频率信号,只能通过频率信号来估算高度,频率信号范围在10M-10.6Mhz左右,随着高度变化,信号频率变化,现在难点主要在频率测量这块,要求响应在1ms,出来的是有点瑕疵的正弦波信号,手头买了一块fpga开发板带ad模块,就是不知道如何测量频率,fft估计不可能,因为采样2048点,频率分辨率为20M/2048,这个估计不符合要求,感觉分辨不出来频率,不知道我对fft理解是否有问题,如果用计数器的话,因为有点点谐波,就是担心会不会影响判断上升下降沿,导致错误计数,求高手指点下




NJ8888 发表于 2017-3-28 19:02:23

拍照看看你的信号波形

wye11083 发表于 2017-3-28 19:04:29

根据一些运放的手册,以350KHz采样100KHz然后通过FFT是可以求得100KHz的峰值的。因此估计你得用至少35M以上的采样率了——这个档次的ADC价格还是挺高的,不划算。

另外一种方法,你用PLL去锁相,这样PLL会给你做好时钟滤波,你只要在片内做俩计数器,比如计算500us,倍频10倍,则最低为100000对100000,最高为106000对100000,还是比较容易实现的。PLL的典型带宽是1MHz~4MHz,而你这种频率变化基本可以认为是spread spectrum,可以放心用。

一天的蓝 发表于 2017-3-28 19:21:52

FPGA测频率很直接啊为什么用ADC;输入buffer配置成schmidt trigger,用100M clk采样,做个带滤波的输入同步模块 输出进计数器,每1ms重置;±1kHz;

sunsun1 发表于 2017-3-28 20:18:26

NJ8888 发表于 2017-3-28 19:02
拍照看看你的信号波形

照片明天去拍

sunsun1 发表于 2017-3-28 20:19:22

本帖最后由 sunsun1 于 2017-3-28 20:41 编辑

一天的蓝 发表于 2017-3-28 19:21
FPGA测频率很直接啊为什么用ADC;输入buffer配置成schmidt trigger,用100M clk采样,做个带滤波的输入同步 ...

这个也是想用计数器做,但是担心后半段信号比较窄,但是长度却变化非常大

sunsun1 发表于 2017-3-28 20:25:20

wye11083 发表于 2017-3-28 19:04
根据一些运放的手册,以350KHz采样100KHz然后通过FFT是可以求得100KHz的峰值的。因此估计你得用至少35M以上 ...

你说的对,这个ad模块200多,不过这个项目唯一难点就是硬件测频率,我是接手别人的项目,他这个频率只在一个非常窄范围变换,如果测出超过这个范围一般就是传感器碰到了底部,或者抬太高了。我本身就是想用fft测频率峰值,但是担心在5mm-10mm这个范围能够测出频率峰值吗

wye11083 发表于 2017-3-28 20:47:29

sunsun1 发表于 2017-3-28 20:25
你说的对,这个ad模块200多,不过这个项目唯一难点就是硬件测频率,我是接手别人的项目,他这个频率只在 ...

那你直接pll锁相吧。那玩意会自动跟踪传感器输出时钟。计数时记得倍10倍频,能大幅提高精度。

7802848 发表于 2017-3-29 08:47:46

直接数边沿就可以了,1ms内有多少个时钟边沿,这样计算结果很准。把fpga工作频率调高点,200MHz, 1ms有0.2M工作时钟,你输入频率20MHz,1ms内才0.02M,这个分辨率应该可以接受吧。甚至可以再调高fpga工作频率,这样分辨率会更高

sunsun1 发表于 2017-3-29 09:11:57

7802848 发表于 2017-3-29 08:47
直接数边沿就可以了,1ms内有多少个时钟边沿,这样计算结果很准。把fpga工作频率调高点,200MHz, 1ms有0.2 ...

因为是+-1v信号,调理电路出来是+3 +5v信号,就是应该不能直接接fpga引脚吧

sunsun1 发表于 2017-3-29 10:28:53

7802848 发表于 2017-3-29 08:47
直接数边沿就可以了,1ms内有多少个时钟边沿,这样计算结果很准。把fpga工作频率调高点,200MHz, 1ms有0.2 ...

想问下fpga引脚 能够直接对+-1v信号进行施密特触发器电平变换吗

sunsun1 发表于 2017-3-29 10:29:34

一天的蓝 发表于 2017-3-28 19:21
FPGA测频率很直接啊为什么用ADC;输入buffer配置成schmidt trigger,用100M clk采样,做个带滤波的输入同步 ...

输入buffer配置成斯密特是什么意思?不太懂

zouzhichao 发表于 2017-3-29 10:36:09

sunsun1 发表于 2017-3-29 10:29
输入buffer配置成斯密特是什么意思?不太懂

cpld在配置引脚时有这个选项

sunsun1 发表于 2017-3-29 10:41:37

zouzhichao 发表于 2017-3-29 10:36
cpld在配置引脚时有这个选项

这个fpga 有这个功能吗,可以吧+-1v转成方波吗

7802848 发表于 2017-3-29 11:15:01

sunsun1 发表于 2017-3-29 10:28
想问下fpga引脚 能够直接对+-1v信号进行施密特触发器电平变换吗

电平问题,你完全可以对波形进行放大到fpga io电压范围。
是不是施密特触发我认为无所谓,对数字电路来说,就是0和1,没有中间值。

直接进行双采样,甚至3采样,消除亚稳态概率,对上升沿或者下降沿进行判断并计数即可

sunsun1 发表于 2017-3-29 11:54:34

本帖最后由 sunsun1 于 2017-3-29 11:55 编辑

7802848 发表于 2017-3-29 11:15
电平问题,你完全可以对波形进行放大到fpga io电压范围。
是不是施密特触发我认为无所谓,对数字电路来说 ...

这个因为是接的别人一个烂手项目,我本身是搞linxu+qt 开发的,结果新近公司没人搞硬件,只好搞这个,其他做MFC的,前面的是 将+- 1v的sin 信号将其通过比较器放大 转化 +3v~ +5v 的方波信号,然后方波信号脉冲通过芯片74HCT4020 计2048个数,与此同时,有一个芯片接40m晶振开始计数,
74HCT4020 计2048个数完成后发送一个结束信号给那个接40m晶振的芯片,通过接40m晶振的芯片的计数个数可以知道方波信号计2048个对应的时间,求出频率,本身硬件基础不太好,在没确定方案前不好叫别人帮忙,另外那个硬件工程师也只懂stm32和画板,就是不知道fpga输入电平标准是多少,
需要接个转换模块吗

7802848 发表于 2017-3-29 13:01:54

io 通常3.3,其实输入5V也未尝不可
页: [1]
查看完整版本: fpga制作频率计问题