[应用相关]

记录STM32开发一个完整的EtherCAT的过程!

[复制链接]
楼主: goodluck09876
手机看帖
扫描二维码
随时随地手机跟帖
goodluck09876|  楼主 | 2019-7-20 12:18 | 显示全部楼层
    主站初始化完成后,LinuxCNC开始正常运行。LinuxCNC在每个控制周期通
过硬件抽象层下发控制命令,并获取从站设备反馈的信息。HAL周期任务流程图
如图4-10所示。对于采用位置控制的伺服单元,HAL模块每次都要计算出本控制
周期的位移或目标点,然后通过EtherCAT总线发送到从站运动控制器;然后从站
运动控制器在每个控制周期上报编码器位置增量和I/O状态,HAL模块计算出轴
的实际位置后发送给LinuxCNC o
238085d32962f3c746.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:34 | 显示全部楼层
    在Linux环境下开发用户界面的语言有Python, C++等,图形库有QT, GTK
等。由于控制界面运行于用户态,实时性要求不高,同时兼顾开发难度和周期,
本课题采用Python语言,结合PyQT图形库开发冲床控制界面。Python是一种面
向对象的脚本语言,与其他语言相比,Python具有如下优点:面向对象、公开免
费、跨平台可移植、功能强大、使用简单、模块丰富。QT是一个功能丰富广泛使
用的GUI图形库,可用于Windows,  Linux等平台,具有很好的可移植性。PyQt
是Python语言与Qt图形库相结合的产物,从而可以通过Python来使用Qt图形库,
具有模块丰富、跨平台和使用信号与槽机制的优点。数控界面调用LinuxCNC抽
象出的Python接口与任务控制器通信,并监视LinuxCNC状态信息和错误信息。
    本课题冲床数控系统设计加工状态、参数设置、警告与诊断和软件设置四个
状态界面,四个状态界面下一共分设13个子界面,各个界面之间可以通过按钮进
行切换,数控系统界面结构图如图4-11所示。
608555d3299d8d47bf.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:38 | 显示全部楼层
    系统的主界面由菜单栏、工作窗口、快捷工具栏和消息提示栏这四部分构成。
菜单栏可以根据不同的操作需求切换不同的工作窗口,快捷工具栏是一些常用的
快捷按钮,消息提示栏是提示快捷按钮内容和显示系统运行状况、错误信息汇报
的区域,如图4-12所示。
980455d329ac211328.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:41 | 显示全部楼层
    1.加工状态界面:加工状态界面下设有自动加工状态显示、手动加工状态显
示、I/O状态显示和加工图形仿真这4个子界面。下面主要讲解自动加工,加工文
件需要在自动加工状态显示界面下进行,通过单击菜单栏上方的“加工状态”按
钮,并选中“自动加工状态显示”可以进入自动加工界面。
    单击快捷工具栏最右侧的“打开文件”按钮,可以打开所需要的加工文件(数
控系统支持*.PRG和*.PNC这两种类型的数控冲床G代码文件)。工作窗口的右侧
的加工程序显示框会显示当前打开的加工文件,左侧的图形显示区会显示待加工
的图形。在图形显示区中,绿色的方框表示机床的最大加工尺寸、银白色的方框
表示当前加工的板材的尺寸、下方紫红色的小方框表示夹钳的位置、黄色的图形
表示未被加工图形、红色的图形表示己经加工完成的图形、十字光标表示当前冲
头的实际位置。加工前若需要知道当前文件的加工次序,可以单击“仿真”按钮
进行加工仿真(加工预览),仿真时数控冲床上的各轴不会运动。确认加工文件和
加工区域无误之后,单击“开始”按钮进行文件的实际加工。
    2.参数设置界面:参数设置界面用于设置控制系统及机械的参数,分设了系
统参数设置、运动轴参数设置及模具库参数设置这3个子界面。下面主要讲解运
动轴参数,运动轴参数设置界面如图4-1所示。
880085d329b63904fb.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:41 | 显示全部楼层
各参数的说明如下(注意:其他参数暂不开放给用户设置,显示为灰色。):
(1>点动速度:各轴自由移动的速度设置,这里设置的速度对应的是工业键
盘的“手动倍率”旋转波轮打在100%档位的速度;
(2)回零速度:各轴回零点的速度设置;
(3)脉冲当量设置:机床各轴的单位运动距离与脉冲量的比例关系设置;
(4)减速比参数设置:机床的减速比参数设置;
(5)限位设置:设置机床X轴和Y轴的软限位。
3.警告与诊断界面:
息记录界面这2个子界面。
警告与诊断界面下设有警告信息诊断界面、历史警告信
  如图4-14所示。
641315d329b8f16f91.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:42 | 显示全部楼层
    4.软件设置界面:软件设置界面用于设置软件与外部设备的通讯参数和显示
软件的版本等信息,设有软件信息、外部设备通讯设置及高级设置这3个子界面。
下面讲解外部设备通讯设置界面,如图4-1_5所示。
685785d329ba55dc62.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:43 | 显示全部楼层
    外部设备通讯设置界面用于设置PLC、工业键盘与数控软件通讯的连接参数,
其中控制器采用EtherCAT总线连接,PLC和工业键盘均采用串口连接。当通讯正
常时,“外部设置连接状态显示”中的状态灯会显示绿色的“ON",未能正确连接
上则显示红色的“OFF"。当控制器未连接上时,可以通过单击“重新连接”按钮
进行连接。如果PLC或者工业键盘未能正确连接上,则需要检查接线是否正常,
并断电重启系统才能重新连接上。
    运动控制器软件设计包括ARM主控制程序及外围电路驱动程序,外围驱动
程序包括ET 1200驱动程序、AD采样芯片驱动程序、RS232驱动程序、SPI串行
总线、FSMC并行总线驱动程序以及MCX314加减速控制程序设计等。运动控制
器程序在STM32F427这款MCU上使用C语言开发,开发环境为Windows 7下的
Keil uVision_5集成开发环境。
    ARM主控制程序是运动控制器的核心,需要完成各个函数初始化、参数配置、
数据处理、逻辑流程控制及控制算法运算等,图4-16为支持查询模式(自由运行
模式)的流程图。
    ARM芯片在上电后不久进入main)函数,在main)函数中最先完成一系列系
统正常运行相关函数的初始化,如延时初始化函数、LED初始化函数、串口初始
化函数、中断向量表配置初始化函数,然后完成SPI初始化函数、定时器初始化
函数、EtherCAT初始化函数以及FSMC总线初始化函数等。接着完成通信初始化
工作,查询主站的状态控制寄存器,读取事件请求寄存器0x220、相关配置寄存
器,启动或关断相关通讯服务。在完成以上工作后就进入主循环while(1),进行应
用层任务处理和周期性数据处理,周期性数据处理和应用层任务处理有查询模式
  (自由运行模式)或同步模式(中断模式)这两种,本程序采用同步运行模式,
所以在主循环中主要处理非周期性的任务。同步运行模式下周期性数据在中断服
务程序中处理。
638965d329befd6abe.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:44 | 显示全部楼层
void main(void)
//--一执行一系列初始化函数--一
Delay_Init(168);//初始化延时函数
Led_Init();              //初始化LED端口
Uart_Init(9600);//初始化串口
AD7606_Init();           //初始化AD采样芯片
NVIC_Config();           //初始化STM32时钟及外设
SPI_Config();            //ET 1200用SPI总线初始化配置
Timer2_Init_ Config();    //Timer2初始化配置
ET 1200_GPIO_Config();   //ET 1200 GPIO初始化配置
ECAT_Init();             //初始化通信变量和ESC寄存器
FSMC_Init();             //FSMC并行总线初始化
//--一初始化完成,进入主循环--一
while(1)
ET 1200_AlEvent=pEsc->AlEvent;//读应用层事件请求寄存器,
                // ET 1200一 AlEvent为全局变量,在头文件中定义
if(!ET1200_IntEnabled) //处于自由运行模式(ET 1200_ IntEnabled -=0
                      //处于同步模式(ET1200 IntEnabled==1)
free_ run();   //处于自由运行模式时,进行周期性数据查询
el_event();
刀应用层任务处理,包括状态机和非周期性数据等

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:44 | 显示全部楼层
从站设备可以运行于同步模式或自由运行模式,在自由运行模式中使用查询
方式处理周期性过程数据,在同步模式使用中断服务程序处理性数据,
变量
模式,
ET 1200 IntEnabled来控制运行模式。ET 1200 IntEnabled为1时,
通过全局
使用同步
ET 1200 IntEnabled为0时,使用自由运行模式。根据主站对SM的配置,
在函数、参数初始化阶段来初始化变量ET 1200_ IntEnabled,确定当前的运行模式。
本程序选择同步模式,以下将按照该模式讲解一个中断服务数据处理的工作流程,
如图4-17所示。
302925d329c3532478.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:44 | 显示全部楼层
    在同步运行模式中,ET 1200收到主站传输来的数据后在Pin40 C SPI_IRQ
产生一个下降沿中断信号,其中ET1200的Pin40连接到STM32的PD2端口,
STM32的每个IO口都可以作为中断输入。STM32响应中断信号后先读取ET 1200
事件请求寄存器,如果是SM2事件则从ET 1200的SM2管理存储区读取相应的数
据,如驱动的目标位置、位移量等,读到数据后将其进一步处理并等待下一步操
作。接着发出读命令获取I/O板的数据、AD采样芯片数据、串口设备数据,然后
将上一步处理好的数据写入相应的控制器,如MCX314AL, MCX501, I/O板卡等,
同时将获得的I/O板数据通过SPI写函数将I/O状态写入ET 1200 0

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:45 | 显示全部楼层
    FSMC灵活的静态存储控制器,能够与同步或异步存储器和16位PC存储器
卡连接,STM32的FSMC接口支持包括SRAM, NAND FLASH, NOR FLASH和
PSRAM等存储器。FSMC的框图如图4-18所示:
189045d329c5430e2a.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:50 | 显示全部楼层
    FSMC驱动外部SRAM时,外部SRAM的控制一般有:地址线(如A0}-A25 ),
数据线(如D0}-D15 )、写信号(WE,即WR )、读信号(OE,即RD)、片选信
号(CS),如果SRAM支持字节控制,那么还有UB/LB信号。MCX314AL或MCX_501
的信号线包括AO}-A2,  D0}-D15,  WR,      RD,  CS,  INTN(中断),其操作时序
和SRAM的控制完全类似,因此可以把MCX314AL或MCX_501当成一个SRAM
来用,这就是FSMC驱动MCX314AL或MCX_501的原理。
    STM32的FSMC支持8/16/32位数据宽度,这里用到的MCX314AL或MCX_501
都是16位宽度的,所以在设置的时候选择16位宽。STM32的FSMC将外部存储
器划分为固定大小为2_56M字节的四个存储块,每个存储块又分为4个存储区,
如存储块1  CBankl)的第一区地址为Ox6000,0000^}Ox63FF,FFFF,如图4-19所
示。根据上一章FSMC总线电路设计可知MCX314AL与STM32之间信号的连接,
MCX_501与STM32之间的连接与之类似,不同的是只有片选信号接在不同的端口
上。因此将Bankl的第一区分配给MCX314AL,第二区分配给MCX_501,其基地
址分别为0x6000,0000和0x6400,0000。当第一区片选引肚p使能时,根据基地址和
偏移地址,STM32对MCX314AL的相应寄存器进行读写操作;同理,当第二区
片选引脚使能时,根据基地址和偏移地址,STM32对MCX_501的寄存器进行读写
操作,从而实现STM32与MCX314AL或MCX_501的数据通信。
342025d329d7be2958.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:51 | 显示全部楼层
765165d329dd9a4551.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:51 | 显示全部楼层
77755d329de3909f1.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:52 | 显示全部楼层
420905d329e01c3474.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:52 | 显示全部楼层
void drive(void)
//--一X,Y轴对称S形加诚速驱动--一
wreg3(Ox3, 0x0004);   // S形模式,0x3表示X和Y轴,下同
range(Ox3,800000); // R=800000(倍率=10)
acac(Ox3,627);       // JK = 627(加速度增加率K = 997.S**s/sect )
acc(Ox3,8000);       // A = 8000(加/诚速度固定为最大值)
sta}tv(Ox3,4000);       // SV=10(初速度=100pps)
spoed(Ox3,4000);        // V=4000(驱动速度=40000pps)
pulse(Ox 1,50000);//xP=_50000
pulse(Ox2,25000);//YP=2_5000
command(Ox3,Ox21);//一定量脉冲驱动
wait(Ox3 );
wreg3(Ox3, 0x0000)      // S形加诚速模式解除

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:53 | 显示全部楼层
228115d329e2d4e216.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:54 | 显示全部楼层
    实验测试平台由一台PC机、一套自主研发的冲床数控系统软件、一台自主
研发的五轴高速运动控制器、一套单轴丝杠滑台、一套二维伺服平台、一套四轴
同步测试架组成。实验过程中需要注意,因为目前运动控制器专为数控冲床设计,
仅保留1个M II接口连接主站,且设计最多连接轴数为五轴,故连接四轴同步测
试架时不能接单轴丝杠滑台和二维伺服平台;测试过程中工业PC机和显示器使
用笔记本代替。在平台上测试通过后将控制系统接入到LX230B型数控转塔冲床
上进行测试和参数调试,最终成功开发出30T数控转塔冲床用高速运动控制系统。

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:55 | 显示全部楼层
    EtherCAT主从站基本通信功能测试时首先按图_5-1所示,使用网线将PC机
与从站运动控制器连接起来后,在数控软件通信设置的外部设备通信设置中找到
运动控制器连接状态,点击重新连接。使用Wireshark抓包工具抓取连接过程中主
站广播的数据包,最终连接成功时运动控制器连接状态指示灯变为ON,从站状态
变为操作状态(OP),从站状态机启动正常,如图_5 -2所示。
104665d329eb855cee.png

使用特权

评论回复
goodluck09876|  楼主 | 2019-7-20 12:56 | 显示全部楼层
    由图_5 -2可知该实验中EtherCAT报文的格式。报文总长度60个字节,前14
个字节是以太网数据帧头,包括6字节的目的地址(ff:ff:ff:ff:ff:ff ) } 6字节的源地
址(78:a5:04:c0:be:6f)} 2字节的帧类型(Ox88a4);接着是2字节的EtherCAT头,
包括11位数据长度(Ox02a)}1位保留位(Ox0)}4位类型位(0x1);然后是EtherCAT
数据,数据为2个子报文,每个子报文包含10字节子报文头,16字节数据,2字
节WKC(工作计数器)。Wireshark抓取的报文与2.1节中的EtherCAT帧格式一
致,从而主从站之间实现了基本通信。
    控制系统基本功能测试是验证系统软硬件功能正常的重要实验,该项测试在
单轴丝杠滑台完成,连接好PC机、运动控制器和单轴丝杠滑台,如图_5-3所示。
在数控软件的手动加工中对输出I/O如伺服使能、紧急停止,回零点如X轴回零、
Y轴回零,单轴位移控制如X+, X-,  Y+,  Y-进行测试,并观察滑台的运动情况
和伺服驱动器面板显示来判断各项功能是否正常。经测试,软件上的相关按钮都
工作正常,五个轴的接口、I/O接口工作正常,产生的脉冲精度误差为0。故数控
系统软硬件基本功能测试通过。

1905d329ef43c493.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则