ARM7与FPGA结合的工控嵌入式系统技术在工业控制和故障检测中的应用实例
在工业控制领域,实现多通道故障检测与命令控制是一个常见且复杂的任务。传统CPU芯片由于其外部接口数量有限,难以直接处理多路检控任务。ARM7微控制器与FPGA(Field-Programmable Gate Array)的结合提供了一种有效的解决方案。本文将介绍如何利用Atmel公司的ARM7处理器(AT91FR40162)和ALTERA公司的低成本FPGA芯片(cyclone2)来完成这项任务。
系统架构如图1所示,ARM芯片与FPGA通过数据总线、地址总线及读写控制线连接,而与终端PC则通过串口通信;FPGA与目标设备通过命令控制总线和故障检测总线相连。
故障检测和命令控制部分
故障检测
故障检测部分负责监测通道是否发生故障。当有故障产生时,该通道会保持高电平状态直到问题得到解决。在ARM端,我们采用定时中断循环查询方式来判断通道状态。程序首先对每个通道进行译码,然后查询其电平值,并将结果返回给远程终端。此方法避免了因干扰导致虚假报警的问题,同时也克服了单个中断源不足的问题。
命令控制
命令控制部分由ARM发送给目标设备。首先,ARM判断主机发来的命令,然后通过地址总线和数据总线将命令状态发送至相应的通道上。这一过程需要确保正确的等待周期配置,以便于访问外设。
ARM芯片与远程检测控制终端通信
为了实现双向通信,我们使用ARM串口,与远程PC通过RS232标准进行通信。不过,在转换为RS232电平之前,还需使用MAX232芯片进行TTL到RS232的转换。此外,对于超过15米距离全双工通信,我们还需要额外加上RS232转RS422电平转换模块,以提高信号质量并延长传输距离。
FPGA内部功能模块说明
FPGA内部结构如图2所示,它包括两个主要部分:一个是用于存储所有可能输入信号以及输出信号的一个D触发器阵列,这样可以随时锁定特定的输入值作为输出;另一个是用于检查输入信号是否符合预期模式的一系列逻辑门组成的网络,这些网络会根据预设条件生成合适输出。如果某个输入不匹配预期模式,那么它不会被允许进入D触发器阵列中的任何位置,从而使得相关输出保持原有的稳态或去除该条信息从而防止错误信息被发出出去。
ARM配置及应用程序说明
处理器资源分配
AT91FR40162拥有256KB SRAM和1024K字节16位Flash存储空间,其中SRAM可供32位数据总线直接访问,而Flash则需要通过外部接口EBI访问。系统还包含EBI、PIO、AIC等用户外围接口,可以支持各种不同类型设备连接,如串行波特率UART0/1、计数/定时TC等。
存储器地址重映射后的空间分配
在CPU启动后,默认情况下内存空间是未映射的情况,因此我们必须在初始化过程中设置NCS0为Flash加载地址,使得CPU能够加载初始化程序。在重映射后,RAM区被映射到地址0处,从而可以快速响应中断请求,并执行堆栈操作。其他存储区域如EBI、USART、TC都没有改变,其编程参数配置如下:
EBI:选择16位宽度、高效模式5周期等待。
AIC:设置异步串口模式8位字符长度9600B/s、中断优先级6。
TC:设置定时长度为100ms,每过100ms产生一次中断,并开启软件触发模式且优先级为1。
应用接口配置
对于EBI管理存取参数,其工作在16位宽度、高效5周期等待下;对于AIC管理中断,则按照异步串行协议工作,每次8位字符长度9600B/s速度,并设定优先级6;最后对于TC计数器,将其设置为每过100ms产生一次中断并开启软件触发模式,但调整其优先级至最低即1级别以保证关键操作不会因为此类非关键事件而受到影响或阻塞。但实际应用场景可能会根据具体需求进一步调整这些参数以满足最佳性能要求。此外,由于系统设计考虑了灵活性,所以用户可以轻松地更改这些参数以适应不同的应用需求,无需重新烧录固件,即可实现灵活性强且易于维护的大型嵌入式系统设计。