您现在的位置是:首页 > 汽车

基于CAN总线的分布式控制器设计和实现

2020-01-11 02:26:46

基于CAN总线的分布式控制器设计和实现

近年来大学生的科技创新设计活动越来越丰富,而为每个机电系统设计专门的控制器不仅耗时,而且难以满足系统的稳定性要求,这样就有必要提供一种开放式的控制系统平台,让学生可以在这个平台上进行二次开发。参考文献[1]中等提出了一种基于TCP/IP和CORBA的机电控制器,其构架复杂,功能完全,十分适合工业使用,而对于在校生的设计需求,需要提供一种原理清晰,构架明朗的开放式开发系统,本文所述系统就是基于这个原则。学生可以根据不同的设计要求选择相应的硬件和软件模块,自由组合,经过一些程序编写就可以完成高可靠性控制系统构架。 

    机电系统执行部件包括电机、舵机、液压缸、液压马达等,传感部分有接触和非接触的接近传感器(光电传感器)、图像传感器(CCD、辨色传感器)、声音传感器(麦克风)等,如果采用集中式的设计方式,不仅提高了对设计者的要求,而且难以适应控制要求不断变化的情况。软件设计方面,集中式的硬件设计会使得软件构架十分繁琐,无法多人协同工作,维护困难。控制系统硬件安装方面,集中式的硬件构架很可能增加线束方面的困难。综上所述,采用分布式的设计可以减小设计风险,提高设计效率,增加系统柔性。 

    控制系统分为三部分:信号输入部分、中央处理部分和信号输出驱动部分。信号输入部分包括数字信号输入和模拟信号输入,信号输出驱动部分根据不同的驱动部件设计相应的驱动电路。学生常用的执行部件包括直流伺服电机、直流电机、气动控制阀等,后两者同属于一种控制模式,故驱动部分主要为直流伺服驱动和阀驱动。因此分布式控制模块可以分为:信号输入模块、主控模块、直流伺服电机驱动模块、气动阀驱动模块等。 

    信号输入模块主要是传感器信号的输入和编码,分为数字信号输入和模拟信号输入;主控模块是信息的处理、决策和人机交互的平台,包括键盘输入和LCD输出;直流伺服电机控制驱动模块,采用LM629作为电机控制芯片,通过H桥驱动完成直流电机的PID控制;阀驱动模块用于气动阀的开启、关闭以及直流电机的驱动,故同样通过H桥驱动模式。各个模块之间采用CAN总线构架(如图1)。控制芯片采用P89C58X2,用KeilC和CSOS系统进行算法设计,系统硬件和软件构架清晰,具有良好的扩展性。 

1 硬件电路构架 

1.1 直流伺服电机控制 

    P89C58X2与LM629之间采用总线方式连接,即单片机的P0口通过上拉电阻之后接LM629的数据输入位,HI连接单片机的外部中断口,编码盘输入A、B和IN口分别连接上拉电阻之后接电机的编码盘,而LM629的输出口PWM MAG和PWM SIG分别连接H桥电机驱动的PWM和DIR、编码盘和LM629,H桥与LM629之间均采用高速光隔6N137隔离,如图2。 

    在单板上集成两块LM629,能使结构更紧凑,算法更简单,通过软件可以方便地设定LM629工作在速度模式或者位移模式。 

1.2 CAN总线硬件设计 

    CAN总线是一种具有国际标准的性价比较高的现场总线,其最高传输速度可达1Mb/s,最远传输距离可达10km,性能稳定,十分适合可靠性要求高的分布式系统。 

    本系统CAN总线控制芯片采用飞利浦公司的SJA1000,其支持CAN2.0B的标准协议,并且芯片可以工作在BasicCAN和PeliCAN两种模式下。总线收发器采用飞利浦公司的TJA1050,它符合ISO11898标准,实现CAN控制器和通信线路的物理连接,提高CAN总线的驱动能力和可靠性。

    SJA1000和P89C58X2之间同样采用总线方式连接,连接方法同LM629,而SJA1000和TJA1050之间连接如下:SJA1000的TX0连接TJA1050的TXD,RX0连接RXD,RX1接Vref输出,SJA1000的TX1下拉电阻接地,TJA1050的CANL和CANH就是CAN总线输出。当多节点连接时,CANL和CANH之间需要加1~2个阻值为120Ω的端接电阻,能有效防止通讯总线上产生的信号反射(如图3)。在软件设计中,通过修改SJA1000的寄存器使CAN工作在PeliCAN、单滤波器、正常模式和扩展帧模式下。 

2 CAN应用层协议 


    为了让各个分布式模块之间能协同高效工作,对数据传输之间的格式和意义做一个规定,这就是应用层协议。 

2.1 CAN总线的应用层协议 

    控制系统之间需要一定的协议支持,本系统采用一主多从的控制模式,主控模块作为传感信号的接受者、处理者和驱动信号的发布者;信号输入模块作为信息的采集者和过滤者;而伺服控制模块和阀驱动模块作为动作的执行者(如图4)。

    在信息控制面,主控模块要向其他控制模块发送“建立连接”请求,在收到所有模块的“连接应答”之后才开始工作,否则发出连接错误信息,并指出没有连接的模块。主控模块可以通过“数据上报”命令和“数据停止上报”命令打开和关闭主控模块与信号输入模块之间的链路。“执行器开始”命令和“执行器停止”命令用于开始或停止驱动器,这里可以指直流电机或者气动阀。 

2.2 CAN总线的数据帧结构 

    CAN接受一帧最多为8字节,本文规定了应用层协议,如表1。 

    源地址是指命令的发起者;数据/命令表示本帧是命令面信息还是数据面信息;功能则表示本帧的作用,比如“建议连接”请求;数据位数表示数据的字节数,最多四位,对于命令帧则忽略该位。 

3 软件开发平台 

    根据不同机械系统的要求,设计人员可以选择不同的硬件组合。为了方便软件设计,本控制器采用了笔者开发的CSOS操作系统,该操作系统基于时间片轮换算法,支持多任务操作,各任务之间的数据通过全局变量传递,占用系统资源少、易学、易用,适合本控制系统的要求。 

3.1 控制器的多任务操作 

    信息接受任务,包括外部传感器的信号,或者总线上的命令信息和数据信息,将信息解包之后获得有用的数据(如CAN协议帧中的有用信息段)扔向数据通道,提供其他任务调用。 

    算法处理任务,从数据通道获取信息字段,经过计算将结果扔向数据通道。 

    信息输出任务,对算法任务数据结果进行打包向驱动器或者CAN总线发送,用于驱动控制器或者向CAN总线投放数据包。 

    LCD显示任务和键盘输入任务,这两个任务分别负责数据显示和键盘的输入。

3.2 多任务分配实例 

    以主控制模块的软件为例对上述构架进行说明,如图5。 

    每个任务独自运行,将各自的计算数据放入数据通道中,或者从数据通道中获得相应数据进行计算,这样的构架结构清晰,柔性强。 

4 控制器应用实例 

    笔者将该控制系统应用于轮系机器人的寻线控制上,即让机器人跟踪地面上一定宽度的引导线。 

4.1 硬件选择 

    根据控制要求,硬件上需要信号输入模块,主控模块和伺服驱动模块。 

4.2 传感器安置和信号输入模块 

    笔者采用光电传感器,利用不同颜色对于光的反射效果不同的原理,区分出地面的指引线,光电传感器布局如图6。 

    机器人采用14个光电传感器(数字量),黑色点表示在引导线上为0,白色点表示在引导线外为1,并且通过光电传感器间距和引导线宽度之间的关系,保证最多只有3个光电传感器在引导线内,从这样的一系列逻辑组合就可以知道机器人现在的姿态。信号输入模块中的算法任务对采集信号做滤波,过滤误信号,之后将数据传输给信息输出任务,打包后发向总线。 

4.3 寻线算法和主控模块 

    主控模块的信息接受任务获得上述信息后,解包并将相关的数据扔向数据通道,算法任务获得数据进行运算。 

    由图6可知,7个光电传感器和引导线之间有9种状态,上下两组状态就可以确定目前机器人的姿态,其构成一个9×9的二维矩阵,易知共有81种不同的组合。通过这个二维矩阵可获得机器人现在的状态,用左极偏、左大偏、左中偏、左小偏、正常、右小偏、右中偏、右大偏和右极偏九种状态来表示,对应整数-4~+4。 

    给出机器人寻线控制PID表达式: 

     

    其中ΔVk是第k时刻需要的左右轮速度差,即在总线上传输的电机速度参数;e表示偏移状态和正常状态之间的差,在这里就是状态所对应的整数;kp,kI,kD分别为比例、积分和微分常数。 

    算法任务将ΔVk扔到数据通道中,由信息输出任务将其打包后发送给CAN总线。 

4.4 输出驱动和伺服驱动模块 

    该模块接收到ΔVk之后采用“均分原理”,把差速均分增加在左右轮电机上,即: 

     

    VL和VR分别为左右轮的输出转速,Vm为无偏移情况下的左右轮输出。 

    算法任务将VL和VR变为符合LM629的参数格式之后发送到数据通道,信息输出任务获得该数据之后直接对LM629进行驱动。 

    整个基于CAN总线多任务构架的控制系统信息流图如图7所示。 

    CAN总线在多任务操作系统的构架下可以看成是透明的,模块之间的通讯可以简单地看成各个任务之间的通讯,做到了各个模块之间的无缝连接。在用该控制器进行机电系统设计时,设计者的注意力只需要放在各模块的算法任务部分。本系统可以很好地满足在校生科技创新的需求,方便学生构架机电系统或者机器人的控制器,让设计者把更多的精力放在机电控制算法上面。