5.3.3
程序实现优化
DSP
是根据时间片运行各个任务的,每个任务都有时间周期的限制,需要在
规定周期内完成运算,同时不能影响其他任务时间执行,
10
周期是最长的运行周
期,需各个任务在此期间都运行完成,才是完整的一次参数运算。因此,每个任
务运行时间最好比限制周期时间短为最佳,运算速度是
DSP
必须要保证。本文针
对这个前提对
DSP
程序设计进行了优化。
Upp
软中断中将数据进行数模转换过程中,有大量的除法运算,由于
DSP
一
次除法需几个周期,但可以一个周期完成一次乘法和加法,因此将此运算进行查
表计算,避免除法,加快了运算速度。其他程序设计处有类似除法运算也进行查
表、移位、乘法进行优化,充分利用
DSP
的运行优势加快程序执行。
200ms
任务主要完成谐波间谐波计算,由于需要计算
A
、
B
、
C
电压、电流
10
周期点数计算,计算量较大,为保证任务能够在
10
周期之内,对此任务进行了如
下几个方面的优化:
(
1
)旋转因子只计算一次,在
200ms
任务建立初期,计算出旋转因子并保存
在数组内,常驻与内存中,
200ms
任务执行时直接调用即可,避免每次执行此任务
时进行重复计算。
(
2
)
DSP
硬件中有关于
FFT
实现,
API
有相关调用,利用这一点将谐波间谐
波算法设计中分离出可以应用
FFT
的运算,利用
DSP
本身优势加快运算速度。
(
3
)但由于算法中涉及到类
DFT
运算,若果计算三相电压电流的所有点数,
计算时间对于主频为
300M
的
DSP
不够,而且对于基波频率为
50Hz
的输入,计算
频域为
0~12.8kHz
,步长为
5Hz
。而国标中以
5Hz
为间隔计算
0~2.5kHz
的频率点,
以
10Hz
为间隔计算
2.5k~9kHz
的频率点,针对国标中要求对算法进行择点计算优
化,节省了计算量,进行有效计算优化。
ARM
端界面的刷新时间一般为
200ms
或者
400ms
一次,最大传输数据量为
512*6*4=12288
个字节。
OMAPL138
主要有两类内存,片内
RAM
和
DDR
,片内
RAM
的读写速度比
DDR
速度快的多,因此
DSP
与
ARM
之间的通讯
DSPLINK
选择芯片片内
0x8000000~0x8001FFFF
的
128k
的共享
RAM
,内部空间大小足够传
递数据,故可以加快数据传输任务。
经过
CCS
编程测试各个任务的运行时间,通过设置断点测试优化时间。
执行一次
10ms
任务时间:有事件发生时
0.01598ms
;
执行一次
20ms
任务时间:约
1.5008ms
;
执行一次
200ms
任务时间:包含抢占,本函数头尾之间执行时间约
92.22519ms
。
由程序仿真检测时间可知,即使任务被抢占,每个任务也可在限制时间内完
成,并且剩余时间充裕,为功能扩展提供了充裕的时间。
5.3.4
测量数据显示
DSP
将运算电能参数通过
DSPLINK
传递给
ARM
进行数据显示,方便查看测
量数据。
ARM
端采用
Linux
操作系统,界面使用
QT
进行编程实现。本节主要研
究界面对电能参数测量结果的显示实现,以及为实现完成的驱动的设计,从而更
好的呈现出结果,方便后续试验进行数据测试。
5.3.4.1
界面设计
本文使用
QT
进行界面编程实现,
QT
是基于
C++
语言的高程度的模块化、可
重用性较高、良好的封装性。
QT
支持跨平台编程实现,可移植性好。嵌入式系统
中常使用
QT/Embeded
版本,可根据实际需求进行库的裁剪,实用性高,灵活性好。
首先进行
QT
库的编译,使用的版本为
4.6.3
,编译
PC
版本,可进行虚拟机编
程调试,使用交叉编译工具编译
ARM
版本,此版本应尽量精简,进行编程移植使
用。
在
QT
界面设计中,主要工作是通过
DSPLINK
子类中获取
DSP
计算的电能参
数,然后进行数据分析、整理,将数据按照图
5-4
分类进行显示,可将数据按照需
求进行存储。
本文设计界面将菜单选项置于右侧,左侧显示相应的界面,通过主菜单选定
相应子界面选项,显示对应子界面的子菜单,通过子菜单的选项确定要显示的界
面。如图
5-4
所示,子界面主要有
8
项:波形显示、有效值
|
相位、谐波分析、波
动、功率、不平衡、告警、系统管理。波形显示实时显示电网三相电压电流
2
个
周期的波形、有效值、频率信息;有效值
|
相位显示三相电压电流的有效值、相位
角图;谐波分析包括谐波电压电流的柱状图、表格,间谐波表格等,主要显示含
有率、幅值、相位、畸变、功率等参数信息;波动显示趋势图,可通过观察一段
时间内的波动的整体趋势;功率界面包含有功功率、无功功率、功率因数、线损
等参数;不平衡界面包含趋势图和表格,趋势图可观察一段时间内的不平衡的走
向;告警显示稳态参数、暂态参数的事件显示,不同事件包含的参数不同,可根
据事件的记录判断电网的运行情况,并根据事件的发生频率采取相应的措施;系
统管理主要是参数配置,用户可根据需要对参数进行配置,主要参数包括标称电
压、标称电流、电压暂升暂降阈值等,这些值的修改、各种参数的切换都是通过
上下左右按键进行数值修改或者选定。
QT
界面设计中,每个子界面都定义为一个
类,根据每个界面具有的特色完成类的编程实现,其中比较重要的为波形显示、
柱状图显示、表格显示。而且不同的界面刷新频率不同,过于频繁的刷新会造成
CPU
运行过高,增加系统负荷,影响系统的响应速度,故需根据不同的界面设置
不同的刷新周期。
本文的
QT
界面框图如下图所示:
界面设计中最关键的界面切换,此功能依赖于按键功能的实现,本文设计的
仪器按键主要通过上、下、左、右、确认、取消来完成,通过按键功能的设置实
现不同子界面类之间的切换,其中可使用
QT
中信号槽机制,一个事件可以触发另
一个或多个事件,这种机制便于编程实现。
5.3.4.2
驱动程序设计
一般嵌入式驱动程序开发需要对外围设备进行如下内容:
(
1
)评审现有的驱动程序,测试并实验它是否可以如期工作;
(
2
)寻找一个相近的驱动程序,将其进行修改成与使用硬件相适应;
(
3
)重新编写驱动程序。
本文主要涉及到
SD
卡、
USB
、
RTC
、
LCD
、按键驱动,其中三相电能质量分
析的设计电路与购买的开发板的外围设备布线方式类似,其中嵌入式
Linux 中的
SD
卡、
USB
、
RTC
驱动经过测试可以正常工作。本文采用的
LCD
选择尺寸较大,
但接线方式与购买开发板中的
LCD
一样,驱动的配置一致,但屏幕的相关参数不
同,可根据内核的
LCD
驱动找到对应的参数变量进行修改,但由于屏幕尺寸较大,
对于芯片
OMAPL138
传输数据量大,会出现屏幕显示不正常,需要修改
LCD
优
先级为最高,确保
LCDC
的吞吐量
/
延迟需求得到满足。
按键驱动没有类似的驱动实现,需重新编写,按键驱动主要用于
FPGA
与
ARM
间的通讯。按键驱动实现有两种方式,第一种是通过中断的方式实现,第二种是
通过模拟标准键盘的方式实现。由于
OMAPL138
的
GPIO
中断资源有限,本文采
用第二种方法通过
I2C
实现。实现方式如下图所示:
用户通过按键产生一次中断,
FPGA
接受到中断信息,产生对应的键值,按键
赋值从
0
或者
1
开始,然后通过
I2C
总线发送给
ARM
,
ARM
中的
Linux
系统接
收到键值之后,将键值与标准键盘值进行对应,键值为数组编号,标准键盘值为
数组值。然后
Linux
系统将标准按键值进行事件上报,操作系统根据事件进行事件
分发,
QT
应用程序接收到按键事件后,执行相应的按键处理。
5.4
测频程序实现
数据预处理木块主要由
AD
采样模块与
FPGA
实现,两路
AD
采样信号,一
路低频采样将电网信号传递给
FPGA
进行基波频率的测量,保证基波频率的快速
计算与高精度要求,为另一路使用定频采样信号提供可靠的间隔抽取,其中采样
频率为
10M
,保证实现同步的高精度,然后由
FPGA
将抽取得到的数据进行打包,
以半周期数据为一个数据包,通过
OMAPL138
的外部接口
upp
,以硬中断的方式
与
DSP
通讯,将数据发送给
DSP
进行数据处理,整个数据采集与数据预处理模块
为电能质量的参数高精度计算提供基础。
由第三章与第四章的算法分析可知,为保证电能质量分析仪的精度要求,此
模块中的
AD
芯片选用 16 位的进行采样,其中进行测频流程图如下:
由基波频率测量程序流程图可知根据国标标准,测频范围为
[42.5,57.5]Hz
,测
频精度为
0.001Hz
,然后根据频率范围设置黄金分割法的初始搜索值。对
AD
采样
数据首先进行加
Blackman
窗。然后黄金分割法进行精度判定,若不满足则进行
FFT+FT
运算,通过比较函数值,对黄金分割法的搜索点重新赋值,反复执行这个
过程,直到精度满足要求,计算出基波频率。
5.5
谐波间谐波程序实现
通过本章节的软件设计以及
OMAPL138
软件结构设计,对
DSP
中实现参数运
算进行了谐波间谐波时间优化,图
5-7
流程图实现谐波间谐波程序实现,与第四章
的算法设计一致。在
DSP
主函数中首先对旋转因子进行计算并存储,后面
200ms
任务被触发后,可直接读取内存,加快程序执行速度。
DSP
端接收数据进行次数
积累为
10
周期后,唤醒
200ms
任务,主要执行谐波间谐波程序计算。首先将
5120
点分成
5
组
1024
点,然后每一组进行基
2
的
FFT
运算,将运算结果进行实部、虚
部存储,然后根据国标中计算频率范围,进行选点进行
DFT
计算,进一步加快运
算速度,然后可计算谐波间谐波幅值、相位,根据此算法计算的数据,进行谐波、
间谐波其他参数的运算,例如总谐波畸变、谐波子组等计算。
5.6
核通讯设计
本文采用
FPGA+DSP+ARM
三核构架,三个核之间通讯关系到数据传输是否
正确,
FPGA
与
DSP
通讯使用的
UPP
(
universal parallel port
),
DSP
与
ARM
通讯
使用
TI
提供的软件
DSPLINK
实现,
FPGA
与
ARM
使用上节中
I2C
驱动实现的。
UPP
以
16
位数据宽度进行数据传输,本文采用
DSP
接收数据的模式,示意图
如下所示:
如上图所示,
FPGA
每
10ms
触发一次
upp
中断,进行一次数据包传输,数据
通过
I/O
通道
A
的然后存储在
upp
内部的
DMA
中,增加吞吐量,减轻
CPU
负担,
然后当
DMA
存储全部数据后,触发行中断,将数据写入内存中,然后进行数据解
包、处理。
DSPLINK
对于
GPP
端相当于驱动
DSP
的驱动程序,其对
GPP
端、
ARM
端
提供完整的
API
函数调用,是对底层
DSP
与
ARM
通讯的封装,简化了对双核
CPU
的通讯开发,降低了难度。最主要的工作需在虚拟机上对
DSPLINK
进行参数配置,
需要修改对应的配置文件,通过
GPP
端对
DSPLINK
源码编译。主要对
DSP
与
ARM
(
GPP
)内存分配。开发板的
DDR
大小为
128M
,可在
uboot
中设置
ARM
的内存
大小参数传递给内核。其中
DDR
的起始地址
0xc0000000
,内存分配如下:
ARM
端:
0xc000 0000~0xc2ff ffff 48M
0xc400 0000~0xc7ff ffff 64M
DSP
端:
0xc300 0000~0xc3ff ffff 16M