FPGA(七) PWM波
所谓PWM波(Pulse Width Modulation),即脉冲宽度调制,也就是占空比可变的脉冲波形。它利用微处理器输出PWM信号,即用输出的高低电平的变化情况,实现对模拟电路控制的一种非常有效的计数,广泛应用于测量、通信、功率控制等领域。
如图一输入的时钟为系统时钟,后边的周期信号计数器主要有两个作用:
作用一、形成一个周期计数器,从零开始计数,每计数到固定值Cycle就置为零并重新开始计数,形成如图所示的锯齿波,该锯齿波的周期为一个固定值。
作用二、设置一个计数值如Cnt,把计数器从零计数到Cnt之间的部分设为高电平,Cnt到Cycle之间的部分设为低电平。
如此一来,在周期计数器的不断重复下,就会形成一个个重复的高低电平。如下图:
所谓的调节占空比就是调节高低电平所占周期的比列就行。比如将Cnt的值设置的大一点但不能超过周期值Cycle,那么形成的脉冲的高电平的脉宽就更宽一点。
下面给出一组占空比不断变化的PWM波的例程代码,可用来做呼吸灯用。
//周期计数器 时钟频率为50M
always @(posedge sys_clk or negedge sys_rst_n)beginif(!sys_rst_n)period_cnt <= 16'd0;else if( period_cnt == 16'd50000)period_cnt <= 16'd0;elseperiod_cnt <= period_cnt + 1'b1;
end//在周期计数器的节拍下递增或递减占空比always @( posedge sys_clk or negedge sys_rst_n) ) beginif (!sys_rst_n) ) beginCycle_cnt <= 16'd0 ;Cycle_flag <= 16'd0;endelse beginif( (period_cnt == 16'd50000) ) begin //计满1msif( (Cycle_flag == 1'b0) ) begin //占空比递增状态if( (Cycle_cnt == 16'd50000) ) //如果占空比已递增至最大Cycle_flag <= 16'd1;else //否则占空比以 25 为单位递增Cycle_cnt <= Cycle_cnt + 16'd25;endelse begin //占空比递减状态if(Cycle_cnt == 16'd0) //如果计数器已递减至0Cycle_flag <= 16'd0; //转变为递增状态elseCycle_cnt <= Cycle_cnt - 16'd25; //占空比以25为单位递减endendend
end
FPGA(七) PWM波相关推荐
- STM32之PWM波
说起PWM波,做过智能小车的人肯定都很清楚了,其实他就是一种脉宽调制.在智能小车上,我们一般用PWM波来控制小车的速度,通过控制方波中高低电平的比例,来达到控制小车转速的目的.而32的芯片他提供了专门 ...
- PWM波控制LED灯的亮暗
在做蓝桥杯第九届省赛题的时候,遇到了这样一个题目:实现4个不同等级的LED亮度分布. 这个要求我们可以联想到第七届的省赛题,控制PWM波的输出,我们在这里也可以应用相同的原理,就是通过定时器来达到LE ...
- Android设备通过usb控制zedboard产生pwm波实验
Android设备通过usb控制zedboard产生pwm波实验 一.实验目的 安卓设备如安卓平板,通过usb与zedboard通信,在安卓设备端控制zedboard端产生的pwm波的频率和占空比. ...
- STM32 cubeMX下配置STM32单片机使无源蜂鸣器输出PWM波并放音乐
1.首先我们要了解定时器(timer) timer分为三种:高级定时器(tim1,tim8),基本定时器(tim6,tim7),通用定时器(tim2,tim3,tim4,tim5). 基本定时器:它有 ...
- STM32F103输出多路死区互补PWM波
TIM1,TIM8可以产生死区互补PWM波,学习后发现stm32的定时器功能确实很强大,小总结一下方便以后使用的时候做参考.Stm32定时器一共分为三种:tim1和tim8是高级定时器,6和7是基本定 ...
- 产生频率或者占空比可调的PWM波【汇编语言】
PWM在各个编程中都非常的重要,在学习32单片机,FPGA等中都有学习到,本次文章为介绍汇编语言编写频率或占空比可调的PWM波,从更加底层的方面介绍和去了解pwm波生成的过程,基于S3C2410X/S ...
- stm32f4 输出pwm波_stm32的pwm输出代码及注释
stm32是非常常用的单片机.脉冲宽度调制(PWM),是英文"Pulse WidthModulation"的缩写,简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非 ...
- verilog正弦电压PWM波产生
使用verilog语言,在quartusII平台下运行并在modelsim下进行仿真测试. 本设计的思想: 顶层模块共分下面四个模块,包括分频器,ROM配置,地址产生,ROM数据读取产生sin电压 通 ...
- MSP430F5529 DriverLib 库函数学习笔记(六)定时器A产生PWM波
目录 1.通过Timer_A_outputPWM配置产生PWM波 初始化函数 计算 修改占空比的函数 整体程序 效果 2.单定时器产生多路PWM信号 初始化函数 实验结果 3.对称PWM信号的产生 初 ...
- ros 双wan配置_基于ROS搭建简易软件框架实现ROV水下目标跟踪(九)--程序解析之PWM波下发...
模块对应cabin_controllers/serial_to_mcu.模块实现的功能为监听网络中PWM矩阵信息,将其转换成十六进制数据通过串口下发至MCU,实现对推进器电机的控制.模块数据的串口通信 ...
最新文章
- vue音乐项目歌手详情页小结
- jenkins 漏洞集合 简介
- 安全产品研发与落地的一些方法与思考
- ​linux 系统出现Give root password for maintenance 问题
- 基于小波变换的图像边缘检测(matlab祖传代码注释)
- 爬虫python代码广告_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)...
- TCP和Web Socket混合使用的一个例子
- 真正厉害的人,早就戒掉了“贫穷思维”
- secureFX上传文件的时候报错,secureFX崩溃
- MongoDB数据表基本操作
- 泛型系列3:获取泛型的类型
- One Millisecond Face alignment with an Ensemble of Regression Trees
- VS 2017 RC到期的解决方法
- MySQL 时间戳(timestamp类型)和时间(datetime类型)的获取/相互转换/格式化
- 《软件工程》— 实用软件工程——习题答案
- 计算机语言日语换成中文,win7系统怎么把语言变成日语
- 飞思卡尔mc9s08烧录方法_飞思卡尔8位单片机MC9S08教程
- 视觉SLAM笔记(64) 八叉树地图
- UFS发生命令超时处理流程
- office软件(word、excel)打开出现“无法打开这个应用”问题