查看: 947|回复: 1

[分享] 在i.MX RT10xx 使用FlexIO实现XY2-100振镜控制协议

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

    [LV.8]以坛为家I

    3303

    主题

    6550

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32075
    最后登录
    2024-5-7
    发表于 2023-5-30 10:31:08 | 显示全部楼层 |阅读模式
    在i.MX RT10xx 使用FlexIO实现XY2-100振镜控制协议
    一、概述
    本文介绍了如何使用i.MX RT系列芯片上的FlexIO实现XY2-100激光振镜控制协议。FlexIO模块是NXP Kinetis和i.MX RT系列MCU的片上外设。

    FlexIO是一个高度可配置模块,能够模拟多种常见的通信协议:UART、I2C、SPI、I2S、SSI等,还可以使用FlexIO模拟实现XY2-100振镜控制协议。

    二、XY2-100振镜协议简介
    XY2-100是数字化激光扫描振镜的通信接口协议,被广泛地使用在大多振镜激光扫描控制系统。在振镜的运动控制中XY2-100是数字化激光扫描振镜的接口定义及通信协议。

    XY2-100协议包括四路信号:
    SECLOCK(时钟信号)
    SYNC(同步信号)
    CHANNELX(X 通道数据)
    CHANNELY(Y 通道数据)

    这四路信号是一种同步串行传输的过程,数据时序图如下所示。
    11.png
    其中时钟信号CLOCK为2MHz,其上升沿时位置数据被写入,下降沿时位置数据被振镜采样。SYNC信号用于提供数据转换的同步信息,当它从低电平到高电平时第一位数据被发送,从高电平到低电平时最后一位校验位被发送;CHANNELX/Y是数据信号,它有20位组成,其中C2、C1、C0是振镜运动方向值,默认值为001,D15—D0是16位的二进制数,用来控制振镜偏转的角度大小;最后一个bit(P)是偶校验位。
    XY2-100协议的时钟速率高达2MHz。如果使用普通MCU的GPIO以4MHz的频率中断响应模拟实现协议,系统消耗资源过大,难以保证协议的实时性,影响激光振镜的控制效果。现有系统大部分采用CPLD/FPGA实现XY2-100协议,存在造价高,系统复杂的缺点。
    使用NXP i.MX RT10xx系列MCU上的FlexIO模块,可以方便实现XY2-100协议,并保证系统的实时性。

    三、利用FlexIO模拟XY2-100

    本节主要介绍如何使用FlexIO模拟XY2-100的主机协议,将会详细阐述FlexIO模块的相关配置项。
    由于XY2-100数据格式与SPI接口类似,所以在FlexIO的配置上,XY2-100部分与模拟SPI相似。

    可使用两个FlexIO定时器、两个Shifter移位器和四个引脚(FlexIO D5~D8)实现XY2-100协议接口。

    FlexIO Timer0用于产生2MHz CLOCK时钟信号,Timer1用于产生19位的SYNC同步信号。Shifter0连接到CHANNEL_X引脚,Shifter1连接到CHANNEL_Y引脚,并在CLOCK的每个上升沿发送数据。用户软件实现中允许在中断、轮询和DMA模式下发送振镜坐标数据。

    下图显示了FlexIO模拟XY2-100接口的内部连接关系。
    12.png
    Timer0配置为双8位计数器,在触发事件高电平时被使能,在比较事件到来时禁用。Timer0的触发源连接到内部Shifter0和Shifter1,作为这二个移位器的触发时钟源。Timer0的计数递减源配置为FlexIO Clock时钟,Shifter0和Shifter1移位时钟则由来自Timer0的每一次计时输出。Timer0 需要被配置为能够被Shifter0的状态标志位触发,当Shifter0写入数据则使能Timer0开始工作。

    在XY2-100协议中,由于传输频率为2MHz,因此Timer0的Compare比较寄存器的值经计算得到需配置为0x2702。

    Timer1被配置为16位计数器模式,由Timer0触发。Timer1的计数递减源设置为触发信号的两个边沿。由于XY2-100的同步信号为19位高电平,1位低电平,所以Timer1的Compare比较寄存器的值需配置为19 * 2。

    Shifter0配置为Transmit模式,并在移位器时钟的上升沿移位,使能移位器起始位并将其设置为逻辑低电平。通过FlexIO寄存器SHIFTBUFBIS[0]写入CHANNEL_X的数据。

    Shifter1配置为Transmit模式,并在移位器时钟的上升沿移位,使能移位器起始位并将其设置为逻辑低电平。通过FlexIO寄存器SHIFTBUFBIS[1]写入CHANNEL_Y的数据。

    下面给出了在MIMXRT1050-EVK上实现XY2-100协议接口详细的寄存器配置:
    FlEXIO02.TIMCTL[0] = 0x01C30701
    FlEXIO02.TIMCFG[0] = 0x00002220
    FlEXIO02.TIMCMP[0] = 0x00002702
    FlEXIO02.TIMCTL[1] = 0x03430603
    FlEXIO02.TIMCFG[1] = 0x02102100
    FlEXIO02.TIMCMP[1] = 0x00000026
    FlEXIO02.SHIFTCTL[0] = 0x00030802
    FlEXIO02.SHIFTCFG[0] = 0x00000030
    FlEXIO02.SHIFTCTL[1] = 0x00030502
    FlEXIO02.SHIFTCFG[1] = 0x00000030

    四、XY2-100协议实际测试运行

    参照上面FlexIO的配置,以MIMXRT1050-EVK板为例进行实际运行测试。将四个XY2-100信号引脚连接到逻辑分析仪,运行代码后抓取i.MX RT1050的通信数据,其波形如下图所示。CHANNELX/Y数据与图中的波形匹配,达到FlexIO模拟XY2-100的效果。
    13.png
    小结
    以上介绍了如何在i.MX RT1050使用FlexIO模块来模拟XY2-100振镜通信协议接口。通过FlexIO的硬件Timer定时器和Shifter移位寄存器可以大大减轻CPU内核的负荷,满足协议的实时性要求。
    除了本文给出的Timer和Shifter的配置外,用户也可以利用其它FlexIO配置模拟XY2-100协议接口,这个方法不是唯一的。
    相关的文档和测试源代码可以从下面百度网盘下载:

    链接:https://pan.baidu.com/s/1y_XWQccWFTNvgQ8Fi7_pJw
    提取码:fb7a

    签到签到
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    2

    帖子

    0

    新手上路

    Rank: 1

    积分
    25
    最后登录
    2023-7-12
    发表于 2023-7-12 08:57:26 | 显示全部楼层
    你好,我用的是rt1062,请问配置参数是否一致?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2024-5-8 07:10 , Processed in 0.124271 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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