基于单片机与FPGA可调延时模块的设计

发布者:黄金大花猫最新更新时间:2014-02-25 来源: elecfans关键字:单片机  FPGA  可调延时模块 手机看文章 扫描二维码
随时随地手机看文章

  系统结构框图如图1。其硬件结构比较简单,主要由单片机P89C51RD、RS-232/TTL接口电路MAX232和可编程逻辑器件FPGA三部分组成。单片机P89C51RD2是上位PC机和FPGA的连接纽带,它通过并口发送数据给FPGA,另一边通过RS-232/TTL接口芯片与PC机进行串行通讯;PC机主要功能是实现延时调整的可视化操作;FPGA是延时调整处理的硬件实现,单片机将PC送过来的延时调整参数输入FPGA,FPGA在单片机的控制下对信号进行延迟处理,最后送入相应传输通道。某些系统使用现场存在较强的电磁干扰,模块的设计考虑信号隔离问题,故对串行接口进行了电气隔离,强化了PC机和模块通讯的安全系数。

  延时模块正常上电后,单片机P89C51RD2首先从数据存储区读出最近一次存储的延迟时间、信号通道等参数,并转发到FPGA数据接口。FPGA根据接收到的参数,首先筛选出目标地址以便切换到对应的信号通道,然后再根据时间对该通道进行预定的延时,恢复先前调整好的延时信号。在模块运行期间,P89C51RD2实时监测、接收来自上位PC机发送的新延时数据。如果需要对某一路信号的延时量进行调节,通过PC机的串口发新数据,P89C51RD2中断收到新数据后,将数据分成两路处理:一路进入到单片机的数据存储区,待下次上电读取使用;另一路则转发至由FPGA控制的延时控制,实现信号的延迟时间调整。

  块使用的P89C51RD2是PHILIPS公司内核基于8 位80C51单片机的派生产品,它们在完全保留80C51 指令系统和硬件结构的大框架外,还具有多方面的功能加强、扩展、翻新和创新,其中在应用中编程(IAP:In-Application Programming)是最显著特点之一。在应用中可编程是指MCU可以在系统中获取新代码并对自己重新编程,即用程序来改变程序。P89C51RD2的IAP功能实现是通过PHILIPS 公司提供的BootROM 固件来完成的,它位于0FC00H?0FFFFH空间,与闪存空间重叠(见图2)。固件中已经固化有擦除和编程等子程序,PHILIPS 公司提供了寻址该固件的方法,只要用户程序简单调用BootROM中带适当参数的公共入口,即可实现所需要的操作。

  P89C51RD2闪存结构见图2,它具有如下特点:

  1. 其闪存空间是分块的64kB的闪存空间,共分5块,由低到高分别为8kB(BLOCK0)、8kB(BLOCK1)、16kB(BLOCK2)、16kB(BLOCK3)以及16kB( BLOCK4);[page]

  2. 每一块都可以单独擦除;

  3. 在程序中可以调用IAP功能对闪存中的每一字节进行单独编程。

  正是由于上述三个特点,在不外扩展存储器情况下,将程序空间剩余下的闪存空间作为数据空间,把单片机接收中断采集到的信号通道、延迟时间等参数存储下来,实现掉电数据保存。

  软件设计

  整个延时模块的软件包括了PC机发送参数程序,单片机接收并存储参数程序和FPGA信号延时处理程序。

  PC机发送参数程序是用户将PC机的串口与模块连接,通过PC机的发送程序界面,很容易对信号进行延时调整。发送程序采用VC作为编程语言,调用串口控件,设计方便且界面简洁,界面如图3所示。发送的每个数据帧8位,包括延迟时间和信号通道两个参数,其中高三位是要调整的信号通道,后五位表示延迟的时间。发送程序中,对界面中的“+”或“?”进行一次操作,PC就通过串口向单片机连续发送8路信号延时参数,即只要调节了任一路信号的延时,PC机就会连续发送8个数据帧。

  单片机软件设计

  单片机主要完成与PC之间的通信,数据的存储和上电数据的读取。程序采用C51编写,编译采用当前编译效率最高的C51编译器KEIL。软件流程图见图4。

  

  在P89C51RD2的64k闪存空间中,地址为0000H-7FFFH的32kB闪存空间作为程序空间,整个单片机程序编译后为15k,所以32k的程序空间足够大。余下的8000H?FFFFH的32kB 闪存空间留作数据存储空间。两块数据存储空间轮流使用,当数据量存满其中一块时通过程序跳转到另一块,在使用前先将该块擦除。

  各函数介绍如下:

  main()——主程序;

  InitUart(void)——串口初始化;

  IapInit(void)——IAP功能初始化,使用IAP功能前必调用;

  PowerOnRead(void)——上电读取最近一次存储的参数。模块对上电时间要求不苛刻,最新数据的地址可通过查表方式寻找。每一个数据帧占一个数据存储空间,由于单片机每次中断都接收到8个数据帧,所以将每8个数据存储空间划分成一组,这样只要查询每组的头一个地址就能快捷地完成查询,大大节省了查询时间。[page]

  EraseBlock (uint AddressRestore)——判断当前数据存储空间块满,并擦除;

  RestoreData(void)——数据存储在数据存储空间;

  FPGADataUp(uchar DataRec)——更新FPGA接口数据。

  在程序中,要多次调用BootROM固件中的子程序。由于IAP子程序接口是汇编语言,为了编写方便,同时使程序框架明了,编写了一个IAPLIB.A51汇编语言接口函数库和IAPLIB.H头文件。在程序中加上IAP.H头文件,调用固件程序时就不需在C51程序中嵌入汇编,而是像调用C语言函数一样简单,这大大简化了编程。

  FPGA设计

  FPGA主要设计了DECODE延时通道译码器、CS片选信号控制器、N阶SHIFTER移位寄存器。其中译码器用于完成对单片机并口送来的数据进行通道、时间参数的分离,用通道参数进行寻址和译码,这是一种简单的译码逻辑和触发电路。N阶移位寄存器用于完成对信号进行N阶的延时处理,是延时处理的核心单元。 延时通道译码器将单片机并口送来的延时参数送入锁存器,同时输出控制电路将移位寄存器对应的延时阶切换到输出端。从不同的阶引出信号即可获得不同的延时量。控制时钟和移位寄存器的阶数决定了延时步进调节精度和延时调节范围。如果定时模块有N个信号通道,每个定时模块集成N个完全相同的延时调节单元,就可实现独立调节各个通道信号延时大小的功能。集成的延时调节单元越多,占用可编程芯片的资源就越多,这可以根据实际需要选择可编程逻辑器件。

  FPAG软件的设计采用“自顶向下”、“软硬兼施”的设计方法,主要的各单元设计采用VHDL语言描述完成,而整个多路信号的延时功能处理采用图形输入设计方法。软件设计完成后,根据电路原理图进行引脚锁定,然后启动编译程序来编译项目。编译器将进行错误检查、网表提取、逻辑综合和器件适配,然后进行行为仿真、功能仿真和时序仿真。最后通过编程器方式将POF文件下载到EPROM中。加电后,FPGA将EPROM中数据读入片内编程RAM中,完成配置,从而生成硬件电路。

  模块功能调试实现

  模块在调试中出现P89C51RD2有时上电程序运行不正常,读取程序空间是空的。但是只要上电工作起来,就恢复正常。怀疑由于上电复位时序混乱,造成误调用固件擦除芯片子程序。采用专用复位芯片替换电容电阻加二极管的复位电路,使问题得到了解决。同样,在单片机正确送数情况下,FPGA上电出现不能正常恢复预设好的延时信号,信号总是零延迟(第一次上电,单片机数据存储空间内没有数据,信号就处于零延时状态),但在工作状态下,能够很好地实现延时调节。怀疑这种情况是因存在复位问题而导致,但专用复位芯片不能解决问题。经多次检查程序,发现硬件语言程序中触发语句是电平触发,改写为脉冲上升触发后问题得以解决。

  结束语

  采用单片机和FPGA设计的延时调节模块,硬件结构简单,设计集成度高。软件方面,单片机程序将C语言和汇编语言很好地结合,FPGA充分发挥了硬件语言易改变电路结构和算法的优越性。提高FPGA中移位寄存器的时钟频率,同时相应增加移位寄存器程序输出阶数,可实现更高精度的延时步进调节和增大延时调节范围。因此可以在不改变模块硬件结构基础的上,通过软件升级来提高模块的性能,从而扩大模块的应用领域。

关键字:单片机  FPGA  可调延时模块 引用地址:基于单片机与FPGA可调延时模块的设计

上一篇:基于单片机C8051F410的精确信号模拟电路设计
下一篇:基于AT89S51单片机的定时报警器电路图

推荐阅读最新更新时间:2024-03-16 13:36

基于FPGA的微处理器内核设计与实现
与传统投片实现ASIC相比,FPGA具有实现速度快、风险小、可编程、可随时更改升级等一系列优点,因而得到了越米越广泛的应用。MCS-51应用时间长、范围广,相关的软硬件资源丰富,因而往往在FPGA应用中嵌人MCS-51内核作为微控制器。但是传统MCS-51的指令效率太低,每个机器周期高达12时钟周期,因此必须对内核加以改进,提高指令执行速度和效率,才能更好地满足FPGA的应用。 通过对传统MCS-51单片机指令时序和体系结构的分析,使用VHDL语言采用自顶向下的设计方法重新设计了一个高效的微控制器内核。改进了的体系结构,可以兼容MCS-51所有指令,每个机器周期只需1个时钟周期,同时增加了硬件看门狗和软件复位功能,提高了指令执行
[应用]
基于单片机的智能无功补偿仪的设计
1 引言 随着电力系统的快速发展,电力网容量不断增大,结构日趋复杂,电力系统中的自动化设备的运用越来越广泛。在电力负荷中,有相当一部分是感性负荷,它不仅消耗大量的有用功功率,也吸收大量的无功功率从而造成功率因数下降,导致无功电源不足,系统电压降低,损耗电能,降低供电能力。因此提高功率因数,可以保证供电系统安全运行并减少电能损耗,节约电能。一般情况下功率因cosφ大于0.9而小于1。由于感性电流是随机的,因此补偿电容器的投切也要随时跟踪变化。本文介绍的便是这样一种智能型无功补偿仪器。 2 无功功率的基础知识 在正弦电路中,负载是线性的,电路中的电压和电流都是正弦波。设电压和电流可以分别表示为 式中: —电流滞
[单片机]
基于<font color='red'>单片机</font>的智能无功补偿仪的设计
51单片机矩阵式键盘的编程方法
根据电路原理图,键盘扫描方法是:行线P1O~P13为输出线,列线P14~P17为输入线。一开始单片机将行线(P1O-P13)全部输出低电平,此时读入列线数据,若列线全为高电平说明没有键接下,若有列线为低电平则调用延时程序来去除按键抖动。延时后再读入列线看是否有低电平,如果列线数据还是有低电平,说明确实有键接下,接下来便是确定键值。下面以第二行的S5键为例,看接下S5后我们应该怎么得到这个键值。当判定确实有键接下之后,将行线轮流置为低电平,根据读入列线的数据可以确定键值。首先,单片机将P1O置为低电平,P11~P13置为高电平,此时读出的列线数据全为高电平,说明第一行没有键接下;接着单片机将P11输出低电平,P1O、P12、P13置
[单片机]
51<font color='red'>单片机</font>矩阵式键盘的编程方法
Efinix® 宣布 Trion™ T20 FPGA 样品已转接到大批量生产
可编程产品平台和技术创新企业 Efinix ® 今天宣布其 Trion™ T20 FPGA 样品已转接到大批量生产。Efinix 在短短几个月前才 推出 T20 样品 ,就迅速地实现了这一里程碑,从而可满足客户订购数以百万片计的订单。 Efinix 营运和应用资深副总裁 (SVP) 吳兆明 (Ming Ng)说:“在全球范围内,Trion T20 FPGA 在市场的接受情度达到了一言以蔽之的水平,即 ‘里程碑式’。推动 AI 边缘计算的未来是我们的使命,而大批量生产是沿着这条发展道路向前迈进的一大步。” 据 Efinix 负责中国区销售和业务发展的副总裁 (VP) 郭晶 (Jing Kuo)称,在过去的 6 个月里 Efi
[嵌入式]
Efinix® 宣布 Trion™ T20 <font color='red'>FPGA</font> 样品已转接到大批量生产
单片机定时器0的使用
本程序功能是让PA口接的等每隔0.5s闪烁一次,程序如下 include avr/io.h #include avr/interrupt.h #define F_CPU 8000000UL int k; int main(void) { DDRA=0XFF; PORTA=0xff; TCCR0=0X05; TCNT0=256-F_CPU/1024*0.5; TIMSK=0X01; sei(); while(1); } ISR(TIMER0_OVF_vect) { k++; if(k 200) { k=0; PORTA=~PORTA; } TCNT0=256-F_CPU/102
[单片机]
单片机C51数据类型和存储器类型
一、数据类型 我们51单片机使用的C语言的数据类型分为以下几种: 图 1 图1中例出了C51所有的基本类型,可供大家参考。 二、储存器类型 我们51单片机使用的C语言的存储器类型分为以下几种: 图 2 图2例举出了C51所有的存储器类型,可供大家参考。
[单片机]
<font color='red'>单片机</font>C51数据类型和存储器类型
LCD1602控制要领(pic单片机)
PIC板使用LCD时需要将J401摘除 LCD 4脚(RS数据/命令选择端H/L)-----RB2 LCD 5脚(R/W读写选择端H/L)---------RB1 LCD 6脚(E使能读H,写L- H)----------RB0 控制要领: 如无检忙则可在每次操作之前作适当延时即可. 写命令:rs = 0;rw = 0;ep = 0- 1- 0;(用于初始化和在控制显示的位置) 写数据:rs = 1;rw = 0;ep = 0- 1- 0;(用于显示内容) 初始化: Write_COM(0x38);//双列16X2 Write_COM(0x0C);//开显示;无不显光标;光标不闪烁 Write_COM(0x06);//
[单片机]
基于51单片机对自动打铃系统的设计
51单片机自动打铃C语言程序: #include “reg51.h” #include “intrins.h” #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阴极总段// uchar DSY_BUFFER[]={0,0,0xBF,0,0,0xff,0,0};//时间显示时-分 模式 uchar DSY_BUFFER1[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xf
[单片机]
基于51<font color='red'>单片机</font>对自动打铃系统的设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved