在fpga里如何改变方波的占空比?
如题,输入源是50%的方波,输出也是50%,能否做个模块改变数出方波的占空比?现在输出的占空比多少合适还不知道,实验测试后可定成固定的占空比,不必再调。 本帖最后由 NJ8888 于 2016-5-12 18:58 编辑
A输入源固定最好办,B不固定但是稳定(不是时刻变动)也不难,不管输入源占空,只用标称周期计数,两个按键一个加一个减,比如标称周期100us,你想有1/64级变化那用640k频率计数,上电开始计数32个翻为高64后恢复0,按加键33 34.。。按减键31 30.。这样。B要先测量一个周期再根据周期数来算涉及到除法麻烦,根据精度查表找离散的值做计数频率 从原理上来说:这个输入的波型频率必须是确定的,因为你能预测接下的波形会是怎么样,或是你可以接受一个波型的延迟。
如果深足这两点,可以用 pll 倍频,然后再分频,或用一个远高于它的频率来采上升沿,然后延时 NJ8888 发表于 2016-5-12 18:57
A输入源固定最好办,B不固定但是稳定(不是时刻变动)也不难,不管输入源占空,只用标称周期计数,两个按键 ...
输入固定50%,输出也固定,只是暂时输出是多少需要测试后才知道?
不必做按键,只需在程序里设定一个常量即可,我改变后编译测试,最后固定用合适的常量即可。
linjpxt 发表于 2016-5-12 19:27
从原理上来说:这个输入的波型频率必须是确定的,因为你能预测接下的波形会是怎么样,或是你可以接受一个波 ...
这个输入的频率是固定的,不高,就100K,另有2M的频率可用。 比如 输入是50%占空比,输出60%占空比怎么做? 如果周期是确定的,而且频率不是很高(小于1m),那么可以考虑测量周期,然后fpga自己输出pwm zxq6 发表于 2016-5-12 19:57
如果周期是确定的,而且频率不是很高(小于1m),那么可以考虑测量周期,然后fpga自己输出pwm ...
输出要与输入同步,每个周期尽可能没有延时。 McuY 发表于 2016-5-12 22:01
输出要与输入同步,每个周期尽可能没有延时。
尽可能没有延时是做不到的,而且,fpga的延时不可预测。不过,延时做到ns级别,还是有可能的。 可以做到delay一个周期。
对输入信号的每个周期用高频钟计数,得到计数值后就修改输出信号的下一个周期的占空比。很简单啊。 这种问题,看我的帖子通通可以解决
http://www.amobbs.com/thread-5597618-1-1.html 将把你的输入源作为触发条件,然后通过PLL后输出你想要的,延时应该可以做到很小。 用1个2M时钟,改变一个100k方波的占空比,还是非常简单的。相位会有轻微的变化,因为要用2M时钟采样。
1,用2M时钟把100k打两拍
2,取100k的上升沿
3,用该上升沿复位一个计数器
4,用该计数器输出一个新的100k方波,为0时,输出1,为某一个参数值时,输出0。
5,改变这个参数值,即可任意改变占空比。 如果想时延小,可以把时钟提升到125M,时延大概16ns,如果还不够,还可以和原始信号做一下组合电路,延时能控制在5ns以内。 不需要那么麻烦,用原来的上升沿延时两拍的正脉宽,第一拍用来启动计数器,输出是这两个的或。
这样可以上升沿无廷时,但有一个最小占空比。 延时一个整周期也行
因为以前主要做单片机,fpga这个没弄过。得慢慢摸索。
哪位能帮忙写个v码仿真一下么?不胜感激。
muok@sohu.com 发表于 2016-5-13 17:23
用1个2M时钟,改变一个100k方波的占空比,还是非常简单的。相位会有轻微的变化,因为要用2M时钟采样。
1, ...
多谢。
慢慢琢磨下怎么下手。 RAMILE 发表于 2016-5-13 11:57
这种问题,看我的帖子通通可以解决
http://www.amobbs.com/thread-5597618-1-1.html
多谢了,学习消化下您的代码。 本帖最后由 bj232 于 2016-5-17 22:55 编辑
McuY 发表于 2016-5-17 19:14
延时一个整周期也行
因为以前主要做单片机,fpga这个没弄过。得慢慢摸索。
我简单写了一个仿真,你要不看看是否满意。看图片吧
我假设待处理信号250KHz,FPGA内部使用250MHz,正好是1000倍,方便计算
当然,我这个程序是针对固定输入的250KHz频率,进行的设计,如果你想任意输入一个频率的50%方波信号,都想实现占空比可调,那我估计存在1,信号的输出延迟不确定,频率变化时,2,PWM信号的频率与输入频率会有一定差异,3,倍频肯定不是正好都是1000倍,导致占空比无法得到非常精确的数据。。。等问题吧 bj232 发表于 2016-5-17 23:02
当然,我这个程序是针对固定输入的250KHz频率,进行的设计,如果你想任意输入一个频率的50%方波信号,都想 ...
您好,多谢。
您这个正是我需要的,我的原始信号100K,是固定的。可用2M的时钟,20倍。
能否把代码共享学习下。非常感谢!
McuY 发表于 2016-5-24 05:57
您好,多谢。
您这个正是我需要的,我的原始信号100K,是固定的。可用2M的时钟,20倍。
我调用了一个PLL模块,其他的都很简单,你看看吧,由于不知道你使用的是什么开发环境,我只是把我的.v文件给你了,你可以在ise里面轻松地实现仿真
McuY 发表于 2016-5-24 05:57
您好,多谢。
您这个正是我需要的,我的原始信号100K,是固定的。可用2M的时钟,20倍。
我给你的文件,我只是在仿真上面看了,具体应用中,如果有问题,联系我,咱们一起讨论、修改、完善吧 bj232 发表于 2016-5-25 07:03
我给你的文件,我只是在仿真上面看了,具体应用中,如果有问题,联系我,咱们一起讨论、修改、完善吧 ...
多谢啦! 能否不使用pll,尽可能简单,然后占空比5%步进就行。 McuY 发表于 2016-5-25 09:37
能否不使用pll,尽可能简单,然后占空比5%步进就行。
可以不用PLL的,只要你能提供给我一个频率比较高的时钟就好了。比如说,你芯片的晶振,是用10MHz,那么你可以输出10兆÷20=0.5兆以下的任意频率的PWM 本帖最后由 bj232 于 2016-5-28 08:16 编辑
McuY 发表于 2016-5-25 09:37
能否不使用pll,尽可能简单,然后占空比5%步进就行。
晚上回家,我给你写个2Mhz输入,100KHz输出,百分之5步进的代码吧,仅供参考
代码文件
bj232 发表于 2016-5-27 12:38
晚上回家,我给你写个2Mhz输入,100KHz输出,百分之5步进的代码吧,仅供参考
多谢您了!!!
页:
[1]