找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

[嵌入式/ARM] I2C总线在大幅面高速彩色喷绘机中的应用

[复制链接]
admin 发表于 2013-3-21 04:29:14 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
摘  要: 介绍了I2C总线的结构、工作原理和数据传输方式,详细讨论了基于I2C总线的大幅面高速彩色喷绘机软硬件设计。经研究测试,系统能够喷绘出高精度彩色图像,达到了预期要求。
关键词: I2C总线;喷绘机;ATmega8;EEPROM;SAA1064
    随着大型喷绘机应用领域的拓展与普及,人们对喷绘产品的质量要求也越来越高。为了提高喷绘产品的清晰度,本系统采用分组喷头,每组6色或者8色,共3组~6组可选。考虑到通信效率和电路的简化设计,采用简单实用的I2C总线实现主控制系统与多喷头之间的数据传输,同时基于I2C总线与SAA1064驱动芯片扩展了4个数码管用于显示和校验。
1 I2C总线的概念
 I2C总线是Philips公司推出的芯片间串行数据传输总线,软硬件协议十分巧妙,用两根线(SDA、SCL)即可实现完善的全双工同步数据传输,能够十分方便地构成单主机系统或者多主机系统[1]。任何一个具有I2C接口的器件,不论其功能差别有多大,都能通过串行数据线SDA和串行时钟线SCL连接到I2C总线上[2]。从而简化了系统设计的复杂性,提高了系统的抗干扰能力,给用户设计应用系统带来了极大地方便。
 在I2C总线上的每一个器件都有一个唯一的识别地址,器件之间的通信采用主从方式,主机与从机之间的通信是相互的,但主从关系并不持久,由数据传输的方向决定。发送并控制数据传输的器件称为主机,此时在I2C总线上任何被寻址的器件都称为从机。一般主机负责起始和终止信号的产生,当主机发送了起始信号(SCL为高电平时,SDA产生一个下降沿)后,再发送从机地址来选择需要通信的器件。从机地址有7位和10位两种,本文仅介绍7位地址的寻址方式。寻址信号由一个字节组成,高7位为器件的地址,最低位为方向位,用来表明数据传输的方向。当方向位为“0”时表明主机对从机的写操作;为“1”时表明主机对从机的读操作。
 每一个从机在收到寻址信号后都与自己的器件地址进行匹配,匹配成功后要向主机发送一个应答信号(ACK),主机收到应答信号后将按照一定的时序开始与从机通信。若从机不能响应寻址或需要终止传输过程,从机必须在SDA上输出高电平。主机检测到异常情况后产生一个终止信号或者起始信号。
2 基于I2C总线的硬件设计
 本喷绘机系统采用的是主控制系统板(ARM板)级联多个喷头控制板的结构。由于各喷头的参数和各颜色油墨的参数不同,在系统初始化时要靠I2C总线逐个配置喷头的容积电压和油墨的温度电压补偿表(T-V表) [3]。
喷头的驱动电压取决于喷头的容积电压和当前喷头的温度,喷头温度的变化影响着所盛油墨的粘滞度。为了实现稳定点火,使喷头所喷出的墨点大小一致,达到提高喷绘产品的精度,需要随着温度的变化及油墨温度电压补偿表实时改变喷头的驱动电压。综合多方面的考虑,使用支持I2C总线的ATmega8来驱动喷头。
在喷绘机的研发和使用过程中,设置一个可视模块不仅提高研发的速度而且给用户的使用带来了方便。为了进一步简化电路设计,采用SAA1064芯片驱动数码管。SAA1064是一种支持I2C协议的数码管驱动芯片,在采用动态模式状态下,最多可以支持4只数码管同时显示。基于I2C通信的整体结构如图1所示。
    20121107053416337792901.gif
   


    I2C总线支持寻址工作,需要为每个喷头控制板设定唯一的地址。可以通过软件编程的方法设置喷头板的地址,考虑到喷绘机的批量生产,不可能为每一个喷头控制板烧写不同的程序,采用电路焊接的方式为喷头板设置唯一的地址,在ATmega8上留出3个引脚,通过选择是否焊接0 Ω电阻来区分地址。焊接为输入0,不焊接为输入1。其中000为公用I2C地址,地址111留作备用,这样一组喷头中有001~110共6个从机地址可选,能够满足系统需要。
 数码管驱动芯片SAA1064的器件从地址由高四位固定地址和低四位可编程地址组成。其中高四位器件地址固定为0111,低四位可编程地址由芯片引脚ADR的不同连接方式和读/写位决定[4]。在SAA1064中有5个寄存器单元,分别为1个控制寄存器和4个显示寄存器,其中控制寄存器控制数码管的亮度,动、静态模式及位亮、暗显示;4个显示寄存器存储要显示的数据。
 作为I2C总线器件,SAA1064的数据操作遵循I2C协议的要求。其数据操作格式如图2所示。
    20121107053416400292902.gif
    表中S表示起始信号,P表示终止信号,A表示应答信号。SLAWR为SAA1064在写模式时的器件地址,SUBADR为器件控制寄存器地址,COM为控制命令。由于SAA1064内部有一个增量控制器,在通过SDA线向其发送控制寄存器地址后,控制命令字和要显示的数据可依次写入相应的寄存器中[5]。
3 基于I2C总线的软件设计
 系统上电初始化期间,主控制系统根据喷头所盛油墨颜色将油墨的温度电压补偿表和喷头容积电压等一系列参数下载到喷头控制板上,存储在ATmega8内部512 B的EEPROM中。在EEPROM中数据的存储格式规定为:在地址0处存储油墨的颜色;地址1处存储喷头的型号;地址2~3处存储喷头的容积电压;地址4~5处存储喷头偏移电压;地址6~7处存储A/D电压调整标准值Vset;地址8~9处存储A/D电压调整值ADset;地址10~400存储温度电压补偿表。EEPROM的地址是A/D转换值减去300,地址内存储的是A/D对应电压偏差值的10倍,其中以8位补码进行表示。例如,地址为100的内存里存储的是FF,地址为105的内存存储的值是0F,其表示的是A/D转换值为400时对应的电压偏差值为-0.1 V,A/D转换值为405时对应的电压偏差值为+1.5 V;地址401~507留作备用;地址508~509存储A/D校验0 V电压;地址510~511存储A/D校验1.23 V电压。
3.1 喷头通信模块
 ATmega8提供了实现标准两线串行通信的硬件接口TWI(即I2C总线,以下称为I2C),支持主机/从机模式,数据传输率最高可达400 kHz。其I2C接口是面向字节和基于中断的,在所有总线事件后,如收到一个字节或发送了一个起始信号等,都将产生一个I2C中断。由于I2C接口基于中断,因此I2C接口在字节传送和接收过程中,不需要应用程序的干扰,由其内部寄存器自动控制。在ATmega8中有5个I2C寄存器:(1)TWBR是I2C波特率寄存器用于产生和提供SCL引脚上的时钟信号;(2)TWCR是I2C的控制寄存器,负责产生I2C的应答、起始、终止信号和控制中断等;(3)TWSR是I2C的状态寄存器,反映了I2C的逻辑状态和总线状态;(4)TWDR是I2C的数据寄存器,用于存储要发送的数据或接收到的数据;(5)TWAR是I2C的地址寄存器存放需要通信的从机地址[6]。
I2C中断服务程序负责与主程序进行通信。在每次喷头温度变化后,I2C中断服务程序都要将温度变化值传给主程序,主程序以此查找温度电压补偿表来获取补偿电压。此中断服务包括从地址+写、从地址+读、收到数据、数据发送成功、接收到起始条件或停止条件等。由于从地址的匹配由硬件负责,中断服务程序仅负责将收到的数据送到接收缓冲区Rbuf及将发送的数据从发送缓冲区中取出并发送出去。I2C中断服务流程如图3所示。
    20121107053416415912903.gif
    中断服务程序在接收到从机地址写命令(TWSR=0x60)时表示主机要求写数据到从机地址中,因此要准备好接收缓冲区的指针RbufP,并向主程序发出开始接收信号即将开始接受标志位bI2Cin置1,随后应该是收到数据中断(TWSR=0x80),将收到的数据放入接收缓冲区中并增量接收缓冲区指针,如此反复直到接收到停止条件(TWSR=0xB8,STA=0),这时将数据帧完成标志bI2Cend置位。若接收到主机从机地址读命令(TWSR=0xA8)时,要复位发送缓冲寄存器SbufP指针,并将发送寄存器中的第一个字节发送出去,在数据发送成功后(TWSR=0xB8),将后续的数据发送出去,并增量发送缓冲区指针,直到接收到停止条件。
 无论是从机地址写命令、从机地址读命令,收到数据还是数据发送成功,I2C的传送过程都没有完成,因此在返回时需要置位TWINT(TWI中断标志),以便继续下一步的I2C通信。但在收到停止条件后,表示一次完整的I2C通信完成,此时需要主程序对刚才I2C通信的数据进行处理,因此这时不能复位TWINT,要暂时停止I2C动作,同时向主程序发送标记bI2Cend,通知主程序进行数据处理。为保证下一次I2C通信能够正常进行,主程序在处理完I2C数据后要将TWINT置位,以便开启下一次的I2C传送。
 I2C数据处理程序处于主程序的循环中,当主程序发现数据接收就绪标志bI2Cend置位时进入本处理程序中。首先从缓冲区Rbuf的第一个单元中取出命令和地址A8。然后对命令进行判断,如果是写EEPROM地址命令(Command=0000001),则将Rbuf的第二个字节与前面获得的A8合并构成9位地址,等待EEPROM允许读写标志EEWE变为低电平后,将9位地址写入EEPROM地址寄存器EEAR中。然后复位TWINT,开始下一帧的传输。EEWE变为低电平表示上一次EEPROM结束,若上一次EEPROM读写没有结束就变更地址可能会发生错误。
 若是EEPROM写操作命令(Command=0000010),则将Rbuf的第二个字节取出写入EEPROM数据寄存器EEDR中,并置位EEPROM开始写标志EEMWE和EEWE,开始EEPROM的写操作。最后复位TWINT,开始下一帧的传输。    如果是EEPROM读操作命令(Command=0000100),则置位EEPROM读标志EERE,然后从EEDR中读出数据写入发送缓冲区Sbuf中。真正的发送操作是当I2C中断发生,且I2C状态是从机地址读时,由I2C中断服务程序直接将Sbuf的内容写入TWDR中完成写操作。复位TWINT后,开始下一帧的传输。
 其他命令作为备用,可进行对应的操作,但在结束后都必须复位TWINT,以便开始下一次I2C通信。对错误的命令或无法识别的命令,通过数码管进行显示以便及时排除故障。再复位TWINT,开始下一次的传送。
3.2 数码管显示模块
 数码管仅用于显示数据,在一般情况下I2C总线上的驱动芯片SAA1064只作为从机,接收主机的数据。本系统中用数码管显示EEPROM的非法操作、喷头温度以及初始化时的校准值。
 MCU主程序主要有两个状态,系统启动后首先进入初始化校准状态,校准正确后进入正常工作状态。校准状态负责校准各A/D转换电路中因分压电阻精度产生的误差,并将校准值显示在数码管上以便快速设置。进入正常工作状态后,数码管显示用于显示喷头的温度,当非法操作EEPROM时还可以显示错误类型。喷头控制板上有两路A/D,A/D0用于电压调整器的输出采样;A/D1用于喷头的温度采样。其A/D0的校准显示流程如图4所示。
    20121107053416447162904.gif
    系统初始化开始后,设AD0为查询模式、关闭AD0中断随后启动AD0,经过一段时间,停止AD0并读取AD0采样值。经转换得到电压值,经I2C总线显示在数码管上,判断是否是需要的电压输出值,若不是则不断调整ADset来获得需求值,若显示正确就将ADset和需求的电压输出值Vcur保存到EEPROM中,完成校准工作并返回到主程序中。
 每个喷头控制板作为从机与主控制系统进行多对一的双向数据通信,使得系统布线简捷,传输效率高,降低了系统复杂度和成本。经过试验测试,达到了预期的喷绘效果。本文的方法经简单修改也可应用于其他类似场合,值得推广使用。
参考文献
[1] 何立民.I2C总线应用系统设计[M].北京:北京航空航天大学出版社,1995.
[2] 梁建华,肖伸平.基于S3C44B0X的I2C总线设计[J],微计算机信息,2006,22(5):142-144.
[3] 张秋风,刘晋.基于计算机平台的多喷头喷绘机控制系统的设计与实现[J].微型机与应用,2010,29(24):93-95.
[4] 孙世君,宋强.4位LED驱动芯片SAA1064的原理与应用[J],丹东纺专学报,2004,11(3):4-7.
[5] 周剑利,梁延贵.具有I2C总线接口的发光二极管驱动控制器[J],电子元器件应用,2003,5(11):22-23.
[6] 马潮,詹卫前,耿德根.ATmega8原理及应用手册[M],北京:清华大学出版社,2003.
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-12-23 04:06 , Processed in 0.058013 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表