基于FPGA的虚拟电源的研究与实现*
2015-12-22曹凯程杜玉远
曹凯程,杨 闯,杜玉远,王 骄
(东北大学信息科学与工程学院,沈阳110819)
CAO Kaicheng,YANGChuang,DU Yuyuan,WANGJiao*
(School of Materials and Metallurgy,Northeastern University,Shenyang 110819,China)
电源作为现代电力电子设备重要的动力来源,其体积大小与质量的优劣直接影响电子设备的整体性能。随着科学技术的飞速发展,许多系统芯片都实现了低功耗设计,这在节约能源和提高运行速度的同时,对供电电源的电压精度、输出电流、纹波、冲击、上电时序等性能也提出了更加严格的要求[1]。电源未来的发展方向是数字化、小型化、高频化[2],未来的电源一定是为数不多的外围器件与一个数字化智能化的集成电路组合而成[3]。因此,设计制作一款通用性强,灵活度高,智能化,可扩展的数字电源必定可以更好的适应各种系统、芯片对电源的不同要求。
所谓的虚拟电源,是指利用可编程的逻辑单元实现可控的电压输出[4]。与普通的电源相比,虚拟电源不仅能够提供电压输出,还能方便设定输出电压值;还能实时返回输出的电压值和电流值。本系统实现的虚拟电源,是以FPGA作为核心控制芯片设计的,其具有开放性、通用性、可靠性、简易性等特点。
1 系统结构
本虚拟电源系统包括PC端上位机程序、总控模块、电压输出模块、电压采集模块。上位机程序提供美观的操作界面,不但可以简单方便的设定电压,而且可以实时显示输出的电压、电流值。我们还能通过这个软件平台监测系统运行状态。总控模块采用具有强大的处理数据能力和良好的稳定性的FPGA硬件平台,可以通过UART[5]接受数据并进行分析处理,将设定电压传给电压输出模块;同时需将电压采集模块采集到的数值传送到上位机程序。电压输出模块的硬件主要由AD5662和TPS5450构成,主控模块通过控制 AD5662的输出,进而控制TPS5450的输出,完成控制电压输出的功能。电压采集模块采用AD7699芯片完成对电压的采集,采集电压输出模块的电压,用于电压的反馈调节,可以保证输出电压的正确性;采集精确电阻两端的电压,可以计算出输出的电流,用于过流保护。其系统框图如图1所示。
用户在上位机程序上设定理想电压值,数据通过UART传给总控模块,总控模块控制电压输出模块输出设定电压,总控模块通过电压采集模块判断输出电压是否正确,并通过自调整程序保证输出电压的稳定性。
2 系统设计
图1 系统框图
本虚拟电源系统结构包含硬件电路和软件程序两部分。硬件电路的设计与实现是本设计的关键所在,只有拥有良好的硬件,才能保证系统具有良好稳定的性能。为了满足系统设计的要求,从器件的选型到模拟电路的搭建都需要经过缜密的思考。软件程序的设计对系统的实现与优化同样起着至关重要的作用。硬件电路和软件程序两部分的完美结合保证了本虚拟电源系统的良好运行。
2.1 硬件电路设计与实现
本系统硬件部分主要包含总控电路模块,电压采集模块,电压输出模块等。
2.1.1 FPGA 总控模块设计
图2 EP2C8T144C8主要管脚图
Altera公司的FPGA芯片采用基于SRAM的设计工艺,内部结构由基本逻辑单元(LE)组成。CycloneⅡ系列所包含的基本逻辑单元(LE)从4 608个到68 416个不等。除了这些基本的逻辑单元外,CycloneⅡ系列的FPGA还包含其他一些具有特殊功能的逻辑模块,比如18 bit×18 bit的嵌入式乘法器、嵌入式存储器块(M4K)、锁相环(PLL)等[6]。在FPGA芯片所有的引脚之中,有一些是有专门用途的,不能随便用作其他用途,比如时钟引脚、电源引脚等。而用户可以自行配置的引脚数是芯片的总引脚数减去特殊功能引脚数后的值。如本设计中采用的EP2C8T144C8芯片,其总共有144个引脚[7]。EP2C8T144C8的主要管脚如图2所示。
2.1.2 电压采集模块设计
实现电压采集功能主要依靠AD7699芯片,AD7699是无失码的真16 bit SAR ADC芯片,每秒能够转换500 000个样本(500 ksample/s),两次转换之间器件关断。当采用外部基准电压源并以1 ksample/s速率工作时,典型功耗为52μW。虽然AD7699很容易驱动,但驱动器放大器所产生的噪声必须尽可能低,以便保持AD7699的SNR和转换噪声性能。AD7699的典型噪声为35μVrms(VREF=5 V),因此放大器引起的SNR性能降低为:
其中f-3 dB为AD7699的输入带宽(全带宽为14.7 MHz,1/4带宽为670 kHz),或者输入滤波器(如有)GN的截止频率。N为放大器的噪声增益。VeN为运算放大器的等效输入噪声电压,单位为
对于多通道、多路复用应用,在每个输入或输入对上,驱动放大器和AD7699模拟输入电路必须使电容阵列以16位水平(0.0015%)建立满量程阶跃。在放大器的数据手册中,更常见的是规定0.10%至0.01%的建立时间。这可能与16位水平的建立时间显著不同,因此选择之前应进行验证[8]。
通过仔细调查研究,本设计的AD7699的驱动放大器采用为ADA4841。ADA484能满足便携式设备对运算放大器的要求,具有极低的失真,在频率为100 kHz时的无杂散动态范围为111 dBc,能节省功耗并产生很低的热量[9]。
AD7699芯片采集到的输出电压可以反馈回FPGA总控模块,从而构成一个反馈回路,提高输出电压的精确度。通过采集一个精密电阻的电压[10],可以测算出输出电流的大小,为测量输出电流值提供了基础。AD7699的电源VDD和VIO应通过陶瓷电容去耦,其值通常为100 nF,靠近AD7699放置,并用短而宽的走线连接,以提供低阻抗路径并减小电源线路上的毛刺噪声影响[8]。利用AD7699设计的电压采集模块的原理图如图3所示。
2.1.3 电压输出模块设计
电压输出模块主要由AD5662芯片与TPS5450芯片构成。AD5662芯片用于为TPS5450提供基准电压值,而TPS5450则主要用于输出稳定电压,其具有的内部反馈环路可用于补偿[11]。要更改输出的电压值,只需FPGA更改写入到AD5662的16位二进制值。这样,就能方便的定制输出电压。为了保障输出电压的稳定想,FPGA通过比较电压采集模块采集回来的电压值与上位机设定的电压值,决定是否增减控制AD5662输出电压的16位二进制的值。本设计所使用的AD5662芯片的原理图如图4所示,TPS5450芯片的原理图如图5所示。
图3 电压采集模块原理图
图4 AD5662原理图
图5 TPS5450原理图
2.2 FPGA程序设计与实现
软件程序设计的主要内容是使用Verilog[12]语言对FPGA进行编程,包括控制开关模块、电压采集模块、电压输出模块、电压自调整模块、UART模块、数值转换模块等。
2.2.1 系统程序总体流程
当整个系统上电时,除电压输出模块外,其他模块开始工作,控制开关模块开始计时,当计时到1S时,控制开关模块使能电压输出模块的电压输出功能。若系统没有接受到上位机[13]传送的设定电压,则电压输出模块输出默认电压3.7 V。当系统通过UART接受到上位机发送的设定电压后,改变输出电压的值,并将采集到的电压、电流上传给上位机。电压自调整模块保证输出电压稳定。控制开关模块能保证输出电压、电流异常时关闭电压输出。系统的总体流程如图6所示。
图6 系统总体流程图
2.2.2 电压采集模块程序设计
AD7699电压采集模块的仿真图如图7所示。在开始下一轮采集前,cnv先输出一个上升沿,然后cnv拉高,保持一段时间的转换时间。在cnv为低电平时,开始串行输出配置数值,并串行输入电压值。由仿真图可以看出,AD7699电压采集模块可以正常采集电压值。
图7 AD7699芯片电压采集模块仿真图
2.2.3 电压输出模块程序设计
AD5662芯片控制时序的仿真图,如图8所示。
图8 AD5662芯片控制时序仿真图
在新一轮的转换开始前,先将sync拉高,然后sclk开始输出24个串行时钟,din在每个sclk下降沿输出串行数据,前8个时钟输出0,后16个时钟输出16位数字电压值给AD5662。
2.2.4 开关控制模块程序设计
开关控制模块主要用于控制电压输出模块,当检测到输出的电压、电流发生异常时,开关控制模块能及时关闭电压输出模块。为了防止上电后,电压输出模块输出电压的不确定性,在系统上电后,开关控制模块计时1 s后,才打开电压输出模块的使能。在每个clk的上升沿,开关控制模块都检测一下AD7699电压采集模块采集到的5个通道的电压值,判断5个电压值是否在正常范围内。若有一个电压值超出正常范围,则vpen输出为0,关闭电压输出模块的输出。
2.2.5 数值转换模块程序设计
数值转换模块的仿真图如图9所示。
图9 数值转换模块仿真图
在start_clk端接收到一个上升沿之前,数值转换模块处于空闲状态。start_clk端接收到上升沿后,开始进行转换。若AD7699的参考电压为5 V,则转换公式为:
当vol=0x7FFF时,vol_mv理论值应为2500。从4.9的仿真图中可以看出,vol端输入为0x7FFF,vol_mv输出为2459。可以验证数值转换模块工作正常。
2.2.6 UART 模块程序设计
UART模块包括UART发送模块与UART接收模块。为了保证接收与传送数据的完整性,在有效数据前添加了帧头与帧尾,帧长为定长。帧头格式为0x00、0xFF,帧尾格式为0xFF、0x00。发送数据长度为6 byte。接收数据长度为3 byte。接收到数据帧帧头之一0x00之前,UART接收模块处于等待模式。当UART接收模块接收到0x00之后,等待接收0xFF,若下一个数不为0xFF,则返回等待模式。在接收完完整的数据帧帧头之后,将有效数据存放在uart_rec_data中。UART发送模块的仿真图如图10所示。
在start_clk接收到一个上升沿之前,UART发送模块处于空闲状态,start_clk接收到上升沿之后,UART首先发送帧头字节之一0x00,再发送另一个帧头字节0xFF,然后发送6个有效字节,最后发送帧尾字节0x00和0xFF。
图10 UART发送模块仿真图
2.2.7 电压自调整模块程序设计
为了保持输出电压的稳定性,需要时时判断输出电压是否与设定电压相等。若输出电压小于设定电压,则应该提高输出电压值;反之,则应该降低输出电压值。设定电压由上位机设定,输出电压则由AD7699电压采集模块采集。通过对比两者的差值,进行电压的自调整,使输出电压保持动态平衡。
电压自调整模块的控制流程如图11所示。
图11 电压自调整模块状态转换图
图11为电压自调整模块在SignalTapⅡ Logic Analyzer下的采集结果。
从图12可以ad_ideal_val的值为0x7FBA,而vol_after_adjust的输出为 0x7FBF,vol_after_adjust与ad_ideal_val的差值为10,在误差允许范围之内,输出电压稳定,可以证明电压自调整模块工作正常。
图12 电压自调整模块的采集结果
3 系统测试
图13 系统实物图
在整体调试之前,先对各个模块进行单独调试,各个模块调试通过后,再将多个模块整合成一个完整系统。系统整合完成后,要对系统进行测试,图13给出了系统的实物图。
通过上位机更改设定电压,将设定电压设定为2.8 V,其设定界面与结果如图14所示。
上位机记录下虚拟电源系统传送上来的电压值,画出一段时间内的电压曲线,当设定电压为3.7 V时的电压曲线图如图15所示。
图15 电压曲线图
测试结果如下:
(1)AD7699采集模块可以正确采集电压值;
(2)电压输出模块可以正确输出设定电压;
(3)UART模块可以与上位机实现正确通信;
(4)可以通过上位机设定输出电压,测试电压从2.6 V到4.2 V,当系统不带负载时,输出电压的纹波小于10 mV,当输出电流为1 A时,输出电压纹波小于20 mV。
由上述结果可知,本系统的设计完成了预期的目标。
4 结论
综上所述,本文设计的基于FPGA的虚拟电源,可以输出稳定的电压,当电压从2.6 V到4.2 V且系统不带负载时,输出电压的纹波小于10 mV;当输出电流为1 A时纹波小于20 mV,可以通过UART与上位机实现通信,并利用上位机操作界面方便地设定输出电压值,且实时显示电压电流值,在硬件和软件两方面实现过流保护。所以,本文设计的系统可以很好地满足各方面的应用需求。
[1] 王溦.基于DSP+FPGA的高速数字信号处理平台的电源设计[J].现代电子技术,2007,15:34.
[2] 杨建伟.谈开关电源的原理和发展趋势[J].科技与企业,2012,22:359.
[3] 王久和.电压型PWM整流器的非线性控制[M].机械工业出版社,2008:34.
[4] 常学贵.用于数字电源的基于时间的模数转换器的研究与设计[D].复旦大学,2012,22:38.
[5] 王敬美,杨春玲.基于FPGA和UART的数据采集器设计[J].电子器件,2009,32(2):386 -389+393.
[6] CycloneⅡ Device Handbook,Volume 1[EB/OL].http://www.altera.com.cn.2014 -03 -01.
[7] Cyclone Ⅱ Device Data Sheet[EB/OL].http://www.altera.com.cn.2014 -03 -01.
[8] ANALOG DEVICESCorporation.AD7699 Data Sheet[EB/OL].http://www.analog.com.2014 -03 -01.
[9] ANALOG DEVICES Corporation.ADA4841 Data Sheet[EB/OL].http://www.analog.com.2014 -03 -01.
[10]方春恩,李伟,任晓,等.基于电阻分压器的10 kV电子式电压互感器的研制[J].西华大学学报(自然科学版),2010(2):148-151+155.
[11] TEXAS INSTRUMENTS.TPS5450 Description and Features[EB/OL].http://www.ti.com/product/tps5450#samples.2014 - 03-01.
[12]陈亚军,陈隆道.基于Verilog HDL的信号发生器的设计[J].电子器件,2011,34(5):525 -528.
[13]段大卫.基于VB的DSP与上位机之间的串行通信的研究[J].信息通信,2014(1):15-16.