HPM5300系列SEI串行编码器接口:如何设置通讯协议(上)

描述

工程苗小兵

先楫资深FAE工程师

电力电子与电力传动专业硕士研究生,一个从事了20多年的功率控制的工程小兵,有多年的电机驱动和电源控制经验,专注电力电子控制方向。
 

 

01.串行编码器接口SEI 的应用场景

SEI 串行编码器接口

是HPM单片机独创的通信接口外设,可以在同一个硬件接口上实现不同类型的串行通信协议的数据收发。

是5300精确位置系统的一部分,可以与系统中的其它外设协同工作。
 

 

主要应用场景:

作为主机,从外部的串行编码器读取电机运动信息(绝对位置、速度、圈数、故障…等),交由 MMC单元 或 主控软件 进行电机驱动控制。

作为从机,QEIv2或RDC模块将从传感器(光、霍尔、旋变)获取的位置数据,经SEI转换成不同的协议后发送给外部的电机驱动器(PLC、运动控制卡、伺服驱动……)。

定制通讯,可以在多种不同的串行协议间进行转换;也可以根据自己的需要定制协议,并可实现硬件自主通讯。

串行

(图示:5300精确位置系统)

 

 

02.串行编码器接口SEI 的主要特性

● 2 个 SEI 控制器

● 9 个数据寄存器组

● 最高支持 64 条指令

● 支持同步通信 和 异步通信

● 支持主机模式和从机模式(作为编码器)

● 支持 RS-485 及 RS-422 接口

● 每个 SEI 控制器支持共 3 种触发方式

外部触发,包括触发输入及触发输出各 8 路   

周期性触发 

软件触发

● 支持精确控制 SAMPLE 或 UPDATE 位置信息与时间戳的时机

● 支持命令匹配及指令跳转

● 支持自动 CRC 校验

● 支持自动奇偶校验

● 支持 WatchDog

● 支持超时 TIMEOUT 及收发 CDM/CDS 

● 灵活实现多种编码器协议:Tamagawa、HIPERFACE、Nikon 、SSI、BiSS-C、EnDat2.1/2.2
 

 

串行

 

03.HPM5300 串行编码器接口SEI 的组成结构

SEI模块的寄存器组成


 

● 引擎寄存器

负责模块使能控制、超时处理、看门狗配置,和反馈执行状态、指令指针等

● 收发控制

负责收发配置,数据传输长度、波特率、空闲状态、同步或异步控制模式等收发控制

● 触发 

负责外部输入触发、周期触发、软件触发模式配置

负责输出触发,可以配置外部触发命令

● 命令

包含8个命令表及其相关的比较位和最大、最小值范围

负责命令数据的长度、校验、大小端格式等

● 锁存器

负责4个锁存器的跳转配置、输出延迟和输出选择

● 位置寄存器

包含sample和update对应的位置寄存器组

负责触发sample和update的配置

● 中断寄存器

负责中断使能配置、状态记录、中断指令和中断指令匹配的配置

● 指令内存

存放64条可配置的指令,SEI0 与 SEI1共用

● 数据寄存器组

存放9组数据寄存器, SEI0 与 SEI1共用

 

串行

 

04.串行编码器接口SEI的工作原理:通讯指令

Tamagawa、BiSS-C和SSI,这三种不同协议的编码器为例,通信协议之前存在较大的差异:异步vs同步、校验方式、大小端、数据长度、返回信息延迟、通讯结束标志、触发采样和更新位置时刻等。

 

SEI 的大致方法是把通讯协议分解成多个典型节点,每个节点对应一条指令,通过不同指令组合实现通讯完成。

 

串行

Tamagawa

 

串行

BiSS-C

 

串行

SSI

 

05.SEI示例

多摩川编码器主查询协议为例,调用指令设置函数sei_set_instr():

 

0阶段: 发送控制字,sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_SEND, 0, SEI_DAT_0, SEI_DAT_2, 8);

参数设置:指定SEI0/1;指定指令指针,OP:3无时限内发送 ;CK:异步传输统一为0;CRC:CRC放入无效数据寄存器DAT_0表示当前数据不计算CRC;传输数据:放入DAT2;数据长度:8bit。

 

1阶段: 接收控制字,sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_RECV_WDG, 0, SEI_DAT_9, SEI_DAT_3, 8);

参数定义:指定SEI0/1,指定指令指针,OP:6时限内接收 ,CK:异步传输统一为0, CRC:校验值放入数据寄存器DAT_9,传输数据放入DAT_3,数据长度为8bit。

 

2阶段: 接收传感器状态信息,sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_RECV_WDG, 0, SEI_DAT_9, SEI_DAT_4, 8);

参数定义:其他信息同上,传输数据放入DAT_4。

 

3阶段: 接收位置信息,sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_RECV_WDG, 0, SEI_DAT_9, SEI_DAT_5, 24);

参数定义:其他信息同上,传输数据放入DAT_5,数据长度为24bit。

 

4阶段: 接收ENID,sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_RECV_WDG, 0, SEI_DAT_9, SEI_DAT_6, 8);

参数定义:其他信息同上,传输数据放入DAT_6,数据长度为8bit。

 

5阶段: 接收圈数信息,sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_RECV_WDG, 0, SEI_DAT_9, SEI_DAT_7, 24);

参数定义:其他信息同上,传输数据放入DAT_7,数据长度为24bit。

 

6阶段: 接收报警信息,sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_RECV_WDG, 0, SEI_DAT_9, SEI_DAT_8, 8);

参数定义:其他信息同上,传输数据放入DAT_8,数据长度为8bit。

 

7阶段: 接收CRC,sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_RECV_WDG, 0, SEI_DAT_0, SEI_DAT_9, 8);

参数定义:其他参数同上, CRC:数据放入无效数据寄存器DAT_0表示该指令中接收到的数据不计算CRC;如果DAT_9配置为CRC模式,前期接收数据计算后的CRC校验值会与DAT_9接收值做对比,数据长度为8bit。

 

8阶段: 停止指令sei_set_instr(BOARD_SEI, instr_idx++, SEI_INSTR_OP_HALT, 0, SEI_DAT_0, SEI_DAT_0, 0)

参数定义:OP:0 停顿,其他参数均设为0。

 

通讯结束。

 

串行串行

 

 

06.SEI 引擎寄存器

寄存器组成


 

● 引擎控制

负责模块使能控制、状态回倒、状态异常处理、触发使能控制、看门狗使能

● 指针地址配置

配置异常和初始执行指令地址指针,当执行不同数据通讯时可以修改初始执行指令地址指针实现调用不同的收发指令

● 看门狗配置、程序执行指针、当前指令、看门狗状态 

负责监控当前工作状态

● SEI中有两组,分别应用于SEI0和SEI1

串行

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分