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. jquery.cookie的使用

    今天想到了要为自己的影像日记增加赞的功能,并且需要用到cookie. 记得原生的js操作cookie也不是很麻烦的,但似乎jquery更简单,不过相比原生js,需要额外引入2个文件,似乎又不是很好,但 ...

  2. webix前端架构的项目应用

    webix框架兼容javascript.HTML.CSS,应用比较灵活,应用框架时,配合后台webAPI,整个web项目里面,App文件夹保存前台的多语言文件,图片文件,webix原代码js.css, ...

  3. Flex 布局教程:语法篇

    作者: 阮一峰 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便 ...

  4. 【SAP业务模式】之ICS(六):发票输出类型

    这篇开始主要讲述发票输出类型: 首先我们新建一个发票类型,用于公司间的发票MIV,而标准的发票类型还是F2保持不变: 一.新建发票类型: 目录:SPRO-销售与分销-出具发票-开票凭证-定义出具发票类 ...

  5. SEED实验系列文章目录

    美国雪城大学SEEDLabs实验列表 SEEDLabs是一套完整的信息安全实验,涵盖本科信息安全教学中的大部分基本原理.项目组2002年由杜文亮教授创建,目前开发了30个实验,几百所大学已采用.实验楼 ...

  6. WINDOWS系统下MYSQL安装过程中的注意事项

    1.首先MySQL的安装方式有两种:一种是MSI安装方式,很简单就像安装Windows软件一样.另外一种就是ZIP安装方式.这种相对而言比较麻烦.新手推荐MSI安装方式. 安装方式有以下两种: MSI ...

  7. postgresql无法安装pldbgapi的问题

    要对函数进行调试需要安装插件pldbgapi,当初在windows上面的postgresql实例中执行了一下语句就安装上了: create extension pldbgapi; 但是在linux中执 ...

  8. SVN版本冲突,导致出现Files 的值“ < < < < < < < .mine”无效

    只要根据错误提示,找到相应文件夹下的\obj\Debug文件夹下的 相应名字.csproj.FileListAbsolute.txt, 打开并删除含有'<<<<<< ...

  9. Autofac 的点滴

    泛型类型的注册和使用 public interface IRepository<T> where T:class { } public interface ISchoolDetailRep ...

  10. 《深入理解Java虚拟机》调优案例分析与实战

    上节学习回顾 在上一节当中,主要学习了Sun JDK的一些命令行和可视化性能监控工具的具体使用,但性能分析的重点还是在解决问题的思路上面,没有好的思路,再好的工具也无补于事. 本节学习重点 在书本上本 ...