基于XLINX的PWM控制LED模块设计
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模块设计相关推荐
- 单片机按键控制数码管c语言程序,基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文).doc...
基于单片机的按键控制LED数码管共阴极动态显示电路设计报告(毕业论文) 物理与电子工程学院2014级课程设计 PAGE IV 物理与电子工程学院 <单片机原理与接口技术> 课程设计报告书 ...
- 控制led亮度C语言程序,单片机pwm控制led亮度原理图
单片机pwm控制led亮度原理图 用51产生PWM去控制LED,首先要确定PWM的周期T和占空比D,确定了这些以后,可以用定时器产生一个时间基准t,比如定时器溢出n次的时间是PWM的高电平的时间,则D ...
- PWM控制LED亮度变化的原理(超详解)
PWM控制LED亮度变化的原理 通过ARR寄存器来设定预装载值,以确定循环频率和周期,计数器寄存器CNT从0开始计数,设定一个CCR寄存器的值,来跟CNT的计数值进行比较,当CNT的值小于CCR寄存器 ...
- 基于arduino的光敏电阻控制LED灯
基于arduino的光敏电阻控制LED 思路: 1.硬件需要arduino UNO板子,LED,光敏电阻,面包板,杜邦线若干,电阻220殴(连接LED)和10k殴各一个,电路图如下 代码 代码如下: ...
- java毕业设计——基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码)——安全模块
基于Java+sqlserver的通用安全模块设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+sqlserver的通用安全模块设计与实现,文章末尾附有本毕业设计的论文和源码下载地 ...
- PWM控制LED亮度(2-呼吸灯)-STM32电控学习笔记10
PWM控制LED亮度(2-呼吸灯)-STM32电控学习笔记10 day10:2022/9/29 前面学了两三天的PWM了,PWM本身不难理解,至于为啥进度缓慢,还不是这时钟定时器分频值重装载啥的太难理 ...
- 自动感光调节LED灯亮度C语言程序,PWM控制LED灯的亮度(C 语言)
控制LED灯的亮度,通过调节电压的方式可以达到,但不理想,而且可调的范围很小,电压稍高,还容易把LED烧毁,唯一可行的方法就是通过PWM(脉冲宽度调节)来控制其亮度. 以下程序是在单片机中控制LED. ...
- 启明智显分享| ESP32学习笔记参考--PWM(脉冲宽度调制) 篇,配PWM控制 LED呼吸灯代码示例参考
提示:启明智显专为智能产品提供一站式彩屏显示+连接+云端服务+APP软件开发.维护等解决方案,帮厂商快速实现硬件的智能化.作为启明云端旗下方案公司,我们用心整理了开发小伙伴在开发过程中可能会遇到的问题 ...
- 利用Proteus仿真STM32实现按键控制LED灯设计
1. 前言 Proteus是英国著名的EDA工具(仿真软件),从原理图布图.代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计.是世界上唯一将电路仿真软件.PC ...
最新文章
- Apache 基金会宣布 Apache Pulsar 毕业成为顶级项目
- R-C3D 视频活动检测的经典算法
- 信奥中的数学:母函数
- JavaWeb——eclipse与tomcat环境配置
- ubuntu文件编码转换
- 【批处理】肉鸡扫描脚本
- 教你怎么从Windows10彻底删除Flash
- 系统无忧 Ghost XP SP3 快速装机版V2011.07
- Java实现IP代理
- HTML5基础基础练习题
- linux 蓝牙驱动
- 两种web crawler方案
- 未认证公众号如何跳转其他链接
- 计算机游戏中屏幕上显示的,电脑在玩全屏游戏的时候显示屏老是出现无信号
- 崔毅东 C++程序设计入门(下) 第9单元:白公曾咏牡丹芳,一种鲜妍独“异常” 笔记
- 构造方中的this关键字
- 节假日期间的项目管理
- 金融python有哪些证书可以考_python有证书考吗
- Python基础知识学习(六)——包与模块:指令、包加载步骤、搜索范围
- 反洗钱检验java_从Drools规则引擎到风控反洗钱系统V0.2.3.pdf