问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

PWM(Pulse Width Modulation,脉冲宽度调制)

创作时间:
作者:
@小白创作中心

PWM(Pulse Width Modulation,脉冲宽度调制)

引用
CSDN
1.
https://m.blog.csdn.net/2301_79695216/article/details/145166410

PWM(脉冲宽度调制)是一种利用数字输出引脚来模拟模拟信号的技术,在电子电路和控制系统中应用广泛。它通过调节一系列固定频率脉冲的占空比,即高电平时间与整个周期时间的比例,从而模拟出连续的模拟信号。PWM技术在电机控制、LED调光、电源管理等领域都有广泛应用。

概述

PWM(Pulse Width Modulation,脉冲宽度调制)是一种利用数字输出引脚来模拟模拟信号的技术,在电子电路和控制系统中应用广泛。

基本概念:

  • 频率(Frequency):指定一秒钟内信号从高电平到低电平再回到高电平的次数,即一秒钟内PWM周期的数量。
  • 占空比(Duty Cycle):一个脉冲周期内,高电平的时间与整个周期时间的比例。占空比的大小决定了PWM等效出来的模拟电压的大小。
  • 分辨率(Resolution):占空比变化的细腻程度,即占空比变化的快慢。

工作原理:

PWM(脉冲宽度调制)是一种通过改变脉冲的宽度来控制模拟电路的有效技术。它的核心在于调节一系列固定频率脉冲的占空比,即高电平时间与整个周期时间的比例,从而模拟出连续的模拟信号。

优点:

  • 抗干扰能力强:PWM信号的数字特性使其在传输过程中对噪声和干扰具有较强的免疫力,能够在一定程度上保证信号的准确传输。
  • 控制简单:只需改变PWM信号的占空比即可实现对被控对象的调节,控制逻辑简单,易于实现。

缺点:

  • 谐波干扰:PWM信号是一种方波信号,含有丰富的高次谐波。这些谐波可能会对周围的电子设备产生电磁干扰,需要采取滤波等措施来抑制。
  • 精度受限:PWM信号的精度受到微控制器时钟精度、定时器分辨率等因素的影响。在一些对模拟信号精度要求极高的场合,PWM模拟的模拟信号可能无法满足要求。

应用场景:

  • 电机控制:在直流电机调速中,PWM信号可以控制电机的转速。当PWM信号占空比增大时,电机获得的平均电压增大,转速加快;占空比减小时,转速降低。通过调节PWM信号的占空比,可以实现对电机转速的精确控制
  • LED调光:对于LED灯,PWM信号可以调节其亮度。当PWM信号占空比较小时,LED大部分时间处于熄灭状态,亮度较暗;占空比增大时,LED亮的时间增多,亮度变亮。利用PWM调光不仅可以实现无级调光,还能有效降低功耗,常用于手机屏幕背光调节、室内照明调光等。
  • 电源管理:在开关电源中,PWM信号用于控制开关管的通断,从而调节输出电压或电流。通过改变PWM信号的占空比,可以实现对电源输出功率的动态调节,提高电源的效率和稳定性
  • 信号传输:在一些通信系统中,PWM信号可以用于传输模拟信号。将模拟信号转换为PWM信号后进行传输,接收端再将PWM信号还原为模拟信号,可以提高信号的抗干扰能力和传输距离,例如在无线传感器网络中传输温度、湿度等模拟信号。

I.MX6ull PWM介绍

PWM的功能模块图

  • 时钟源选择(Clock Source Selection)
  • ipg_clk
  • ipg_clk_highfreq
  • ipg_clk_32k:PWM模块可以选择的三种不同的时钟源。时钟源的选择通过一个多路选择器(Multiplexer)来实现,该多路选择器由CLKSRC控制信号来选择具体的时钟源。
  • 预分频器(Prescaler)
  • 12-bit Prescaler:一个12位的预分频器,用于对输入时钟信号进行分频。预分频器的输出连接到16位计数器的时钟输入端。
  • Prescaler Clock Output (PCLK):预分频器的输出时钟信号,用于驱动16位计数器。
  • 计数器(Counter)
  • 16-bit Counter Register:一个16位的计数器,用于计数预分频器输出的时钟信号。计数器的值与周期寄存器和采样寄存器的值进行比较,以生成PWM信号。
  • 周期寄存器(Period Register)
  • 16-bit Period Register:一个16位的周期寄存器,用于存储PWM信号的周期值。计数器的值与周期寄存器的值进行比较,以确定PWM信号的周期。
  • 采样寄存器(Sample Register)
  • 16-bit Sample Register:一个16位的采样寄存器,用于存储PWM信号的占空比值。计数器的值与采样寄存器的值进行比较,以确定PWM信号的高电平持续时间。
  • 比较器(Comparator)
  • CMP:两个比较器,用于比较计数器的值与周期寄存器和采样寄存器的值。比较器的输出用于控制PWM信号的生成。
  • PWM信号生成
  • CMPO和CMPC:比较器的输出信号,用于控制PWM信号的生成。
  • POUTC和POUTTC:PWM信号的输出控制信号。
  • CMPIE和CMP:中断使能和中断请求信号,用于在计数器值与周期寄存器或采样寄存器值相等时产生中断。
  • 死区时间生成(Dead-Time Generation)
  • R和S:用于生成死区时间的信号。
  • POUTC和POUTTC:带有死区时间的PWM信号输出。
  • 输出使能(Output Enable)
  • IROVE和IRQEN:输出使能信号,用于控制PWM信号的输出。
  • FIFO(First-In-First-Out)
  • 4x16 bit FIFO:一个4个16位的FIFO,用于存储PWM信号的采样值,以减少中断开销。

The following features characterize the PWM:

  • 16-bit up-counter with clock source selection:16位向上计数器,具有时钟源选择功能
  • 4 x 16 FIFO to minimize interrupt overhead:4 x 16 FIFO以减少中断开销
  • 12-bit prescaler for division of clock:12位预分频器用于时钟分频
  • Sound and melody generation:声音和旋律生成
  • Active high or active low configured output:可配置为高电平有效或低电平有效的输出
  • Can be programmed to be active in low-power mode:可编程为在低功耗模式下激活
  • Can be programmed to be active in debug mode:可编程为在调试模式下激活
  • Interrupts at compare and rollover:在比较和溢出时产生中断

PWM Clocks

The clock that feeds the prescaler can be selected from:

  • High-frequency reference clock (ipg_clk_highfreq) pat_ref or CKIH:由时钟控制模块(Clock Control Module,简称CCM)提供的高频时钟。当外设时钟(ipg_clk)关闭时,该时钟应在低功耗模式下保持开启状态。因此,PWM(脉冲宽度调制)可以在低功耗模式下使用该时钟运行。在正常功能模式下,CCM将时钟同步到ahb_clk后提供该时钟,然后在低功耗模式下切换到未同步的版本。
  • Low-frequency reference clock (ipg_clk_32k, CKIL):由CCM提供的32 KHz低频参考时钟。当ipg_clk关闭时,该时钟应在低功耗模式下保持开启状态。因此,PWM可以在低功耗模式下运行在此时钟上。CCM预期在正常功能模式下将此时钟同步到ahb_clk,然后在低功耗模式下切换到未同步版本。
  • Peripheral clock (ipg_clk):该时钟应在正常操作中保持开启状态。在低功耗模式下,它可以被关闭。
  • Peripheral access clock (ipg_clk_s):该时钟用于寄存器的读写操作。

时钟输入源由PWM控制寄存器字段PWM_CR[CLKSRC]确定。只有在PWM被禁用时,才应更改CLKSRC的值。控制寄存器中预分频器字段的值(PRESCALER)的变化会立即反映在其输出时钟频率上。

Functional Description

Operation

PWM的输出是一个可切换的信号,其频率和占空比可以通过编程相应的寄存器来调制。它有一个16位的向上计数器,计数从0x0000开始,直到计数器的值等于PWM_PR + 1。当匹配发生后,计数器被重置为0x0000

PWM Counter Register (PWMx_PWMCNR)计数寄存器

包含当前计数值,可以在任何时候读取而不会干扰计数器。

在计数周期开始时,PWMO引脚被设置为高电平(默认),计数器从0x0000开始向上计数。在每个预分频器时钟的计数中,都会将样本FIFO中的样本值进行比较。当样本值和计数值匹配时,PWMO信号被清零(默认)。计数器继续计数,直到周期匹配发生,然后另一个周期循环开始

当PWM被启用时,计数器开始运行,并根据周期寄存器和采样寄存器中的复位值生成输出信号。建议在启用PWM之前完成这些寄存器的编程设置

PWM Period Register (PWMx_PWMPR)周期寄存器

PWM周期寄存器(PWM_PWMPR)决定了PWM输出信号的周期。当计数器的值匹配PERIOD + 1时,计数器将被重置,以开始另一个周期。

PWM输出频率(PWMO,单位为赫兹)的计算公式为:

PWMO (Hz) = PCLK(Hz) / (period +2)

PCLK (Hz) 表示预分频器时钟频率

period 指的是PWM周期寄存器(PWM_PWMPR)中设置的周期值

由于向PWM_PWMPR写入新值而导致周期值发生变化时,计数器将被重置为零,并开始一个新的计数周期。

注意: 当PWMx_PWMCR的REPEAT位被设置为非零值时,不允许将PWM_PWMPR设置为0xFFFF。

PERIOD字段:PERIOD周期值。PERIOD字段决定了计数周期的周期。计数器计数到[周期值]+1,然后重置为0x0000。

PWM Sample Register (PWMx_PWMSAR)采样寄存器

PWM采样寄存器(PWM_PWMSAR)是FIFO(先进先出队列)的输入端。16位字被加载到FIFO中。FIFO可以在任何时候写入数据,但只有在PWM被启用时才能读取数据。如果FIFO中的所有值都已经被使用,PWM将在最后设定的占空比设置下继续运行,直到FIFO被重新加载或PWM被禁用。当写入新值时,占空比会在当前周期结束后发生变化。

在采样寄存器中写入零值将导致PWMO输出信号始终保持低电平/高电平(如果POUTC = 00,则为低电平;如果POUTC = 01,则为高电平),并且不会生成任何输出波形。如果该寄存器中的值大于周期值PERIOD + 1,则输出将永远不会根据POUTC的值被设置/重置。

SAMPLE字段:SAMPLE样本值,这是4x16 FIFO的输入。SAMPLE字段中的值表示当前使用的样本值。

硬件复位将导致所有的PWM计数器和采样寄存器被清零,并且FIFO(先进先出队列)被清空。控制寄存器会显示FIFO为空,并且可以写入数据,同时PWM功能被禁用。软件复位会产生相同的效果,但是控制寄存器中的DBGEN(调试使能)、STOPEN(停止时使能)、DOZEN(低功耗模式使能)和WAITEN(等待模式使能)位的状态不会被影响。即使在PWM被禁用的状态下,也可以执行软件复位

PWM Control Register (PWMx_PWMCR)

PWM控制寄存器(PWM_PWMCR)用于配置PWM的操作设置。它包含用于时钟划分的预分频器。

FIFO

数字采样值可以作为16位字加载到脉冲宽度调制器中。可以使用控制寄存器中的BCTR和HCTR位来更改字节序。一个4字(16位)的FIFO(先进先出队列)可以最小化中断开销。当数据字的数量降至由控制寄存器中的FWM字段设定的水位线以下时,将生成一个可屏蔽的中断。

向PWM_SAR采样寄存器写入数据时,如果FIFO未满,该值将被存储到FIFO中。当FIFO已满时写入将导致状态寄存器中的FWE(FIFO写入错误)位被设置,并且FIFO的内容保持不变。FIFO可以在任何时候写入,但只有在PWM被启用时才能读取。PWM_SR[FIFOAV]字段显示当前FIFO中包含的数据字数量以及是否可以写入。

对采样寄存器进行读取操作将得到当前FIFO中的值,该值将被PWM用于生成输出信号。因此,对采样寄存器先写入然后读取可能会得到不同的值。

Enable Sequence for the PWM(使能PWM序列)

启用PWM(脉冲宽度调制器)应遵循的步骤序列:

  1. 在保持PWM禁用状态(PWMx_PWMCR[0]=0)的同时,为PWM控制寄存器(PWMx_PWMCR)配置所需的设置。
  2. 在PWM中断寄存器(PWMx_PWMIR)中启用所需的中断。
  3. 可以向PWM采样寄存器(PWMx_PWMSAR)写入一到三个初始样本值。即使PWM尚未启用,初始样本值也会被加载到PWM FIFO中。不要写入第四个样本,因为FIFO将变满并触发FIFO写入错误(FWE)。此错误将阻止PWM在启用后启动。
  4. 检查PWM状态寄存器(PWMx_PWMSR)中的FIFO写入错误状态位(FWE)、比较状态位(CMP)和溢出状态位(ROV),确保它们都为零。任何非零状态位都应通过向它们写入1来清除。
  5. 将所需的周期值写入PWM周期寄存器(PWMx_PWMPR)。
  6. 通过向PWM使能位PWMx_PWMCR[0]写入1来启用PWM,同时保持其他寄存器位在其先前配置的状态。

Disable Sequence for the PWM(禁用PWM序列)

PWM可以通过将PWM使能位PWMx_PWMCR[0]清零随时被禁用。

在PWM被禁用之后,FIFO中剩余的数据将不会再被输出到PWM端口,并且这些数据将保留在FIFO中,直到PWM再次被启用。进行软件复位(将PWMx_PWMCR[3]置为1)或硬件复位将会清除FIFO,任何剩余的数据都将丢失。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号