查看: 4644|回复: 3

使用FlexIO模块来产生PWM及PFM波

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3303

    主题

    6550

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32067
    最后登录
    2024-4-30
    发表于 2020-5-7 09:23:33 | 显示全部楼层 |阅读模式
    使用FlexIO模块来产生PWM及PFM波


    本文将介绍如何使用i.MX RT系列MCU中的FlexIO模块,来输出PWM以及PFM波。


    概述


    FlexIO 是i.MX RT系列MCU的一种片内外设,它是一个非常灵活并且可以随意配置的模块,不仅可以模拟出类似于UART、I2C、SPI、I2S等常用通信接口外,用户还可以使用它来输出PWM及PFM。


    FlexIO作为一个独立的外设并不会用于取代PWM及PFM发生器,而是作为一个扩展以便在MCU资源不足时,还能够满足额外的生成需求。


    本文创建了一个基于SDK以及i.MX RT系列开发平台的简单例程,以供用户熟悉如何使用FlexIO模块来输出PWM及PFM。


    示例平台


    以下所述的例程将使用i.MX RT1010-EVK开发板,如图1所示。用户对例程稍作修改后就可以在i.MX RT系列的其他EVK板上运行。
    1.png
    图 1. I.MXRT1010-EVK开发板


    在本例程中,FlexIO生成的PWM波通过FlexIO_IO26 (GPIO_AD14) 引脚输出,生成的PFM波通过FlexIO_IO21 (GPIO_AD09) 引脚输出。

    FlexIO模块简介


    i.MX RT1010的FlexIO模块具有以下的一些特性:
    多组32位的移位寄存器,具有发送、接收以及数据拟合等模式


    具有双重缓存区的移位寄存器支持连续的数据传输


    移位器可以串联以支持大数据量传输


    自动生成并插入起始位及停止位


    支持并行接口的1, 2, 4, 8, 16或32位的多位移位宽度


    中断,直接存储器存取或轮询的方式进行收发


    独立于总线时钟频率的可编程波特率,支持停止模式下的异步操作


    高度灵活的16位定时器,支持各种内部或外部触发器、复位、使能与失能方式


    可编程的逻辑模式,通过集成外部数字逻辑功能芯片或结合引脚/移位器/定时器功能,以产生复杂的输出


    支持当CPU进入失能各项系统控制功能模式下的可编程状态机,支持最多8个状态,8个输出和每个状态3个可选择的输入


    图2 为整个FlexIO模块的移位器定时器及引脚的结构图。
    2.png
    图 2. FlexIO模块框图


    i.MX RT系列MCU的FlexIO模块所包含的资源不尽相同,用户可根据FLEXIO_PARAM寄存器,读取所用芯片FlexIO模块包含的移位器、定时器、引脚及触发器数量。本例程中所使用的i.MX RT1010芯片中包含8个寄存器、8个定时器、32个引脚以及两个外部触发器。(由于芯片设计引脚的限制,RT1010的实际使用的FlexIO引脚只有27个)

    使用FlexIO生成PWM和PFM


    为了生成PWM及PFM波,需要用到以下的一些资源:


    两个定时器:一个用于生成PWM,配置为8位PWM模式;一个用于生成PFM,配置为16位counter模式


    两个引脚:配置为定时器输出,以输出PWM及PFM波


    图3所示为一个FlexIO定时器的框图。在本例程中,输出PWM及PFM只需要用到两个定时器连接到两个输出引脚。
    3.png

    图 3. FlexIO定时器框图



    本例程中使用FlexIO的Timer 0来生成PWM波并通过FlexIO_D26引脚输出,使用Timer 1来生成PFM波并通过FlexIO_D21引脚输出。


    下面列出一些所用定时器的关键配置项:
    定时器模式选择(TIMCTLn[TIMOD])


    生成PWM波所使用的Timer 0需配置成8位PWM high模式。在此模式下,计数器及比较寄存器的低8位用于配置定时器输出保持高电平的时间,计数器及比较寄存器的高8位用于配置定时器输出保持低电平的时间。


    生成PFM波所使用的Timer 1需配置成16位counter模式。在此模式下,计数器及比较寄存器的整个16位位宽都用于配置波特率,而通过配置FlexIO的时钟源以及本设置后可以修改输出波形的频率。


    定时器计数源选择 (TIMCFGn[TIMDEC])


    不论是生成PWM还是PFM,都是选择FlexIO clock(FLEXIO_CLK[1])作为定时器的计数源。在此配置下,计数器在FlexIO clock的每个周期内都会自减。
    FlexIO时钟是一个可配置项,配置CCM_CSCMR2[FLEXIO1_CLK_SEL], CCM_CS1CDR[FLEXIO1_CLK_PODF]和CCM_CS1CDR[FLEXIO1_CLK_PRED]寄存器可以修改FlexIO时钟的频率,对于更加详细时钟配置请参考RT1010的参考手册CCM章节的内容。


    定时器比较寄存器配置 (TIMCMPn[CMP])


    FlexIO定时器的计数值记到零时会从比较寄存器中重新加载数据,对于PWM,比较寄存器的低8位配置PWM高电平输出周期为(CMP[7:0] + 1),高8位配置PWM低电平的输出周期为(CMP[15:8] + 1)。配置这个寄存中的这两个值可以控制输出PWM波的占空比与频率。比较寄存器的值可以从下面的公式计算出来:


    TIMCMPn[CMP] = (((FLEXIO_CLK / freq[2]) * (100-duty[3]) / 100-1) << 8) | ((FLEXIO_CLK / freq) * duty / 100 - 1)
    对于PFM的配置,整个比较寄存器的16位都是用于计数器值的重置,PFM波的频率可以由一下公式计算得到:


    freqF[4] = FLEXIO_CLK /( (CMP + 1) * 2)
    [1] FLEXIO_CLK 是从CCM中输出的FlexIO的外设时钟.
    [2] PWM波的频率.
    [3] PWM波的占空比(百分比表示).
    [4] PFM波的频率.
    图4 展示了根据以上定时器的配置,FlexIO是如何生成PWM及PFM波的。

    4.png

    图4. 波形生成原理



    运行示例代码


    用户可以在nxp.com下载本文的配套例程。工程名为flexio_pwm_pfm,编译下载运行此工程后,使用逻辑分析仪或示波器连接RT1010的J26-4(FlexIO_D21)及J26-8(FlexIO_D26),来抓取生成的PWM及PFM波。图5即为实物连接图。

    5.png

    图 5. 实物连线图

    逻辑分析仪所抓取的波形如图6所示。

    6.png

    图 6. PWM和PFM波



    用户可以修改flexio_pwm_init()函数中的参数来修改PWM波的频率及占空比,并且可以使用flexio_pfm_configfre()函数来修改PFM波的频率。也可以在自己的工程中直接使用这些函数接口来配置FlexIO模拟输出PWM及PFM波。


    下图是用示波器所观察到的波形。

    7.png

    相较于专门的PWM发生器,使用FlexIO模块模拟的PWM波存在一些不足。例如,FlexIO模拟PWM波的频率受限于FlexIO的时钟频率及IO口的输出频率;模拟的PWM波只支持边沿对齐方式的PWM,不支持中心对齐以及不对称方式的PWM;并且模拟PWM波的方式也不支持死区及错误保护等高级功能。


    参考资料


    i.MX RT1010 Processor Reference Manual (document I.MXRT1010RM)
    MCUXpresso SDK: Software Development Kit for NXP MCUs





    作者:Tim Wang@NXP        文章出处:恩智浦MCU加油站

    签到签到
    回复

    使用道具 举报

  • TA的每日心情
    难过
    2023-9-6 15:15
  • 签到天数: 211 天

    [LV.7]常住居民III

    34

    主题

    805

    帖子

    0

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    2039
    最后登录
    2024-3-21
    发表于 2020-5-7 20:15:56 | 显示全部楼层
    不错学习了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 1337 天

    [LV.10]以坛为家III

    88

    主题

    4294

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9059
    最后登录
    2024-5-6
    发表于 2020-5-8 10:14:08 | 显示全部楼层
    FlexIO看来是对专用PWM发生器的补充。
    今天天气不错!签到!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    72

    帖子

    0

    注册会员

    Rank: 2

    积分
    78
    最后登录
    2023-1-28
    发表于 2022-1-21 23:43:43 | 显示全部楼层
    本帖最后由 kwcha333 于 2022-2-13 21:15 编辑

    谢谢楼主分享



    这家专为客户提供二线财务配对服务的平台, 专业财务配对服务不但能帮你将所有的债务一笔清,更会为你规划未来,以助客户提升其信贷评级,让你再无后顾之忧,重回无拘无束的幸福生活。想发掘更多关于失業,供樓  可前往  https://keyoung.com.hk/減低供款-1.html 了解更多喔!

    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-5-6 22:44 , Processed in 0.125854 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表