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

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

3天内不再提示

如何使用SPI总线设计正交编码器计数器

科技观察员 来源:allaboutcircuits 作者:Muhammad Shahbaz 2022-04-27 16:26 次阅读

本应用笔记描述了一个SLG46140V设计,该设计实现了一个带有正交编码器输入的16位加/减计数器。GreenPAK设备减轻了主机的实时输入要求,并允许轻松连接多个编码器。

旋转编码器广泛用于感测轴和机器零件的方向,以及作为用户界面输入设备。大多数旋转编码器输出一对正交信号,将轴运动编码为一系列脉冲。

为了跟踪编码器位置,必须对每个脉冲进行计数。通常,中断引脚用于此目的,计数在软件中实现。许多微控制器包括专门的外设来读取正交信号。然而,基于中断的计数限制了最大脉冲速率并占用了CPU时间,而专用外设限制了可连接到单个微控制器的编码器数量。此外,在非实时平台(例如PC)上,这两个选项都不可用。

本应用笔记演示了SLG46140VGreenPAK器件如何实现具有16位向上/向下计数器和SPI总线接口的正交编码器接口。主机应用程序可以按所需的时间间隔读取编码器的当前位置,而辅助设备会跟踪每个输入脉冲。此外,SPI总线允许链接多个设备以将灵活数量的编码器连接到单个处理器

高级设计

本应用笔记设计具有来自编码器的三个输入信号:A、B和Z。信号A和B是正交信号,它们以00、10、11、01格雷码序列交替切换状态。信号Z是一个可选的编码器零索引输入,它将计数器复位到零位置。

poYBAGJo_iyAfjXeAAB7cnRmg04561.png

图1.一个编码器设备的系统连接。

所描述的SPI由nCS片选信号、SCK串行时钟和MISO(主机输入,从机输出)串行输出组成。片选低电平有效,当nCS为高电平时,总线可以被其他SPI设备使用。本应用笔记中使用的SPI传输格式为CPOL=0,CPHA=1,这意味着SCK在空闲时处于低电平状态,并且在下降沿采样数据。

pYYBAGJo_i2APfX4AADSSbvoKJA103.png

图2.具有多个编码器的系统连接。

使用Chain_IN和Chain_OUT信号可以将多个设备链接在同一总线上,这些信号在内部延迟16个SCK时钟周期的数据。因此,主机接收的前16位将来自第一个编码器,接下来的16位来自第二个编码器,依此类推。所有编码器将在第一个SCK时钟沿同时进行采样。

GreenPAK设备内部的实现由三部分组成:

正交编码器输入模块:将正交信号转换为计数器的KEEP/UP信号对,并将信号与内部时钟同步。

16位向上/向下计数器:两个链接的8位计数器对编码器脉冲进行计数并向SPI模块提供并行数据。

SPI总线:SPI锁存并行数据,并在nCS有效时串行输出。

正交输入模块和计数器由内部环形振荡器时钟运行,而SPI由SPI主控从外部提供时钟。以下部分包含每个组件的详细说明。

正交编码器输入模块

来自编码器的信号最初进入一对延迟块。它们既可用作毛刺滤波器又可用作同步器,确保其输出信号仅在时钟上升沿发生变化。延迟值设置为最小值,给出2个时钟周期的延迟。可选地,对于噪声信号,可以增加延迟以滤除来自输入的任何毛刺脉冲,但这种过滤也会限制最大脉冲速率。

延迟块的输出被传递到一对D触发器,它们保留前一个时钟周期的信号状态。然后将当前状态和先前状态与4输入XNOR门进行比较。如果任一信号发生变化,XNOR门将为KEEP信号输出0值,使计数器模块开始计数。

poYBAGJo_i6ARezBAADxXBty2og786.png

图3.正交信号输入模块

通过比较当前状态At和Bt与先前状态Bt-1来检测编码器方向,如表1所示。检测逻辑已编程到3位LUT0组件,该组件向计数器输出UP信号。

表1.信号状态的方向检测

pYYBAGJo_i-AOUyZAAA1CUE0gkY373.jpg

一些编码器有一个额外的零位传感器,可用于在重新启动后找到系统的绝对位置。此Z信号上的高电平会将计数器重置为零。如果不需要此功能,可以不连接信号,因为输入引脚已配置下拉电阻

16位加/减计数器

SLG46140V器件包含两个计数器/有限状态机模块,具有与SPI模块的并行数据连接。它们中的每一个都可以输出一个8位的计数,并且通过链接两个计数器可以制成一个16位的计数器。计数器在任一方向从0x0000环绕到0xFFFF。

pYYBAGJo_jCAVbHjAAA59EcQTJE418.png

图4.Z输入信号的逻辑

默认情况下,CNT3块从可配置的起始值向下计数到0或向上到255,然后以配置的值重新启动。通过将起始值设置为255可以实现向下计数的回绕,但要同时获得向上计数的回绕,则需要额外的逻辑。

pYYBAGJo_jGAHqsOAADC4PiM2BU515.png

图5.低8位计数器的执行和环绕逻辑

当计数器处于其极值时,计数器的OUT信号激活。当KEEP=0和OUT=1时,LUT0输出一个进位脉冲到下一个计数器以增加它的计数。同时,如果UP=1,LUT1将激活复位信号。DFF2对复位信号进行采样,以便计数器在时钟上升沿同步复位。

来自编码器Z输入的CLEAR信号连接到DFF2的异步置位输入,这会导致计数器立即复位。计数器在下一个时钟上升沿继续计数。

poYBAGJo_jKAXXBQAACxfw-m41Q007.png

图6.高8位计数器的环绕逻辑

第二个计数器级的连接方式类似,因为该级不需要单独的进位信号。这三个信号都连接到一个LUT组件。当UP=1、KEEP=0和OUT=1时,它将计数器重置为零。

SPI总线

SLG46140和SLG46620中的并串转换器接口作为现成的功能块提供。在nCS变低后,该块在第一个SCK边沿锁存来自两个计数器的并行数据,然后逐位移出数据。

外部产生的SCK信号与计数器使用的内部时钟不同步,因此两个模块需要以某种方式同步,以便在它们之间可靠地传输数据。SPI模块提供了一个内置选择,用于在发生数据传输时将FSM时钟门控两个时钟周期。在此应用中,不希望对FSM时钟进行门控,因为它可能会在时钟被禁用时导致脉冲丢失。相反,DFF5用于将外部SCK信号与内部环形振荡器时钟同步。这确保了当FSM数据稳定时,SPI模块看到的SCK时钟沿发生在环形振荡器时钟沿。

在本应用笔记中,基本SPI通过数据链接逻辑进行了扩展。这允许在同一SPI总线上轻松连接多个编码器,并同时对它们的计数器值进行采样。

链接功能基于管道延迟功能块。这个块有一个由16个触发器组成的链,它们将在时钟信号的每个上升沿移入和移出一位。来自链中前一个设备的MISO信号连接到输入,输出到下一个设备。

由于MISO信号直接连接到硬件的12号引脚,Chain_OUT必须在外部与其并联。输出使能逻辑确保一次只有一个引脚处于活动状态。

pYYBAGJo_jOAK0djAADx_WWwxSk367.png

图7.SPI和数据链逻辑

对于前16个时钟周期,在nCS变为低电平后,每个设备保持MISO启用并输出其计数器值。同时,管道延迟模块存储从链中第N-1个设备接收到的信号。

16个时钟周期后,SPIINTR输出变为高电平以指示传输结束。LUT2或门然后使DFF4触发器变高,禁用PIN12并启用PIN13。PipeDelay模块移出第N-1个值,同时移入第N-2个值。这一直持续到所有值都被读取并且主机产生一个nCS信号,这将DFF4重置回其初始状态。

poYBAGJo_jSAHBv2AACqbtJqilg389.png

图8.使用两个设备捕获SPI信号

图8显示了一个SPI通信示例,其中设备首先发送自己的16位数据值,然后从链中的下一个设备转发16位值。

时钟速率限制

延迟和计数器模块由内部环形振荡器提供时钟,该振荡器以大约27MHz的频率运行,具有1、4、8或16的可选分频器。最大时钟速率取决于逻辑元件的延迟,并随电源电压。

设计中最长的逻辑链从输入DLY0/1块通过4位LUT0变化检测器、2位LUT0执行逻辑和3位LUT1环绕逻辑到FSM块。这些模块的延迟值在SLG46140数据表中定义,并在表2中进行了总结。由于布线延迟和部件差异,理论上可能的6.8MHz频率不适用于GreenPAK输入电压范围的最低端(VDD=1.8V),而使用3.4MHz时钟。

表2.模块延迟和最大工作频率

pYYBAGJo_jWAY4u-AABtdiMOCI8533.jpg

工作频率将限制正交输入的最小脉冲宽度。输入毛刺滤波器通过至少三个时钟周期长的脉冲并过滤掉任何低于两个时钟周期的脉冲。

测试结果

以两种方式测试功能。使用AMT203旋转编码器的正交输出进行手动测试,以验证两个方向的计数是否按预期工作并跟随编码器运动。

使用模拟正交信号的微控制器生成的信号源验证了最大脉冲率和计数可靠性。微控制器被配置为以给定的步进频率输出8000步。正交信号中的脉冲宽度是步距的两倍,因为一次只有一个信号改变状态。当通过SPI总线读取数据时,该步骤系列重复了几次。仅当每次都正确计算所有步骤时,才将测试用例标记为成功。

表3总结了测试结果。正如预期的那样,短于两个时钟周期的脉冲会被毛刺滤波器拒绝并导致计数为零。当在每个电压下接近最小脉冲宽度工作时,会有一些丢失的步骤。这可能是由不对称的上升/下降延迟引起的,这可能会在某些脉冲通过逻辑时稍微缩短一些脉冲。

结论

介绍了一种将正交编码器连接到SPI总线的设计。该设计可以按原样使用,也可以将各个组件重新用于不同的应用。正交输入部分可以修改为直接输出适合不同设备的信号,例如步进驱动器。16位加/减计数器模块为测量多种脉冲源提供了有用的工具。可链接的SPI可用于同时从多个GreenPAK设备进行采样和读取,数据源可以来自计数器或ADC

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

    关注

    32

    文章

    2123

    浏览量

    92986
  • SPI
    SPI
    +关注

    关注

    17

    文章

    1615

    浏览量

    89602
  • SPI总线
    +关注

    关注

    4

    文章

    100

    浏览量

    27442
收藏 人收藏

    评论

    相关推荐

    请问有没有计数器输出的计数值是串行数据(最好是SCI总线

    我要用计数器计数编码器的脉冲,单片机的IO口不够,但有还有SCI或SPI总线接口!
    发表于 02-07 11:06

    正交编码器接口

    PIC18F4331里的正交编码器接口怎么用啊!我要用这个模块读取编码器的数据,编码器一转程序就不走了!找不到资料,谁有给分享下啊,谢谢了
    发表于 06-04 20:25

    基于dsPIC单片机的正交计数器设计 求大神给思路

    本设计利用dsPIC单片机技术和正交编码技术,设计一个正交计数器。实现对光栅尺、光电编码器等传感
    发表于 03-26 09:51

    stm32正交编码器

    谁有stm32正交编码器的程序啊 求给发一份。还有TIM_SetCounter(TIM2,10);TIM_SetCompare1(TIM2, 5);这两个函数有有什么区别? 再用正交编码器
    发表于 03-26 20:15

    【数据采集分享】怎样将正交编码器和数据采集卡配合使用

    完整地旋转一圈。这个值以脉冲/转表示。有两种不同的正交编码器,在操作上稍有不同。下面我们就来讲述如何使用NI数据采集板卡上的计数器从差分以及单端的正交
    发表于 12-05 10:43

    MM32 TIM编码器模式

    TI1 和 TI2 极性;如果需要,还可对输入滤波编程。 两个输入 TI1 和 TI2 被用来作为增量编码器的接口。下表,假定计数器已经启动(TIMx_CR1寄存中的 CEN =
    发表于 02-08 16:40

    转动编码器计数器的增量太快

    配置为“电阻下拉”作为驱动模式,我的目标是计算旋转编码器的上升沿(为了知道机器人的位置),但是我的问题是当我转动编码器时,计数器的增量太快,而我稍微转动编码器。有什么问题吗?谢谢。PS
    发表于 03-13 10:56

    LS7366R 32 位正交编码脉冲计数器模块

    完整的开箱即用体验和快速发展。该模块与硬件板直接兼容。它卸载所有的计算跟踪编码器和接口直接与 Arduino 板通过 SPI 和 IOs。特点:•6 通道板载正交编码脉冲
    发表于 04-17 16:06

    【案例分享】STM32正交编码器驱动电机

    1。编码器原理 什么是正交?如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向。 这里用了TI12模式,例如当T1上升沿,T2在
    发表于 07-20 04:00

    正交编码器原理码盘

    。方向:A相和B相相差一个相位,一般来说是90°。A相信号在前表示正转,B相信号在前表示反转。计数:在每个上升沿或者下降沿检测,检测到计数器就加+1。线数和脉冲数的关系:假如一个编码器是102...
    发表于 08-12 07:10

    STM32正交编码器怎么进行测速?

    正交编码解码的原理是什么?STM32正交编码器怎么进行测速?
    发表于 11-16 08:04

    正交编码器原理什么是正交

    1.正交编码器原理什么是正交?如果两个信号相位相差90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向。如下图所示。
    发表于 01-10 08:04

    正交编码器测速的方法

    1.正交编码器的原理通常,光电式编码器的输出信号有A信号和B信号,部分还会有Z信号,也叫做零点信号,本平台使用的电机只有A/B信号,当电机旋转时,A/B两路信号输出正交脉冲信号,这是测
    发表于 01-10 06:00

    基于VHDL的正交编码脉冲电路解码计数器设计

    针对正交编码脉冲电路脉冲(quadratureencoderpulse,QEP)的解码和计数的问题,给出了QEP解码计数器的解决方案.本方案在复杂可编程逻辑器
    发表于 03-01 16:36 98次下载

    1路编码器脉冲计数器或2路DI高速计数器,Modbus RTU模块 YL150

    1路编码器脉冲计数器或2路DI高速计数器,ModbusRTU模块YL150产品特点:●编码器解码转换成标准ModbusRTU协议●可用作编码器
    发表于 11-03 14:19 0次下载