采用DSP和CAN的电机同步控制系统与通信
2.3.2主从通信
下面的程序是DSP平台和上位机的通信,主节点CAN网卡中的CAN模块初始化和发送子程序。调试过程中需要注意:通信节点的波特率要求一致;主从通信时要求CANMCR = 0x0480,使通信处于正常发送状态;CANH与CANL之间连接终端负载电阻抗干扰。
void CANInit()
{ asm("SETCINTM "); /* 禁止中断 */
IMR = IMR | 0x011; //使能CAN中断
CANIMR = 0; //屏蔽所有中断
CANIFR = 0xFFFF; //清除已挂号中断
CANMCR = 0x0480; //CAN处于正常工作状态
CANMCR = CANMCR | 0x1000;//设置CCR,改变配置请求;
While ( (CANGSR & 0x0010) == 0 ){} //设置CCE,更改配置启用;
CANBCR2 = 0x027; //设置波特率50Kbps
CANBCR1 = 0x005E;
CANMCR = CANMCR & 0xEFFF;//清除CCR位;
While ( (CANGSR & 0x0010) == 1 ){} //清除CCE,禁止对配置寄存器进行操作;
CANMailBoxInit(); //初始化邮箱
asm("CLRCINTM ");/* 开中断 */
CANTCR =0x0080;//发送5号邮箱内容;
While ( (CANTCR & 0x8000) == 0 ){}//发送成功 }
3 同步措施及实现
在对多电机的同步控制中,解决电机的实时性问题十分重要。CAN总线具有点对点、一点对多点及全局广播传送数据的功能。虽然CAN总线的信息存取利用了广播式的存取工作方式,信息可以在任何时候由任何节点发送到空闲的总线上,然后根据信息标文符决定是否读取信息包中的数据以判断是否使用这一信息,但是由于各电机的实际情况不同,即使命令同时传送到节点,实际命令的实施时间也不能得到保证。笔者认为仅依靠CAN总线的广播数据功能实现同步控制会产生误差,可以通过软件编程实现误差较小的同步控制。采用两次命令的方式,首先由主站给需要同步的从站用广播的方式发送准备命令和同步速度,主站确认收到准备好命令之后发送第二次具体的命令即启动同步命令。这样可以使误差相对减少。
4 结束语
本文研究了基于CAN总线的多电机同步控制网络的组成和通信实现,设计有效的将DSP的高速处理能力和CAN(Controller Area Network)总线的高性能、高可靠性结合起来,具有很高的使用价值和广阔的应用前景。以上代码全部调试通过,实验证明适用于多台电机串行通信的实际应用以及可以根据实际的系统进行扩展和移植。
DSPCAN电机同步控 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)