首页 > 编程知识 正文

verilog写计数器,fpga控制步进电机驱动

时间:2023-05-04 04:02:44 阅读:168302 作者:2502

FPGA实例01——PWM波输出

1.PWM:一种方波,通过改变方波间的间隔来改变占空比。

2 .关于led灯的亮度,PWM的刷新频率10ms比较合适。

3 .其输出有三个注意事项。 刷新频率、持续时间、占空比变更时间。

举个例子吧。 输出占空比50%的PWM波,将刷新周期t设为10ms,持续2s,2s后将占空比变更为80%。 其中刷新频率为10ms,持续时间为2s,修改时间为2s 4.PWM波输出模块

modulePWMled(clk,rst_n,led ); //顶级信号3个输入时钟; input rst_n; 输出led; //输入输出信号reg [18:0] cnt0; //信号定义wire add_cnt0; wire end_cnt0; reg [7:0] cnt1; wire add_cnt1; wire end_cnt1; reg [3:0] cnt2; wire add_cnt2; wire end_cnt2; reg led; reg [18:0] x; always @ (posedgeclkornegedgerst _ n ) begin//计数器0作用为计数10ms,周期if (! rst_n ) begin cnt0=0; endelseif(add_CNT0) Beginif ) end_CNT0) cnt0=0; else cnt0=cnt0 1; endendassign add_cnt0=1; assign end _ CNT0=add _ CNT0CNT0==500 _ 000-1; always @ (posedgeclkornegedgerst _ n ) begin //计数器1充当计数2s,持续时间if (! rst_n ) begin cnt1=0; endelseif(add_cnT1 ) Beginif ) end_cnT1 ) cnt1=0; else cnt1=cnt1 1; endendassign add_cnt1=end_cnt0; assign end _ cn t1=add _ cn t1 CNT1==200-1; always @ (posedgeclkornegedgerst _ n ) begin//计数器2表示pwm波占空比变更次数if (! rst_n ) begin cnt2=0; endelseif(add_CNT2) Beginif ) end_CNT2) cnt2=0; else cnt2=cnt2 1; endendassign add_cnt2=end_cnt1; assign end _ CNT2=add _ cn t2cn T2==10-1; always @ (posedgeclkornegedgerst _ n ) begin//输出PWM表示led点亮if(rst_n==1'B0 ) begin led=1; endelseif(add_CNT0CNT0==x-1 ) begin led=0; endelseif(end_CNT0) begin led=1; endendalways@(* ) begin //)转换组合逻辑实现次数(条件是计数器2,即cnt2) if ) CNT2==0) begin x=475_000; endelseif(CNT2==1) begin x=425_000; endelseif(CNT2==2) begin x=350_000; endelseif(CNT2==3) begin x=250_000; endelseif(CNT2==4) begin x=100_000; endelseif(CNT2==5) begin x=100_000; endelseif(CNT2==6) begin x=250_000; endelseif(CNT2==7) begin x=350_000; endelseif(CNT2==8) begin x=425_000; end else begin x=475_000; 结束模块

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。