历史上的今天
返回首页

历史上的今天

今天是:2025年04月06日(星期日)

2021年04月06日 | ARM7与FPGA在工控和故障检测中的应用

2021-04-06 来源:eefocus

工业控制中往往需要完成多通道故障检测及多通道命令控制(这种多任务设置非常普遍),单独的CPU芯片由于其外部控制接口数量有限而难以直接完成多路检控任务,故利用ARM芯片与FPGA相结合来扩展检控通道是一个非常好的选择。这里介绍用Atmel公司ARM7处理器(AT91FR40162)和ALTERA公司的低成本FPGA芯片(cyclone2)结合使用完成多通道检控任务的一种实现方法。


各部分功能简介


图1为此系统的结构连接框图。如图所示,ARM芯片与FPGA芯片之间通过数据总线、地址总线及读写控制线相连,而与终端PC则通过串口通信;FPGA与目标设备通过命令控制总线和故障检测总线相连。

图1 系统结构框图


1 故障检测和命令控制部分


故障检测:检测通道的故障(正常)信号以高(低)电平方式指示,其一旦有故障产生就会保持高电平不变直到故障排除。针对这种特征,在ARM控制器端采用定时中断循环查询方式来判断故障通道的状态。定时中断程序通过对ARM 地址总线在FPGA中进行译码而顺序锁定被检测通道的电平值,然后再经数据总线传回ARM进行判断,最后将判断结果送至远程终端。采用主机查询方式而不采用故障中断方式出于两个原因:一方面是通常控制芯片外部中断源有限(多数为4个外部中断源),对于多目标中断信号检测显然是困难的;另一方面,由于检测通道或设备受到短时干扰而产生电平随机反转,造成故障中断触发,而中断触发后又无法在通道电平恢复正常时撤销故障信号,故而形成虚假报警。


命令控制:ARM芯片先判断主控端发来的控制命令,然后通过地址总线和数据总线将命令状态发送至经FPGA地址译码锁定的控制通道上。


2 ARM芯片与远程检测控制终端通信


由于只存在命令和故障状态信号的收发,所以利用ARM的串口实现与远程PC的通信,通信标准选为RS232标准。不过,在ARM芯片上要先将TTL电平通过MAX232芯片转换为RS232电平标准,对于距离超过15m的全双工通信,在发送接收两端还要各加一对RS232转RS422电平的转换模块,以增加通信距离。


3 FPGA内部功能模块说明


FPGA内部检测及控制电路结构关系如图2所示。

图2 FPGA内部逻辑结构


ARM芯片的ADDR2~0位地址线和片选使能信号一同进入译码器decode1进行地址译码后产生8路输出(FPGA内部可设置一个最大输出为256路的译码模块,所以在实际应用中可扩展为更多通道),低4路用于命令发送通道,高4路用于故障检测通道,读写使能信号控制数据总线。


ARM芯片接收到发送信号编码命令时,立即在串口接收中断服务子程序中并送相应地址(通道编号)和数据(命令状态)到FPGA中。译码器有效输出作为相应通道D触发器的锁存时钟,而数据状态则被触发器锁定后作为所选通道的输出完成相应控制。


ARM芯片在定时中断产生进入服务程序后对所有检测通道轮流查询,查询到有通道故障时,故障信号结合选中通路信号经与非运算送往数据端口被读取。


FPGA程序设计注意问题


1延时的配置


通过地址总线和数据总线进行命令传输和故障检测时,FPGA是作为ARM芯片的普通外设来使用的。而ARM芯片对外设访问的速度要远低于片内存储器,所以要在ARM中设置访问的正确等待周期。ARM中提供的延时周期为0~7个,通过调试即可找到外设合适的等待周期,此系统的等待周期根据实际测试设置为5个,具体的配置方法见ARM程序说明。


2 读写使能信号的连接


1 处理器的资源分配


● 存储器

AT91FR40162内嵌一个256KB的SRAM,1024K个16位字组成的Flash存储器。SRAM通过内部32位数据总线与ARM核相连,单周期访问,Flash存储器则通过外部总线访问。


● 系统外围

EBI:外部总线控制接口,EBI可寻址64MB的空间,通过8个片选线(NCS0~NCS3独立)和24位地址线访问外设,地址线高4位与片选线(NCS4~7)复用,数据总线可配置成8/16位两种模式与外设接口。

PIO:并口控制器,PIO控制32根I/O线,多数为复用引脚,可通过编程选择为通用或专用。

AIC:先进中断控制器,实现片内外围中断及4个外部中断源中断的管理,其外部中断引脚与通用I/O复用。


● 用户外围

USART0~1:串口收发控制器,支持8个数据位的发送,可以进行异步/同步传输选择,其片外引脚与通用I/O复用。

TC:定时/计数器,可以产生定时中断和计数功能,其片外引脚与通用I/O复用。


2 存储器地址重映射后的空间分配


在CPU上电后,都会从地址0开始第一条指令代码的执行,而上电复位后0地址必须映射到NCS0片选所接的器件上,这里必须将NCS0连接到片内Flash上以加载初始化程序和应用程序。由于中断和异常的入口地址是0~20H固定不变,它们的产生都是跳转到0~20H之间相应的地址取程序执行,为了加快中断响应,必须将0~20H地址映射到片内RAM区,所以在初始化的重映射命令执行(EB1_RCR的RCB位置1)后,内部RAM就映射到地址0,所有的中断入口响应和堆栈操作都被映射到在RAM区进行。

由于重映射主要是用于Flash和片内RAM的地址空间交换,所以片内外围接口(EBI、USART、TC)对应的存储器编程地址范围在映射前后不发生改变,而访问外设地址为重映射后所分配。重映射后地址分配如表1所示。


3 应用接口的存储器配置


EBI存储器:在8个EBI片选存储器(EBI_CSR0~EBI_CSR7)中设置外设访问参数。其中,32位存储器中包括数据总线宽度8(16)设置,等待状态数目1~7个周期设置,等待使能(不是使能)设置,片选使能(不使能)设置。这里将FPGA作为外设,使能NCS3(也可根据实际选择其他空闲片选线),选择总线宽度16,使能等待周期并设周期为5(根据调试选择)。因默认NCS0为加载Flash片选线,而Flash为16位信号、7个等待周期,故需在EBI_CSR0中选择16位总线宽度、7个等待周期并使能NCS0。


AIC存储器:AIC存储器管理所有内外部中断,对此存储器的正确初始化赋值才会打开相应中断。设定AIC工作参数:应用串口通信模式为异步模式,串口发送的数据位字符长度为8位,通信的波特率9600B/s,串口中断优先级为6(中断优先级由低到高0~7),接收发送通道使能。


TC存储器:定时中断存储器需要设定定时长度为1s(每1s产生中断进行故障查询),定时通道使能及软件触发模式,定时中断优先级设为1。


4 应用程序说明


① 主程序

#define AT91C_BASE_EBI ((AT91PS_EBI) 0xFFE00000) //EBI基地址定义

int main()

{AT91F_EBI_OpenChipSelect (

AT91C_BASE_EBI, //地址指针

0x3, //片NCS3使能

0x30000000+0x3f39); //片选存储器初始化

Usart_init();//初始化串口

timer_init();//初始化定时器

while(1){} //循环等待

}


ARM处理器在完成各寄存器初始化后进入应用主程序,在主程序中首先调用EBI接口使能函数来设置参数:在程序中设置存储器基地址值(0xFFE00000),片选设置0x3(NCS3使能),NCS3的存储器初始化;调用USART控制器函数初始化串口:打开串口,串口收发通道初始化,设定串口通信速率;调用定时中断函数:打开定时中断,设置定时中断时间,设定触发方式为软件触发;最后进入等待循环。


② 串口命令接收中断服务程序

#define USART0_INTERRUPT_LEVEL 6//设置中断优先级为6

#define AT91C_US_USMODE_NORMAL AT91C_US_CHMODE_NORMAL//*设置通信模式(NORMAL定义为异步模式)*//

AT91PS_USART COM0=AT91C_BASE_US0;//设置COM0为收发口

char message;

// 控制端串口中断通信程序 //

//*----------------------------------------------------------------------------*//

void Usart0_c_irq_handler(AT91PS_USART USART_pt)//串口中断处理函数

{ volatile unsigned int *conp;unsigned int status;

int time;

volatile unsigned int i;

status = USART_pt->US_CSR & USART_pt->US_IMR;//给状态寄存器赋初值

if ( status & AT91C_US_RXRDY)//接收通道寄存器判断是否有数据

{

AT91F_US_DisableIt(USART_pt,AT91C_US_RXRDY);//关闭接收通道准备好中断

AT91F_US_EnableIt(USART_pt,AT91C_US_ENDRX);//打开接收结束中断

AT91F_US_ReceiveFrame(USART_pt,(char*)(message),4);//调用接收数据数接收数据

}

if ( status & AT91C_US_ENDRX){

AT91F_US_DisableIt(USART_pt,AT91C_US_ENDRX); // 关闭接收器传送结束中断

{ if((message[0]^0xff)==message)//判断接收代码

{switch (message[0])

{case 0x31 : {conp=(volatile unsigned int*)(0x1+0x30000000);//OPE1使能

*conp=0x2;}; break;//0x31代码送往OPE1端口

case 0x30 : {conp=(volatile unsigned int*)(0x2+0x30000000);//OPE2使能

*conp=0x1;}; break; // 0x30代码送往OPE2端口

case 0x11 : {conp=(volatile unsigned int*)(0x3+0x30000000);//OPE3使能

*conp=0x2;};break;// 0x11代码则往OPE3端口

case 0x10 : {conp=(volatile unsigned int*)(0x4+0x30000000);//OPE4使能

*conp=0x1;};break; //0x10代码送往OPE4端口

default:break;}

}

}


以上程序为串口中断服务程序,各函数语句说明参见注释。中断级别设置为6(高于定时中断),这样使命令发送优先于故障查询(控制命令随机出现而故障查询总是循环进行);接收缓冲区message数组类型必须设为动态分配,静态数据分配会使处理器开辟数据缓冲区到Flash芯片中,从而引发在一个中断处理程序中由于存取时间过长而导致串口收发超时的错误。因为篇幅有限,其他程序不再一一叙述。

在ARM应用程序的编写中,应该尽量少的在主函数内使用循环操作,主函数主要完成各接口控制器应用初始化,因为主函数不间断循环操作不但会增加功耗,而且长时间频繁切换于中断服务和主循环之间会造成程序运行的不稳定,所以能用定时中断完成的循环操作尽量用中断完成。


结语

ARM芯片控制功能结合FPGA灵活的多硬件接口模拟特性在工程上体现出的其独特的优势,已发展为一种流行的硬件架构模式,随着芯片功能的不断强大,这种优势将使其用途更广,对任务处理变得更加灵活高效。


推荐阅读

史海拾趣

ACE [ACE Technology Co., Ltd.]公司的发展小趣事

由于ACE Technology Co., Ltd. 公司的发展故事涉及具体的事件和详细经过,而这些信息可能并不公开或详细记录,因此我无法为您直接提供5个具体的电子行业里ACE公司的发展故事。但我可以基于已知的信息,为您概述ACE公司的一些可能的发展历程和关键点,这些可以作为您编写故事的参考。

  1. 创业初期与核心技术积累

ACE Technology Co., Ltd. 成立于2001年,早期便专注于电源管理IC和内存类IC的研发。公司的创始团队拥有深厚的电子行业经验和技术背景,他们看到了电源管理和内存技术的巨大市场潜力,并决定将其作为公司的核心竞争力。在公司成立初期,ACE投入大量资源进行技术研发,逐步积累了宝贵的技术专利和知识产权。

  1. 全球化布局与研发中心建设

随着公司业务的不断扩展,ACE意识到全球化布局的重要性。于是,公司决定在美国硅谷设立研发中心,利用当地的人才和技术优势,进一步提升IC设计水平。同时,为了降低研发成本并更好地服务亚洲市场,ACE还在印度建立了另一个研发中心。这些研发中心的建立,为公司的技术创新和产品升级提供了有力支持。

  1. 市场拓展与合作伙伴关系建立

在产品研发的同时,ACE也注重市场拓展。公司积极参加各种行业展会和交流活动,与国内外众多客户建立了合作关系。特别是在中国市场,ACE与深圳市欣诺泰电子有限公司等代理商建立了长期稳定的合作关系,通过他们的渠道将产品推广至本土工程师和厂商。这些合作伙伴关系的建立,为公司的业务发展奠定了坚实基础。

  1. 产品升级与品牌塑造

随着技术的不断进步和市场需求的变化,ACE不断对产品进行升级和优化。公司注重产品性能和稳定性的提升,同时关注客户反馈和市场需求,不断优化产品设计。此外,ACE还加强了品牌塑造工作,通过提升品牌形象和知名度,进一步增强了公司在行业内的竞争力。

  1. 应对挑战与未来发展规划

在电子行业的激烈竞争中,ACE也面临着诸多挑战。为了应对这些挑战,公司加强了内部管理,提升了运营效率。同时,ACE还制定了未来发展规划,包括进一步拓展国际市场、加强技术创新和研发投入、优化产品线等。这些举措将有助于公司在未来继续保持竞争优势并实现可持续发展。

以上是基于已知信息对ACE公司可能的发展历程和关键点的概述。如果需要更具体的发展故事,建议查阅公司官方网站、行业报告或相关新闻报道以获取更多详细信息。

GS Technology公司的发展小趣事
由于峰值信号可能较弱,需要通过三极管等放大电路对信号进行放大。三极管在这里作为放大器使用,其基极接收输入信号,集电极输出放大后的信号。
Galil Motion Control Inc公司的发展小趣事
用于显示电信号的波形和峰值。
Hi-Light Electronic Co Ltd公司的发展小趣事
为了只显示峰值,需要引入峰值检测电路。这可以通过二极管、电容等元件组成的峰值保持电路来实现,该电路能够捕获并保持信号的最大值。
HANA Micron公司的发展小趣事

除了工业检测仪表外,Hama在家用视听设备领域也取得了显著成就。公司推出的哈曼卡顿音响系列,以其卓越的音质表现和时尚的外观设计,迅速成为消费者心中的首选品牌。这些家用视听设备不仅为消费者带来了高品质的视听享受,也进一步丰富了Hama的产品线,提升了公司的市场竞争力。随着消费者对高品质生活的追求日益增强,Hama的家用视听设备业务有望继续保持快速增长。

First Sensor公司的发展小趣事

除了工业检测仪表外,Hama在家用视听设备领域也取得了显著成就。公司推出的哈曼卡顿音响系列,以其卓越的音质表现和时尚的外观设计,迅速成为消费者心中的首选品牌。这些家用视听设备不仅为消费者带来了高品质的视听享受,也进一步丰富了Hama的产品线,提升了公司的市场竞争力。随着消费者对高品质生活的追求日益增强,Hama的家用视听设备业务有望继续保持快速增长。

问答坊 | AI 解惑

GPS智能坦克车

这是一个51单片机为控制芯片的应用实例 [ 本帖最后由 dulfke 于 2008-11-23 14:16 编辑 ]…

查看全部问答>

USB数据采集方面的论文

谁有USB数据采集方面的论文,基于msp430+ch375。相关的即可,在写论文。QQ邮箱:419681844@qq.com,…

查看全部问答>

急!!! 关于倒计时牌设计

各位大虾  14位的倒计时牌设计  我实在是凑不齐14位  不知道是哪14位 有现成的程序最好  先谢谢啦!! …

查看全部问答>

请教 有关GPIO的问题

请问下非多功能引脚,如何实现接收串口数据。如何实现中断,在WINCE5.0下。…

查看全部问答>

QQ2440录音放音问题

找不到合适的版块发这贴...就在这里向大家请教了,请不吝赐教 小弟想在QQ2440板上做一个语音采集与压缩程序,现在用一段测试代码在我的主机上可以正常录音放音,但重新编译后转到板上就不行了,测试代码如下: /** record.c **/ #include #inclu ...…

查看全部问答>

Linux设备驱动第三版

Linux设备驱动第三版…

查看全部问答>

我的uCOS移植

本人在网上下载的uCOS,增加了定时器1周期中断,结果老是进入   App_Fault_ISR,   /*  3, Hard Fault   */,不知道怎么回事,请高手帮我分析一下,仿真环境为万利的开发板 ...…

查看全部问答>

对FSMC不熟,请教版主这个LCD可以用FSMC吗?

有一个LCD驱动板,接口如下,想用FSMC做个驱动方案,该如何与STM32F103VE接线呢? LCD驱动板的接口为8bit 8080总线方式,如下: VCC   模块供电电源输入(5V) D0-D7 8位数据总线 CS    片选(低电平有效) RES  ...…

查看全部问答>

看了半天芯片手册没看明白AD9220怎么接才能才正负2.5V

本帖最后由 paulhyde 于 2014-9-15 09:25 编辑 求各位赐教啊,  …

查看全部问答>