module xuanpin #
(parameter N=25)
(clk,clr,key_in_f,key_in_z,f_out);
input clk,clr,key_in_f,key_in_z;
output reg f_out;
reg clk0,clk1,clk2,clk3,clk4,clk5,clk6,clk7;
wire key;
wire key_z;
reg[8:0] cnter0;
reg[3:0] cnter1,cnter2,cnter3,cnter4,cnter5,cnter6,cnter7,cnter8;
debounce xiaodou_ut
(
.clk(clk),
.rst_n(clr),
.key_n(key_in_f),
.key_pulse(key),
.key_state()
);
debounce xiaodou_uut
(
.clk(clk),
.rst_n(clr),
.key_n(key_in_z),
.key_pulse(key_z),
.key_state()
);
reg [2:0] cnter9,z;
always@(posedge clk or negedge clr)
if (~clr) cnter9<=0;
else if(cnter9==4)cnter9<=0;
else if(key_z) cnter9<=cnter9+1;

always@(posedge clk or negedge clr)
if (~clr)
cnter0<=0;
else if (cnter0==N-1)
begin cnter0<=0;clk0<=1;end
else if(cnter0<=(25*(cnter9+1))) begin clk0<=1;cnter0<=cnter0+1;end
else
begin cnter0<=cnter0+1;clk0<=0;end//100k

always@(posedge clk0 or negedge clr)
if (~clr)
cnter1<=0;
else if(cnter1==9)begin cnter1<=0; clk1<=1;end
else if(cnter1<=(cnter9+1)) begin clk1<=1;cnter1<=cnter1+1;end
else begin cnter1<=cnter1+1;clk1<=0; end//10k

always@(posedge clk1 or negedge clr)
if (~clr)
cnter2<=0;
else if (cnter2==9) begin cnter2<=0;clk2<=1; end
else if(cnter2<=(cnter9+1)) begin clk2<=1;cnter2<=cnter2+1;end
else begin cnter2<=cnter2+1;clk2<=0;end//1000

always@(posedge clk2 or negedge clr)
if (~clr)
cnter3<=0;
else if (cnter3==9) begin cnter3<=0; clk3<=1;end
else if(cnter3<=(cnter9+1)) begin clk3<=1;cnter3<=cnter3+1;end
else begin cnter3<=cnter3+1; clk3<=0;end //100

/*always@(posedge clk2 or negedge clr)
if (~clr) clk3<=0;
else if(cnter3<key_z)clk3<=1;
else clk3<=0;*/

always@(posedge clk3 or negedge clr)
if (~clr) cnter4<=0;
else if(cnter4==9) begin cnter4<=0; clk4<=1;end
else if(cnter4<=(cnter9+1)) begin clk4<=1; cnter4<=cnter4+1;end
else begin cnter4<=cnter4+1;clk4<=0;end //10

/*always@(posedge clk3 or negedge clr)
if (~clr) clk4<=0;
else if(cnter4<key_z)clk4<=1;
else clk4<=0;*/

always@(posedge clk or negedge clr)
if (~clr)
cnter5<=0;
else if(cnter5==9) begin cnter5<=0;clk5<=1; end
else if(cnter5<=(cnter9+1)) begin clk5<=1;cnter5<=cnter5+1;end
else begin cnter5<=cnter5+1;clk5<=0;end//2500k

/*always@(posedge clk or negedge clr)
if (~clr) clk5<=0;
else if(cnter5<key_z)clk5<=1;
else clk5<=0;*/

always@(posedge clk5 or negedge clr)
if (~clr)
cnter6<=0;
else if(cnter6==9) begin cnter6<=0; clk6<=1; end
else if(cnter6<=(cnter9+1))begin clk6<=1;cnter6<=cnter6+1;end
else begin cnter6<=cnter6+1;clk6<=0;end//250k

/*always@(posedge clk5 or negedge clr)
if (~clr) clk6<=0;
else if(cnter6<key_z)clk6<=1;
else clk6<=0;
*/

always@(posedge clk6 or negedge clr)
if (~clr)
cnter7<=0;
else if(cnter7==9) begin cnter7<=0;clk7<=1; end
else if(cnter7<=(cnter9+1)) begin clk7<=1;cnter7<=cnter7+1;end
else begin cnter7<=cnter7+1; clk7<=0;end//25k

/*always@(posedge clk6 or negedge clr)
if (~clr) clk7<=0;
else if(cnter7<key_z)clk7<=1;
else clk7<=0; */

always@(posedge clk or negedge clr)
if (~clr) cnter8<=0;
else if(cnter8==8)cnter8<=0;
else if(key) cnter8<=cnter8+1;

always@(cnter8)
case(cnter8)
0:f_out=clk0;
1:f_out=clk1;
2:f_out=clk2;
3:f_out=clk3;
4:f_out=clk4;
5:f_out=clk5;
6:f_out=clk6;
7:f_out=clk7;
endcase
endmodule

非固定占空比的实现(频率调节,占空比会跟着发生变化)

module Pulse_gen
(
input clk_in,
input rst_n_in,
input key_menu,
input key_up,
input key_down,
output menu_state,
output reg pulse_out
);

//Debounce for key_menu
debounce Debounce_menu(.clk(clk_in),.rst_n(rst_n_in),.key_n(key_menu),.key_state(menu_state));

//Debounce for key_up
debounce Debounce_up(.clk(clk_in),.rst_n(rst_n_in),.key_n(key_up),.key_pulse(up_pulse));

//Debounce for key_down
debounce Debounce_down(.clk(clk_in),.rst_n(rst_n_in),.key_n(key_down),.key_pulse(down_pulse));

reg [3:0] cycle;
reg [3:0] duty;
//Control cycle and duty cycle
always @(posedge clk_in or negedge rst_n_in) begin
if(!rst_n_in) begin
cycle<=4'd8;
duty<=4'd4;
end else begin
if(menu_state) begin//高电平周期调节,低电平占空比调节
if(up_pulse && (cycle<4'd15)) cycle <= cycle + 4'd1;
else if(down_pulse && (cycle>(duty+4'd1))) cycle <= cycle - 4'd1;
else cycle <= cycle;
end else begin
if(up_pulse && (cycle>(duty+4'd1))) duty <= duty + 4'd1;
else if(down_pulse && (duty>4'd0)) duty <= duty - 4'd1;
else duty <= duty;
end
end
end

reg [3:0] cnt;
//counter for cycle
always @(posedge clk_in or negedge rst_n_in) begin
if(!rst_n_in) begin
cnt<=4'd0;
end else begin
if(cnt>=cycle) cnt<=4'd0;
else cnt <= cnt + 4'd1;
end
end

//pulse generate with duty
always @(posedge clk_in or negedge rst_n_in) begin
if(!rst_n_in) begin
pulse_out<=1'b1;
end else begin
if(cnt<=duty) pulse_out<=1'b1;
else pulse_out<=1'b0;
end
end

endmodule

pwm 占空比 频率可调的脉冲发生器的更多相关文章

  1. (原创)基于MCU的频率可调,占空比可调的PWM实现(MCU,MCS-51/MSP430)

    1.Abstract     做这个是受朋友之邀,用在控制电机转动的方面.他刚好在一家好的单位实习,手头工作比较多,无暇分身,所以找我帮忙做个模型.要求很明晰,PWM的频率在0~1KHz范围内,占空比 ...

  2. STM32中的PWM的频率和占空比的设置

    转于http://blog.csdn.net/liming0931/article/details/8491468 下面的这个是stm32的定时器逻辑图,上来有助于理解:   TIM3的ARR寄存器和 ...

  3. 【转】PWM占空比和分辨率

    占空比是接通时间与周期之比冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同占空比:就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比,如一个PWM的频率是1000Hz, ...

  4. 树莓派pwm驱动好盈电调及伺服电机

    本文讲述如何通过树莓派的硬件PWM控制好盈电调来驱动RC车子的前进后退,以及如何驱动伺服电机来控制车子转向. 1. 好盈电调简介 车子上的电调型号为:WP-10BLS-A-RTR,在好盈官网并没有搜到 ...

  5. stm32的PWM占空比

    PWM一共有两种模式,PWM1模式:CNT<CRRx为有效电平.CNT>CRRx为无效电平.PWM2模式相反. 有限电平通过设置极性来确定: TIM_OCInitStructure.TIM ...

  6. 用机智云做PWM占空比控制电机,物联网智能家居应用

      因为是新申请的博客,所以申请了总想往里面加点东西,所以把我之前在机智云写的帖子复制了过来 (各位抱歉,由于之前上传的文件可能有错误,之前上传的文件PWM不能用,那么我又重新上传了一个文件,这个文件 ...

  7. Stm32 定时器 定时时间设置及PWM频率 占空比的设置总结

    一.定时器的时钟: 当SYSCLK等于72M,APB1等于36M APB2等于72M时,定时器的时钟为72M.注意图中这句话:如果APB1/APB2预分频器=1则频率不变,否则频率x2.如果此时,AP ...

  8. STM32 Cubemx 输出可调频率与占空比的PWM

    这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现. 1.建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能 2.配置时钟,我这里配的是内部时钟, ...

  9. 直流电机驱动PWM频率(转)

    源:直流电机驱动PWM频率 1.没有统一的标准,其实PWM的频率和你的电机感抗和你需要的速度响应时间有很大的关系.一般的电机用14K就足够了.当然自需要简单的调速可以随便选. 如果电机转速比较高,感抗 ...

随机推荐

  1. 开发者的利器:Docker 理解与使用

    困扰写代码的机器难免会被我们安装上各种各样的开发工具.语言运行环境和引用库等一大堆的东西,长久以来不仅机器乱七八糟,而且有些相同的软件还有可能会安装不同的版本,这样又会导致一个项目正常运行了,却不小心 ...

  2. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  3. [Hadoop in Action] 第6章 编程实践

    Hadoop程序开发的独门绝技 在本地,伪分布和全分布模式下调试程序 程序输出的完整性检查和回归测试 日志和监控 性能调优   1.开发MapReduce程序   [本地模式]        本地模式 ...

  4. CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用

    Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...

  5. 用Taurus.MVC 做个企业站(下)

    前言: 上一篇完成了首页,这一篇就把剩下的几个功能给作了吧. 包括文章列表.文章详情和产品展示. 1:文章列表: 原来的ArticleList.aspx 1:现在的articlelist.html 除 ...

  6. vs 2015 "加载该页时出错。" 解决方案

    错误信息: 加载该页时出错. 未找到与约束   ContractName Microsoft.CodeAnalysis.Editor.TypeScript.ScriptContexts.ITypeSc ...

  7. Linux 桌面系统字体配置要略

    字体显示效果测试 这一段是为了测试宋体字的显示效果,包括宋体里面自带的英文字体,“This is english,how does it look like?”.这一行是小字.后面几个字是加粗的宋体. ...

  8. Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计

    Atitit各种SDM 软件开发过程SDP sdm的ddd tdd bdd设计 1.1. software development methodology (also known as SDM 1 1 ...

  9. C++ 高性能无锁日志系统

    服务器编程中,日志系统需要满足几个条件 .高效,日志系统不应占用太多资源 .简洁,为了一个简单的日志功能引入大量第三方代码未必值得 .线程安全,服务器中各个线程都能同时写出日志 .轮替,服务器不出故障 ...

  10. 游戏服务器菜鸟之C#初探四游戏服务

    经过多次折腾之后,在一次进行了一次重大的重构,去解决问题 主要重构如下 1.将原来的单一协议修改多协议进行,一些查询.认证的功能都采用HTTP进行,避免全部采用TCP链接资源的消耗: 2.原来单一的部 ...