FPGA:生成占空比可调的PWM波

这篇具有很好参考价值的文章主要介绍了FPGA:生成占空比可调的PWM波。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

正文

一、50%的占空比

目标:FPGA的时钟为50MHZ,生成20KHZ的占空比位50%的PWM波
设需要计数器计到x后清零,求出x:
x/50_000_000 = 1/20_000

设计文件

module pwm #(
    parameter MAX = 2499
)(
    input clk,
    input rst_n,

    output reg clk_20k
);

reg [15:0] cnt;

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        cnt <= 16'd0;
    else if(cnt == MAX)
        cnt <= 16'd0;
    else    
        cnt <= cnt + 16'd1;
end

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        clk_20k <= 1'd0;
    else if(cnt == (MAX -1) /2)
        clk_20k <= 1'd1;
    else if(cnt == MAX)
        clk_20k <= 1'd0;
    else 
        clk_20k <= clk_20k;
end
    
endmodule

二、占空比可调

使用FPGA生成一个占空比为70%的PWM波
注:可以通过调节PWM_num 的大小,进而实现不同占空比的PWM波
fpga pwm占空比,# ▶FPGA其他项目,fpga开发

// 占空比可变
module pwm_change #(
    parameter MAX = 1249,
    parameter PWM_num = 874
)(
    input clk,
    input rst_n,

    output reg clk_20k_70
);

reg [15:0] cnt_1249;
reg  dec_up;
reg  dec_down;

// 生成三角波,使用if语句,实现自加到1249后,再自减到0
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        cnt_1249 <= 16'd0;
    else if(dec_up)  
        cnt_1249 <= cnt_1249 + 16'd1;
    else if(dec_down)
        cnt_1249 <= cnt_1249 - 16'd1;

end

always @(posedge clk or negedge rst_n) begin
    if(!rst_n)begin
        dec_up <= 1'd0;
        dec_down <=1'd0;       
    end
    else if(cnt_1249 == MAX)begin
        dec_down <= 1'd1;// 计到最大值后,向下计数信号拉高
        dec_up <= 1'd0;      
    end
    else if(cnt_1249 == 0)begin
        dec_down <= 1'd0;
        dec_up <= 1'd1; // 计到最小值后,向上计数信号拉高      
    end

end
// 通过上面已经生成的三角波,使用PWM_num调节占空比
always @(posedge clk or negedge rst_n) begin
    if(!rst_n)
        clk_20k_70 <= 1'd0;
    else if(cnt_1249 >= PWM_num)
        clk_20k_70 <= 1'd0;
    else if(cnt_1249 < PWM_num)
        clk_20k_70 <= 1'd1;
    else 
        clk_20k_70 <= clk_20k_70;
end
    
endmodule

最后生成的70%占空比的PWM波形如下:
fpga pwm占空比,# ▶FPGA其他项目,fpga开发文章来源地址https://www.toymoban.com/news/detail-642749.html

到了这里,关于FPGA:生成占空比可调的PWM波的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32按键控制改变pwm占空比

    每次按下按键改变TIM_Setcompare函数中占空比值即可。 相关io口,占空比调节级数,是否支持连按根据自己需要自行修改。 main.c #include \\\"delay.h\\\" #include \\\"sys.h\\\" #include \\\"pwm.h\\\" #include \\\"stm32f10x_tim.h\\\" #include \\\"key.h\\\" int t=50;//占空比 void key_function(void)  {  static u8 key = 0;  key = KEY_Scan(0); if(key

    2024年02月08日
    浏览(50)
  • 【STM32基础】第四篇、控制PWM占空比

    目录 第一部分、STM32定时器的基本知识 1、STM32定时器的分类(图片来自野火文档) 2、开发过程中定时器的常用基础功能 3、定时器挂在的总线  第二部分、能用的代码   1、定时器计时代码 2、定时器输出PWM代码 第三部分、总结 1、STM32定时器的分类(图片来自野火文档)  

    2024年02月07日
    浏览(47)
  • STM32 HAL 检测PWM频率/占空比

    配置的系统时钟是100M,Timer的时钟也是100M Timer 的频率为:100M 分频 1000 = 0.1MHz 也就是定时器 每10us 计一个数 打开TIM4_CH2引脚中断 在 main.c 中开启中断 TIM4_CH2引脚中断回调 占空比%: TempPIpre *100 / TempPIpul 周期T: TempPIpul * 10us 频率f: 1 / T

    2024年02月13日
    浏览(42)
  • 输入捕获模式测频率&PWM输入模式(PWMI)测占空比

    输出比较: 比较电路输入的CNT、CCR大小关系 ,在通道引脚输出高低电平 N/fc得到标准频率的时长,也就是待测频率的周期 测频法代码实现:修改对射式红外传感器计次(上升沿计次)、定时器外部时钟(1s中断)  测频法:定时器中断,并记录捕获次数;测周法:捕获中断

    2024年02月19日
    浏览(42)
  • stm32输入捕获测频率&PWM模式测频率占空比

    本文章转自B站江科大自化协    1,输入捕获测频率 接线图  目录结构 IC.h IC.c pwm.c PWM.h      main.c 编译下载出结果   2.PWM模式测频率占空比 接线图同上 目录结构同上 IC.c  IC.h main.c 编译下载测试     PS:测h   

    2024年02月15日
    浏览(37)
  • 按键调整PWM占空比,实现电机转速调整(基于STM32开发板)

    实验名称 :PWM控制电机转速 实验功能 : 基于正点原子战舰开发板,通过按键(KEY0 / KEY1)改变PWM,进而实现电机转速的调整。当按下KEY0键,电机转速加快;按下KEY1键,电机转速降低。 硬件资源 : 1. 独立按键 KEY0         -  PE4 KEY1         -  PE3 2. 通用定时器 TIM2

    2024年02月09日
    浏览(47)
  • STM32 定时器及PWM计算占空比计算周期

    文使用Cubemx+MDK5开发方式(纯新手向 记录一下) 定时器时间计算 两步 (特别特别特别注意 单位换算 简单无脑) 1MHZ = 1000KHZ 1KHZ = 1000HZ 1HZ 的周期是1秒 1s = 1000毫秒(ms) 1ms =  1000 微秒(μs) 1μs = 1000纳秒(ns) 第一步: 定时器所在时钟总线频率 / 预分频 / 定时器计数值 = 频率 //频率

    2024年02月14日
    浏览(46)
  • stm32 笔记 PWM输入模式测量脉宽和占空比原理

    在测量占空比之前,我们先一步一步来,先让 STM32 可以测量脉宽。 TIM3_CH1(tim3 定时器通道 1)捕获模式测量脉宽步骤如下: 1.输入捕获到 PWM 上升沿触发 2.发送中断,通知用户此时被触发,用户获得当前计数器值 3.计数器清零,然后继续计数... 让 STM32 芯片一直重复这三步即

    2024年01月15日
    浏览(42)
  • STM32L4 HAL库通过串口通信改变PWM占空比

    使用串行通信的目的是为了让上位机能控制STM32来改变PWM的输出 这里用的是定时器TIM4的3通道,当然也可以改为其他的定时器,具体请参考手册 偷下懒,直接拿正点原子的例子程序修改了一下。 示例用的是UART1 引脚是PA9(TX),PA10(RX) 主要修改的地方在接收数据的部分,我用l

    2024年02月15日
    浏览(46)
  • [FOC-Stm32]设置PWM占空比(比较值)的几种方法

    近期博主在阅读一些基于STM32的FOC代码中,对PWM占空比的设置问题很感兴趣,于是找了分别拿出来做了一下对比,来看看都是怎么来调整PWM输出的。 下图给出了PWM占空比调整的原理,在定时器循环中,有两个量:ARR 重装载值和 CCR 比较值。定时器内的计数器从0到ARR循环记录数

    2024年02月15日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包