鲁 平
摘要:在该汽车控制系统中,不仅大量的数据(车内温度湿度等环境参数、汽车方向盘转角和车辆行驶速度等运动参数)需要检测而且还需要进行很多复杂的控制。同时可能还需要保存测得的数据以做离线分析和显示。要想准确实时的获得这些数据,结合助力转向的目的,有必要设计这样一个数据采集系统。本文介绍了一个基于双口存储器和倍频电路以及EPP接口的汽车转角数据采集系统。通过PC机和RAM的直接硬件相连,使系统获得理想的速度。设计了软件竞争仲裁法,保证了数据的完整性。给出了具体的电路和程序流程。
关键词:EPP 接口 数据 采集 倍频
0 引言
用单片机采集数据,通过通讯接口传输到计算机中进行处理计算和保存显示,以期获得精确的控制效果。目前常用的通信方式是串行通信,但传输速率太低,以9600bps计算,传输1MB至少需要10分钟以上。并行通信克服了串行通信传输速率低的缺点。标准并行口SPP(Standard Parallel Port)方式实现了由PC机向外设的单向传输,但实现PC机接收外设发送的数据则非常麻烦;而增强型并行口EPP(Enhanced Parallel Port)协议却很好地解决了这一问题,能够实现稳定的高速数据通信。
1 增强型并行端口协议
增强型并行端口协议(EPP协议)是一种高性能的并口连接协议,并与SPP协议兼容。EPP端口为并行外设的连接带来许多便利。由于EPP端口完全由硬件产生联络信号完成数据的传输,使得软件设计非常方便,并极大地改善了并口数据传输速率,系统可以获得500Kb/s-2Mb/s的数据传输速率。EPP协议是一个与并行端口协议兼容并能完成双向数据传输的协议,它所定义的并行口像一个开放的总线,为用户提供强大的功能和灵活的设计手段。由于这种接口可以实现快速的方向转换,因此特别适用于进行较小数据块的传输且需要经常交换数据传输方向的设备。EPP协议中定义了4种数据传输模式:数据写周期、数据读周期、地址写周期和地址读周期。其中数据读/写周期用来与外设之间进行数据的传输,而地址的读写周期则用来交换外设地址控制信息。其读时序和写时序类同,地址操作周期和数据操作周期只要将nDataStorbe改为nAddStrobe就完全一致。其具体操作为:在t1时刻应用程序向EPP数据口写数据,启动I/0周期,在t2时刻主机将nWRITE置低,,且将数据置于数据总线上,这时如果主机检测到nWAIT信号为低,在t3时刻将置nDataStrobe为低则数据传输开始,外设在接到信号后,t4时刻将置nWAIT为高电平,作为响应,主机在t5时刻置nDataStrobe为高电平。最终在t6时刻主机结束I/0周期,外设在开始另外一个周期前必须将nWAIT置低。
2 系统构成分析
在本系统中,多路A/D转换器检测车内的环境参数,光电编码器获得方向盘转角。A/D转换获得的结果和编码器输出经倍频后的输出由单片机存储到双口RAM中。主机从RAM中取得原始数据,经过融合处理后将结果发回RAM。单片机从RAM中读取这些数据通过光电隔离系统来控制各个执行单元的动作。框图如下:
3 数据存储系统及接口电路
系统中,主机和从机之间的数据交换是很频繁的,主机向从机提供参数和控制信号,从机则向主机提供多路信号采集数据。而且主机和从机对双口RAM的访问都不定时,因而同时访问的情况完全可能发生。此外,两者访问时间的长短也不一致,主机访问双口RAM的时间是ms级的,而从机访问时间是us级的。若两者直接通信,单片机的实时性将大大削落,系统性能达不到要求。鉴于此,选择双口RAM IDT7130来构成系统的存储器。该双口RAM提供两套完全独立的端口,每端口都有完整的数据、地址和控制线。可以满足本系统的需求。配以一定的时序逻辑电路,就可以实现EPP和IDT7130的数据直接传递,无须CPU干涉。不仅简化了软件编写,而且大大提高了系统速度。①PC写数据时,nWrite和nDstrb都为低,RAM的RD和WR均无效。写数据完成,nDstrb为高,nWrite为低,RAM的WR有效,74LS245数据选通输出至RAM。②PC读数据时,nWrite为高,nDstrb为低,RAM的RD有效,74LS245数据选通输出至EPP。
尽管IDT7130提供两个带有各自的控制、地址和I/0引脚的独立的端口,它允许独立地、不同步地读或写存储器中的任何单元。但当同时从两个端口访问同一个存储器单元时仍会引起竞争。而且由于两主机速度不一样,很有可能单片机读入的是主机正在更新却未完成更新的数据。而IDT7130本身没带仲裁电路,因此必须由外部提供仲裁。有两种方法可解决此问题:一是在硬件上外加仲裁电路,以便当双方同时访问IDT7130的同一单元时,由高优先级首先访问。这种方法的电路比较复杂,使用不便。二是对存储器进行分配,在软件上实现仲裁。根据实际系统中主-从机数据传输的特点,可将IDT7130存储器划分为两块,一块为主机传给单片机的数据,这一块只允许PC机写、单片机读;另一块为单片机传递给PC机的数据,这一块只允许单片机写、PC机读。并将存储器两区的最后一个字节分别设为标志单元,当主机或从机访问IDT7130时,首先读取该单元标志,只有当标志满足要求时,才会对数据进行操作。操作时标志置位,操作完成后清除该标志。该操作虽然会花费一定的查询时间,但可以有效保护数据完整性,极大提高系统稳定性。而且RAM的操作速度是ns级的,该时间可以忽略。
下面简单以PC机读RAM函数来说明该操作。
unsigned char PC_READ_RAM(unsigned char *buffer, unsigned char length, unsigned int address)
{//buffer:读人缓冲区指针、length:需要连续读入的长度、address:读入字节的首地址
if(地址在上区);{return(ERROR);}
if(下区标志位为零);{标志位置位;执行读数据操作;}
else//下区标志位为高,单片机正在写入数据
{循环查询等待标志位为零; //等待数据写入完成执行操作;}
标志位置零;
return(GOOD);}
IDT7130来实现主机和从机的信息共享和数据传输的设计具有速度快、电路简单、可靠性高等优点,是一种较好的方法。
通过PC机和RAM的直接硬件相连,使系统获得理想的速度;设计了软件竞争仲裁法,保证了数据的完整和安全性;通过四倍频电路,提高了控制精度。由于采用了CPLD设计其逻辑控制电路,简化布线的同时使得系统具有很高的抗干扰性和保密性。实践表明该系统具有电路简单、成本低、工作稳定、精度高的优点,完全能满足汽车助力转向和车内环境控制的要求。同时系统的CPLD和RAM有丰富的剩余资源,使系统进一步升级成为一个小型的汽车测试仪变得非常简单。