0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

恩智浦MCU加油站 来源:恩智浦MCU加油站 2023-05-18 09:21 次阅读

一、概述

本文介绍了如何使用i.MX RT系列芯片上的FlexIO实现XY2-100激光振镜控制协议。FlexIO模块是NXP Kinetis和i.MX RT系列MCU的片上外设。

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

二、XY2-100振镜协议简介

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

XY2-100协议包括四路信号

SECLOCK(时钟信号)

SYNC(同步信号)

CHANNELX(X 通道数据)

CHANNELY(Y 通道数据)

这四路信号是一种同步串行传输的过程,数据时序图如下所示。

1aef31c0-f51a-11ed-90ce-dac502259ad0.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协议,存在造价高,系统复杂的缺点。 使用NXPi.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接口的内部连接关系。

1b111ec0-f51a-11ed-90ce-dac502259ad0.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的效果。

1b2ead64-f51a-11ed-90ce-dac502259ad0.png1b4d0b2e-f51a-11ed-90ce-dac502259ad0.png

小结

以上介绍了如何在i.MX RT1050使用FlexIO模块来模拟XY2-100振镜通信协议接口。通过FlexIO的硬件Timer定时器和Shifter移位寄存器可以大大减轻CPU内核的负荷,满足协议的实时性要求。 除了本文给出的Timer和Shifter的配置外,用户也可以利用其它FlexIO配置模拟XY2-100协议接口,这个方法不是唯一的。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17040

    浏览量

    350511
  • 通信接口
    +关注

    关注

    3

    文章

    235

    浏览量

    30964
  • 控制协议
    +关注

    关注

    0

    文章

    9

    浏览量

    6935
  • 振镜
    +关注

    关注

    3

    文章

    21

    浏览量

    15090
  • 时钟信号
    +关注

    关注

    4

    文章

    445

    浏览量

    28523

原文标题:在i.MX RT10xx 使用FlexIO实现XY2-100振镜控制协议

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    i.MX RT1xxx 系列的时钟系统以及相关功能引脚

    目前 i.MXRT1xxx 系列主要分为 i.MX RT10xxi.MXRT11xx 两大分支。这两个分支的时钟系统设计是有一些差异的,不过总体来说,架构差别不大,我们以如下
    发表于 07-08 17:01 770次阅读

    i.MX RT10xx系列外部晶相关引脚的作用

    之前写过一篇关于时钟引脚的文章 《i.MX RT1xxx系列MCU时钟相关功能引脚的作用》,里面简单提及了外部晶相关引脚的作用,但是并没有详细展开。
    的头像 发表于 10-13 09:08 1436次阅读

    MIMXRT10xx EVK永磁同步电机磁场定向控制资料分享

    基于i.MX RT10xx EVK的永磁同步电机磁场定向控制
    发表于 12-12 06:22

    恩智浦i.MX RT1170将该系列带上了更高的层面

    宽泛温度范围下运行的能力,i.MX RT1170微控制器面向消费、工业和汽车市场的广泛应用。 i.MX
    的头像 发表于 05-18 11:15 3751次阅读

    i.MX RT10XX系列平台上进行OTA

    升级。最为常见的就是移动终端的OTA升级,近几年很火的新能源汽车也让大家对这一技术更加熟悉。 二、概述本文将介绍i.MX RT10XX系列平台上,进行基于阿里云物联网平台的OTA。在此之前,先简单
    的头像 发表于 09-17 10:12 2577次阅读

    i.MX RT开发笔记-08 | i.MX RT1062嵌套中断向量控制器NVIC(按键中断检测)

    系列文章目录i.MX RT开发笔记-01 | 初识 i.MX RT1062 跨界MCUi.MX RT
    发表于 12-01 13:51 2次下载
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>开发笔记-08 | <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1062嵌套中断向量<b class='flag-5'>控制</b>器NVIC(按键中断检测)

    基于i.MX RT单芯片实现的GUI图形显示和语音控制解决方案

    基于优秀的性能指标,i.MX RT可以胜任许多轻量级的AI应用,赋能越来越多的边缘设备。今天这场视频讲座中,恩智浦的专家将向大家展示一款基于i.MX RT单芯片
    的头像 发表于 12-31 09:48 7240次阅读

    i.MX RT超低功耗模式捉虫记

    SNVS模式是i.MX RT10XXi.MX RT11XX系列MCU中功耗最低的状态,其标志性特点是除SNVS电源域保持供电,其余的电源域均处于断电状态。
    发表于 02-08 15:14 0次下载
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>超低功耗模式捉虫记

    i.MX RT1170上串行NOR Flash双程序可交替启动设计

    i.MX RT10xx一样,这里要聊的还是一片挂载FlexSPI上的串行NOR Flash里做冗余/双程序设计,就是下图中的image L和image H,不涉及LPSPI接口F
    的头像 发表于 04-28 09:55 1221次阅读

    如何在i.MX RT1050使用FlexIO模块模拟XY2-100通信协议接口

    一、概述 本文介绍了如何使用i.MX RT系列芯片上的FlexIO实现XY2-100激光
    的头像 发表于 05-18 09:22 3630次阅读
    如何在<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050使用<b class='flag-5'>FlexIO</b>模块模拟<b class='flag-5'>XY2-100</b><b class='flag-5'>振</b><b class='flag-5'>镜</b>通信<b class='flag-5'>协议</b>接口

    i.MX RT的FlexRAM配置问题

    i.MX RT的FlexRAM配置问题
    的头像 发表于 10-24 15:46 789次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM配置问题

    浅谈i.MX RT10xx系列MCU外接24MHz晶的作用

    浅谈i.MX RT10xx系列MCU外接24MHz晶的作用
    的头像 发表于 10-30 17:22 792次阅读
    浅谈<b class='flag-5'>i.MX</b> <b class='flag-5'>RT10xx</b>系列MCU外接24MHz晶<b class='flag-5'>振</b>的作用

    i.MX RT1050上如何实现双大容量存储(MSC)设备

    i.MX RT1050上如何实现双大容量存储(MSC)设备
    的头像 发表于 10-30 17:08 610次阅读
    <b class='flag-5'>在</b><b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1050上如何<b class='flag-5'>实现</b>双大容量存储(MSC)设备

    i.MX RT1010的I2C Slave时钟延展功能小记

    i.MX RT1010的I2C Slave时钟延展功能小记
    的头像 发表于 09-27 16:22 1472次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>1010的<b class='flag-5'>I2</b>C Slave时钟延展功能小记

    如何在i.MX RT控制器上初始化LWIP协议

    i.MX RT控制器上初始化LWIP协议栈是一个复杂但有趣的过程,它涉及多个步骤和关键组件的配置.
    的头像 发表于 10-12 11:48 308次阅读
    如何在<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>微<b class='flag-5'>控制</b>器上初始化LWIP<b class='flag-5'>协议</b>栈