本部分主要介绍
FPGA+ARM
控制部分的软件设计。
FPGA+ARM
控制部分包括
Verilog
HDL
硬件描述语言和
C
语言的开发。
FPGA
部分主要控制
AD7606
模数转换、数字三相锁相
环和FFT谐波计算模块、
SDRAM
控制器的设计、
FSMC
接口模块等。
ARM
部分主要完成嵌
入式实时操作系统
FreeRTOS
的移植、
FPGA
和
ARM
之间数据的读取和写入、
ARM
和上位机
之间的串口通信、以及经浮点运算后得出电能质量的各项参数等。
4.1 FPGA 模块软件设计
4.1.1 FPGA设计优势
FPGA
采用的是自顶向下的设计方法,将复杂的系统划分为低层次的功能模块,再将低
层次的模块划分为下一层的模块,一直划分直到能够使用基本模块为止。这种方式极大地
提高了开发效率和便于管理,使用
FPGA
开发具有很多优点:
(
1)运行速度高。
FPGA
通过外部输入晶振产生系统时钟,再利用内部的锁相环倍频
功能可以生成各模块所需的时钟,频率可以达到很高。
(
2)代码运行效率高。与单片机、
DSP
不同,
FPGA
打破了传统的顺序执行模式,采
用硬件并行执行方式,其运行效率更高。
(
3)数字接口丰富。
FPGA
的
I/O
口众多,能够完成大规模的系统设计,而且开发人
员可以自定义这些
I/O
,使得
FPGA
的灵活性很高,其功耗低,输入输出接口能与
TTL
、
CMOS
等兼容。
(
4)可重构。
FPGA
的内部逻辑可以根据需求而改变,可以极大地缩短集成电路的设
计周期,还能够降低成本,市场前景广阔。
4.1.2 FPGA开发语言及软件
Verilog HDL
是一种硬件描述语言
[45]
,用来描述数字系统硬件的结构和行为。和一般的
高级设计语言不同,硬件描述语言并行执行,还能描述过程中的时序,可以对各种抽象层
次的数字系统进行建模,这些层次按级别有系统级、算法级、
RTL
级、门级、开关级,在模
块中对设计的描述方式分为数据流、行为和结构三种方式,
Verilog HDL
于
1995
年被正式
纳入
IEEE
标准。
QuartusII
是
Altera
公司的
FPGA
开发软件,输入形式包括原理图、
Verilog HDL
等,其
界面友好且操作方便,涵盖了可编程逻辑器件的完整开发过程,包括设计输入、综合、布
局布线、时序分析、仿真和编程配置,用户可以在
QuartusII
中实现整个数字集成电路的
FPGA
设计流程。开发流程图如
4.1
所示。
4.1.3 FPGA软件运行流程
(1)设备上电后,复位,完成初始化。
PLL
锁相环将输入的
25MHz
晶振时钟倍频到
100MHz
,作为系统运行的主时钟。
PLL
输出稳定后,主状态机开始运行,并等待
AD7606
初
始化完成后,设备正式开始运行。
(
2)采样周期计数模块产生一个周期中断作为
AD7606
的采样频率,中断频率大小由三
相锁相环的输出决定(初始值为
100MHz/12.8KHz=7812
)。
(
3)
ADC
采集模块接收到周期中断后,立刻开始同步采集并转换
3
路电压和
3
路电流信
号 ,转换方程如下:
( 5 ) =
32768
5
2.
5
V
I
N R
E
F
V CODE
V
V
。同时正余弦计算模块,根据三相锁
相环输出的锁定相位角(初始值为
0
),计算
1-17
次谐波的正余弦值。
(
4)
SDRAM
计算模块,将
AD
采样的三相电流和正余弦值作为输入,计算出其实部和
虚部,然后将其存储在
SDRAM
中。
(5)FFT
计算模块,以一定的周期,在
SDRAM
模块中,抽取三相电流数据点,分别进
行
256
点
FFT
计算,然后将计算出的三相电流谐波分量幅值,存入到
RAM
中。
(6)三相锁相环模块,对AD
采样的三相电压,进行锁相环计算,并输出采样频率,通
过该值调整
AD
的采样频率,使当前正余弦值计算模块的相角与三相电压同相。
(7)最后将所有的计算数据同步更新到FSMC
的存储寄存器组中,并输出一个
ARM
中
断信号,通知
ARM
对这些寄存器数据进行访问。步骤
3-7
,必须在下一个周期中断产生之前
完成。步骤
3-6
完成后,主状态机将等待下一个周期中断,然后重复以上步骤继续运行。
FPGA
主程序流程图如
4.2
所示。
4.1.4 AD7606 采样
AD7606
的工作是通过
FPGA
控制其信号时序进行的。
AD7606
通过
CONVST_A
、
CONVST_B
引脚分别控制
V1~V4
、
V5~V8
八个通道的转换,通过
CS
和
RD
控制数据的读
取,通过
PAR/SER SEL
引脚控制选择数据接口模式。本设计中将
CONVST_A
、
CONVST_B
连接在一起实现
8
通道同步采样,将
PAR/SER SEL
引脚设置为低电平时采用并行数据线
DB[15: 0]
输出。在开始采样之前,需要给
RESET
引脚一个大于
50ns
的正脉冲进行复位,当
CONVST
信号的上升沿时
AD
转换开启,
AD7606
内含有的片内振荡器用来实现转换,同时
BUSY
信号变为高电平并发送至
FPGA
表示正在进行数据转换,当转换结束时
BUSY
信号恢复
低电平,此时
8
路转换数据被锁村到输出数据寄存器中,设置
CS
和
RD
设置为低电平,使能
数据输出总线
DB[15:0]
并将数据发送至
FPGA
,一次
A/D
转换结束。
BUSY
信号高电平的持
续时间
t
CONV
的长短取决于芯片的采样速率 ,转换控制时序如图
4.3
所示。
驱动程序的编写是利用
FSM
(
Finite State Machine
,有限状态机)设计实现的,
AD
数
据读取状态转换过程如图
4.5
所示,关键程序部分见附录。
4.1.6 FFT运算模块
本设计中谐波计算采用基
-2 FFT
变换,
FFT
运算模块有两种实现方法:第一种是根据
FFT
的基本原理自定义
FFT
模块,设计模块有蝶形运算单元、旋转因子单元、地址发生器以
及时序控制单元等,然后再进行仿真测试,这种方式占用较多的资源,而且计算效率较
低;第二种是利用
Quartus ii
软件上提供了专门的
FFT IP
核,根据设计要求设置参数就能得
到一个高效地 FFT 模块,在实际工程应用中可以直接移植,在移植之前需要对其进行时序
仿真验证。本文选择第二种方法。
Quartus ii
提供了两种定制
FFT
的方法:
DSP Builder
和
MegaWizard Plug-in Wizard
,本
设计选择了第二种方法,其可以手动配置
FFT
的参数。选择
Transforms
下
FFT v13.1
,选
择输出文件类型为
Verilog HDL
[47]
,新建
FFT
如图
4.9
所示。
进入
FFT
配置界面后,配置的是转换长度为
256
点,数据位度和旋转因子精度都为
16bits
。
FFT IP
核元件图如
4.10
所示,包含
10
个输入和
8
个输出信号:
sink_real[1 5
:
0]
和
sink_imag[1 5
:
0]
:是输入数据的实部和虚部;
source_real[1 5
:
0]
和
source_imag[1 5
:
0]
:是输出数据的实部和虚部;
Source_exp[5
:
0]
:是所得输出实部和虚部数据的指数;
Sink_valid
:为
1
时,表示
FFT
正接收数据;
Source_valid
:为
1
时,表示正读取
FFT
的转换结果。
FFT
核的引擎架构分为四输出和单输出,这里的“单”和“四”是指内部FFT蝶形处理
器的吞吐量,前者分时复用一个复数乘法器,单个时钟内得到
1
个输出,单输出消耗资源
少;后者同时使用
4
个复数乘法器,单个时钟内得到
4
个输出,四输出计算速度快。本设计
采用单输出引擎架构,可以使
FFT
处理器的资源消耗最小化。其中单输出实现结果如图
4.11
所示,
FFT
引擎通过并行方式从
RAM
中读取复数输入
x[k,i]
,然后通过蝶形运算得到
FFT 输出一路结果
G[k,i]
。
FFT
核内部数据使用块浮点结构,以达到高信噪比
(SNR)
,
Altera FFT
核可以设置
为四种
I/O
数据流结构,按不同的速度要求由高速到低速分别为流结构、变流结构、缓
冲突发结构、突发结构四种
I/O
流方式。流结构和变流结构都是流水线型的,是对时间
要求很严格的应用场合,能实现很高的数据吞吐率,但缺点是占用最多的逻辑资源。硬
件实现的
FFT
处理速度快,即便是突发结构,
1ms
内便可完成一次
256
点
FFT
,故选
择
Burst
架构。
最后要对FFT仿真激励文件进行编写,利用
Modelsim
仿真软件,与
Quartus ii
自带的
仿真功能不一样,
Modelsim
仿真需要编写激励文件
(Testbench)。激励文件主要用于给子
模块提供信号激励。
FFT
数据输入输出时序如图
4.12
所示,仿真图如
4.13
所示,左侧为
模块端口变量名。
4.2 ARM 模块软件设计
4.2.1FreeRTOS简介
近年来嵌入式操作系统因其高实时性、多任务调度等优点在各个领域得到了广泛的应
用,目前主流的嵌入式操作系统有
Vxworks
、
Linux
、
µC/OS-II
及
FreeRTOS
等,不同于
Unix
操作系统给每个任务分配同样的运行时间的任务调度方式,
RTOS的任务调度设计是可预测
的,
FreeRTOS
的任务调度就是根据优先级来决定下一刻该运行哪个任务,这样在实时环境
中操作系统就能够对某一事件做出实时的响应。本设计采用
FreeRTOS
嵌入式实时操作系
统,可以更合理、更有效地利用
CPU
的资源,简化应用软件的设计,缩短系统开发时间,更
好地保证系统的实时性和可靠性。
FreeRTOS
是一个可裁剪的小型实时操作系统,其特点包
括:
(
1)性价比高。
FreeRTOS
是完全开源的操作系统,其完整的源码在官网就可以方便的
下载到。
(
2)高可移植性。
FreeRTOS
源码大多用
C
语言编写,移植起来更加方便。
(
3)可裁剪性。用户可根据
FreeRTOS
提供的丰富的配置,选择自己需要的内核功能。
(
4)混合任务调度模式。
FreeRTOS
同时支持优先级抢占式、轮转式协同调度和时间片
调度三种方式,优先级高的任务优先处理,优先级相同时则按时间片轮流执行,这样使得
系统运行时的灵活性强。
(
5
)
FreeRTOS
系统简单、小巧,一般内核仅占用4k-9k字节空间,大大节约了资源。
4.2.2 ARM软件运行流程
ARM
上电后执行以下初始化:
FreeRTOS
内核初始化、板载信号灯初始化、串口初始
化、
FSMC
总线初始化、中断
IO
初始化。
初始化完成后,将会创建
4
个线程:
(1)参数设置线程:ARM
通过串口,接收上位机设置的参数,并执行响应操作。
(2)数据上传线程:ARM
通过串口,将设备运行数据上传给上位机。
(3)FPGA
通信线程:完成
ARM
向
FPGA
写入参数及
ARM
向
FPGA
读取数据。
(4)数据计算线程:计算FPGA
上传的数据。
线程创建完成后,开启任务调度器,
RTOS
将调度上述三个线程进行运行,
ARM
主程序
流程图如
4.14
所示。
信迈提供STM32 ARM+FPGA的解决方案。
上位机软件主要实现功能是:接受串口发送的数据并发出指令,处理和存储通过串口
通信接收到的电能质量数据,并实现对电能质量指标和波形的显示和分析。
5.1 基本框架
本文上位机软件开发平台为
Microsoft Visual Studio 2013
,开发语言为
C#
。
C#
语言具有
开发速度快、良好的面向对象的特性、基础类库全等优点
[48]
。数据分析软件编写采用了模块
化设计思想,方便系统后期的功能更新,主要包括绘图部分、数据存储部分以及数据分析
部分。软件基本框架如图
5.1
所示。