
原理:
用一个足够大的计数器,对主时钟进行计数,(比如计数器定义为reg[5:0]count;那么你可以定义当count为何值时翻转时钟,那么就可以得到频率可变的时钟)。
但是这样做的话,只能得到50%占空比的脉冲。用于伺服电机,脉冲应该也是可变的才对。这时候再加一个计数器count2,两个计数器同时计数,一个代表正脉宽,另一个代表负脉宽,调节两个计数器的大小就可以实现频率、脉冲同时可变了。
具体方法:
1、当保持count+count2值不变时,则频率不变,调节count和count2的值(其实就是一个加多少另一个就减多少了)就可以改变占空比
2、如果count+count2的值也改变,那么频率也就改变了。
楼上太犀利了,哈哈
你的第一二三条可以合成一条,直接在modesim里面写代码,testbench,然后仿真,当然也可以直接用quartus II里面的仿真器仿真,如果信号较少的话也很方便的。
四五六七条可以合成一条,直接在quartus II里面的全编译选项即可
编译完成后直接下载调试了。
还有既然开发FPGA,肯定要选择芯片的型号,具体的型号要看你有哪种FPGA的实体了,芯片上都有标示的。
PWM么,试试这个
module pwm_test(
input clk , //时钟输入,可在外部设置不同时钟
input rst_n , //低电平复位
input [7:0] f , //频率控制,最大255
input [7:0] d , //占空比控制字,上限100
output pwm_out //PWM输出
);
reg [17:0] count ; //计数
always @(posedge clk or negedge rst_n) begin
if(~rst_n) begin
count <= 0 ;
end
else if(count >= 17'd100_000) //计数到100K清零
count <= 0 ;
else
count <= count + f; //每次累加频率值
end
assign pwm_out = (count < d1000) 1:0 ;//PWM输出
endmodule
思路就是倍频累加,和DDS的原理一样。剩下的外围程序自己想一下吧。
例如输入时钟100M,频率设为20的时候,计数100K,每次加20,输出频率就是100M/(100K/20)=20K,占空比你一看就明白
至于输入时钟,用Tools->Megawizard Plug-In Manager->I/O->ALTPLL模块设置PLL分频,倍频即可
我有调试成功的PWM程序,留下邮箱我发给你
如果你用ROM查找表产生正弦波的话,50M、1024个点只能产生488K的正弦波,要产生15M的信号,只能做33个点, 你那个公式里 N位K的位长 ,所以K/2^N永远小于1 也就是Fc必定小于F0,输出频率不可能超过输入时钟频率的
以上就是关于请问如何用verilog hdl编写频率可调的脉冲信号全部的内容,包括:请问如何用verilog hdl编写频率可调的脉冲信号、用verilog在fpga上实现: 10k~100khz正弦波,三角波,锯齿波波形发生器(基于d、谁给我个verilog脉冲宽度调制器的代码,网上都找不到等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)