一种基于FPGA的可直接输入阻值提供不同电阻的设计
现在市场上的各种电阻和电阻箱有不足之处,不能满足一些研发场所的要求,为了解决这一问题,本文介绍一种基于FPGA的可直接输入阻值提供不同电阻的设计方法。FPGA通过控制继电器的吸合,从而确定与其并联的电阻的接入与否,最后通过电阻的叠加得到不同阻值。介绍了该设计的工作原理及软件设计思想,并有部分仿真结果。 这种设计使用8421编码原则和硬件描述语言,减少了一些元器件的使用。相比于市场上的产品,其稳定性更高,抗干扰性更强,体积也更小,同时,它的操作更简便,显示更直观。 0 引言 电阻几乎是所有电路中必不可少的部分,常见的也有很多不同阻值的电阻,然而在一些电路中同一位置不同时刻还需要不同阻值,在一些精度要求不高的场合,可用滑动变阻器来实现,但是我们不能确定其具体阻值。随着技术的进一步发展,为了满足教学研某些场合的需要,阻值确定并可调的电阻箱应运而生。电阻箱提供阻值的原理是通过电阻的串并联得到的不同阻值,因而用到的电阻数量较多,精度也不够高,而且还需要对所需电阻的每一位数选择相应的档位,比较麻烦,也不够直观。而在一些生产应用中(如产品校验)需同时提供几组不同电阻,且要重复提供(如做产品老化检测实验),这就需要将该阻值记录下来,而以前的电阻箱都不具备记忆功能,不能满足要求。 本文介绍了用FPGA来实现控制电阻的提供,用软件的方式来设计硬件,设计过程中可用有关软件进行各种仿真,同时整个系统可集成在一个芯片上,体积小、功耗低,可靠性高,又因为其内部有存储单元,所以能够满足上述的“记忆”功能。 1 硬件电路 基于FPGA的可编程电阻系统的硬件系统(如图1所示)主要由以下几个功能模块组成: 1.1 主控制器FPGA FPGA(本设计中选用的是CycloneII系列)控制中心是整个设计的核心,主要控制实现对系统的键盘输入进行处理,并根据输入的信息转换成输出数据,控制对应的继电器的吸合,从而得到不同的阻值。 以往可编程网络的主控制器有采用数字电路控制的,也有采用单片机控制的,本电路采用FPGA控制。EPGA是近几年来出现并被广泛应用的大规模集成电路器件,它的特点是直接面向用户,具有极大的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,成本低,上市时间短,技术维护简单,工作可靠性好等。因而用来设计可编程电阻其灵活性更好。
图1。 目前市场上主要生产FPGA产品的公司有Lattice、Xilinx、Altera。在教学过程中,一般使用Altera公司生产的FLEX系列和Cyclone系列较多。鉴于产品的成本和通用性考虑,本实验中采用CycloneII,它是第二代低成本FPGA系列,它所拥有的独特性能有:NiosII嵌入式处理器支持,嵌入式18*18数字信号处理乘法器,中等容量的片内存储器(能够满足本设计的要求)中等速度的I/O引脚和存储器接口。在性价比上更适合本设计,所以在本设计中选用此系列。 1.2 键盘输入电路 键盘输入电路主要实现输出电阻值大小的设定,本设计中采用的4*4简易键盘输入即可满足要求,可提供简单明了的数字键和功能键共16个键,包括: 数字输入键:数字键0~9,按下数字键,输入一个数字,就可在对应的数码管上显示。 功能键:“电阻1”、“电阻2”本设计可以同时提供两组电阻,可以选择电阻1,也可以选择电阻2,提供一组电阻,也可以电阻1、电阻2同时选择提供两组电阻。 “存储”:每输入完一个数字后按一下存储键,以便能够将几个数据存储下来,运行后将按数据存储的先后顺序及预置的时间工作,循环提供数据。 “运行”:此键作为存储完数据后的启动键。 “停止”:停止提供电阻。 “复位”:可作为修改数据时用,按此键后可以使以前存储的数据都清零,然后重置一组数据。 1.3 继电器电阻网络 电阻网络。其原理图如图2所示,从图中可以看出,开关的闭合决定与其对应的电阻的接入与否,本设计中采用8421编码原理控制提供各阻值。
图2。 本设计所供用的电阻要精确到0.1Ω,所以,此电阻网络所使用的电阻都是精密电阻。这里我们以提供电阻阻值在1500Ω以内的电阻为例来说明。此电阻网络采用串联的方式来实现,8421编码方式只要控制相应的继电器,将其对应的精密电阻短接就可以实现。以1500Ω以内电阻为例,只需16个电阻就可以满足要求。通过控制继电器J1至J16的断开或闭合,其对应的电阻就会接入或断开,最后接入的电阻串联相加就得输出的电阻值。 如通过键盘输入一个预置值,如果输入的数值为5 4 5 . 7 Ω , 输出的阻值大小就可以表示R=400 100 40 4 1 0.4 0.2 0.1。即只需将这些电阻需要接入,相应的继电器J1、J2、J3、J5、J7、J11、J13、J15要断开,其余的继电器则闭合,对应的二进制代码则为(0101 0100 0101 0111)B,通过此列可以看出用16个电阻就可以实现1500Ω以内的精度可达到0.1Ω的任何电阻,使用电阻数量小,通过程序来控制电阻的接入,体积更小,同时,维护起来也更加方便,如果需要大于1500Ω的电阻,同样可以根据此原理来增加电阻(如8000、4000、2000、1000等),因为此设计中同时提供两个电阻,因而还要16个同样的电阻,原理同上(根据不同场合如要提供三组或三组以上的电阻只需相应增加即可)。 1.4 输出显示电路 输出显示电路主要功能是实时显示对应的键盘输入电阻值的大小、当前工作的步数和预置时间。根据要求,本实验采用数码管来显示其阻值即可,能够满足要求,为了显示以上数据,每个阻值的显示至少需要九个数码管,其中五位用来显示当前阻值的大小,两位用来显示当前的工作步数,两位用来显示数据的工作时间,如果采用静态显示控制将会需要相当多的引脚端资源(9×2×8=144个),为了减少对FPGA引脚资源的使用,本设计中采用扫描的方式来实现LED的动态显示。 2 软件设计及部分仿真结果 本设计中,主要控制程序都是通过FPGA的软件编程来实现。软件设计大体可以分为三个大模块:键盘扫描模块、LED显示模块、继电器电阻驱动电路模块。 2.1 键盘扫描模块: 键盘扫描模块主要用来检测外界输入的数据,主要由分频器电路、键盘扫描计数器电路、键盘行和列按键检测电路、按键抖动消除电路和键盘编码电路组成。 因为本设计中外接频率为一般用6MHz的信号作为时钟信号,但是键盘扫描不需要那么高的频率,所以需要一个分频电路将其频率降低为1kHz。键盘扫描计数器主要为键盘行和列按键检测电路和键盘编码电路服务,键盘行和列按键检测电路用来检测键盘输入所在行列的位置,按键抖动消除电路主要目的是为了避免按键时键盘产生的拉动效应使按键使能位产生不必要的抖动变化而造成重复统计按键次数的结果。同时,键盘位置的代号,并不是键盘上的按键值,所以要用键盘编码电路来传递真正的按键值。 2.2 LED显示模块: LED显示模块采用动态显示方式,这种实现方法是依次点亮各个LED数码管,循环进行显示,这种显示方式控制好数码管之间的延时相当重要,根据人眼视觉暂留原理,LED数码管每秒的导通16次以上,人眼就无法分辩LED数码管短暂的不亮,认为是一直点亮的,但延时也不是越小越好,因为LED数码管达到一定亮需要一定时间。为了达到较好的效果,本设计中延时取0.005s。 2.3 继电器电阻驱动电路模块: 继电器电阻驱动电路模块主要是FPGA根据键盘输入的电阻值,判断相应的一些电阻是否要接入,从而使电阻对应的继电器闭合或断开,给予其对应的信号1或0即可。 2.4 仿真结果: 由上述理论可知,电阻1的产生原理和电阻2的产生原理完全一样,为了使仿真结果更加明了,这里的仿真波形只用电阻1来验证其正确性,其仿真波形如图3所示。 此图是仿真图中的一部分,只选择了几个有代表性的信号显示出来加以说明,从图中可以看出有时钟信号clk,复位信号reset,电阻1选择信号resistance1,num11至num51显示的分别是电阻值的小数位、个位、十位、百位、千位。step11和step21分别显示的是当前工作的步数的个位和十位,其中time11和time21分别显示的是工作时间的个位和十位。Bus9则是动态显示时的数据信号,JIDIANQI则代表的是16个继电器的开关状态。从上图中可以看出该电阻的小数位的段码为07H,对应的二进制就是00000111,其对应显示的数字是7即小数位为7,同理可知其个位数为5,十位数为4,百位数为3,千位数为1,所以其阻值就为1345.7Ω,从图中可以看出总线上是循环传递着时间、步数和数值信息,根据阻值,其相应的继电器会闭合,根据上述电阻网络原理,J4、J6、J8、J9、J10、J12、J14闭合,其余的继电器均断开,即对应的二进制代码为(0010101110101000)B,换算成十六进制即为2BA8,从上图可以看出其验证结果是正确的。 3 结束语 系统通过引进FPGA来实现电阻提供这一模块,且将周围其他数字逻辑电路也集成至该芯片中。这样既解决了系统的特殊性,又增强了系统的抗干扰性,提高了控制精度,也简化了调试。此外,本系统还将驱动电路、编解码电路等硬件通过VHDL语言在FPGA芯片中实现,相比以前的模拟电路和单片机的实现方法,使用的元器件更少,体积也更小,针对不同场合,修改起来也更加方便。具有很好的市场前景。 |