1 eFlexPWM 简介

eFlexPWM 全称是: Enhanced Flex Pulse Width Modulator 的缩写, 直译为增强型灵活的脉冲脉宽调制器。

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

2 主要特点

FlexPWM 脉宽调制器的主要特点如下:
① ,每个脉宽调制器(FlexPWM)有 4 个子模块;
② ,16 位精度,支持中央对齐、边沿对齐和非对称 PWM 输出;
③ ,分数 PWM 时钟生成器可生成高精度 PWM 周期和占空比;
④ ,可工作在互补输出模式或独立工作模式;
⑤ ,每个 PWM 输出双沿(上升沿/下降沿)可独立控制;
⑥ ,可与外部硬件或其他 PWM 子模块同步;
⑦ ,双缓冲 PWM 寄存器,可设置 1~16 的整数重载率或半周期重载;
⑧ ,支持 PWM 输出的双切换(周期和占空比);
⑨ ,故障输入可以指定连接控制多个 PWM 输出
⑩ ,独立的可编程 PWM 输出极性设置;
⑪ ,独立的死区时间设置;
⑫ ,增强 型双沿(上升沿/下降沿)捕获功能;

3 功能介绍

图1 eFlexPWM 功能框图

①PWM 输出
RT1072 具有 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。

②时钟源

图2 时钟模块功能框图

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

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

④比较寄存器
比较寄存器用于产生 PWM 波,每个 FLEXPWM 拥有 6 个比较寄存器,这 6 个比较寄存器被分成了 3 组

图3 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 波。

⑤同步信号

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

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

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

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

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

图5 输出控制图

当控制寄存器 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。
(2) Dead Time Generator(死区时间)
PWM 互补对常用于控制半桥驱动电路,首先我们介绍为什么互补对控制半桥驱动电路要加入死区,以及简单介绍 FLESPWM 加入死区的方法。

图6 半桥驱动电路

图7 死区插入波形图

当使用无死区的互补 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+。依次类推,选择恰当的死区时间就不会出现短路的情况。死区插入逻辑比较复杂,

图8 死区插入逻辑图

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

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

图9 PWM_A 故障保护结构图

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

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

再来看或逻辑运算符 6 的输入连接,由下往上看, RT1072 工作在停止模式(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 禁止输出。

⑦和⑧重装载
标注⑦和⑧的内容, 它是重装载选择器

图10 重装载选择器逻辑图

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 半周期。

4 i.MX RT系列芯片对比图


图11 i.MX RT系列芯片对比图

NXP_RT1172 eFlexPWM 模块简介相关推荐

  1. collections模块简介

    collections模块简介 除python提供的内置数据类型(int.float.str.list.tuple.dict)外,collections模块还提供了其他数据类型,使用如下功能需先导入c ...

  2. 【STM32】ESP8266模块简介

    00. 目录 文章目录 00. 目录 01. ESP8266模块简介 02. 特性参数 03. 模块引脚 04. TK-ESP-01 WIFI模块 05. 模块说明 06. 附录 07. 声明 01. ...

  3. 模块简介与matplotlib基础

    模块简介与matplotlib基础 1.基本概念 1.1数据分析 对已知的数据进行分析,提取出一些有价值的信息. 1.2数据挖掘 对大量的数据进行分析与挖掘,得到一些未知的,有价值的信息. 1.3数据 ...

  4. configparser模块简介

    目录 configparser模块简介 看一下configparser生成的配置文件的格式 现在看一下类似上方的配置文件是如何生成的 读取文件内容 修改文件内容 configparser模块简介 该模 ...

  5. Aurix TC3xx系列MCU ADC模块简介(一)

    文章目录 1 前言 2 ADC模块简介(TC3xx) 1.1 ADC模块特点 1.2 转换器内部结构 1.3 转换时间 3 EDSADC模块简单介绍 >>返回总目录<< 1 前 ...

  6. IoT物联网嵌入式设备中30种常见传感器模块简介及原理讲解

    IoT物联网嵌入式设备中30种常见传感器模块简介及原理讲解 0.前言 一.光学传感器模块: 1. 光敏传感器模块: 2. 红外避障模块 3. 循迹传感器模块 4. U型光电传感器模块 5. 红外接收模 ...

  7. Python常用模块4-Python的datetime及time模块简介

    文章目录 一.Python datetime模块介绍 1.1 有效的类型 1.2 timedelta 类对象 1.2.1 timedelta.total_seconds()方法 1.3 date对象 ...

  8. Python_pygame库学习笔记(1):pygame的由来,特点以及模块简介

    Python_pygame库学习笔记 1 Pygame库的由来: Python适合用来开发游戏吗? Pygame的安装 Pygame模块简介 Pygame库的由来: 2000年,作者Pete Shin ...

  9. Schrodinger 功能模块简介

    Schrödinger(薛定谔)是药物发现的完整软件包,包括:基于受体和配体结构的诱导契合和柔性对接模式:基于受体结构及配体极性的对接模式:基于受体结构及溶液环境性质的对接模式:组合化学库设计及基于组 ...

最新文章

  1. linux跨主机复制文件
  2. 权限表管理之获取用户权限表列表数据
  3. 一种基于分层聚合的3D实例分割方法(ICCV 2021)
  4. File Explore 中data权限修改,实体机
  5. OpenCASCADE绘制测试线束:拓扑命令之复杂拓扑
  6. java读取matlab文件_将大文本文件读入MATLAB
  7. Java多线程并发学习-进阶大纲
  8. [java] 找出字符串中出现最多的字符和出现的次数
  9. 【计算机网络】网络基础知识和TCP/IP协议族
  10. 「HNOI 2015」实验比较
  11. cnki账号 中国知网 免费 入口 用户名 密码 国内外学术刊物数据库账号
  12. 《软件工程》思维导图
  13. css 动画 (transition animation)
  14. 什么是程序?什么是程序设计?
  15. SpringBoot测试类不需要加@RunWith?
  16. linaCharts开发笔记:Three.js导入obj和使用中文
  17. 吃透Chisel语言.31.Chisel进阶之通信状态机(三)——Ready-Valid接口:定义、时序和Chisel中的实现
  18. python自动下载高品质无损歌曲
  19. 聚类方法:DBSCAN算法研究(1)--DBSCAN原理、流程、参数设置、优缺点以及算法
  20. 经典好文!java保留两位小数不四舍五入

热门文章

  1. 夜光带你走进python开发 (三十九)传奇语言
  2. Leetcode题解974 能被和可被 K 整除的子数组
  3. markdown绘图插件 ---- mermaid简介
  4. python-ABM-mesa库:Agent Based Model 简单教程:可视化与排队论
  5. 破解工具ida解决乱码问题
  6. 有道云笔记网页版无法使用方向键
  7. 是什么使Slider Revolution成为最好的WordPress Slider插件?
  8. 绘制简单封闭图形并且进行填充
  9. gdb+linux+查看变量,gdb查看变量值
  10. openGL环境贴图