随着电子技术的飞速发展,各类电子产品像雨后春笋般大量的进军电子市场,其中也包括正在蓬勃发展的汽车电子行业。一般汽车电子行业对这些电子产品的要求比较高,会有很多的技术指标去规范它们,其中很重要的一环便是环境实验。出于对工作效率的考虑,一个环境测试台架往往要求能对多个产品进行同时测试。而这些产品的引脚数量一般也会比较多,这样一来,测试台架上所需的测试通道数量就会很多,往往多达几百个。
一般多数用于汽车电子产品的环境测试台架里面会集成有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串口节点来编写的,只是做了封装而已。 [page]
上位机是通过串口将指令字符传递给单片机的。单片机对串口的读操作是通过中断的方式实现的,以字符为单位,每接收到一个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的有效扩展。并成功的应用在对多个汽车电子产品同时测量的环境试验中,取得了很好的效果。
上一篇:通用串行总线技术(USB OTG)提供电源管理最佳方案
下一篇:基于PCI总线的ARINC429接口卡设计
推荐阅读最新更新时间:2024-05-02 22:17
- Allegro MicroSystems 在 2024 年德国慕尼黑电子展上推出先进的磁性和电感式位置感测解决方案
- 左手车钥匙,右手活体检测雷达,UWB上车势在必行!
- 狂飙十年,国产CIS挤上牌桌
- 神盾短刀电池+雷神EM-i超级电混,吉利新能源甩出了两张“王炸”
- 浅谈功能安全之故障(fault),错误(error),失效(failure)
- 智能汽车2.0周期,这几大核心产业链迎来重大机会!
- 美日研发新型电池,宁德时代面临挑战?中国新能源电池产业如何应对?
- Rambus推出业界首款HBM 4控制器IP:背后有哪些技术细节?
- 村田推出高精度汽车用6轴惯性传感器
- 福特获得预充电报警专利 有助于节约成本和应对紧急情况