新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > PIC18单片机的CANopen通信协议

PIC18单片机的CANopen通信协议

作者:时间:2009-12-25来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/173498.htm

程序

  在此例中,PDO报文是在对象字典中用参数和映射参数来描述的。参数决定哪个COB―ID将被PDO使用,此例中RPD0的COB―ID为286,TPDO的COB―ID为187。映射参数包含映射到PDO里的对象在对象字典中的索引和子索引,以及对象的数据长度。此例中映射到RPDO里的对象在对象字典中的索引为3200,子索引为OO,长度为2;映射到TPDO里的对象在对象字典中的索引为3100,子索引为00,长度为1。另外某些相关变量也由对象字典所描述,可以通过sD0对象传输方式进行下载修改或上传观察。此例中的上限温度、下限温度,就由对象字典主索引3000、子索引00和主索引3001、子索引00分别描述。

  2.3 节点的的软件实现

  在节点上实现软件,首先要实现节点接收报文和发送报文的功能。接收报文的过程是,一旦有接收中断产生,就把CAN接收缓冲区接收到的数据和地址放到一内部阵列中,对接收到的报文进行分析,并送去执行相应的子函数(NMT报文接收处理子函数、SDO报文接收处理子函数、心跳报文接收处理子函数、SDO报文接收处理子函数),最后返回主程序。发送报文的过程是,把需要发送的变量放到对象字典里,再把它们映射封装成相应的对象,最后将报文发送到总线上。

  主程序按照流程编写,模块上电后先进行通信初始化。其首先初始化中的通信相关参数、对象字典、节点号,再初始化CAN控制器的硬件,包括的内部寄存器、定时器、串行口、CAN控制器。通信初始化后自动进入节点初始化,并进行一些特定用户的初始化。完成后,发送一个启动报文自动进入预操作状态。此时用户的程序循环执行着,在每个循环里,调用接收报文1次。这个模块用来检查接收到的对象,并作相应的处理。在NMT报文到来之前一直持续在预操作状态。在这个状态里,节点可以通过SD0被配置和设置参数,但是不允许发送PDO。在相应的NMT报文到来后,即收到启动远程节点命令后,进入操作状态,在这个状态就可以进行正常的通信了。在收到NMT报文,即停止远程节点命令,节点进入了停止状态,从而停止PDO和SDO通信。

  3 实验结果

  在软件设计中编写了与上位机的通信模块程序,可以将每个节点接收和发送报文的ID号、数据长度、数据转发到串口,便于上位机进行观测。

  图3为系统传输数据的过程,温度传感节点发送报文过程为发送自启动报文后以周期为1 s发送心跳报文,以周期为100 ms发送PDO1报文,发送数据为传感温度(分别为19°,20°,…,21°…)。上限温度和下限高温都为20°时,温度调节节点接收报文过程为接收到NMT报文命令后进入操作状态,不断接收PDOl报文。温度调节节点发送报文过程为发送自启动报文后以周期为1 s发送心跳报文,以事件触发方式发送PDOO报文(发送数据为工作状态长度为1,当接收到的温度低于20°时发送数据为02表示加热,当接收到的温度高于20°时发送数据为01表示降温,当接收的温度为20°时发送数据为OO表示保持),状态显示灯不断闪烁红色、黄色、蓝色。如在命令节点中发送SDO报文改变对象字典中的上限温度和下限温度,再观察各节点变化。情况1,当上限温度低于20°(为15°)时,温度调节节点一直在降温状态,状态显示灯为红色。情况2,当下限温度高于20°(为25°)时,温度调节节点一直在加热状态,状态显示灯为黄色,情况3,当上限温度高于20°(为25°),下限温度低于20°(为15°)时,温度调节节点一直在保持状态,状态显示灯为蓝色。命令节点在液晶显示屏中显示实时温度,在状态显示灯中显示实时状态。


系统传输数据的过程

  命令节点进行NMT对象操作时再观察各节点状态:当按下按钮1时,节点进入欲操作状态;当按下按钮2时,节点重启。

  从以上两个实验可以看出,整个系统在运行过程中达到了满意的控制效果,实现了基于CANopen协议的对象数据的交换,通信传输理想。

  结 语

  应用自行开发的基于CANopen协议的节点,实现了对4种通信对象信息的通信处理,并通过测试验证了系统信息传递的可靠性、准确性和实时性,很好地满足了基于CANopen协议的温度测控系统的要求;对于CANopen在国内的应用和普及,以及CAN网络和驱动产品尽早和国际接轨,具有重要的意义。


上一页 1 2 下一页

评论


相关推荐

技术专区

关闭