打印
[应用相关]

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

[复制链接]
楼主: goodluck09876
手机看帖
扫描二维码
随时随地手机跟帖
41
goodluck09876|  楼主 | 2019-7-20 11:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
    伺服驱动是运动控制系统实现高速高精度运动控制的关键,多轴运动控制器
的伺服接口电路设计关系到控制的精度和效率。伺服电机驱动器的控制方式有速
度控制、位置控制和转矩控制三种方式,其中应用最广泛的就是位置控制方式,
如图3-20所示。伺服单元与运动控制器连接的信号主要有:脉冲、方向、伺服启
动、编码器分频脉冲、伺服警报等信号。

使用特权

评论回复
42
goodluck09876|  楼主 | 2019-7-20 12:03 | 只看该作者
    由于差分信号抗电磁干扰的能力较好,现在市场上的伺服驱动器产品接收的
脉冲控制信号一般为差分信号。差分信号的输出类型有2种指令脉冲:“脉冲+方
向”和“正脉冲+负脉冲”模式。本运动控制器设计采用“脉冲+方向”的差分信
号模式,如图3-21所示。

使用特权

评论回复
43
goodluck09876|  楼主 | 2019-7-20 12:04 | 只看该作者
    MCX314AL中的运动控制模块产生的“脉冲+方向”信号,用高速隔离芯片
将核心电路和接口电路进行隔离。并选用TI公司的4通道线性差分驱动器
AM26LS31,接收转换成差分信号。AM26LS31输出的差分信号经过DB1_5接口后,
使用屏蔽线连接到伺服接口。伺服电机差分驱动电路原理图如图3-22所示。

使用特权

评论回复
44
goodluck09876|  楼主 | 2019-7-20 12:05 | 只看该作者
    光祸隔离电路主要将外部接口电路与内部控制电路隔离,起到保护内部电路
稳定的作用,一般用来隔离一些低速开关信号如:伺服报警信号、轴正负限位信
号、原点和接近原点信号,如图3-23所示,以X轴为例描述光祸隔离电路原理图。
当轴限位的接近开关处于未触发状态时,DC24V-IN与XOLIMIT+之间不能构成通
路流过电流,故TLP281-4的第一路光祸不导通,2-XOLMTP输出高电平;当轴限
位的接近开关处于触发状态时,DC24V-IN与XOLIMIT+之间构成通路流过电流,
TLP281-4的第一路光祸导通,2-XOLMTP接DGND输出低电平。

使用特权

评论回复
45
goodluck09876|  楼主 | 2019-7-20 12:05 | 只看该作者
    电源对于多轴运动控制器的正常工作有着重要的作用,安全可靠的电源设计
是设计运动控制器的重要基础。运动控制器的外部开关电源输入的是24V直流电
压DC24V-IN,经过降压开关稳压器LM2_596后输出DC_SV供给外围接口电路使
用;另外DC24V-IN经过隔离式电源降压模块后输出VCC_SV直流电压,VCC_SV
再经AMS 1117-3.3 V的三端线性稳压芯片转成VCC3.3 V供给核心电路使用,如图
3-24所示。

使用特权

评论回复
46
goodluck09876|  楼主 | 2019-7-20 12:08 | 只看该作者
    本课题运动控制器采用主板和接口扩展板分离式设计。将运动控制核心芯片
和电路放在主板上,如STM32F427, MCX314AL, MCX501等芯片之间的连接电
路和外围电路,接口电路放在接口扩展板上,如ET 1200接口电路、232通信电路、
AD采样电路、掉电保护电路、光祸隔离电路、差分驱动电路以及电源电路等。两
块板之间通过80Pin的接插件进行连接,也可再通过铜柱锁紧加固。这样不仅极
大缩小了运动控制器的体积,同时也降低的PCB的设计难度并且提高了可靠性。
    主板和接口扩展板都有众多的芯片,且由于机械尺寸限制了PCB板的尺寸,
因此上下两块板都选择4层PCB叠层设计,布局中在内部数字电路与外部模拟电
路之间设计一条足够宽的隔离通道,起到内外隔离的效果,提高运动控制器的可
靠性。在布线中选择第二层为地层,第三层为电源层,顶层和底层不信号线。如
图3-2_5所示,黄色和紫色的为地层和电源层,红色和蓝色的为信号线层。

使用特权

评论回复
47
goodluck09876|  楼主 | 2019-7-20 12:09 | 只看该作者
主板和接口扩展板实物图如图3-26和3 -27所示。

使用特权

评论回复
48
goodluck09876|  楼主 | 2019-7-20 12:09 | 只看该作者
分割线
---------------------------------------------------------------------------------------------------------------------
以下为软件设计部分。

使用特权

评论回复
49
goodluck09876|  楼主 | 2019-7-20 12:10 | 只看该作者
    控制系统软件设计包括PC机数控软件设计和运动控制器控制软件设计。PC
机软件开发包括linux实时性改造、LinuxCNC的HAL模块编写、EtherCAT主站
实现、GUI界面设计等。运动控制器软件设计包括ARM主控制程序、ET 1200驱
动程序、RS232驱动程序、SPI串行总线、FSMC并行总线驱动程序以及MCX314
加减速控制程序设计等。

使用特权

评论回复
50
goodluck09876|  楼主 | 2019-7-20 12:10 | 只看该作者
    PC机部分软件以LinuxCNC为基础,往下LinuxCNC通过HAL(硬件抽象层)
与EtherCAT主站驱动之间进行通信连接,然后EtherCAT主站通过以太网线给从
站运动控制器发控制命令;往上利用LinuxCNC提供的Python调用接口和人机界
面通信,数控系统人机界面采用PyQt开发;由于LinuxCNC需要运行实时任务,
需要将普通操作系统进行改造。因此,目前的主要工作是对Linux系统进行实时
性改造、安装EtherCAT主站、编写HAL模块、编写人机界面。
    虽然EtherCAT主站程序能够安装在非实时操作系统上,但一般情况下会对主
站进行实时性改造,而且LinuxCNC中有运行实时任务的需要,所以对Linux系
统进行实时性改造迫在眉睫。众所周知,Linux系统本质上是一个分时操作系统,
不是一个实时操作系统。Linux系统实时性不强使其在嵌入式应用中有一定的局限
性,受内核可抢占性、进程调度方式、中断处理机制、时钟粒度、虚拟内存管理
等几个方面的制约。
    根据实时性系统要求以及Linux的特点和性能分析,对标准Linux实时性的
改造存在多种方法,较为合理的两大类方法为:直接修改Linux内核源代码和双
内核法。
    1.直接修改Linux内核源代码:对Linux内核代码进行细微修改并不对内核
作大规模的变动,在遵循GPL协议的情况下,直接修改内核源代码将Linux改造
成一个完全可抢占的实时系统。核心修改面向局部,不会从根本上改变Linux内
核,并且一些改动还可以通过Linux的模块加载来完成,即系统需要处理实时任
务时加载该功能模块,不需要时动态卸载该模块。这种方法存在的问题是:很难
百分之百保证,在任何情况下,GPOS(通用操作系统)程序代码绝不会阻碍RTOS
的实时行为。也就是说,通过修改Linux内核,难以保证实时进程的执行不会遭
到非实时进程所进行的不可预测活动的干扰。
    2.双内核法:双内核法是在同一硬件平台上采用两个相互配合,共同工作的
系统核心,通过在Linux系统的最底层增加一层实时核心来实现。其中的一个核
心提供精确的实时多任务处理,另一个核心提供复杂的非实时通用功能。其优点
是可以做到硬实时,并且能很方便地实现一种新的调度策略。目前采用这种方案
的主要有RTAT ,  RT-Linux和Xenomai。本课题采用RTAI实时包的方式完成对
Linux系统的实时性改造,如图4-1所示。
    RTAI(实时应用接口)是Linux内核的一个实时扩展,RTAI是基于ADEOS
C Adaptive Domain Environment for Operating System)实现,ADEOS位于Linux
系统和硬件之间管理硬件中断,并控制实时内核和Linux内核的优先级,其中实
时内核优先级高于Linux内核优先级。

使用特权

评论回复
51
goodluck09876|  楼主 | 2019-7-20 12:10 | 只看该作者

使用特权

评论回复
52
goodluck09876|  楼主 | 2019-7-20 12:12 | 只看该作者
    根据第三章的主站硬件选型得到无风扇工业PC机,在该工业PC机上安装好
Ubuntu操作系统,版本为10.10。安装步骤首先通过Ubuntu官网下载.iso安装文
件,使用软件写入硬盘(U盘)映像,然后将U盘插入工业PC机的USB口,启
动后按照安装向导一步步安装。安装成功后配置Ubuntu的网络参数,连接互联网。
1.下载RTAI压缩包并解压到urs/src目录下,输入命令:
cd /usr/src
sudo tar -bzip2 -xvf rtai一3.8.tar.bz2
2.下载Linux内核压缩包并解压到urs/src目录下,输入命令:
sudo cp suoxd/linux-2.6.37.1.tar.bz2 /usr/src
sudo tar -bzip2 -xvf linux一2.6.32.2.tar.bz2
    3.利用RTAI源码中的文件给内核打补丁,未安装p atch需安装patch后,输
入命令:sudo patch -pl</usr/src/rtai/base/arch/x86/patches/hal-linux-2.6.32.2-
x86-2._5一OO.patch
    4.配置内核,Linux2.6.32引入新的方式用于简化kernel的配置,使用命令拷
贝当前配置,省去很多繁琐的内核配置选项。
    _5.安装内核模块,输入命令:
          sudo make clean
          sudo make
          sudo make modules
          sudo make modules install
          sudo make install
    6.配置RTAI,下载安装MESA库文件和EFLTK包,然后进入RTAI文件夹,
执行配置,输入命令:
          cd /usr/src/rtai
        sudo make config
    7.编译并安装RTAI,命令行窗口的RTAI安装结果如图4-2所示,输入命令:
          sudo make
          sudo make install

使用特权

评论回复
53
goodluck09876|  楼主 | 2019-7-20 12:12 | 只看该作者

使用特权

评论回复
54
goodluck09876|  楼主 | 2019-7-20 12:12 | 只看该作者
9.  RTAI内核抢占实现测试,测试结果如图4-4所示,输入命令行:
    cd /usr/realtime/testsuite/user/preempt
    sudo ./run

使用特权

评论回复
55
goodluck09876|  楼主 | 2019-7-20 12:13 | 只看该作者
    EtherCAT主站方案实现一般都采用倍福公司的TwinCAT, TwinCAT实现了强
大的EtherCAT主站功能,从站XML表配置、EEPROM配置文件操作、扫描
EtherCAT从站等[[40],图4-_5为使用TwinCAT开发冲床数控系统的过程。因为
TwinCAT是基于Windows风格,拥有较好的人机交互界面,功能强大,非常适合
上位机控制窗口的开发,但TwinCAT运行于Windows环境下,实时性很差,而
且TwinCAT和Windows系统需要付费才能商业化应用,价格较高,根据实际考
虑该方案不适合应用于本控制系统。

使用特权

评论回复
56
goodluck09876|  楼主 | 2019-7-20 12:14 | 只看该作者
    本控制系统EtherCAT主站以实时Linux操作系统为基础,在Linux环境下开
发主站有两方面优势,一方面Linux为开源系统,方便对底层进行修改;另一方
面便于进行嵌入式移植。Linux下的EtherCAT主站架构如图4-6所示。

使用特权

评论回复
57
goodluck09876|  楼主 | 2019-7-20 12:14 | 只看该作者
    Linux操作系统可分为内核态和用户态。内核态是操作系统的核心,负责进程
管理、内存管理、进程间通信和设备管理和驱动等,实时性要求高。用户态主要
运行人机交互、数据监控等实时性要求不高的程序。EtherCAT主站模块运行在内
核态,可支持一个或多个EtherCAT主站,且同时提供应用接口和设备接口。用户
通过应用接口访问主站,通过设备接口连接设备到指定主站。EtherCAT的以太网
设备驱动模块通过主站设备接口与主站连接,EtherCAT设备协议可直接由以太
网帧传送,因而主站能同时并行处理EtherCAT数据帧和通用以太网通信。
    在Linux上安装EtherCAT主站程序,这里选择EtherLab开发的IgH EtherCAT
Master,首先下载主站安装文件IgHEtherLab.tar.bz2,下载文件后解压缩进入含有
Makefile文件的目录安装主站,输入命令:
      make ethercatMaster
      make ethercatMasterinstall
      sudo /etc/init.d/ethercat start
      ethercat master
    若最后两条指令运行正常则说明主站安装成功。

使用特权

评论回复
58
goodluck09876|  楼主 | 2019-7-20 12:14 | 只看该作者
    LinuxCNC是一款运行在Linux平台下的实时开源数控软件。起源于美国国家
标准与技术研究院的增强型运动控制器EMC (Enhanced Machine Controller)研究
项目,用于机床的数控系统[[41 ]。经过十几年的发展,LinuxCNC系统广泛用于冲
床、车床、3D打印机、激光切割机、等离子切割机、机器人手臂等领域。其主要
优点有:提供多个标准化的用户界面、用户也可以采用自主开发的GUI、自带G
代码解析器、支持伺服电机控制步进电机开环控制、运动控制器功能强大、支持
非笛卡尔坐标运动系统、采用2.4或2.6的Linux内核支持RT-Linux或RTAI实时
补丁。LinuxCNC源代码可以免费下载,安装在Linux系统上。LinuxCNC软件架
构如图4-7所示。

使用特权

评论回复
59
goodluck09876|  楼主 | 2019-7-20 12:15 | 只看该作者
    LinuxCNC是一个模块化设计的软件,大致可以分为以下四个主要模块:运动
控制器(EmcMot)、数字I/O控制器(EmcIO )、任务控制器(EmcTask )、图形用
户界面(GUI)。其中用户操作界面负责接收用户命令并反馈最新状态;任务控制
器是整个系统的决策层,主要负责对各种命令进行决策分类、解析发送给不同的
模块;运动控制器是实时刷新的,主要完成路径规划、插值运算等;数字I/O控
制器负责处理I/O信号,通过NML消息与运动控制器通信,因为不同设备I/O各
不相同,这时需要硬件抽象层HAL文件建立软逻辑电路来控制实际I/O ; HAL硬
件抽象层是LinuxCNC系统的关键技术之一,通过引入HAL机制,为用户提供了
统一的驱动开发接口,方便编写驱动,还能利用配置文件将相应的HAL模块连成
一个复杂系统,方便数据传递。HAL模块结构图如图4-8所示。

使用特权

评论回复
60
goodluck09876|  楼主 | 2019-7-20 12:18 | 只看该作者
    EtherCAT主站驱动与LinuxCNC之间采用HAL机制进行通信,硬件抽象层
将各个底层的硬件驱动、实时算法抽象出来,构成一个组件,组件是由函数、参
数、输入输出引脚所组成,输入信号包括来自LinuxCNC的控制信号、用户配置
信息,输出信号包括提供给LinuxCNC的反馈量等[[42]。将编写好的HAL模块命令
为ec.comp,编译生成ec.ko,利用insmod命令将其安装后就可以加载到线程中。
当HAL模块启动的时候,需要对变量进行初始化,但完成EtherCAT主站的初始
化是更重要的,只有初始化了主站,设置好参数,建立起完整的通信网络,才能
进行接下来的周期数据传输,其中PDO为进程数据对象、SDO为服务数据对象。
如图4-9为EtherCAT主站的初始化流程图。

使用特权

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

本版积分规则