基于CAN总线的分布式位置伺服系统设计
扫描二维码
随时随地手机看文章
分布式伺服系统中,电机控制性能和多电机间协调控制性能的好坏直接影响生产过程质量,如何实现系统的高效管理、方便应用和实时控制都是需要解决的关键问题。CAN总线是一种有效支持分布式控制或实时控制的串行通信局域网络,以其结构简单、可靠性高、成本低廉等优点非常适合分布式伺服系统中数据通信的实现。通过CAN总线进行数据传输与控制,使伺服电机的性能更加稳定,能更好、更灵活地应用于分布式运动控制系统中[2]。
1 系统的总体结构和原理
本文设计的分布式伺服系统的总体结构如图1所示。系统由主控制器PLC、CAN总线和现场伺服单元节点组成。PLC是整个系统的主控制器,除了对各个伺服电机发送实时控制命令外,还需要接收各驱动器节点的工作状态信息,并进行判断给操作人员以提示或报警。系统中所有的伺服电机系统都有各自的CAN接口,都挂接在CAN总线上构成如图1所示的分布式控制系统。系统中若有节点同时向总线发送CAN信息时,根据每条信息的标识符(ID)进行仲裁,决定占用总线的优先级,信息的ID越小优先级越高。这就是CAN总线的非破坏性总线仲裁机制,由此决定同时发送到总线上的不同报文对总线的占用权[3-4]。
2 系统硬件构成
2.1 主控制器PLC模块
本系统的主控制器PLC选用的是芬兰EPEC公司生产的EPEC 3G系列控制模块中的一种,该模块功能强大,性能优越;坚固、体积小、耐低温、抗振动、抗强电磁干扰,并具有高压、过载、过热和输出短路保护功能;16位的高性能微处理器和超大容量的内存空间使其具有很强的数字处理能力,可以完成较复杂的算法;具有丰富的I/O口资源,包括AI、DI、DO和PWM输出等,还具有CANopen和CAN2.0B 两个总线接口,可以与很多标准的CAN总线产品直接连接,而且接线简单方便,可靠性高。本系统利用的是该模块的CAN2.0B总线接口。
2.2 伺服驱动器节点硬件原理
本系统目前的工程应用是控制油门阀的开度,图1中的每1个伺服电机系统就是一个集成的直流电动推杆,其包括DC 24 V直流电机、推杆机构和推杆位置传感器。通过电机的正反转带动推杆机构直线运动从而控制某型号油门阀的开度大小。
伺服驱动器的CAN节点主要由单片机AT89C52、AD芯片、CAN控制器82527、收发器PCA82C250和继电器构成,其硬件原理如图2所示。单片机从CAN总线上接收PLC发送的位置给定命令,推杆位置传感器的反馈电压信号经AD转换后进入单片机,与位置给定量进行比较,然后完成推杆位置的闭环控制算法。控制量通过单片机的I/O_1和I/O_2输出,经过驱动芯片后,I/O_1的信号控制1个双刀双掷继电器实现电机的正反转切换,I/O_1的信号控制1个单刀继电器以控制电机的启动和停止[5]。
3 系统软件设计
系统CAN总线网络的通信协议是按照CAN2.0B标准设计的,采用11位标识符的标准帧格式,初始波特率为250 Kb/s(可修改),各节点的数据发送方式都采用广播式,接收数据时采用报文标识符过滤的方式从总线上接收本地所需要的数据。
3.1 PLC控制程序
系统选用的PLC的软件开发环境是CoDeSys,它是德国3S公司开发的一种可视化PLC编程环境,支持IEC11311-3标准的指令表、梯形图、功能模块图、顺序流程图、结构化文本、连续功能图等6种编程语言,用户可在同1个项目中选择不同的语言编写程序。CoDeSys以工程文件的形式组织程序的各个对象。1个工程文件包含PLC程序里的所有对象:POUs(Program Organization Units)、数据类型和资源。1个POUs包括主程序(PLC_PRG)、子程序(PRG)、功能块(FB)、函数(FUN)及语句,其中主程序必须命名为PLC_PRG。子程序可以调用函数和功能块,但函数和功能块不能调用子程序,且当程序在线运行时,子程序中的中间变量值是可视的。另外,CoDeSys还具有丰富的库文件资源,编程过程中可以灵活调用,大大节省了软件开发时间。
根据CoDeSys程序编写的特点,系统的PLC程序是用结构化文本语言编写的。程序的主要功能是把由AI口输入的油门控制脚踏板的模拟电压进行一定调理后通过CAN总线发送给各个被控节点,并从CAN总线上接收各节点的状态信息,进行判断后对操作人员给出提示或报警信号。PLC的CAN总线通信初始化的主要设置有:波特率等相关参数、报文滤波参数、创建接收报文的数据缓存区等,这些设置都可以直接调用CAN2.0的库函数实现,十分方便。PLC在发送数据时,调用库函数CAN_IITX(),设置ID、DLC等参数,把数据打包给每帧数据段的相应字节即可;接收数据时,需要先调用库函数CAN_II_GET_MSG()创建接收数据缓存区,设置OBJ、ID等参数(OBJ是缓存初始化序号, ID是接收数据的标识符),实现报文过滤。然后调用库函数GET_MSG(),其参数MESSAGE必须与缓存区初始化序号OBJ相等,才能读入相应缓存区的数据。函数GET_MSG()读数据是分字节读取的,可以很容易实现数据的字节操作和位操作,可为数据的计算和处理提供方便。顺序循环执行PLC程序,本系统设计的循环周期为10 ms,可以满足控制系统实时性的要求。[!--empirenews.page--]
3.2 单片机程序
单片机的主程序流程如图3所示,包括单片机与82527的初始化程序和各子程序。对反复执行的程序段利用主程序调用子程序的方式实现。子程序主要有闭环控制子程序、故障处理子程序和参数修改子程序[6]。
系统的闭环控制采用的是Bang-Bang算法。该算法是一种时间最优控制,且算法简单,便于单片机实现,又能满足系统控制精度的要求。设精度允许的推杆位置误差带为[-Δ1,Δ2],当前偏差为e(t),-Δ1≤e(t)≤Δ2时,可认为推杆当前位置即为给定要求的位置。若把控制量u(t)归一化处理,则此算法可以表示为:
由于伺服电机正转和反转时推杆运动的惯性不同,所以正、反向最大误差允许值Δ2和Δ1一般是不相等的。图4是Bang-Bang算法子程序流图。
故障处理程序处理的故障包括CAN通信中断故障、位置反馈断线故障、电机堵转故障等,通过对这些故障的自动处理或给出提示信息提高了系统的可靠性。控制器在不同场合使用时,对一些参数的要求也不相同,如控制器CAN报文的ID、通信波特率、控制死区、位置标定等参数的值都可以通过CAN总线报文进行人工修改。本设计选用的X5045芯片带有512字节的E2PROM,可由单片机对其存储空间进行串行读写,因此,X5045芯片除了实现单片机的上电复位和看门狗功能外,还可把需要进行修改的参数存放在其E2PROM空间中。对故障处理和参数修改子程序的具体编写这里不再详述。
4 实验结果及分析
本系统实现1个脚踏板同时对2个油门阀的控制,脚踏板电位器输出的电压信号经主控制器PLC的模拟量输入口进行A/D转换,再通过CAN总线接口发给2个伺服驱动节点,控制油门阀的开度快速精确跟踪脚踏板的运动变化。在实际应用过程中,PLC还用于整车的其他控制功能。由于通信线使用的是普通双绞线的特征阻抗120 Ω,所以需要在CAN总线两端的CANH和CANL之间各加1个120 Ω的终端电阻,使总线阻抗匹配,以较好地抑制干扰。
经过实验,系统能够达到以下要求:
(1)在波特率250 Kb/s、总线长度100 m的情况下,各节点之间通信正常,2个伺服驱动节点能正常工作。
(2)推杆的有效运动长度约为50 mm,5 s内可实现全程运动,可满足油门阀调节快速性的要求。
(3)图5是调试过程中通过CodeSys开发环境的变量观察窗口绘出的2个推杆运动的阶跃响应曲线,其中图5(a)是控制推杆伸出的情况,图5(b)是缩回的情况。图中,x表示位置给定量的阶跃变化,y1、y2分别表示2个推杆位置对阶跃给定的动态响应曲线。由图可以看出,2个推杆的位置均能及时跟随给定量的变化,并能达到控制精度的要求。
本文设计的分布式直流电动伺服系统已经应用在某大型工程运输车的油门阀控制中,其工作稳定可靠,与气动油门相比,大大提高了油门控制的响应速度和系统的可靠性。该系统的伺服驱动节点结构简单、成本低廉,CAN总线网络的应用使整个系统具有很强的通用性和可扩展性,根据应用需要可以方便地增减驱动节点的数量,实现更多轴和多点的伺服控制系统,并进一步实现多电机的协同控制。