McuY 发表于 2016-5-12 18:31:06

在fpga里如何改变方波的占空比?

如题,输入源是50%的方波,输出也是50%,能否做个模块改变数出方波的占空比?
现在输出的占空比多少合适还不知道,实验测试后可定成固定的占空比,不必再调。

NJ8888 发表于 2016-5-12 18:57:08

本帖最后由 NJ8888 于 2016-5-12 18:58 编辑

A输入源固定最好办,B不固定但是稳定(不是时刻变动)也不难,不管输入源占空,只用标称周期计数,两个按键一个加一个减,比如标称周期100us,你想有1/64级变化那用640k频率计数,上电开始计数32个翻为高64后恢复0,按加键33 34.。。按减键31 30.。这样。B要先测量一个周期再根据周期数来算涉及到除法麻烦,根据精度查表找离散的值做计数频率

linjpxt 发表于 2016-5-12 19:27:31

从原理上来说:这个输入的波型频率必须是确定的,因为你能预测接下的波形会是怎么样,或是你可以接受一个波型的延迟。
如果深足这两点,可以用 pll 倍频,然后再分频,或用一个远高于它的频率来采上升沿,然后延时

McuY 发表于 2016-5-12 19:29:29

NJ8888 发表于 2016-5-12 18:57
A输入源固定最好办,B不固定但是稳定(不是时刻变动)也不难,不管输入源占空,只用标称周期计数,两个按键 ...

输入固定50%,输出也固定,只是暂时输出是多少需要测试后才知道?
不必做按键,只需在程序里设定一个常量即可,我改变后编译测试,最后固定用合适的常量即可。

McuY 发表于 2016-5-12 19:34:10

linjpxt 发表于 2016-5-12 19:27
从原理上来说:这个输入的波型频率必须是确定的,因为你能预测接下的波形会是怎么样,或是你可以接受一个波 ...

这个输入的频率是固定的,不高,就100K,另有2M的频率可用。

McuY 发表于 2016-5-12 19:49:04

比如 输入是50%占空比,输出60%占空比怎么做?

zxq6 发表于 2016-5-12 19:57:02

如果周期是确定的,而且频率不是很高(小于1m),那么可以考虑测量周期,然后fpga自己输出pwm

McuY 发表于 2016-5-12 22:01:26

zxq6 发表于 2016-5-12 19:57
如果周期是确定的,而且频率不是很高(小于1m),那么可以考虑测量周期,然后fpga自己输出pwm ...

输出要与输入同步,每个周期尽可能没有延时。

zxq6 发表于 2016-5-13 09:11:10

McuY 发表于 2016-5-12 22:01
输出要与输入同步,每个周期尽可能没有延时。

尽可能没有延时是做不到的,而且,fpga的延时不可预测。不过,延时做到ns级别,还是有可能的。

mangocity 发表于 2016-5-13 09:53:22

可以做到delay一个周期。
对输入信号的每个周期用高频钟计数,得到计数值后就修改输出信号的下一个周期的占空比。很简单啊。

RAMILE 发表于 2016-5-13 11:57:47

这种问题,看我的帖子通通可以解决

http://www.amobbs.com/thread-5597618-1-1.html

yutianyiren 发表于 2016-5-13 12:46:23

将把你的输入源作为触发条件,然后通过PLL后输出你想要的,延时应该可以做到很小。

muok@sohu.com 发表于 2016-5-13 17:23:40

用1个2M时钟,改变一个100k方波的占空比,还是非常简单的。相位会有轻微的变化,因为要用2M时钟采样。
1,用2M时钟把100k打两拍
2,取100k的上升沿
3,用该上升沿复位一个计数器
4,用该计数器输出一个新的100k方波,为0时,输出1,为某一个参数值时,输出0。
5,改变这个参数值,即可任意改变占空比。

muok@sohu.com 发表于 2016-5-13 17:27:05

如果想时延小,可以把时钟提升到125M,时延大概16ns,如果还不够,还可以和原始信号做一下组合电路,延时能控制在5ns以内。

linjpxt 发表于 2016-5-13 17:57:00

不需要那么麻烦,用原来的上升沿延时两拍的正脉宽,第一拍用来启动计数器,输出是这两个的或。
这样可以上升沿无廷时,但有一个最小占空比。

McuY 发表于 2016-5-17 19:14:22

延时一个整周期也行

因为以前主要做单片机,fpga这个没弄过。得慢慢摸索。

哪位能帮忙写个v码仿真一下么?不胜感激。

McuY 发表于 2016-5-17 19:15:09

muok@sohu.com 发表于 2016-5-13 17:23
用1个2M时钟,改变一个100k方波的占空比,还是非常简单的。相位会有轻微的变化,因为要用2M时钟采样。
1, ...

多谢。

慢慢琢磨下怎么下手。

McuY 发表于 2016-5-17 19:16:13

RAMILE 发表于 2016-5-13 11:57
这种问题,看我的帖子通通可以解决

http://www.amobbs.com/thread-5597618-1-1.html

多谢了,学习消化下您的代码。

bj232 发表于 2016-5-17 22:46:22

本帖最后由 bj232 于 2016-5-17 22:55 编辑

McuY 发表于 2016-5-17 19:14
延时一个整周期也行

因为以前主要做单片机,fpga这个没弄过。得慢慢摸索。

我简单写了一个仿真,你要不看看是否满意。看图片吧
我假设待处理信号250KHz,FPGA内部使用250MHz,正好是1000倍,方便计算



bj232 发表于 2016-5-17 23:02:18

当然,我这个程序是针对固定输入的250KHz频率,进行的设计,如果你想任意输入一个频率的50%方波信号,都想实现占空比可调,那我估计存在1,信号的输出延迟不确定,频率变化时,2,PWM信号的频率与输入频率会有一定差异,3,倍频肯定不是正好都是1000倍,导致占空比无法得到非常精确的数据。。。等问题吧

McuY 发表于 2016-5-24 05:57:20

bj232 发表于 2016-5-17 23:02
当然,我这个程序是针对固定输入的250KHz频率,进行的设计,如果你想任意输入一个频率的50%方波信号,都想 ...

您好,多谢。
您这个正是我需要的,我的原始信号100K,是固定的。可用2M的时钟,20倍。

能否把代码共享学习下。非常感谢!

bj232 发表于 2016-5-25 07:00:32

McuY 发表于 2016-5-24 05:57
您好,多谢。
您这个正是我需要的,我的原始信号100K,是固定的。可用2M的时钟,20倍。



我调用了一个PLL模块,其他的都很简单,你看看吧,由于不知道你使用的是什么开发环境,我只是把我的.v文件给你了,你可以在ise里面轻松地实现仿真



bj232 发表于 2016-5-25 07:03:28

McuY 发表于 2016-5-24 05:57
您好,多谢。
您这个正是我需要的,我的原始信号100K,是固定的。可用2M的时钟,20倍。



我给你的文件,我只是在仿真上面看了,具体应用中,如果有问题,联系我,咱们一起讨论、修改、完善吧

McuY 发表于 2016-5-25 09:24:30

bj232 发表于 2016-5-25 07:03
我给你的文件,我只是在仿真上面看了,具体应用中,如果有问题,联系我,咱们一起讨论、修改、完善吧 ...

多谢啦!   

McuY 发表于 2016-5-25 09:37:03

能否不使用pll,尽可能简单,然后占空比5%步进就行。

bj232 发表于 2016-5-27 12:34:47

McuY 发表于 2016-5-25 09:37
能否不使用pll,尽可能简单,然后占空比5%步进就行。

可以不用PLL的,只要你能提供给我一个频率比较高的时钟就好了。比如说,你芯片的晶振,是用10MHz,那么你可以输出10兆÷20=0.5兆以下的任意频率的PWM

bj232 发表于 2016-5-27 12:38:04

本帖最后由 bj232 于 2016-5-28 08:16 编辑

McuY 发表于 2016-5-25 09:37
能否不使用pll,尽可能简单,然后占空比5%步进就行。
晚上回家,我给你写个2Mhz输入,100KHz输出,百分之5步进的代码吧,仅供参考




代码文件





McuY 发表于 2016-5-30 09:41:11

bj232 发表于 2016-5-27 12:38
晚上回家,我给你写个2Mhz输入,100KHz输出,百分之5步进的代码吧,仅供参考




多谢您了!!!
页: [1]
查看完整版本: 在fpga里如何改变方波的占空比?