摘要:利用AVR单片机的TWI(Two-Wire Serial Interface)总线构建了智能机器人系统的模块化构架。利用TWI总线实现了主控模块与扩展模块之间的双向多字节通信,介绍了软件编程方法,可以将机器人各传感器模块采集到的数据实时发送至主控制器进行处理。有效提高了程序的运行效率,使得智能机器人整体架构灵活、调试方便、扩展性强。
关键词:TWI;模块化;AVR
引言
模块化设计的机器人系统由主控制模块和扩展模块构成,主要用于检测机器人周围环境信息和机器人自身运动状态,实时获取各种传感器信息,并对机器人运动进行控制。由于要采集的数据信息很多,本系统应用了TWI总线构建模块化架构,模块均采用AVR单片机为主控芯
片:1片ATmega128(主控)、10片ATmega16、2片ATmega64和3片ATmega8。主控制器要实时地汇总并分析各单片机的信息才能对机器人下一步动作作出决策,因此,各单片机之间的通信显得尤为重要。另外,为了方便对电子罗盘进行标定,需要由主控制器向电子罗盘模块发送相应指令。也就是说,主控制模块与扩展模块之间需要实现双向多字节通信,这是一个通信难点。本系统全部模块均采用TWI通信接口,成功建立了一个主机与多个从机之间的双向多字节通信,有效提高了程序的运行效率,使得智能机器人整体架构灵活,调试方便,并且扩展性强。
1 TWI总线简介
TWI总线是对I2C总线的继承与发展,具有I2C总线的特点,即接线简单。外部硬件只需两个上拉电阻,使用两根双向传输线(一是时钟线SCL,一是数据线SDA)就可以将128个不同的设备互连到一起。TWI对I2C总线的发展表现在:它定义了自己的功能模块和寄存器,寄存器各位功能的定义与I2C总线并不相同,且TWI总线引入了状态寄存器,从而在操作和使用上比I2C总线更灵活。两线接口TWI很适合于典型的处理器应用,以及多机间实时通信的应用。
TWI通信接口简单,但是强大而灵活。支持主机和从机操作,器件可以工作于发送器模式或接收器模式。数据传输率高达400 kHz,且支持多主机仲裁。所有连接到总线上的设备都有自己的地址,TWI协议解决了总线仲裁的问题,7位地址信息允许有128个从机。基于以上优点,TWI通信接口非常适合应用于微控制器(俗称单片机)系统。
2 智能机器人系统的模块化结构
本机器人系统以ATmega128单片机为主控制模块,扩展模块包括2个红外传感器模块、6个超声波模块、2个视觉处理模块、1个温度传感器模块、2个里程计模块、1个电子罗盘模块,以及1个陀螺仪模块。扩展模块负责采集相应的数据信息,由主控制器进行处理分析。然后,
及时地对机器人下一步动作进行决策与指示。本系统的模块化结构图如图1所示。其中,超声波模块、视觉处理模块、电子罗盘模块和陀螺仪模块均采用ATmega16单片机,里程计模块采用ATmega64单片机,红外传感器模块和温度传感器模块采用ATmega8单片机。主控制模块与各扩展模块均采用TWI接口。
3 模块化智能机器人系统的TWI总线结构
TWI可以工作于4种不同的模式:主机发送器(MT)、主机接收器(MR)、从机发送器(ST)及从机接收器(SR)。同一应用程序可以使用几种模式。本机器人系统中,ATmega128为主机,其他单片机均为从机设备。目的是实现主机与多片从机之间的双向通信,即主机可以发送多字节数据给从机设备,从机也可以发送多字节数据给主机。TWI的两根线在工作时必须有上拉电阻,既可以通过相关程序使能内部的上拉电阻,也可以在硬件设计时增加上拉电阻。实际应用中,最好软硬件的方法同时使用,双重保障。图2为TWI总线的硬件结构接线图。
4 TWI通信的软件设计
4.1 主机的软件设计
本系统中,主机ATmega128采用轮询TWINT位的方式。主机主程序中的系统初始化主要包括定时器初始化和TWI总线初始化。主机主程序中写函数TWI_write()的详细流程如图3所示,读函数TWI_read()的详细流程如图4所示。一次传输过程包括一个START信号、一个SLA+R/W信号、一个或多个数据包、一个STOP信号。每发送一个信号或一个数据包,均要检验状态寄存器TWSR中的状态码,如果状态码正确,才发下一个信号,若不正确则转出错处理。通过软件编程技巧,可以在一次TWI通信中,实现主机与从机之间的多字节数据传输。同时,在主机主程序流程图中可以看到,在一个循环内,可以实现主机与从机之间的双向数据传输。
4.2 从机的软件设计
对于所有从机,均采用中断方式。采用中断方式时,当TWINT位置位(硬件置位),则程序会自动跳到中断向量,执行中断服务程序。在等待TWINT置位期间,从机可以执行数据采集工作或执行其他程序,从而有效地提高了程序的运行效率。中断服务程序中,只需检验TWSR的状态码,读取或写入数据寄存器TWDR,这样来完成与主机的数据通信。从机TWI中断服务程序流程图如图5所示。
对于不同的从机,硬件方面需要注意的是SCL、SDA两根线位于单片机的I/O端口不同,例如ATmega16的SCL、SDA分别位于PC0、PC1;ATmega8的SCL、SDA则分别位于PC5、PC4。软件方面,需要给不同从机的TWAR赋予各自的从机地址。
4.3 TWI总线的部分程序
为了增强程序的可读性,将各种模式所需的TWI总线状态进行宏定义。对于主机,省略一些数据处理和其他功能程序,最简化的主程序如下:
5 TWI通信的注意问题
由于TWI通信存在主机与从机模块,在单独对主机程序单步调试时,主机单步运行,而从机处于全速运行,主从机步调不一致,单步调试结果显示TWINT位不置位或者TWSR状态码不正确,误认为程序有问题。实际上,程序在全速运行时是可以实现通信的。
另外,根据功能要求,在一次TWI通信中,例如要求主机给从机发送数据的字节数是1字节或2字节,此时,在从机中断接收中,需增加相应接收标志位flag1、flag2,通过各自的标志位分清接收的不同字节的数据,避免产生不必要的混淆与错误。
编程中,要严格按照TWI说明手册中的内容,不同的TWSR状态码时,对TWDR执行相应的操作,对TWCR写入相应的数值。否则,有一点出入,都会造成TWI通信的失败。
结语
本智能机器人系统采用TWI总线构建了模块化架构,优点是系统灵活、扩展性强。TWI通信方法是主机ATmega128器件程序采用查询方式,其他多片从机器件程序则采用中断方式。本文介绍了在一次TWI传输过程中,传送多字节数据的编程方法,并且建立了主机与多从机之间的双向多字节数据通信,可以将机器人各传感器模块采集到的数据实时发送至主控制器进行处理,有效地提高了程序的运行效率。