无线电爱好网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

无线电爱好网 首页 技术应用 单片机 查看内容

基于I2C总线的I/O口扩展设计

2012-7-17 16:00| 发布者: lfcx| 查看: 1465| 评论: 0|原作者: 叶扬科,钱剑敏,成 高|来自: 现代电子技术

摘要: 摘要:由于传统的NI-DIO驱动板卡能够驱动的I/O口数量比较有限,一般只应用在测试通道数比较少的实验场合。而在一般的大型环境试验中,要求能对多个产品同时测量。如果使用传统的DIO板卡测试,就会出现测量通道数量 ...

 

摘要:由于传统的NI-DIO驱动板卡能够驱动的I/O口数量比较有限,一般只应用在测试通道数比较少的实验场合。而在一般的大型环境试验中,要求能对多个产品同时测量。如果使用传统的DIO板卡测试,就会出现测量通道数量不够的情况。针对此类问题,提出了运用单片机与I/O扩展芯片PCA9554/A采用I2C通信进行I/O扩展,上位机采用LabVIEW编程,界面友好、操作方便,在环境实验中起到了良好效果。
关键词:I/O口;MCU;PCA9554/A;LabVIEW

0 引言
随着电子技术的飞速发展,各类电子产品像雨后春笋般大量的进军电子市场,其中也包括正在蓬勃发展的汽车电子行业。一般汽车电子行业对这些电子产品的要求比较高,会有很多的技术指标去规范它们,其中很重要的一环便是环境实验。出于对工作效率的考虑,一个环境测试台架往往要求能对多个产品进行同时测试。而这些产品的引脚数量一般也会比较多,这样一来,测试台架上所需的测试通道数量就会很多,往往多达几百个。
一般多数用于汽车电子产品的环境测试台架里面会集成有NI公司的DIO驱动板卡,由于它们的驱动端口比较多,便专用来负责产品的环境实验测试。以NI-6509为例,这是一个12×8的板卡,总共有12个通道,每通道8位I/O控制组成,总计96路I/O控制;NI-2532的矩阵板卡,其能支持的通道数是32×16,共512路。这些I/O端口,针对一般的应用是够的,但如果用于引脚数量比较多的产品测试,便会出现I/O口数
量不够用的局面。假如环境实验要同时测试12个产品,每个产品有40个引脚,那么对于产品引脚继电器就必须要有480个,再加上一些外围辅助仪器介入的切换,那么在这种情况下,这类DIO板卡的应用就显得很勉强。
针对此类问题,本文提出了一种有效的解决方法,便是应用单片机的I/O口配合市面上一些常见的I/O扩展芯片,进行端口的扩展。单片机有4个端口,每个端口8位,总计32个位控制;扩展芯片,比如I2C芯片,只需要2根线(SDA&SCL)即可,因此可以连16组I2C通信,且每组可同时支持8个芯片(每组最大可容纳8个地址),每个芯片又可控制8个端口。因此,单片机理论上,至少可支持16×8×8个端口。并且,如果芯片头地址可以不一样的话,例如PCA9554和PCA9554A,那么端口数量又可以增加一倍,达到2 048个,这是一般的板卡所远远不能及的。

1 系统硬件设计
本文所涉及到的硬件比较简单,上位机与MCU之间通过RS 232串口连接,MCU靠外部电源提供的5 V直流电进行工作。再将MCU的2个端口模拟成SCL,SDA两根线与PCA9554/A进行通信连接。这样就形成了上位机发送指令,单片机接受指令并进行相应解析后再通过SDA、SCL两根线向PCA9554/A发送命令数据,控制它的输入与输出。
1.1 PCA9554/A芯片介绍
PCA9554和PCA9554A是16脚的CMOS器件,它们提供了I2C的应用中的8位通用并行输入/输出口(GPIO),PCA9554/54A包含一个8位配置寄存器(输入或输出选择)、8位输入寄存器、8位输出寄存器和一个极性反转(高电平或低电平操作有效)寄存器。系统主控制器通过写I/O口相应的配置位来激活端口的输入或输出。PCA9554/A有3个硬件管脚(A0,A1,A2)来实现不同的I2C地址,最多允许8个器件共用一个I2C总线上。PCA9554与PCA554A的惟一区别在于I2C地址不同,这样最多允许16个器件(9554和9554A各8个)连接接到同一个I2C总线上。
1.2 基于PCA9554/A的硬件设计
按I2C规约,PCA9554的器件地址为0x40,PCA9554A的器件地址为0x70,当然,由于硬件地址引脚A0~A2可寻址8个器件,所以器件地址并不惟一,例如:A0接GND,A1接VCC,则PCA9554的器件地址为0x4C。使用STC89C52单片机为主控芯片,单片机的P1.3管脚与PCA9554的SDA管脚相连,P1.2管脚与PCA9554的SCL管脚相连。4个LED灯可以受四个按键控制,也可以受上位机进行控制。


2 系统软件设计
本文系统软件设计主要分为两部分,一个是上位机的LabVIEW程序设计;另一个则是单片机底层C语言的程序设计。
2.1 LabVIEW的程序设计
上位机的程序设计主要是与MCU串口通信,通过向MCU发送控制命令来达到对PCA9554/A的I/O口进行控制的目的。
LabVIEW是一种图形化编程语言,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。
本文主要是用LabVIEW语言编写与MCU的串口通信程序,界面友好、操作方便。LabVIEW控制单片机是通过Instrument I/O的Serial控件调用来实现的。主要用到其中的VISA配置串口节点,包括串口配置、读、写、关闭等节点。通过对这些节点的调用就可以方便的对串口进行操作。
这里,Command to RS 232栏中的指令必须与单片机事先烧录好的代码相符合。这样,单片机才能将接收到的指令进行正确匹配,并执行相应操作。
程序左端调用Configuration模块,进行串口的基本配置,比如BaudRate、数据位等,使这些参数与单片机里面的串口预定义设置相一致;右侧是Close模块,用于程序退出时,释放对串口的控制;中间是程序主体,包含对串口的读、写操作,实现对串口的双向通信。为了程序简洁、形象易懂,此次程序中用到了对LabVIEW子函数的调用,如RS 232-ini,RS 232W-R等模块,这些子函数就是用VISA串口节点来编写的,只是做了封装而已。
2.2 MCU的串口通信
上位机是通过串口将指令字符传递给单片机的。单片机对串口的读操作是通过中断的方式实现的,以字符为单位,每接收到一个8位的字符,MCU产生一个读中断RI=1,此时,单片机将接收到的字符储存起来,然后软件将RI复位置0,继续接收下一个字符。本系统中,所有计算机发送给单片机的指令均以‘?’结尾。MCU接收到‘?’后,产生一个终止位,然后与事先定义好的指令进行匹配,如果指令事先有定义,那么就会执行相应的操作。

2.3 MCU的I2C时序模拟
上位机向单片机发送指令数据,如果这些指令已在单片机中事先定义好,那么单片机将会通过模拟的SDA与SCL两个引脚,根据PCA9554/A的datasheet时序图,将控制命令数据传递给PCA9554/A,从而实现对PCA9554/A的I/O口进行控制。
2.3.1 PCA9554/A的写操作
根据I2C总线传输协议以及PCA9554/A的总线读写特性,可以看出:对PCA9554/A端口的写操作主要是通过对它的输出端口寄存器进行写操作的。具体过程为:在SCL为高电平期间,SDA由高电平向低电平转换作为起始信号,SDA由低电平向高电平转化则为停止信号。在起始条件后,必须是从机地址,对于PCA9554来说从地址的高4位是0100,而PCA9554A则是0111,A2,A1,A0的高低电平状态可以有8种组合,最后一位是读写选择位。从地址发送完后便是等待从机的应答信号ACK,从机正确应答后便开始由主机发送命令字节,接着又是等待从机应答,应答后便开始发送数据了。以下为PCA9554的写操作部分代码。

2.3.2 PCA9554/A的读操作
对PCA9554/A的读操作稍微麻烦一点,需要在收到第二次从机应答信号后再一次发送总线起始信号及从机地址即可。

由于篇幅原因,以上均只给出了部分重要程序。需要提出的是I2C总线上的起始、停止、以及读写数据的时序模拟均要参考PCA9554/A的datasheet中的时间参数要求,严格对应。

3 结语
本文运用单片机与I/O扩展芯片PCA9554/A采用I2C通信进行I/O扩展,提出了具体的软硬件设计,完成了上位机对PCA9554/A端口的直接控制,并进行了I/O的有效扩展。并成功的应用在对多个汽车电子产品同时测量的环境试验中,取得了很好的效果。


路过

雷人

握手

鲜花

鸡蛋

相关阅读

QQ|关于本站|小黑屋|Archiver|手机版|无线电爱好网 ( 粤ICP备15040352号 ) 无线电爱好技术交流5 无线电爱好技术交流1无线电爱好技术交流9开关电源讨论群LED照明应用、电源无线电爱好技术交流4无线电爱好技术交流8无线电爱好技术交流10无线电爱好技术交流11

粤公网安备 44030702001224号

GMT+8, 2022-7-29 15:41 , Processed in 0.109200 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

返回顶部