基于I2C总线的远程数据采集系统文档格式.docx
《基于I2C总线的远程数据采集系统文档格式.docx》由会员分享,可在线阅读,更多相关《基于I2C总线的远程数据采集系统文档格式.docx(35页珍藏版)》请在冰豆网上搜索。
应用远程数据采集系统可对生产现场的各种参数进行采集、监视和记录,是提高产品质量、降低成本、增加生产效率和节省人力的重要手段;
另外,远程数据采集是控制系统实现控制的基本条件,只有准确实时的获取对象的运行数据才能实施有效的控制。
数据采集系统经历了几个发展阶段。
早期的数据采集系统基于ISA、PCI总线,采集的数据是模拟量,系统庞大,采集后需要将模拟信号经过放大、调理通过长线传送给计算机系统;
在长线传输过程中信号的电磁干扰是不可避免的,信号转换的过程也存在干扰;
基于串口传输数据的数据采集系统传输速度慢,而且多为主从式结构,系统稳定性低。
基于单片机的数据采集系统利用数字传感器直接输出数字信号,经过总线的传输直接送给计算机系统,操作方便,无需信号转换。
1.2I2C总线及优点
I2C(Inter-IntegratedCircuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备,是微电子通信控制领域广泛采用的一种总线标准。
它是同步通信的一种特殊形式,具有接口线少,控制方式简单,器件封装形式小,通信速率较高等优点。
在主从通信中,可以有多个I2C总线器件同时连接到I2C总线上,所有I2C兼容的器件都具有标准的接口,通过地址来识别通信对象,使他们可以经由I2C总线互相通信。
I2C总线很大程度上减轻了系统对I/O口需求的压力,弥补了系统主处理芯片I/O口的不足,通过扩展芯片总线的传输长度可高达1000米,并且能够以最高以3.4Mbps的最大传输速率支持40个组件。
I2C总线是由数据线SDA和时钟线SCL构成的串行总线,可发送和接受数据。
在CPU与被控IC之间,IC和IC之间进行双向传送,各种被控电路均并联在这条总线上,每个电路都有唯一的地址。
在信息传输过程中,I2C总线上并联的每一个模块电路既是被控器(或是主控器),又是发生器(或是接收器),这取决与它所要完成的功能。
CPU发出的控制信号分为地址码和数据码两部分:
地址码用来选址,及接通需要控制的电路;
数据码是通信的内容,这样各控制电路虽然挂在同一条总线上,却彼此独立。
利用I2C总线实现远程数据采集不但布线方便,传输速度快,操作方便,节省I/O资源,多主式的结构更增加了系统的稳定性。
2系统方案
2.1系统方案简介
该系统设计是利用LPC900系列单片机,通过I2C总线,实现远程的温度采集。
基于I2C的远程数据采集系统由主控制模块和数据采集模块两大部分构成。
主控制模块以LPC900系列单片机为核心控制器,集成了键盘操作功能。
温度传感器AD590测得温度后转换为电信号经过放大和信号调理送入A/D转换器PCF8591实现模数转换,再通过由扩展芯片P82B96扩展后的I2C总线实现远距离通信。
显示模块利用I2C总线可以并联多个I2C接口器件的特性,使用ZLG7290作为LED驱动器驱动数码管显示。
系统方案如下:
图2-1系统设计框图
2.2系统总体方案的确定
2.2.1主控制器方案的选型
方案一:
常用的51单片机89C51
89C51无硬件I2C,需用软件模拟I2C时序,操作繁琐,调试麻烦,内部资源不充足,且5V工作电压功耗高、速度低,用于该课题无明显优势。
方案二:
LPC900系列单片机
LPC900系列单片机具有体积小、有I2C引脚、超低的功耗(完全掉电时电流低至1µ
A,工作电压低至2.4~3.6V)、6倍速于80C51、工业级芯片、可靠性高、增强型I/O口、丰富的片内资源和ICP在线编程方便快捷等优势。
用LPC93X系列单片机能满足要求但资源浪费,价格高,故最终确定选用LPC922单片机。
2.2.2I2C扩展芯片的选型
I2C的传输距离有限。
实际应用时,必须扩展I2C通信距离。
P82B715和P82B96是Philips研制的应用于远距离通信的I2C扩展器。
P82B715只有3000pF的输出容性负载,且不可电平转换,而P82B96的最大输出容性负载高达4000pF,支持电平转换,还可以作为通用的准双向总线缓冲器。
当通信速率为31KHz可达到1000米。
因此在这个系统里选用P82B96。
2.2.3温度传感器的选型
热电偶传感器
热电偶传感器的原理是将温度变化转换为电势的变化。
它是利用两种不同材料的金属连接在一起,构成的具有热点效应原理的一种感温元件。
其优点为精确度高、测温范围广、结构简单、使用方便、型号种类比较多且技术成熟。
目前广泛应用于工业和民用产品中。
热电偶传感器的种类很多,在选择时必须考虑其灵敏度、可靠性、稳定性等条件。
热电阻传感器
热电阻传感器的原理是将温度变化转换为电阻值的变化。
热电阻传感器是中低温区最常用的一种温度传感器。
它的主要特点是:
测量精度高,性能稳定、其中铂电阻的测量精度是最高的,被制作成标准的基准仪。
从热电阻的测温原理可以知道,被测温度的变化是直接通过热电阻阻值的变化来变现的。
因此,热电阻的引出线的电阻的变化会给测温带来影响。
为了消除引线电阻的影响,一般采用三线制或四线制。
方案三:
半导体集成模拟温度传感器
半导体IC温度传感器是利用半导体PN结的电流、电压与温度变换关系来测温的一种感温元件。
这种传感器输出线性好、精度高,而且可以把传感器驱动电路、信号处理电路等与温度传感器部分集成在同一硅片,体积小,使用方便,应用比较广泛的有AD590等。
IC温度传感器在微型计算机控制体系中,通常用于室温的测量,以便微型计算机对温度测量值进行补偿。
方案四:
半导体集成数字温度传感器
随着科学技术的不断进步和发展,新型温度传感器的种类繁多,应用逐渐广泛,并且开始由模拟式向着数字式、单总线式、双总线式、多总线式发展。
数字温度传感器更适合与各种微处理器的I/O接口相连接,组成自动温度控制系统,这种系统克服课模拟传感器与微处理器接口时需要信号调理电路和A/D转换器的弊端,被广泛应用于工业控制、电子测温等各种温度控制系统中,数字温度传感器中比较有代表性的有DS18B20等。
本设计为设计方便,性能稳定,准确性高,决定选用半导体集成温度传感器,由于DS18B20采用的是单总线技术,不支持I2C总线,所以选用AD590模拟温度传感器。
2.2.4LCD液晶驱动器的选型
LCD字符型液晶驱动器
PCF2113是LCD字符型液晶驱动器,自身带有I2C接口,I2C速率是400khz,工作电压为2.5V到5V,可驱动两行、每行12个字符,片内可产生LCD偏置电压,功耗很低且本身自带片内RAM,但是外围引脚多,操作繁琐。
方案二:
LED驱动器ZLG7290
ZLG7290是一种具有I2C接口的键盘及LED驱动管理器件,提供数据译码和循环、移位、段寻址等控制。
它能够直接驱动8位共阴式数码管(或64只独立的LED),并可扩展驱动电流和驱动电压。
本系统利用I2C总线接口,直接用数码管显示,所以选用ZLG7290可满足要求。
2.2.5A/D转换器的选型
考虑到选用的A/D转换器应该有I2C总线接口,精度达到8位就可以满足要求,芯片内部应该有多个通道来配合I2C总线进行多点的数据采集,选用PCF8591芯片。
2.3总结
本章节主要介绍了系统的整体方案,给出了系统的设计方法和设计思路,同时对系统中的各个器件进行选型,为系统的硬件设计最好准备。
3P89LPC922单片机及I2C接口
3.1P89LPC922单片机概述
P89LPC922是一款单片封装的微控制器,适合于许多要求高集成度、低成本的场合,可以满足多方面的性能要求。
P89LPC922采用了高性能的处理器结构,指令执行时间只需要2~4个时钟周期,6倍于标准80C51器件。
P89LPC92集成了许多系统级的功能,这样可大大地减少元件的数目、电路板面积以及系统的成本。
LPC922的运算速度很快,当操作频率为12MHz时,除乘法和除法指令外80C51CPU的指令执行时间为167~333ns。
同一时钟频率下,LPC922的速度为标准80C51器件的6倍。
只需要较低的时钟频率即可达到同样的性能,这样无疑降低了功耗EMI;
LPC922的操作电压范围为2.4~3.6V。
I/O口可承受5V(可上拉或驱动到5.5V)的电压;
它有2个16位定时/计数器,每一个定时器均可设置为溢出时触发相应端口输出或作为PWM输出;
LPC922有400kHz字节宽度的I2C通信端口;
可以直接实现I2C总线通信;
有8个键盘中断输入,另加2路外部中断输入;
4个中断优先级;
低电平复位,使用片内上电复位时不需要外接元件。
复位计数器和复位干扰抑制电路可防止虚假和不完全的复位。
另外还提供软件复位功能;
可配置的片内振荡器及其频率范围和RC振荡器选项(通过用户可编程Flash配置位选择),选择RC振荡器时不需要外接振荡器件。
振荡器选项支持的频率范围为20KHz~12MHz可选择RC振荡器选项并且其频率可进行很好的调节;
LPC922有可编程端口输出模式,准双向口,开漏输出,推挽和仅为输入功能模;
所有口线均有LED驱动能力20mA;
LPC922最少有15个I/O口,选择片内振荡和片内复位时可多达18个I/O口。
3.1.1芯片内部框图
LPC922单片机的功能框图如3-1所示。
图3-1功能框图
3.3.2引脚配置
P0口是一个可由用户定义输出类型的8位I/O口。
在上电复位时,P0锁存器配置为内部上拉禁止的仅为输入模式。
P0口由口配置寄存器设定为输出或输入模式,每一个管脚均可单独设定。
P0口具有键盘输入中断功能。
所有管脚都具有施密特触发输入。
引脚有1,20,19,18,17,16,14,13。
P1是一个可由用户定义输出类型的8位I/O口。
在上电复位时P1锁存器配置为内部上拉禁止的仅为输入模式。
P1口由口配置寄存器设定为输出或输入模式,每一位均可单独设定。
P1.2、P1.3作为输出时为开漏。
P1.5为仅为输入模式。
引脚12,11,10,9,8,4,3,2;
其中4引脚是RST外部复位输入(通过Flash配置选择)。
作为复位管脚时,输入的低电平会使芯片复位,I/O口和外围功能进入默认状态,处理器从地址0开始执行。
P3口是一个可由用户定义输出类型的2位I/O口,在上电复位时,P3锁存器配置为内部上拉禁止的仅为输入模式。
P3口由口配置寄存器设定为输出或输入模式,每一个管脚均可单独设定,所有管脚都具有施密特触发输入。
3.4I/O口
LPC922有3个I/O口P0、P1和P3。
P0和P1为8位I/O口而P3为2位I/O口。
I/O口的具体数目取决于所选择的振荡和复位方式,具体如表3-1。
表3-1可用的I/O口数目
时钟源
复位选项
I/O口数目
片内振荡器或
看门狗振荡器
无外部复位上电时除外
18
使用外部复位脚RST
17
外部时钟输入
16
低/中/高速振荡器
外部晶振或谐振器
15
3.4.1I/O端口配置
除了3个口(P1.2、P1.3和P1.5)以外,LPC922其他所有的I/O口均可由软件配置成4种输出类型之一,四种输出类型分别为:
准双向口(标准8051输出模式)(PXM1.Y=0,PXM2.Y=0);
推挽(PXM1.Y=0,PXM2.Y=1);
开漏输出(PXM1.Y=1,PXM2.Y=1);
仅为输入功能(PXM1.Y=1,PXM2.Y=0)。
每个口配置2个控制寄存器控制每个管脚输出类型。
P1.5(RST)只能作为输入口,无法进行配置。
P1.2(SCL/T0)和P1.3(SDA/INT0)只能配置为输入口或开漏口。
3.4.2准双向口输出配置
准双向口输出类型可用作输出和输入功能而不需重新配置口线输出状态。
这是因为当口线输出为1时驱动能力很弱,允许外部装置将其拉低。
当管脚输出为低时,它的驱动能力很强,可吸收相当大的电流。
准双向口除了有三个上拉晶体管适应不同的需要外,其特性和开漏输出有些相似。
LPC922为3V器件,但管脚可承受5V电压。
在准双向口模式中如果用户在管脚加上5V电压将会有电流从管脚流向VDD。
这将导致额外的功率消耗,因此建议不要在准双向口模式中向管脚施加5V电压。
准双向口带有一个施密特触发输入以及一个干扰抑制电路。
3.4.3开漏输出配置
当口线锁存器为‘0’时,开漏输出关闭所有的上拉晶体管而仅驱动端口的下拉晶体管。
作为一个逻辑输出时这种配置方式必须有外部上拉,一般通过电阻外接到VDD。
开漏端口带有一个施密特触发输入以及一个干扰抑制电路。
3.4.4仅为输入配置
该配置无输出驱动器,它带有一个施密特触发输入口以及一个干扰抑制电路。
3.4.5推挽输出配置
推挽输出配置的下拉结构和开漏输出以及准双向口的下拉结构相同,但当锁存器为‘1’时提供持续的强上拉。
推挽模式一般用于需要更大驱动电流的情况。
推挽管脚带有一个施密特触发输入以及一个干扰抑制电路。
3.5中断
LPC922采用4中断优先级结构。
这为P89LPC922的多中断源的处理提供了极大的灵活性。
LPC922支持12个中断源:
外部中断0和1、定时器0和1、串口Tx、串口Rx、组合的串口Tx/Rx、掉电检测、看门狗/实时时钟、I2C、键盘中断和比较器1和2。
任何一个中断源均可通过对IEN0和IEN1中相应的位置位或清零,实现单独使能或禁止。
IEN0中还包含了一个全局禁止位EA,它可禁止所有中断。
每个中断源都可被单独设置为四个中断优先级之一,分别通过清零或置位IP0、IP0H、IP1、IP1H中相应位来实现(00——最低优先级,11——最高优先级)。
一个中断服务程序可响应更高级的中断,但不能响应同优先级或低级中断。
最高级中断服务程序不响应其它任何中断。
如果两个不同中断优先级的中断源同时申请中断时,响应较高优先级的中断申请。
如果两个同优先级的中断源同时申请中断,那么通过一个内部查询顺序序列确定首先响应哪一个中断请求,这叫做仲裁队列。
3.6I2C总线接口
3.6.1概述
I2C(全称:
interintegratedchips)是一种串行通信协议,专利权归属于Philips公司。
I2C有三种速度模式:
标准模式(0~100kbps)、快速模式(0~400kbps)、高速模式(0~3.4Mbps)。
有严格的规范,如接口的电气特性、信号时序、信号传输的定义、总线状态设置、总线管理规则及总线状态处理等。
LPC922器件提供字节方式的I2C接口所支持的最大数据传输速率为400kHz。
I2C总线用两条线SDA和SCL在总线和器件之间传递信息。
I2C总线的传输模式是主机和从机之间为双向数据传送,这样主机和从机之间可以相互访问;
I2C总线也是多主机总线,它不存在中央主机;
在总线上的器件都可以当做主机来发送数据;
多主机同时传送时进行仲裁来避免总线上数据冲突;
而且串行时钟同步使得不同位速率的器件可以通过一条串行总线进行通信;
典型的I2C总线配置如图3-2所示。
图3-2I2C总线配置
3.6.2I2C特殊功能寄存器描述
I2DAT包含要发送的数据或刚接收的数据。
当8位直接寻址寄存器没有处理移位数据时,CPU可对其进行读和写。
这意味着用户只能在SI置位时对I2DAT进行访问。
I2DAT中的数据在SI置位时一直保持不变。
I2DAT中的数据总是从右向左移位。
寄存器各位如图3-3。
图3-3I2C数据寄存器
CPU可以对I2ADR寄存器进行读或写操作。
该寄存器仅在I2C处于从模式下才使用。
在主模式中该寄存器的内容无效。
I2ADR的最低位(LSB)为通用调用位。
当该位置位时对通用调用地址(00H)进行识别。
寄存器各位功能如图3-4。
图3-4I2C从地址寄存器
CPU对I2CON寄存器进行读或写操作,见图3-5。
其中两个位受硬件影响:
SI和STO位。
SI由硬件置位而STO位由硬件清零。
当I2C处于主模式时,CRSEL决定SCL的频率,在从模式中,该位被忽略并自动与主I2C器件的时钟频率(最大400KHz)同步。
当CRSEL=1时,I2C接口将定时器1的溢出速率的1/2作为I2C的实钟频率。
定时器1在8位自动重装模式(模式2)中由用户编程。
图3-5I2C控制寄存器
I2STAT寄存器是个8位只读寄存器。
见图3-6。
它包含了I2C接口的状态代码。
最低3位总是为0。
I2C一共有26种可能的状态。
当代码为F8时表示无可用的相关状态信息,SI也不会置位。
所以其他25种状态码都对应一个已定义的I2C状态。
进入任何一个状态时,SI都会置位。
图3-6I2C状态寄存器
当设置CRSEL=0以选择内部SCL发生器作为I2C接口的时钟源时,用户必须对I2SCLH和I2SCLL进行设置以选择合适的数据传输速率。
I2SCLH定义SCL高电平的PCLK周期数,I2SCLL定义SCL低电平的PCLK周期数。
频率由下面的公式决定:
(31)
式中:
Fpclk表示PCLK的频率。
用户可以通过设置这两个寄存器得到不同的SCL占空比。
但寄存器的值必须确保I2C数据传输速率范围为0~400kHz。
因此对I2SCLH和I2SCLL的值有一些限制,建议两个寄存器的取值都应大于3个PCLK周期。
3.6.3I2C操作模式
I2C操作模式有:
主发送器模式、主接收器模式、从接收器模式和从发送器模式。
在这里介绍主发送器模式。
在该模式中,数据从主机发送到从机。
在进入主发送器模式之前,I2CON必须将I2EN置位使能I2C功能,STA、STO和SI必须设置为0,CRSEL定义串行位速率。
如果AA位为0,而另一个器件成为总线的控制器时,I2C将不会对它自身的从地址或通用调用地址产生应答。
换句话说,如果AA复位,I2C不能进入从模式。
第一个发送的数据包含接收器件的从地址(7位)和数据方向位。
在此模式下,数据方向位(R/W)为0表示执行写操作。
因此第一个发送的字节为SLA+W。
数据每次发送8位。
每发送一个字节,都接收到一个应答位。
起始和停止条件用于指示串行传输的起始和结束。
通过置位STA进入I2C主发送模式。
I2C逻辑在总线空闲后立即发送一个起始条件。
当发送完起始条件后,SI置位。
此时状态寄存器(I2STAT)中的状态代码应当为08H。
该状态码用于指向一个中断服务程序。
该中断程序将从地址和数据方向位(SLA+W)装入I2DAT。
SI位必须在数据传输能够进行之前清零。
当从地址和方向位已经发送且接收到应答位之后,SI位再次置位,并且对于主模式,可能的状态代码为18H、20H或38H。
图3-7为主发送器模式和从接收器模式的发送格式。
图3-7主发生器和主接收器模式格式
在图中,各种符号的意义为:
S:
开始位(START);
SLA:
从机地址(SlaveAddress),7位从机地址;
W:
写标志位(Write),1位写标志;
R:
读标志位(Read),1位读标志;
A:
应答位(Acknowledge),1位应答;
:
非应答位(NotAcknowledge),1位非应答;
D:
数据位(DATA),每个数据都必须是8位;
P:
停止位(STOP);
阴影:
主机产生