所谓PWM,就是用高电平时间和波形周期的比值代表某个数。如果这个数经过滤波后变成了接近连续的曲线表现出来那就是DA转换;如果通过这个比值表达的是控制电机的电压,那么表现出来就是电机控制。一切可以量化的东西都可以用PWM的方式去表示,这也是PWM应用广泛的原因。
产生PWM的方法:
1.产生一个计数器,满脉冲周期后翻转。
2.产生一个比较器,到达比例位置的时候输出高电平,否则输出低电平,整个过程见下图
FPGA本质上是数字电路。为了生成上图的结果,所以我们需要按照上述的2步流程设计两个电路,第一个电路是计数器,第二个电路是在计数器后面的比较器,对计数器输出进行监控,一旦高于占空比对应的计数值的时候里面变为0,其余时候为1,这样就基本实现了PWM。也就对应了下面两段代码:
//计数器电路,cnt_cycle就是计数器输出计数结果 always@(posedge clk)
begin
cnt_cycle <= (cnt_cycle == (T-1)) ? 0 : cnt_cycle + 1;
end
/ 比较器电路 ,pwm_buf 为输出PWM结果,红色字为计数器输入,绿色字为比较器比较线 /
always@(posedge clk)
begin
pwm_buf <= (cnt_cycle < duty_cycle_buf) ? 1'b1 : 1'b0;
end
也就是说,以上两段代码对应的电路如下图:
针对以上电路我要作一点说明:计数器在FPGA里面的实现就是加法器和触发器组成的,加法器每次对输出+1,下一个时钟把+1的结果给到输出端,根本不是数电书上异步2分频的结果!另外再次强调,由于FPGA的设计收到实际因素的限制,数电书上某些理模型是难以在实际中大量应用的,所以FPGA内部很多结构和综合结果都与数电书上有差异,但是数字电路的基本原理是没有任何改变的!
PWM还差最后一点,因为输入占空比可以不断改变,也就是第一张图的比较线是会上下移动的,为了不影响我们在计数的过程中突然采集到突变的值最终导致,不平滑的占空比,所以占空比输入在每个计数周期完成后才会去采集。也就是大家看到的这句:
always@(posedge clk)
begin
if(cnt_cycle == (T-1)) duty_cycle_buf <= (duty_cycle > T-1) ? T-1 : duty_cycle;
end
只有在cnt_cycle计数一个周期T的时候,占空比值才会更新,也就是比较线才会移动!
关键字:PWM
引用地址:
眨眼学会PWM
推荐阅读最新更新时间:2024-11-13 23:51
51系列单片机输出PWM的两种方法
MCS-51系列 单片机 无PWM输出功能,可以采用定时器配合软件的方法实现,对精度要求不高的场合是非常实用的。采用高速光隔6N137输出,并将PWM的信号倒相。 一、 工作原理 二、PWM输出 1. 固定脉宽PWM输出 用T0定时器完成PWM输出,脉宽固定为65536us。T0定时器设置成16位定时器,PWM波形如图2所示。 程序清单:(12MHz) PwmData0;T0定时t1的初值(字) PwmData1;T0定时t2的初值(字) PwmF ;PWM输出标志 ;*************************** setb tr0;启动T0 …… ;T0
[单片机]
基于PWM降压转换器AP3003的车载充电器
随着电子技术的不断发展,移动多媒体设备正逐渐成为人们生活中不可缺少的工具,与这些产品相对应的充电器设计也越来越受到关注。按照充电器的使用场合,可以分成家用型充电器和车载充电器,一般手机自带的充电器多数是家用型,即交流输入型;车载充电器是一种直流输入型的充电器,它的出现使移动设备的充电场合更加多样化。很多公司都生产了可实现车载充电器方案的控制芯片,比如BCD公司的AZ34063A/C、AZ494B/D和AP3003等。 AZ34063A/C方案的优点是成本较低,缺点是限流点不准确,过热问题较为普遍;AZ494B/D方案的优点是设计灵活性较强,缺点是外围器件选择较复杂,需要选择合适的功率管、驱动电路,同时
[嵌入式]
avr单片机 TC1的16位PWM输出程序
********************************************/ * 工作频率:内部8M * * 编 译 器:ICCAVR 6.31A * * 输 出:PD4输出PWMB,PD5输出PWMA * * 产生的PWM频率为8M/65536约122Hz * ********************************************/ #include iom16v.h #include macros.h //延时函数:入口time 需延时的MS数 void delay_ms(unsigned int time) { unsi
[单片机]
助力5G、AI发展,英飞凌推出16相数字PWM控制器
英飞凌科技股份公司推出业界首个16相数字PWM控制器XDPE132G5C,进一步壮大其大电流系统芯片组解决方案产品阵营。该产品方案可针对高端人工智能(AI)服务器和5G数据通信设备所使用的新一代CPU、GPU、FPGA和ASIC等,提供500 -1000 A甚至更高的供电电流。 随着CPU电流要求不断提高,以支持新一代人工智能和网络工作负载,直流-直流稳压器(VR)需要提供超过500 A的电流。借助16相数字PWM引擎和经优化的高级算法,XDPE132G5C控制器可以满足这些大电流多相应用的电源需求。电源各相之间的主动均流技术能实现可靠、紧凑和成本优化的设计。不仅如此,它无需像如今的多相产品通常所做的那样,配置额外的多个PWM
[物联网]
有刷直流电机的PWM驱动中其他电流再生方法
在上一篇文章对有刷直流电机的PWM驱动原理的说明中,介绍了基于电机两端短路的电流再生方法,实际上有刷直流电机的PWM驱动中还有其他电流再生方法,有刷直流电机的PWM驱动中的每种方法都有其应该考虑的事项。 使用PWM输出方式驱动有刷直流电机:电流再生方法 下面是用来说明PWM驱动原理的示意图。其中省略了没必要列出的晶体管。(a)是施加电压时的电流再生,(b)是电机两端短路方法的电流再生。 由于使用了晶体管(在该示例中为MOSFET)来切换H桥,因此作为现实问题,需要将晶体管的导通电阻作为每条路径中的损耗加以考虑。该思路也同样适用于后续的电流再生方法。 除了(b)以外,还有三种电流再生方法。(c)是在施加电压的状态下的只断
[嵌入式]
交流跳周模式如何提高PFC轻负载的效率?
对于输入功率大于或等于75瓦的电源来说,通常需要使用功率因数校正 (PFC)。功率因数校正可强制输入电流随输入电压的变化而发生变化,这样的话,任何电气负载对于为其供电的电压源来说都表现为一个电阻。这一点对于很多服务器、电信和工业应用是必须满足的要求。在这些应用中,对于能效和电能质量的要求已经变得越来越严格。评判PFC性能的最重要标准是效率,总谐波失真 (THD),和功率因数 (PF)。借助于全新半导体器件和控制方法,最新式的PFC电路已经在中度和重度负载情况下实现了极佳性能。然而,在轻负载条件下,效率,THD和PF性能严重降低。
图表1中显示的是一个典型PFC效率曲线。需要注意的是,轻负载时效率变得越来越低。这是
[嵌入式]
两种方法教你如何有效地利用51单片机产生PWM波
89C51芯片没有自带PWM发生器,如果要用51来产生PWM波就必须要用软件编程的方法来模拟。方法大概可以分为软件延时和定时器产生两种方法。下面将逐一介绍。 1 软件延时法 利用软件延时函数,控制电平持续的时间,达到模拟pwm的效果。 程序如下: #include sbit pwm=P1^0; main() { while(1) { pwm=1; delayus(60);//置高电平后延时60us,占空比60% pwm=0; delayus(40); } } void delayus(uint x) { while(x--); } proteus软件仿真结果如下: 可见,用这种延时函数的方法就能简单地模拟出pwm输出。
[单片机]
记STM32之PWM学习笔记 ---PWM原理
一. STM32F103通用定时器简介: 通用定时器是一个可编程预分频器驱动的16位自动装载计数器(好难记,,)。 适用于: 测量输入信号的脉冲长度(输入捕获)、产生输出波形(输出比较和PWM)。 每个定时器都是完全独立的,都可以同步操作。 ---------------------以下为复制粘贴------------------------------ STM32 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能特点包括: ①位于低速的APB1总线上(APB1) ②16 位向上、向下、向上/向下(中心对齐)计数模式,自动装载计数器(TIMx_CNT)。 ③16 位可编程(可以实时修改)
[单片机]