图 4 canopen主站状态转移图 Figure 4 State transition diagram of CANOpen master
·70·轻工机械 Light Industry Machinery 2012年第 1期
模块是将各个状态产生的报文按照 CANOpen协议进行封装。封装好之后的报文需通过 CAN报文发送状态模块进行发送。主站应用层接口在接收到错误中断时,便启动错误处理,经过分析之后若需要通过 NMT报文进行管理的则跳至新 NMT报文生成状态以产生网络管理报文,若无需响应则直接返回主站应用层芯片接口进行其他处理。
如表 1和表 2所示,CAN报文包括帧起始、仲裁字段、数据段、CRC校验以及帧结束几大部分组成[8],其中仲裁字段定义了 8个优先级,每个优先级拥有 220个 COB-ID,范围从 1到 1760。CRC校验是为了确保报文传输的正确性。CANOpen协议则是将自己的数据信息按照协议要求打包放在 CAN报文的 8字节数据当中。
5基于 CANOpen协议的数字伺服电机控制
5. 1 SDO数据帧
表 1和表 2表示出了 CANOpen服务数据信息 ( SDO)报文的帧结构形式,SDO将 8字节数据段分为请求码、对象和子对象索引以及 4字节数据,从而进行对象字典数据的读写。
表 1请求帧 (主站 -数字伺服 ) Table 1 Request frames ( master-digital servo)
8字节数据字段
帧起始 |
仲裁字段 |
|
请求码 |
对象索引 ( index) |
对象子索引 ( sub-index) |
数据 ( 4 Byte) |
|
校验 |
帧结束 |
|
COB-ID |
|
|
|
|
|
|
|
|
|
(数字伺服从站 TD) |
RTR |
Byte 0 |
Byte 1 Byte 2 |
Byte 3 |
Byte 4 Byte 5 Byte 6 |
Byte 7 |
CRC |
|
表 2响应帧 (数字伺服 -主站 ) Table 2 Response frames ( digital servo-master)
8字节数据字段
帧起始 |
仲裁字段 |
|
响应码 |
对象索引 ( index) |
对象子索引 ( sub-index) |
数据 ( 4 Byte) |
|
校验 |
帧结束 |
|
COB-ID |
|
|
|
|
|
|
|
|
|
( CANOpen主站 TD) |
RTR |
Byte 0 |
Byte 1 Byte 2 |
Byte 3 |
Byte 4 Byte 5 Byte 6 |
Byte 7 |
CRC |
|
5. 2数字伺服电机的对象字典个元素,同时定义了一个 8位的子索引[9]。由于对象对象字典 ( Object Dictionary)是 CANOpen协议的字典条目众多,再此以索引号为 1800h( TPDO1通信参核心,它连接了 CANOpen设备的通讯接口和应用部数)的对象字典为例,如表 3所示,可通过修改相应对分,对象字典是一个有序的对象组,每个对象采用一个 象字典中的参数对通信加以配置[10]。16位的索引值来寻址,为了允许访问数据结构中的单
表 3 1800h号对象字典 ( TPDO1通信参数 ) Table 3 Object dictionary( TPDO1 parameters)
索引子索引数据类型描述读写类型缺省值
1800h( TPDO1通信参数 ) 00h-子索引个数只读
5 1800h( TPDO1通信参数 ) 01h无符号 32位 TPDO1的 COB-ID读/写 180h + Node-ID 1800h( TPDO1通信参数 ) 02h无符号 8位传输类型读/写 255 1800h( TPDO1通信参数 ) 03h-保留-1800h( TPDO1通信参数 ) 04h-保留-1800h( TPDO1通信参数 ) 05h无符号 16位时间定时器读/写 0
5. 3数字伺服电机对象字典的操作过程举例公司 CycloneⅢ系列 EP3C80F484C8型 FPGA中建立,编
如图 5所示,本研究搭建了一个基于 CANOpen协程环境为 Quartus Ⅱ,采用 VHDL语言。CAN控制器采议的数字伺服电机控制平台,应用层在型号为 Altera用 MCP2510,CAN收发器采用 MCP2551。
[自控 ·检测]韩江,等基于 canopen协议的数字伺服电机通信主站研究·71·
图 5系统实物图 Figure 5 Experiment platform of the systems
程序中建立了发送与接收的数据缓冲区,并在其相应的逻辑状态利用循环语句对数据进行传输操作, FPGA与 CAN控制器之间的数据交换是通过 SPI接口实现的。截取代码如下 :
…
TX _ Buffer: OUT STD _ LOGIC _ VECTOR ( 63 DOWNTO 0); --定义发送缓冲区
RX _ Buffer: IN STD _ LOGIC _ VECTOR ( 63
DOWNTO 0); --定义接收缓冲区
…
L1: FORI IN0 TO63 LOOP–循环,将发送缓冲区中的数据在 CLK上升沿发送出去 IF CLK’EVENT ANG CLK = 1 THENSI< = TX_Buffer( I); END IF;
END LOOP[L1];
…
图 6为截取的一段 Modesim仿真图,对应程序为上位机访问数字伺服中索引号为 1800h的对象字典, CLK时钟周期为 40 ns。
图 6读对象字典波形仿真 Figure 6 Simulation of Reading object dictionary
6结语
利用 canopen高层协议实现了 CANOpen主站与数字伺服之间的数据通信,为多轴、高速数控系统数据传输提出了一种解决方案,改变了传统的脉冲控制模式,改用数字伺服系统,对多轴多通道数控机床的研究具有重要的意义。