NXP RT1052 eFlexPWM—灵活的增强型 PWM

时间:2024-03-31 21:36:35

转载自:IMX+RT开发实战指南

eFlexPWM 简介
eFlexPWM 是 Enhanced Flex Pulse Width Modulator 的缩写, 直译为灵活的增强型脉冲脉宽调制模块。

RT1052 具有 4 个 eFlexPWM(eFlexWM1~eFlex_PWM4)。每个 eFlexPWM 可以产生四路互补 PWM 即产生 8 个 PWM,也可以产生相互独立的 PWM 波。每个 eFlexPWM 具有各自的故障检电路,当故障发生时根据程序锁定 PWM 输出引脚的电平状态,这在逆变、整流及电机控制应用中能够有效的提高设备的安全性。 eFlexPWM 可以产生多种多样的开关模式,包括非常复杂的波形。它可以用来控制所有已知的电机类型,用于控制开关电源也非常理想。

eFlexPWM 功能框图

NXP RT1052 eFlexPWM—灵活的增强型 PWM

①PWM 输出
RT1052 具有 4 个 eFlex PWM(eFlexPWM1~eFlex_PWM4)。每个 eFlexPWM 拥有四个通道。
从图中标号①处可以看出,该通道可以输 PWM_A、 PWM_B 和 PWM_X。 PWM_A 与 PWM_B 可以独立输出也可以作为互补对输出。 PWM_X 比较特殊,只有 eFlex PWM1 拥有 PWM_X 对应的外部输出引脚可直接输出PWM。其他 eFlex PWM(eFlexWMM2~eFlex_PWM4)只能通过 XBAR 映射到外部输出引脚才能输出 PWM。
 

②时钟源
NXP RT1052 eFlexPWM—灵活的增强型 PWM

时钟模块功能框图
从图中可以看出,每个 FLEXPWM 子模块可选的时钟源有 IPBus clock、 EXT_CLK。FLEXPWM 子模块 0 还可以选择 AUX_CLK_input 作为时钟源。选择时钟源之后经过分频之后才能作为 FLEXPWM 子模块的计数时钟,分频值由 8 位寄存器 PSRC 指定。
 

③计数寄存器
保存当前计数值。
 

④比较寄存器
比较寄存器用于产生 PWM 波,每个 FLEXPWM 拥有 6 个比较寄存器,这 6 个比较寄存器被分成了 3 组
NXP RT1052 eFlexPWM—灵活的增强型 PWM

                        pwm 生成功能框图
从图中可以看出,比较寄存器 0 和 1 用于产生 PWMX,比较寄存 0 和 1 的功能较多。

第一,只有 eFlexPWM1 拥有与 PWMX 直接对应的外部引脚,而其他 FLEXPWM 需要使用 XBAR 映射到相应的外部引脚才能输出 PWM。

第二,比较寄存 0 和 1 可以输出 Half Comp 信号和 Mod Comp 信号,这两个信号可 用作 eFlexPWM1 寄存器加载信号。

        比较寄存器 2 和 3 用于产生 PWM23,比较寄存器 4 和 5 用于产生 PWM45,根据寄存器配置不同, PWM23 和 PWM45 可以独立输出,也可以组成一对互补的 PWM 波,这在半桥驱动电路中应用广泛。因为每个 PWM 波由两个比较寄存控制,所以尽管这些比较寄存器使用相同的比较值(16 bit counter),但是可以产生相位不同和占空比不同的 pwm 波。
 

⑤同步信号
NXP RT1052 eFlexPWM—灵活的增强型 PWM

                                                   FLEXPWM 同步信号选择器结构图
            从图中可以看出,每个 eFlexPWM 拥有 4 个同步信号分别为 Local Sync、 MasterReload、 Master Sync、 PWM_EXT_SYNC。所谓同步,实际就是初始化计数寄存器(16 bitcounter)。 INIT_SEL 用于选择同步信号。

           Local Sync(本地同步信号),当计数寄存器(16 bit comparator)的计数值与比较寄存器 VAL1 的设定值相等时产生本地同步信号。如果选择本地同步信号作为计数器初始化信号,那么子模块中的比较寄存器(VAL1)将有效的控制定时器的周期(定时器的周期还与计数频率有关),从而控制该子模块生成 PWM 频率。

           Master Reload(主重载信号)与 Master Sync(主同步信号)。每个 eFlexPWM 拥有四个子模块(submod0 到 submod3),其中子模块 0(submod0)与其他子模块不同,它可以作为主模块产生控制信号控制其他模块。例如子模块 0 的同步信号不仅可复位自己的 16位计数寄存器(16 bit counter),还可以作为 Master Sync 信号,用于复位其他子模块(submod1 到 submod3) 的 16 位计数寄存器(16 bit counter)。同样,子模块 0 的重装载信号也可以作为其他子模块的同步信号。
 

           PWM_EXT_SYNC(外部同步信号)根据系统体系结构不同, PWM_EXT_SYNC 信号产生于芯片上或芯片外,选择此信号作为同步信号,可以实现外部源控制 eFlexPWM 子模块输出 PWM 周期。
 

⑥输出控制
可以看出比较寄存器产生的 PWM23 与PWM45 经过一些控制模块之后转变为 PWM_A 和 PWM_B。下面简要讲解这些模块的作用。
 Comp vs Indep (独立或互补控制模块)
PWM_A 和 PWM_B 可以独立输出也可以作为一个互补 pwm 对输出。
NXP RT1052 eFlexPWM—灵活的增强型 PWM

         当控制寄存器 CTRL2[INDEP]=1,两个 PWM 相互独立。当 CTRL2[INDEP]=0 时,PWM_A 与 PWM_B 做为互补对输出,在该模式下只有其中一个 PWM(PWM_A 或 PWM_B)的配置参数起作用,我们暂且将其称为主 PWM 另外一个称为从 PWM。互补 PWM 的占空比由主 PWM 的配置参数决定,修改从 PWM 的配置参数无效。 MCTRL[IPOL]决定哪一个PWM(PWM_A 或 PWM_B)作为主 PWM。
 Dead Time Generator(死区时间)
PWM 互补对常用于控制半桥驱动电路,首先我们介绍为什么互补对控制半桥驱动电路要加入死区,以及简单介绍 FLESPWM 加入死区的方法。
NXP RT1052 eFlexPWM—灵活的增强型 PWM

                          半桥驱动电路
 

NXP RT1052 eFlexPWM—灵活的增强型 PWM

                                                        死区插入波形图
 

           当使用无死区的互补 pwm 控制板桥驱动电路时如  图 所示, PWM_A 为高电平时 PWM_B 为低电平,此时上方晶体管导通,下方晶体管截止,输出端输出高电平V+。之后 PWM_A 变为低电平,同时 PWM_B 变为高电平,此时上方晶体管截止,晶体管导通,输出端输出低电平 GND。通过控制 PWM_A 的占空比即可调整输出电压。

           但是在实际应用中晶体管不是理想的,晶体管从截止状态变为导通状态或者从导通状态变为截止状态需要一定的时间。而且通常情况下开通时间与截止时间不相同。如果不插入死区时间,当 PWM 状态发生变化就很可能出现上下两个晶体管同时导通的情况,这样造成电路发生短路。


          当使用加入死区的互补 PWM 时 首先 PWM_B 为高电平, PWM_A 为低电平,上方晶体管截止,下方晶体管导通,之后 PWM_B 变为低电平,此时由于死区时间的存在(DTCNT0) PWM_A 保持低电平不变,死区时间结束之后(在这个时间段内晶体管已经能够完成状态变换) PWM_A 变为高电平,上方晶体管导通,下方晶体管已经变为截止状态,此时输出高电平 V+。依次类推,选择恰当的死区时间就不会出现短路的情况。死区插入逻辑比较复杂,
 

NXP RT1052 eFlexPWM—灵活的增强型 PWM

        在实际编程过程中我们无需深究死区是如何插入的,我们只需要知道向 DTCT0 和DTCNT1 寄存器写入死区时间即可。在这里,设置的是延时多少个计数周期,在编程中要讲时间转化为计数器的计数周期个数。
 

 Mux Select Logic(多路复用选择逻辑)
PWM_A 与 PWM_B 输出可以通过 RT1052 片上 XBAR 工具映射到需要的引脚,这样使用更加灵活。
 Fault Protection(故障保护)
FLEXPWM 提供了强大的错误保护机制,当检测到错误时能够根据寄存器配置将PWM 输出锁定为高电平或低电平。 图 是 PWM_A 的故障保护结构框图。
NXP RT1052 eFlexPWM—灵活的增强型 PWM

PWM_A 故障保护结构图
图中使用标号标记了几个运算符, 很明显 2 、 3、 5 、 6 是 “或”逻辑运算符, 1 和 4是与运算符。

 标号为 5 的或逻辑运算符,它的输出为禁止 PWM_A 信号(DISABLE_PWM_A) ,输入信号为逻辑运算符 6 和逻辑运算符 2 的输出,也就是说任意一个输入为真时,都会禁止 PWM_A 输出。

 再来看或逻辑运算符 6 的输入连接,由下往上看, RT1052 工作在停止模式(StopMode)时 PWM_A 禁止输出,工作在等待模式(Waid Mode)或调试模式(Debug Mode)由控制寄存器位 WAITEN 和 DBGEN 决定是否禁止 PWM_A 输出。

 或逻辑运算符 2 有四条输入支路,任何一个支路为“真”时都会导致禁止PWM_A 输出。 DISA3 是故障输通道 3(FAULT3)的控制寄存器,当 DISA0 到DISA3 全为 0 时表示禁止了 PWM_A 的故障检测功能。 NOCOMB3 是故障通道 3(FAULT3)的模式选择寄存器,从图中可以看出,当 NOCOMB3 为 0 并且使能故障检测功能时,故障信号会直接导致 PWM_A 禁止输出。当 NOCOMB3 为 1,故障信号就不能通过标号为 4 的与逻辑运算符触发 PWM_A 禁止输出。故障信号也可以通过 FILT 模块进而触发 PWM_A 禁止输出。 FILT 的作用是故障滤波,简单理解就是将一些持续时间较短的故障信号滤除掉,而那些持续时间较长故障信号才能真正触发 PWM_A 禁止输出。
 

⑦和⑧重装载
标注⑦和⑧的内容, 它是重装载选择器
NXP RT1052 eFlexPWM—灵活的增强型 PWM

 

        FLEXPWM 某些寄存具有双缓冲功能比如比较寄存器,同一个寄存分为外部寄存和内部寄存,我们在程序中只能修改外部寄存器的值,修改后的值只有加载到内部寄存器才真正的起作用。重装载的作用就是将外部寄存器的值加载到内部寄存器。

       从图中可看出 RELOAD_SEL 用于选择重装载信号源,可以选择本地重载信号(LocalReload),也可以选择来自 submod0 的 Master Reload 信号作为重载信号。

       使用本地重载信号时,要配置本地重装载允许寄存器位 LDOK 允许本地重装载后,Mod Compare 和 Half Comp 才能够触发重装载。 Mod Compare 表示一个完整的 pwm 周期后进行重装载。 Half Compare 表示在一个 PWM 周期的进行重装载,半周期点由比较寄存器 0(VAL0)指定,它不必恰好位于 PWM 周期的中间。无论选择 Mod Compare 还是选择Half Compare,都可以使用 CTRL[LDFQ]寄存器将重装载事假调整为 n 个 PWM 循环或 n 个PWM 半周期。