车轴的振动和温度信号是一个关系到列车运行安全性的一项重要参数,但是长期以来这两个信号在采集和处理上存在速度和存储容量瓶颈。传统的51系列单片机不仅在速度上,而且器件的捏合性、系统整体可靠性上都难以达到理想需求。使用ARM嵌入式系统,则开发周期长,成本高。AVR单片机是ATMEL在90年代推出的精简指令集RISC(Reduced
Instruction Set CPU)的单片机,与PIC类似,使用哈佛结构。可以这样就指令集的进行类比,51系列中的AT89C52相当于复杂指令集CISC的Intel的奔腾CPU,AVR单片机则相当于AMD的精简指令集RISC的K7
CPU。AVR是专门为使用高级语言设计的,在使用高级语言时,会比普通51系列单片机有较佳的表现。
Atmega128特性
Atmega128是ATMEL于2001年推出的mega系列AVR单片机中的代表性产品之一,是目前为止AVR系列中功能最强大的单片机。其特性为:
(1)先进的RISC精简指令集结构
- 高性能低功耗的AVR 8位微控制器/133条功能强大的指令大部分在单时钟周期内执行,工作在16 MHz下,具有16MIPS的性能,32
x 8个通用工作寄存器+ 外设控制寄存器;
-片内带有执行时间为两个时钟周期的硬件乘法器;
- 128K 字节在线可重复编程Flash/可通过片内的引导程序实现在线系统编程,写操作时真正可读。
(2) 内部配置
JTAG (符合IEEE std. 1149.1标准) 接口,通过JTAG接口对Flash、 EEPROM、熔丝位和加密位编程以及ISP下载接口;
实时计数器(RTC)、 4个具有比较模式和PWM的定时器/计数器(两个带预分频器和一种比较模式的8位定时/计数器、两个扩充的带预分频器和比较模式捕获模式的16位定时/计数器);
两个USART、 一个两线(I2C)串行接口、一个8通道10位具有可选增益差分输入的A/D转换器、一个SPI 口、片内模拟比较器、一个带内部振荡器的可编程看门狗定时器;
(3) 特别的MCU 特点
上电复位和可编程的低电压检测,内部可校准的RC振荡器,外部和内部中断源,可软件选择时钟频率,全局上拉禁止;
6种可通过软件选择的省电模式。
(4) I/O 和封装
53个可编程的I/O 脚,具有内部上拉,是真正的I/O口, 64脚TQFP封装。
(5) 工作电压/速度等级
2.7 - 5.5V ATmega128L/ 4.5 - 5.5V ATmega128
0 - 8 MHz ATmega128L/ 0 - 16 MHz ATmega128
(6)向后兼容ATmega103,可工作于ATmega103兼容模式。
为确保向后兼容ATmega103, ATmega103上所有I/O的位置与ATmega128上的相同,很多附加的I/O 地址被加到一个从$60到$FF的扩展外部I/O空间中(例如在ATmega103
的内部RAM 空间中),详情请参阅"用ATmega128替换ATmega103"手册。
系统硬件设计
车轴振动和温度信号的采集,采样率要求很高、数据量大。如果采用传统51作为CPU,那么外围A/D器件速度和51速度的就有一个相互限制的瓶颈。另外,如果是加上比较复杂的数据处理和存储,需要扩展外部ROM和RAM。这样多的外围器件一是限制了系统的稳定性和速度的提高;同时也大大增加了系统的功耗。TI公司的MSP430低功耗单片机看起来是个不错的选择。但是对比MSP430和AVR:前者在增加ADC后电源功耗有相当大程度的增加,而后者内置的10位ADC和相应的CPU工作模式,可以保证系统良好的低功耗性能;二是MSP430较AVR需要高昂的开发成本;三是MSP430的结构局限,其指令集只有最多55条,执行速度慢于8
MIPS;而Atmega128内部采用Harward结构,在使用16M时钟时,速度可达16MIPS;综合对比之后,选用ATmega128进行系统开发。
图1 系统结构框图(略)
整个系统的任务是对车轴振动和温度信号进行采集传输,在车轴上分布若干采集节点。进行处理后,将数据暂时保存在下位节点的存储器,采用分时传送的方法,利用CAN总线和上位节点通信,进行数据传送。由于数据暂存的量大(大约1M),所以需要外部扩展1M的RAM。而A/D转换在考虑了精度和速度综合要求后,使用Atmega128内部自置ADC中的两路进行AD转换。并且由软件实现两路转换的自动切换,保证数据采集的适时和准确性。使用SJA1000独立的CAN控制器来和82C250收发器实现CAN节点通信,MC1404为A/D转换提供+5V参考电压。外部RAM的A16、A17、A18、片选和SJA1000的片选、复位F分别用I/O口线实现。设计时引出Atmega128的JTAG在线编程和下载接口,以方便调试和程序更新。
软件设计
由于AVR系列单片机采用的是内部外部RAM统一编址,ATmega128工作在非ATmega 103模式时具有4k+256B的包括寄存器文件(通用工作寄存器)、I/O寄存器、扩展I/O寄存器和内部SRAM的连续内部存储空间。所以在扩展外部RAM时,和内部SRAM地址重叠的外部RAM地址是不能直接访问的。也就是说扩展的外部RAM每64k要浪费掉内部SRAM那么大的空间(AT90系列如此)。所幸的是mega系列解决了这一缺点,专门有一个寄存器XMCRB用来解决对与内部SRAM地址空间相同地址的外部RAM访问。其低三位XMM2
、XMM1 、XMM0三位的设置,决定高位地址线PC口的哪些口线被释放为普通I/O,而不是作为高位地址。这样就可以巧妙地屏蔽高位,就ATmega128而言,要避开内部的4k+245B空间,注意到,只要所访问的地址范围大于0X1100(且MCUCR,XMCRA设置正确),那么所访问的就是外部RAM空间。所以在访问小于4k+245B的外部地址时,只要使地址大于0X10FF就可以访问了。0X1100用二进制表示为:0001,0001,0000,0000,高位地址线PC5、PC6、PC7没有使用到。在访问的时候就可设置XMCRB的XMM1、XMM0位为1,释放该三根地址线为普通I/O,将其设为输出。并且输出0;并在外部地址加上一个虚地址以使地址超过0X1100,如此设置,就可以访问外部0X0000~0X10FF空间了。超出这个空间,CPU就自动将其识别为外部相应的地址了,不用设置XMCRB寄存器(即不需释放任何总线),也不需加虚地址,按照正常外部RAM访问即可。在此约定所加的虚地址为0X2000,XMCRB寄存器设置为****,*011,所释放的地址线输出0。
表1 0-0X10FF范围的寄存器状态和寻址范围(略)
表2 各寻址范围地址线和寄存器状态表(略)
表3 各寻址范围地址线和寄存器状态表(略)
比如要访问外部0X0200地址,用二进制表示为0000,0010,0000,0000。其中有6位高地址没有使用。按照约定设置XMCRB寄存器的为****,*011,并设置释放的PC5、PC6、PC7为输出,并输出0。为屏蔽内部RAM,在地址上加0X2000,所以在指令中使用的目标地址就是0X2200,二进制表示为:0010,0010,0000,0000;在指令中,CPU是把0X2200作为外部RAM
地址访问的(因为它大于0X10FF),并且输出的地址也是按照0X2200向外部RAM输出的。但是由于XMCRB的设置使PC5-PC7地址线被释放为普通I/O口,并且同时设置它们为输出状态,输出均为0。所以在执行访问指令时,PC5以上的地址根本就不起实际作用,0X2200只是一个虚地址,而实际指向的是外部RAM中的0000,0010。0000,0000。这样就"骗"过了CPU,对与内部0~0X10FF重叠编址的外部RAM地址成功进行了访问。当然,当外部RAM的地址大于0X10FF的时候,就可以不使用XMCRB寄存器,而直接进行访问了。表1列出了0~0X10FF范围的寄存器状态和寻址范围(采用加0X2000虚地址方法):
1. "*"表示该位对寻址操作无影响;"?"表示保留位;
2. XMCRA的设置,使整个外部0~0X10FF 空间的RAM被看成是一个部分,并且在访问它时产生两个周期的等待;
3. XMCRB的设置,表示在对该地址范围进行寻址时,使能总线保持,并且释放PC5、PC6、PC7三根高位地址线为普通I/O,并且输出0。
8位单片机的可寻址范围为64k,但是如果加上真实I/O口作为地址线,可寻址范围就大得多了。就本系统设计而言,以PD口的PD0、PD1、PD2作为地址线A16、A17、A18,另外再使用PD3和PD4分别作为两片512的片选信号,可寻址范围可扩展到1M。在寻址0X1100~0XFFFF
64K范围内时,可以在使相应的512片选有效高的同时将三位地址A16、A17、A18置低,就可在64K范围内正常寻址;在此范围之外寻址时,需要对A16、A17、A18三个地址线进行相关操作。表2、表3列出了不同寻址范围A16、A17、A18的状态以及寻址范围:
1. "*"表示该位与该范围内的寻址操作无关;"?"表示保留位;
2. 表2表示在每个个64K寻址范围中的0X1100~0XFFFF空间,0~0X10FF空间将按照表3所示的虚地址方式寻址;
3. XMCRA的设置,使整个外部0~0X10FF 空间的RAM被看成是一个部分,并且在访问它时产生两个周期的等待;
4. 表2的XMCRB的设置,使在对该地址范围进行寻址时,使能总线保持;并不释放任何地址线;而表三表示释放PC5、PC6、PC7三位高地址线作为普通I/O,并且输出0;
5. 表3中对外部SRAM的访问,是按照先前的约定,采用增加0X2000虚地址。
为保证数据采集的准确性和适时性,需要精确确定采样时间,做到采集和处理两不误。由于温度信号变化比较慢,而且比较有线性规律。所以设定通道0采集振动信号,通道1采集温度信号,振动信号的采样率为温度信号的50倍。即先进行50次振动信号采集后,切换通道,进行温度信号的采集,之后再切换到振动采集通道。对ADC转换启动噪声抑制功能,采用中断编程。ATmega128采用外部16MHz时钟。(由于Can已经是一种比较成熟和常用的总线技术,在此不做过多介绍。)
结束语
应用AVR单片机进行高速信号采集和处理具有51不可比拟的优势。实践表明,使用4MHz时钟的AVR单片机较使用相同时钟的51系列单片机具有20倍以上的速度和性能。而且AVR提供的JTAG/ISP接口,可以使用户方便进行在线仿真调试和适时程序更新。使用AVR单片机开发产品具有开发周期短,成本低廉等特点,因为对于使用熟练的开发者,所需要的开发工具就是一根自制的ISP下载线即可(成本不过十几元)。ATMEL公司将推出的新型AVR单片机将带有CAN、USB等等,继续降低功耗。这对热衷于使用AVR的开发者将是一个好消息!
|