1.原理:

PWM脉冲宽度调制,即调节脉冲的占空比。当输出的脉冲频率一定时,输出的脉冲占空比越大,相当于输出的有效电平越大,这样实现由FPGA来控制模拟量。

2.代码实现

PWM控制模块

module pwm(input         clk,        //50MHzinput        rst_n,      //low activeoutput  led         //high-off, low-on);localparam CLK_FREQ = 50 ;                 //50MHz
localparam US_COUNT = CLK_FREQ ;       //1 us counter
localparam MS_COUNT = CLK_FREQ*1000 ;  //1 ms counterlocalparam DUTY_STEP    = 32'd100000 ;  //duty step
localparam DUTY_MIN_VALUE = 32'h6fffffff ;    //duty minimum value
localparam DUTY_MAX_VALUE = 32'hffffffff ;    //duty maximum valuelocalparam IDLE         = 0;   //IDLE state
localparam PWM_PLUS     = 1;    //PWM duty plus state
localparam PWM_MINUS    = 2;    //PWM duty minus state
localparam PWM_GAP      = 3;    //PWM duty adjustment gapwire      pwm_out;    //pwm output
reg[31:0]   period;     //pwm step value
reg[31:0]   duty;       //duty value
reg         pwm_flag ;  //duty value plus and minus flag, 0: plus; 1: minusreg[3:0]     state;
reg[31:0]   timer;      //duty adjustment counterassign led = ~pwm_out ; //led low activealways@(posedge clk or negedge rst_n)
beginif(rst_n == 1'b0)beginperiod        <= 32'd0;timer         <= 32'd0;duty      <= 32'd0;pwm_flag  <= 1'b0 ;state         <= IDLE;endelsecase(state)IDLE:beginperiod      <= 32'd17179;   //The pwm step value, pwm 200Hz(period = 200*2^32/50000000)state          <= PWM_PLUS;duty        <= DUTY_MIN_VALUE;              endPWM_PLUS :beginif (duty > DUTY_MAX_VALUE - DUTY_STEP) //if duty is bigger than DUTY MAX VALUE minus DUTY_STEP , begin to minus duty valuebeginpwm_flag    <= 1'b1 ;duty          <= duty - DUTY_STEP ;endelsebeginpwm_flag   <= 1'b0 ;                  duty        <= duty + DUTY_STEP ;  endstate        <= PWM_GAP ;endPWM_MINUS :beginif (duty < DUTY_MIN_VALUE + DUTY_STEP)   //if duty is little than DUTY MIN VALUE plus duty step, begin to add duty valuebeginpwm_flag    <= 1'b0 ;duty          <= duty + DUTY_STEP ;endelsebeginpwm_flag  <= 1'b1 ;duty          <= duty - DUTY_STEP ;   end state       <= PWM_GAP ;endPWM_GAP:beginif(timer >= US_COUNT*100)      //adjustment gap is 100usbeginif (pwm_flag)state <= PWM_MINUS ;elsestate <= PWM_PLUS ;timer <= 32'd0;endelsebegintimer <= timer + 32'd1;endenddefault:beginstate <= IDLE;     end         endcase
end//Instantiate pwm module
ax_pwm
#(.N(32))
ax_pwm_m0(.clk      (clk),.rst      (~rst_n),.period   (period),.duty     (duty),.pwm_out  (pwm_out));endmodule 

项目下载链接:XLINX之PWM控制LED模块设计-CSDN下载XLINX之PWM控制LED模块设计更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/JY6669991010/86796637?spm=1001.2014.3001.5503

基于XLINX的PWM控制LED模块设计相关推荐

  1. 单片机按键控制数码管c语言程序,基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文).doc...

    基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文) 物理与电子工程学院2014级课程设计 PAGE IV 物理与电子工程学院 <单片机原理与接口技术> 课程设计报告书 ...

  2. 控制led亮度C语言程序,单片机pwm控制led亮度原理图

    单片机pwm控制led亮度原理图 用51产生PWM去控制LED,首先要确定PWM的周期T和占空比D,确定了这些以后,可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D ...

  3. PWM控制LED亮度变化的原理(超详解)

    PWM控制LED亮度变化的原理 通过ARR寄存器来设定预装载值,以确定循环频率和周期,计数器寄存器CNT从0开始计数,设定一个CCR寄存器的值,来跟CNT的计数值进行比较,当CNT的值小于CCR寄存器 ...

  4. 基于arduino的光敏电阻控制LED灯

    基于arduino的光敏电阻控制LED 思路: 1.硬件需要arduino UNO板子,LED,光敏电阻,面包板,杜邦线若干,电阻220殴(连接LED)和10k殴各一个,电路图如下 代码 代码如下: ...

  5. java毕业设计——基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码)——安全模块

    基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+sqlserver的通用安全模块设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...

  6. PWM控制LED亮度(2-呼吸灯)-STM32电控学习笔记10

    PWM控制LED亮度(2-呼吸灯)-STM32电控学习笔记10 day10:2022/9/29 前面学了两三天的PWM了,PWM本身不难理解,至于为啥进度缓慢,还不是这时钟定时器分频值重装载啥的太难理 ...

  7. 自动感光调节LED灯亮度C语言程序,PWM控制LED灯的亮度(C 语言)

    控制LED灯的亮度,通过调节电压的方式可以达到,但不理想,而且可调的范围很小,电压稍高,还容易把LED烧毁,唯一可行的方法就是通过PWM(脉冲宽度调节)来控制其亮度. 以下程序是在单片机中控制LED. ...

  8. 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考

    提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...

  9. 利用Proteus仿真STM32实现按键控制LED灯设计

    1. 前言 Proteus是英国著名的EDA工具(仿真软件),从原理图布图.代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计.是世界上唯一将电路仿真软件.PC ...

最新文章

  1. Apache 基金会宣布 Apache Pulsar 毕业成为顶级项目
  2. R-C3D 视频活动检测的经典算法
  3. 信奥中的数学:母函数
  4. JavaWeb——eclipse与tomcat环境配置
  5. ubuntu文件编码转换
  6. 【批处理】肉鸡扫描脚本
  7. 教你怎么从Windows10彻底删除Flash
  8. 系统无忧 Ghost XP SP3 快速装机版V2011.07
  9. Java实现IP代理
  10. HTML5基础基础练习题
  11. linux 蓝牙驱动
  12. 两种web crawler方案
  13. 未认证公众号如何跳转其他链接
  14. 计算机游戏中屏幕上显示的,电脑在玩全屏游戏的时候显示屏老是出现无信号
  15. 崔毅东 C++程序设计入门(下) 第9单元:白公曾咏牡丹芳,一种鲜妍独“异常” 笔记
  16. 构造方中的this关键字
  17. 节假日期间的项目管理
  18. 金融python有哪些证书可以考_python有证书考吗
  19. Python基础知识学习(六)——包与模块:指令、包加载步骤、搜索范围
  20. 反洗钱检验java_从Drools规则引擎到风控反洗钱系统V0.2.3.pdf

热门文章

  1. 桌面添加视疲劳缓解图
  2. Z-Wave Networking Basics ZWAVE网络基础
  3. ACL 2022 | 引入角度margin构建对比学习目标,增强文本语义判别能力
  4. python大作业爬虫_Python爬虫大作业
  5. ABAP 弹出对话框
  6. 软件创新实验室:TCP
  7. Mathpix 的替代品
  8. 操作系统哲学原理(18)文件原理-文件系统
  9. 浅谈unicode编码
  10. oracle数据库日志挖掘操作步骤