登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

朱振刚 日记

色谱仪,光谱仪,红外线分析器制造

 
 
 

日志

 
 

I2C总线的多处理器测控  

2013-03-31 09:19:02|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    随着计算机和电子电路技术的发展,嵌入式应用已渗透到工业控制的各个领域。然而在工业应用中加工设备实现了智能化、自动化的同时,测控设备的复杂度也越来越高,加工产品时需要的测量数据参数也随之增多。由于对系统实时陛的需求逐渐增加,若采用单个测量点,则采集数据范围有限,对整个加工器件的处理将得不到非常精确的控制。如果采用很多点测量对器件进行加工处理,由于单个处理器处理能力有限,对大量的数据不能及时处理,加之处理器接口有限,大大限制了采样点的数量。本着并行处理、响应及时和实现简单的原则,本文提出了一种利用多处理器通过I2C总线进行大量数据采集和控制的方案。

1 I2C总线

    I2C是由飞利浦公司开发的一种两线式串行总线,现在已经成为一种国际标准,具有协议完善、支持芯片较多、占有I/O口线较少等优点。它由SDA数据串行信号线和SCL时钟信号线组成,一个用来传输通信数据,另一个用来控制数据传输时钟。I2C能在最大总线负载下以100 kb/s的速率运行,器件能够连接的器件个数仅受最大400 pF的电容限制。数据在I2C上通信的过程如图1所示。


图1 I2C通信

    SDA和SCL是通过一个上拉电阻与正电源连接的双向信号线。当总线空闲时,这两条信号线都保持高电平。当SCL线处于高电平、SDA线从高电平向低电平跳变时为起始信号;当SCL线处于高电平、SDA线从低电平向高电平跳变时为停止信号。起始条件和停止条件之间为通信传输的过程。

    主机初始化传输,是产生时钟信号和终止传输的器件。主机可作为接收器件,也可以作为发送器件,通信的开始都是有主机发起,并可以在任何时刻发起通信开始信号,但是任何时刻总线上也只能有一个主机和一个从机通信,当通信冲突时,主机间要靠仲裁机制来决定由哪个主机接管总线。从机配合主机通信,由主机寻址,按照主机的命令做出相应的回应。

2 总体设计和硬件结构

    将多个微处理器连接到I2C总线上,把一个高性能控制器作为主控制器,负责接收从测量处理器发送来的数据。这些数据都已经过采集处理器处理,不需要主控制器再进行处理,从而降低了主处理器的处理负担。并且当接收的数据达到需要发出控制命令时,则向控制处理器发送一个控制命令和任务参数,控制的具体操作则由控制处理器去处理。

    笔者采用一个由Samsung公司生产的32位高性能微控制器S3C2410和多个Freescale公司生产的低功耗微控制器MC68S08QG8(以下称QG8),并借助于传感器件、E2PROM存储器件和显示模块实现该系统。

    设计总体原理框图如图2所示。


图2 总体设计图

    S3C2410采用ARM920T内核,主频达203 MHz,适合于低成本和功耗敏感的需求。内部集成了一个I2C控制器,通过寄存器可以方便地对其进行控制。QG8是Freescale公司HCS08家族中的一员,其所有的微控制器均使用增强型的HCS08核,带有I2C模块,并可以通过寄存器配置,从机地址可通过编程设定。该处理器的特点是高性能、低功耗,且价格便宜。

    I2C模块带有一些配置I2C通信的寄存器,IICA用来配置微控制器的从机地址,IICF分频寄存器,可软件编程为64种串行时钟频率之一;IICC用来初始化和控制I2C模块的通信;IICS状态寄存器用来显示I2C通信过程中的传输状态,IICD数据寄存器用来存放要发送和接收的数据。通过对这些寄存器的状态读写实现I2C接口的通信。

3 软件实现过程

    在Linux系统下要使用ARM的I2C适配器,首先要在Linux系统下实现I2C的驱动,在此基础上开发应用程序,然后在8位机上实现12c的主从响应程序,最终完成系统的软件部分的设计。

    3.1 I2C接口驱动

    针对这款32位高性能处理器,在Linux下使用I2C模块要完成I2C核心、I2C总线驱动和I2C设备驱动3个部分的驱动,只有这3个部分的相互协作才能形成比较适合应用的I2C驱动程序。

    Linux驱动的I2C文件夹下有i2c-core.c这个文件,它实现了I2C core框架,是Linux内核用来维护和管理的12C的核心部分,其中维护了两个静态的List,分别记录系统中的I2C driver结构和I2C adapter结构。I2C core提供接口函数,允许一个I2C adatper,I2C driver和I2C client初始化时在I2C core中进行注册,以及退出时进行注销。同时还提供了I2C总线读写访问的一般接口,主要应用在I2C设备驱动中。

    驱动总线为系统中每个I2C总线增加相应的读写方法,但其不会进行任何的通信,需等待设备驱动调用其函数。S3C2410的总线驱动中主要通过_i2c_xfex()以及它的依赖函数来实现,所有总线上对设备的访问最终应该由它来完成。I2C设备驱动是对I2C硬件体系结构中设备端的实现。

    设备驱动主要是针对8位处理器QG8部分的驱动程序,该部分定义了两个数据结构,其中一个是
    struet i2c_driver i2c{
    name:"I2C QG8 Driver",
    id:I2C_DRIVERID_QG8,
    flags:I2C_DF DUMMY,
    attach_adapter:i2c_qg8_attach_adapter
    detach_client:i2c_qg8_detach_client,
    command:i2c_qg8_command,
    }

    成员包括设备驱动名称、id号、适配器添加等。另一个数据结构是
    struct i2c_client qg8_client{
    name:"12C QG8",
    id:1,
    addr:QG8_I2CADDRESS,
    adapter:NULL,
    driver:&i2c_i2c_driver,
    slvRecvNotify:i2c_qg8_slvRcv,
    }

    其中包含了设备名称、id号、设备地址和所用驱动。

    3.2从机实现过程

    从机主要是通过中断响应来实现I2C通信的,在主程序中,从机要进行传感器的采样,把采样数据放到缓冲区等待主机接收,或者是通过中断服务程序接收主机发送来的控制命令。从机中断服务流程图如图3所示。


图3 从机中断服务流程

    从机中断服务大致过程如下:

    ①在从机中断服务程序处理过程中,IICS_IAAS位用来识别来自于主机的地址匹配,如果主机发送的地址信息与本机初始化中所设定从机地址相匹配时,IICS_IAAS则自动置位,此时为地址匹配中断处理,通过判断此位来确认本机是否为总线上所呼叫的从机地址。如果是,则向主机发出应答,接收地址的数据传输。根据主机发送来的读写位设置发送方式,并清除地址匹配标志位,取出主机发送来的地址,依照主机所需要的操作,以做出相应处理,代码如下:
    if(IICS_IAAS)
    do{HCC_TX=IICS_SRW,set tx=T,and clear IAAS,dummy=IICD;}

    ②如果不是,地址匹配中断,也即IICS_IAAS标志未被置位,则为数据传输中断处理,此时应判断IICC_TX是发送还是接收。

    识别为接收模式,则把收到的数据存到RAM中,指针指向下一个单元,等待接收下一个数据。

    识别为发送模式,首先要先判断是不是要结束发送,是则转入接收模式。否则送下一个要发送的数据到IICD中去,等待主机的接收。
    if(11CS_RXAK==1)IIcc_TX=0;
    dummy=IICD;IICD=IIC_DATA[i];i++;

    3.3主机实现过程

    大多情况下,8位机都是作为从机接受主机的控制,但也有作为主机场合,作为主机编程如下:

    首先对I2C模块初始化,初始化过程主要有使能I2C模块、I2C模块中断、应答帧。此外还要设定波特率,波特率主要通过对倍频因子、SCL分频数及总线速度来设定,设定波特率需要平衡传输率和数据在线上保持时问的长短。
    IICC_IICEN=1;IICF=0x4B;
    IICC_IlCIE=1;
    IICC_TXAK=0;

    其次,在发送从机地址建立通信连接时,需规格化要发送的从机地址,使最后一位读写位能表明主机要发送数据给从机,还是要从从机读出数据。
    IICC_TX=1;
    IICC_MST=1;
    IICD=slaveAddress;

    最后,主机收到应答后要进入中断处理过程。主机中断服务首先通过置位中断标志位IICIF清除中断,并通过读状态寄存器来判断中断类型,QG8的I2C的中断类型有3种,分别是传完一个字节、匹配收到的呼叫地址和仲裁丢失。仲裁丢失则清除仲裁丢失标志后等待获得总线。收到传完一个地址应答信息,就根据读写需要发送或者接收数据,如果数据传完则由主机发送结束信号。

4 实验及应用

    在搭建的硬件环境下(如图4所示),通过在各个处理器上编写的测试程序,方案最终达到了预期目标,各从机从温度传感器中采样出温度值,能够得到及时的处理并通过I2C总线发送到主机;主机在需要控制没备时,只需要通过I2C总线发送控制命令和控制参数到控制从机,控制从机即可按照命令及时响应。


图4 系统硬件平台

    在高频加热设备上采用这样一个多处理器测控方案,得到比较好的效果。在加热铸件处理过程中,采用本系统对铸件的多个位置进行温度采集,各个测温处理器并行处理各个点的数据,各个点的数据能够在各自的处理器下得到及时响应,使得系统的实时控制性得到很大改善,消除了单个处理器出现的弊端。但是,由于I2C在传输距离上有一定的限制,因此,在测量点距离间隔比较大的测控设备上,不宜采用本方案。

5 结束语

    针对工业控制过程中出现的多点采集与处理器处理能力和接口有限的矛盾,提出了一种多处理器通过I2C接口建立的测量控制系统,主要工作是在实验室环境的条件下,搭建硬件实验平台,并且在此基础上编写温控程序。经过测试,得到比较好的数据采集效果,高频加热器的实时性得到很大改善。在工业控制中该方案对此类问题的处理有着较为重要的意义。


  评论这张
 
阅读(428)| 评论(0)

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018