本部分主要介绍 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 所示。

基于STM32 ARM+FPGA的电能质量分析仪方案(二)软件设计相关推荐

  1. 基于STM32 ARM+FPGA的电能质量分析仪方案(一)硬件设计

    本章主要给出了本系统的设计目标和硬件设计方案,后面详细介绍了硬件电路的设计 过程,包括数据采集板. FPGA+ARM 控制板. 3.1系统设计目标 本系统的主要目的是实现电能质量指标的高精度测量和数据 ...

  2. 基于STM32 ARM+ FPGA 的软体机器人的 CAN总线运动控制器的设计

    针对在软体机器人控制时 , 多电机协同控制过程中难度大 . 通用性差 . 协同性差等缺点 , 设计了基于 ARM 和 FPGA 的软体机器人的控制器局域网络 ( controller area net ...

  3. stm32采集脉冲信号_基于STM32+FPGA的数据采集系统的设计与实现

    引言 由于火控系统工作环境特殊,所需采集信号复杂多样,传统的以微控制器或PC为主的采集系统往往难以胜任.针对上述问题,提出了一种基于STM32+FPGA的数据采集系统的设计方案,该方案不仅能够完成对多 ...

  4. 2个相同的 stm32 can通讯不成功_一文读懂,基于 STM32 和 CAN 总线的温度监控系统的设计方法...

    1 系统总体方案概述 系统总体框图如图 1 所示,本系统采用主站+从站的结构,CAN 主站主要实现温度数据的存储以及 CAN 总线协议和串口协议之间的桥接,CAN 从站主要实现温度的采集.CAN 从站 ...

  5. 基于STM32单片机智能RFID刷卡汽车位锁设计(论文

    基于STM32单片机智能RFID刷卡汽车位锁设计(论文) 摘要 在车位日益紧张的今天,如何避免私家车位被他人抢占,是令人头痛的事.日前面市的一种新型车位锁,不仅有效解决了这一问题,还可对车辆起到防盗作 ...

  6. 基于STM32单片机智能手环脉搏心率计步器体温显示设计

    " 基于STM32单片机智能手环脉搏心率计步器体温显示设计." (获取方式:在"智能车杂谈"微信回复:009). 01 材料准备 清单列表 1.ADXL345模 ...

  7. 基于STM32单片机智能RFID刷卡汽车位锁设计(开题报告)

    基于STM32单片机智能RFID刷卡汽车位锁设计(开题报告) 文章目录 基于STM32单片机智能RFID刷卡汽车位锁设计(开题报告) 一.课题的背景及意义 二.国内外研究状况: 三.系统功能分析及体系 ...

  8. 双足竞走机器人的意义_基于STM32双足竞步机器人的研究与设计

    龙源期刊网 http://www.qikan.com.cn 基于 STM32 双足竞步机器人的研究与设计 作者:卢士林 李彩霞 张奎庆 段忠臣 来源:<智能计算机与应用> 2016 年第 ...

  9. 基于STM32蓝牙智能手环脉搏心率计步器体温显示设计

    基于STM32蓝牙智能手环脉搏心率计步器体温显示设计 本设计由STM32F103C8T6单片机核心板电路+ADXL345传感器电路+心率传感器电路+温度传感器+lcd1602电路组成. 1.通过重力加 ...

最新文章

  1. hive replace替换多个_详解Mysql数据库中replace与replace into的用法及区别
  2. 皮一皮:这婚还结不结...
  3. 包含实时功能的ASP.NET系统结构
  4. 计算机研究生自我介绍,计算机专业研究生英文的自我介绍
  5. 找不到java.vbs_无法找到脚本*.VBS的脚本引擎解决办法
  6. Vitaly and Night
  7. tomcat 指定的服务未安装(总结验证)
  8. 结合scipy.linalg在Python中使用线性系统
  9. JAVA的对象访问定位
  10. 心理学专业学要学计算机吗,心理学专业学什么 都有哪些课程
  11. phpstorm 设置注释
  12. Java之映射(map)
  13. 安徽理工大学计算机科学工程学院,安徽理工大学计算机科学与工程学院文件(3页)-原创力文档...
  14. 用pandas新建excel并设置表头
  15. C语言炫酷的文件操作
  16. 为什么 SD-WAN 很重要?
  17. Linux上创建和更改硬链接和符号链接(软连接)
  18. 【软件测试】思维开拓—用软件测试的思维测试QQ好友是在线或者离线
  19. 今夕何年 模拟 思维题
  20. python画图小猪佩奇_python绘图 -- 小猪佩奇源码分享

热门文章

  1. 慧数汽车大数据分析:谁压垮了SUV车市?
  2. linux 内核round-robin scheduler代码,用LVS构架负载均衡Linux集群系统 linux lvs
  3. 企业营运能力分析:流动资产周转率、存货周转率、应收账款周转率、固定资产周转率、总资产周转率...
  4. 行车记录仪设备APP开发功能
  5. linux 进程 清理,总结linux清理垃圾命令
  6. 物盾安全汤晓冬:工业互联网企业如何应对高发的供应链安全风险?
  7. 基于JavaSwing的员工工资管理系统
  8. GeoServer地图开发解决方案
  9. wicc点表导入导出
  10. 达梦数据库-误删表数据的恢复