学海荡舟手机网

主页 > 实用文摘 > 教育文摘_04 > > 详细内容

用TMS320LF2407和FPGA实现电能质量监测_DSP论文

摘要:提出用tms320lf2407和fpga实现电能监测的一种方案,阐述各模块的设计和实现方法,本方案中,fpga用于采样16路交流信号并进行64次谐波分析;dsp和于电力参数的计算。为了提高其通用性,还用fpga设计了与外界通信的并口、串口模块,并实现了同tms320lf2407的并行和串行通信。

    关键词:电能质量 dsp fpga fft uart

随着人们对电能质量要求的日益提高,如何保证电能质量就成为一个热门话题。电能质量监测的一项主要内容是谐波检测,即对多路模拟信号进行采集并进行谐波分析。本系统对16路50hz模块信号进行采样并进行64次谐波分析。如果仅仅依靠一个mcu(单片机或控制型dsp)来进行处理,往往达不到实时性要求,所以采用dsp和fpga相结合的方法。利用dsp对电力参数进行计算,利用fpga进行谐波分析。

系统主要包括数据采集电路、adc模块、fpga模块、dsp模块及上位机显示模块,其结构如图1所示。

图1 系统框图

1 数据采集电路和adc模块

对经过互感器调理成-3.3~+3.3v(adc测量的最大量程)的信号进行采样。根据香农抽样定理,对最高频率fc的连续信号进行抽样,须保留其全部内容。抽样频率fs满足条件为:fs≥2fc。如图1系统框图所示,本系统中,adc采用的是max125,其单通道的转换时间为3μs。若利用内部的采样保持器,可以同时采样4路信号,转换时间为12μs。为了同时采集已经过调理的16路模拟信号,必须对其进行采样/保持。在前向通道使用16路采样/保持器(smp04),再使用多路开关(max306)依次选择这16路信号,输入到max125的一个通道(ch1a),并由fpga发出转换信号convst。待转换结束,max125发出int中断,通知fpga读取转换结果。总之,由fpga中的adc控制模块完成对max125、max306及smp04的控制以及对max125信号的中断响应。

2 fpga模块

fpga模块主要完成通信、数据采集、adc模块的数据读取、保存及底层的信号预处理计算——谐波分析。fpga工作流程如图2所示。其子模块有:adc控制模块、adc采样数据保存区、fft工作ram、fft运算结果保存区、开方修改正表、开方运算单元、谐波系数存放区以及串行、并行通信控制模块。

图2 fpga工作流程图

    (1)adc控制模块

图3所示adc控制模块除了完成对max125、max306及smp04的控制外,还要响应max125的中断(int)来读取转换结果,并将其保存到adc采样数据保存区。如图3所示,为了更准确地产生控制时序,对系统的采样周期及相位的锁定都采取了相应的处理。待采样信号先经过方波转换电路,将其转换成0~+3.3v的方波信号,再经过fpga中的数字锁相环模块,根据外部时钟和计数器测量出其周期,作为下一个待采样信号的采样周期。这样就减小了由于待采样信号频率的漂移而带来的采样周期的误差。本系统采用的数字锁相环在fpga中实现,其具体的性能为:锁相环的捕捉带Δfmax=12.5hz,锁相频率为50hz±12.5hz=37.5~62.5hz,随后产生的采样周期ts能够满足实际应用的要求。同时,根据多路开关信号和计数器,产生adc采样数据保存区地址,保存来自max125的14位数字量。

(2)谐波分析模块

本系统中,采用快速傅里叶变换(fft)进行谐波分析,主要因为fft使n点dft的乘法计算由n2次减少到(n/2)log2n次。由fft工作流程图可知,本系统在分析64次谐波时,整个运算分6级。在第一级蝶形运算中,蝶形运算单元根据算法控制模块的控制信号,从adc采样数据保存区取出原始数据,从旋转因子rom中取出旋转因子,进行fft的第一级蝶形运算,并将结果存入fft工作ram。在以后的各级蝶形运算中,蝶形运算单元从fft工作ram中取出间数据,从旋转因子rom中取出旋转因子,进行运算,直至第六级蝶形运算结束,并将结果存放到运算结果保存区,以便进行各次谐波系数计算。

    在进行fpga设计中,为了节省器件的内部资源,其计算内核采用复用技术进行设计,其基本原理如图4所示。

在fft运算中,一个蝶形运算单元和一组工作ram被重复使用,其中最重要的是fft工作控制逻辑的实现。它主要完成从adc采样数据保存区取出数据、向fft工作ram中写入和读取数据以及向fft结果存放区存放结果等工作。

根据fft运算的结果z=dinr+jdini,计算各次谐波的系数(其中,dinr为结果的实路,dini为结果的虚部,。在进行开方运算时,若设计64m×13位长度的存储器进行查表计算,对于现有的可编程逻辑器件来说是很难实现的。因此,本次设计中采用了修正查表算法:将待开方的数据z=(dinr2+dini2)左移m次(m为偶数),直到其最高两位不全为0,此时z变为z1;取z1的高8位来查表(此时表长为2 8=256个字)得到t1;使用牛顿一次迭代公式t=(t1+z1/t1)/2,对t1进行修正得到t;最后将t右移m/2次,得到开方结果。实验证明,上述修正后的查表法误差在允许的范围内,对本系统来说是可行的。

在软件方面,为了提高芯片的性能及资源利用率,采用quartus ii 2.0t synplify7.1。在synplify中使用有效的代码,采取流水线设计、优化组合逻辑及减少逻辑延时等措施来提高整体性能,还进行了多个文件的分块设计,然后将这些文件映射到顶层文件进行综合,并运行vhdl或者verilog hdl对单个文件编写、信真和优化。在用到组合逻辑时,synplify会尽量避免锁存器的出现,节省逻辑单元。对于acex系列的芯片,它还支持寄存器配平技术、流水线操作、复制逻辑模块及使用lpm函数等技术来提高其整体性能。synplify和其它结合软件一样,编译后生成的电子设计交换格式文件(edif)可以在max+plus ii或quartus ii 2.0中进行编译、分别引脚和其它优化处理。因此,采用quartus ii 2.0和synplify7.1相结合,对fpga进行设计、优化及综合,不仅能提高系统性能,还能提高芯片资源的利用率。

(3)通信接口模块

为了灵活地与外界系统进行连接,fpga提供了并行通信和串行通信两种形式。并行通信可以直接和dsp连接组成电力监测和控制系统;串行通信不仅可以方便地和dsp连接,不可以和不具备谐波分析功能的系统组成更加完善的电力监测系统。

以于并行通信,如系统框图所示,根据规划好的lf2407扩展i/o空间,由lf2407的高位地址线的逻辑组合来产生fpga选片信号,低位地址线向lf2407输出要访问数据的地址,在is引脚的下降沿,fpga中的数据传输到lf2407的数据总线。值得注意的是,在编写fpga的并行通信模块时,除了编写相应的控制程序以外,还要利用lf2407的is引脚来选通fpga的三态总线进行数据输出,这样可以避免fpga与lf2407的数据接口影响lf2407的工作。

如果利用fpga进行串行通信,则可以完善已有的电力监测系统。为了使其能和现有的设备更好的进行连接,还设计了tms320lf2407和fpga之间的串行通信。本系统中,lf2407包含了可以直接利用rs232通信的串行通信接口(sci)模块,所以对fpga编写串行通信接口模块时,要保证和lf2407相同的通信格式。本系统在实际设计中采用的通信格式为:1个起始位,8个数据位,1个奇/校验位,1个停止位。tms320lf2407的串口通讯电路如图5所示。

fpga的uart模块中,确定相同通信格式的同时,还要确定相同的波特率,并根据波特率产生发送、接收时钟。对于数据的发送,fpga监测txrdy(发送就绪)信号。如果txrdy=“1”,就从待发送数据区中取出数据写入uart的数据总线,随后产生一位起始位。然后,利用发送时钟触发移位寄存器,将待发送数据送到内部寄存器,将数据依次送到发送端(tx)。最后,根据发送数据的“1”的个数,加上校验位和停止位,就实现了数据的串行发送。

fpga的监测单元监测到rx的下降沿,则启动接收单元。在采样时钟的上升沿对接收信号进行采样,高电平为“1”,低电平为“0”。然后通过移位寄存器,将串行数据转换成并行的8位数据,完成数据的接收。

图5 串口通信电路图

3 dsp模块

根据算法的分配,高层的信号处理量小,但控制结构复杂,适合用处理速度较快的dsp来处理。本系统中,dsp主要是根据fpga中模拟量的采样结果和运算结果,计算电力参数以及发出相应的控制信号。如有必要,还可以用液晶来显示结果。

对于lf2407和fpga的并行通信,使用lf2407的扩展i/o来读取fpga中adc采样数据保存区和各次谐波系数放区中数据。lf2407可以直接使用in和out指令对fpga进行读写。

对于串行通信,lf2407向fpga发送数据。只要查询scictl2的7号位,来判断发送器是否为高。如果为空,lf2407就可以向fpga发送数据(命令),控制fpga的运行。同样,lf2407采用中断方式接收从fpga发送来的数据。lf2407接收中断的向量地址为int1(0002h),外围中断向量为0006h。

4

本系统已完成实验室样机制作与调试,证明设计正确,可以完成对电力质量进行监测的任务。在电力监测系统中,通过fpga和dsp相结合,可使测量更灵活、控制更方便。本系统有选择地进行并行通信或串行通信,使设计更加灵活多变,有利于系统的扩展,方便与其它电力测控系统直接相边,而且适于模块化设计,提高算法效率,缩短开发周期。