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

news2024/11/20 8:48:38
本部分主要介绍 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 所示。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/669552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十个你必须要会的TypeScript技巧

大厂面试题分享 面试题库 前后端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 web前端面试题库 VS java后端面试题库大全 1. 泛型的使用 泛型可以让我们编写更具灵活性、可重用性和类型安全性的代码。在 TypeScrip…

SpringBoot中15个常用启动扩展点,你用过几个?

背景 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引用了…

P35[10-5]硬件IIC配置+读写MPU6050(软)(此处注意与软件iic区别)

接线图如下: 注:硬件读写iic的连接位置固定,可参考引脚定义表(如下) 声明:I2C1重映射时,有一次更换机会,但是此面包板由于OLED的该引脚无法接线,因此只能接在PB10 PB11的I2C2上 软件iic初始化部分:(此处即可替代掉整个软件iic.c初始化的底层) void MPU6050_Init(vo…

知识变现绝学,3个步骤5个技巧用你的知识盈利?

知识就是生产力。 有的人通过学习各类知识,结果变的更加迷茫,更加没有方向了。 而有的人通过学习各类知识,结果变成了专家,实现了财务自由。 你想知道如何把这生产力去变现呢? 这个时代信息泛滥,人才泛滥…

305 · 矩阵中的最长递增路径

链接:LintCode 炼码 题解:九章算法 - 帮助更多程序员找到好工作,硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧 class Solution { public:/*** param matrix: A matrix* return: An integer.*/class Node {public:int x;int y;int val…

DNDC模型四:土壤碳储量与作物产量、农田减排潜力分析

查看原文>>>双碳目标下DNDC模型建模方法及在土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用 由于全球变暖、大气中温室气体浓度逐年增加等问题的出现,“双碳”行动特别是碳中和已经在世界范围形成广泛影响。国家领导人在多次重要会…

遥感影像处理-监督分类

遥感图像分类是图像信息提取的一种方法,是遥感数字图像处理的重要环节,也是遥感应用最广泛的领域之一,其中提取土地利用分类信息也是常见的应用领域。本推文简要介绍了图像分类的原理和方式,并着重介绍了最大似然分类法监督分类在…

分布式事务:XA和Seata的XA模式

大家好,我是方圆。上一篇博客《从2PC和容错共识算法讨论zookeeper中的Create请求》介绍了保证分布式事务提交的两阶段提交协议,而XA是针对两阶段提交提出的接口实现标准,本文则对XA进行介绍。 1. XA XA (eXtended Architecture …

第一章 基础算法(三)—— 双指针,位运算,离散化与区间合并

文章目录 双指针位运算离散化区间合并双指针练习题799. 最长连续不重复子序列800. 数组元素的目标和2816. 判断子序列 位运算练习题801. 二进制中1的个数 离散化练习题802. 区间和 区间合并练习题803. 区间合并 为什么直接用y总的板书? 我是懒狗,不想再画…

音乐考级系统python+mysql

目录 废话不多说下面看严谨版不带web界面的: 总结: 写这个博客呢主要是因为之前学校有个简单的课设要做,想着白嫖一个交差的,但是找了一圈没找到合适的能拿来用的,我就下班用了两晚手搓了一个代码。 具体的建表语句…

PCB设计实验|第二周|谐波振荡电路实验|3月6日

目录 实验二 谐波振荡电路实验 一、实验原理 二、实验环境 三、实验结果及分析 四、实验总结 实验二 谐波振荡电路实验 一、实验原理 利用深度正反馈,通过阻容耦合使两个电子器件交替导通与截止,从而自激产生方波输出的振荡器,常用作…

ChatGPT在前,华为盘古Chat在后

国产盘古Chat对话方面堪比GPT-3.5 什么是ChatGPT?简单来说,就是一个能够和人类自然对话的人工智能系统。它可以理解你的语言,回答你的问题,甚至给你提供建议和服务。它不仅可以处理文字,还可以处理图片、视频、音频等…

基于Java学生信息管理系统-控制台版

基于Java学生信息管理系统-控制台版 一、系统介绍二、功能展示1.学生信息添加2.学生信息修改3.学生信息查询4.学生信息删除5.退出系统 三、代码展示四、其它1.其他系统实现2.获取源码 一、系统介绍 学生信息的添加、修改、删除、查询、退出系统 二、功能展示 1.学生信息添加…

【面试题01】抽象类、接口 的区别和使用场景

文章目录 一、抽象类和接口的区别1.1 定义方式不同1.2.成员方法不同1.3 实现方式不同1.4 构造方法不同1.5 访问修饰符不同1.6 关注点不同 二、抽象类和接口的使用场景2.1 抽象类的使用场景2.2 接口的使用场景 三、PHP代码演示总结 一、抽象类和接口的区别 抽象类和接口基本上是…

提升效率,使用ChatGPT的轻松撰写日报和周报

日报和周报是办公生活中不可或缺的部分,它们有助于记录工作进展、分享关键信息和与团队保持沟通。但是,有时写作这些报告可能会变得繁琐和耗时。在本文中,我们将介绍如何利用ChatGPT,一个强大的自然语言处理模型,提高写…

安卓开发级联显示菜单-省市区显示举例

安卓开发级联显示菜单-省市区显示举例 问题背景 安卓日常开发过程,经常会有需要级联显示的场景,比如省市区显示等,或者各种组织结构级联显示,本文将介绍安卓开发过程实现级联显示的一种方案。 实现效果如下: 问题分…

GaussDB整体性能慢分析

目录 问题描述问题现象告警业务影响原因分析分析步骤分析定位方法步骤一步骤二步骤三步骤四CPU满I/O满或者I/O异常内存满网络异常 步骤五并发问题数据库配置问题异常等待事件长时间性能下降短时性能抖动不优SQL 问题描述 整体性能慢。不满足客户作业对时延要求或者不满足客户预…

微信小程序 u-picker 三级联动 uView

微信小程序 u-picker 三级联动 uView 场景 移动端微信小程序框架 uView 中的 u-picker 实现三级联动 数据是一级一级加载的 [12,1201,120101] 多列联动 先了解属性参数 mode可以设置为:time、region、selector、multiSelector,区分时间、地区、单列&am…

2022高教社杯全国大学生数学建模竞赛B题解析(更新完结)

2022高教社杯全国大学生数学建模竞赛B题解析(更新完结) 题目解析前言问题一1.11.21.3问题二 题目 B 题 无人机遂行编队飞行中的纯方位无源定位 无人机集群在遂行编队飞行时,为避免外界干扰,应尽可能保持电磁静默,少向…

LC-LCP 41. 黑白翻转棋

LCP 41. 黑白翻转棋 难度中等32 在 n*m 大小的棋盘中,有黑白两种棋子,黑棋记作字母 "X", 白棋记作字母 "O",空余位置记作 "."。当落下的棋子与其他相同颜色的棋子在行、列或对角线完全包围(中间不…