|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
<strong>1 引言</strong>
随着控制、计算机、通信、网络等技术的发展.传统的控制系统己越来越不能满足现代工业的要求。以信息技术为基础的网络集成自动化系统己经成为当今自动化领域技术发展的热点之一,它的出现标志着丁业控制领域又一个新时代的开始,并将对该领域的发展产生重要影响。现场总线就是顺应这一形势发展起来的新技术。本文研究设计了总线监控系统中的现场智能节点,智能节点通过执行应用软件要实现两项任务:一是能够与总线上的其它节点进行数据交换,二是能够按照通过网络或键盘下达的控制命令驱动步进电机按照要求动作。
<strong>2 现场智能节点的整体框架</strong>
<ignore_js_op>
2010-3-25 10:13:34 上传
<strong>下载附件</strong> (7.14 KB)
</ignore_js_op>
图1 智能节点主程序流程图
对于CAN总线下的智能节点,为了满足及时指示步进电机执行运动.实时接收和发送报文,及时处理用户下达的控制指令等要求,程序采用的是顺序执行主程序和实时中断程序相结合的方式。软件设计分块进行,主要划分为以下几部分:CAN总线通信程序,显示及键盘输入程序,控制算法程序等。主程序流程如图1所示。
<strong>3 CAN总线通信程序与LED显示驱动</strong>
CAN总线通信程序是指在AT89C52控制下,模块将采集到的数据发送到总线上供CAN WEB SERVER或其他智能节点使用,或是接收由CAN WEB SERVER传送的由监控PC下达的控制指令。该部分软件的程序流程如图2所示,在通电或者复位后,主控制器首先对SJA 1000控制器进行初始化,建立CAN总线通信。CAN总线通信程序由三部分组成:SJA1000初始化,接受和发送。
<ignore_js_op>
2010-3-25 10:13:34 上传
<strong>下载附件</strong> (4.04 KB)
</ignore_js_op>
图2 CAN通信程序流程图
3.1 SJA1000初始化
初始化是在程序运行前对SJA1000的丁作方式进行设定, 使其能够按照用户需要的方式进行CAN总线通信工作。
SJA1000 CAN控制器在通电后或硬件复位后,必须通过初始化设置以建立CAN通信。而且,SJA1000可以在主控制器工作期问被再次初始化,这可以通过发送软件复位请求来实现。系统上电后,CAN控制器在引脚上获的一个复位脉冲,似的进入复位模式。在开始对SJA1000各个配置寄存器进行设定之前。主控制器通过读复位模式,请求标识来检测SJA1000是否进入复位模式。因为单片机AT89C52的上电复位时问和SJA1000 的复位时间有偏差,单片机要等待SJA1000完成上电复位后才能对SJA1000配置寄存器进行配置,存有配置信息的寄存器只能在复位模式下才可进行写入。
SJA1000初始化程序在复位模式下,需要配置下面的寄存器:时钟分频寄存器,接受代码和接受掩码寄存器,总线十续寄存器,输出控制寄存器。在这些配置信息配置到SJA1000寄存器后,通过消除复位请求模式使SJA1000进入操作模式。
3.2 CAN发送程序
对SJA1000进行初始化建立CAN总线通信后,模块就可以通过CAN总线发送和接受CAN数据包。消息的发送由CAN控制器SJA1000根据CAN的规则自动完成,主控制器必须把要发送的信息送到SJA1000的发送缓冲器中,并设置“发送请求标识位”于命令寄存器中,发送过程既可南SJA1000产生的中断请求来控制。也可通过检测SJA1000控制部分的状态标识符来控制。
在本论文的设计中,当系统初次上电或硬件复位后,节点模块会主动向CAN WEB SERVER发送节点的状态信息,在以后的CAN通信中.则采用只有接收到CAN WEB sERVER的控制命令后,节点模块才会将节点数据作为响应发送到CAN总线上。因此,单个节点模块向总线上发送数据的频率不高,在编程时将发送数据根据通信协议写入发送缓冲器中,通过置位控制命令寄存器的发送请求位,就可以将数据发送到CAN总线上。发送流程如图3所示。
当多个节点响应CAN WEB SERVER的命令时,有可能产生同时向CAN总线上同一地址发送不同数据,从而导致个别节点不断累积发送错误而最终进入总线关闭状态这种错误的产生。为了避免这种错误的产生,基于CAN总线的特点:任何节点均可向总线发送数据,也可接收到总线数据,在程序中设计了这样的发送策略:将CAN WEB SERVER的接收掩码寄存器设置为全“1”,即可以接受总线上的全部数据,节点模块的待发送数据包的标识符由本节点的地址信息构成,即节点通过总线向自己发送了一个数据包,但同时义能够被CAN WEB SERVER接收到,因CAN总线上的节点地址都是唯一的,故能够有效的避免前面所提到的错误。
<ignore_js_op>
2010-3-25 10:13:34 上传
<strong>下载附件</strong> (2.45 KB)
</ignore_js_op>
图3 CAN发送程序流程。
3.3 CAN接受程序
CAN控制器SJA1000根据规则自动接收消息,接受到的消息放到接收缓冲器,此时接收缓冲器状态标示RBS置为“1",同时向A1r89c52产生一个接收中断,AT89C52响应中断后将消息保存到程序设置的消息缓冲中,同时释放接收缓冲器井对消息内容做出反应。中断控制接收数据的流程如图4所示。
3.4 LED数据显示和键盘输入程序
ZLG7289B内部含有译码器,可直接接收BCD码或16进制码,并同时具有2种译码方式,此外还具有多种控制指令,如消隐、闪烁、左移、右移、段寻址等。
<ignore_js_op>
2010-3-25 10:13:35 上传
<strong>下载附件</strong> (4.55 KB)
</ignore_js_op>
图4 中断控制接收数据流程
<strong>4 控制算法程序</strong>
通过运行控制算法程序,使得智能节点能够按照预定要求产生正确的动作。控制算法程序主要由二部分组成:键盘功能控制.步进电机运动控制,总线命令响应控制。
4.1 键盘功能控制
键盘功能控制程序依据AT89C52获得的不同键值,控制智能节点完成诸如步进电机运动圈数、角度设定,步进电机的启停等多种功能。各键对应的键盘功能见表1所示。
表1键盘功能
<ignore_js_op>
2010-3-25 10:13:35 上传
<strong>下载附件</strong> (3.99 KB)
</ignore_js_op>
4.2步进电机运动控制
步进电机运动控制包括:速度控制,计数单位控制.计数控制,方向控制。在本论文设计中,步进电机速度控制程序将变量“TimePerPulse”作为速度控制参数,该变量与定时器1 (T1)和参数count Time相配合可实现步进电机已不同的速度动作。其中T1为100us定时器,当T1每计时100uS后产生一个中断,使得Count Time加“1”,当count Time=TimePerpulse时,AT89C52会通过端口发送一个脉冲控制步进电机走一个步进角,故步进电机转动一圈所需时间的计算公式为:
步进电机转动一圈所需时间=TimePerPulse*(细分数*200)*100(us)
式中(细分数*200)表示步进电机转动一圈所需要的全部脉冲数。
在本论文设计中.可以控制步进电机以角度或圈数这两种不同的计数单位控制步进电机的运动。当处于角度计数时,因步进电机的步进角细分为1时是1.8°/脉冲,即1度角对应的脉冲数不是整数,所以需要纪录以((1/360°)为单位的剩余脉冲计数,以避免累积误差。
4.3总线命令响应控制
当智能节点接收到总线数据后,需要对接收到的数据加以分析,以判断总线命令的类型.从而转入与该命令相对应的控制程序段中进行相关操作。接收数据各字节所代表的含义,在程序中通过一个结构加以说明。在程序中,首先根据参数判断命令类型,并依据命令类型来解释联合体中的数据应作为哪个命令的参数来进行处理。
<strong>5 本文结论</strong>
由于CAN总线的高速通信速率、高可靠性、连接方便、多主站、通讯协议简单和高性能价格比等突出优点,被公认为几种最有前途的总线之一。在本论文设计中.设计并实现了一个CAN总线测控系统中可控制现场设备的智能节点。
本项目产生的经济效益约150万元。
作者:杨长春 来源:《微计算机信息》(嵌入式与soc)2009年第25卷第5-2期 |
|