本部分主要介紹
FPGA+ARM
控制部分的軟件設計。
FPGA+ARM
控制部分包括
Verilog
HDL
硬件描述語言和
C
語言的開發(fā)。
FPGA
部分主要控制
AD7606
模數(shù)轉(zhuǎn)換、數(shù)字三相鎖相
環(huán)和FFT諧波計算模塊、
SDRAM
控制器的設計、
FSMC
接口模塊等。
ARM
部分主要完成嵌
入式實時操作系統(tǒng)
FreeRTOS
的移植、
FPGA
和
ARM
之間數(shù)據(jù)的讀取和寫入、
ARM
和上位機
之間的串口通信、以及經(jīng)浮點運算后得出電能質(zhì)量的各項參數(shù)等。
4.1 FPGA 模塊軟件設計
4.1.1 FPGA設計優(yōu)勢
FPGA
采用的是自頂向下的設計方法,將復雜的系統(tǒng)劃分為低層次的功能模塊,再將低
層次的模塊劃分為下一層的模塊,一直劃分直到能夠使用基本模塊為止。這種方式極大地
提高了開發(fā)效率和便于管理,使用
FPGA
開發(fā)具有很多優(yōu)點:
(
1)運行速度高。
FPGA
通過外部輸入晶振產(chǎn)生系統(tǒng)時鐘,再利用內(nèi)部的鎖相環(huán)倍頻
功能可以生成各模塊所需的時鐘,頻率可以達到很高。
(
2)代碼運行效率高。與單片機、
DSP
不同,
FPGA
打破了傳統(tǒng)的順序執(zhí)行模式,采
用硬件并行執(zhí)行方式,其運行效率更高。
(
3)數(shù)字接口豐富。
FPGA
的
I/O
口眾多,能夠完成大規(guī)模的系統(tǒng)設計,而且開發(fā)人
員可以自定義這些
I/O
,使得
FPGA
的靈活性很高,其功耗低,輸入輸出接口能與
TTL
、
CMOS
等兼容。
(
4)可重構(gòu)。
FPGA
的內(nèi)部邏輯可以根據(jù)需求而改變,可以極大地縮短集成電路的設
計周期,還能夠降低成本,市場前景廣闊。
4.1.2 FPGA開發(fā)語言及軟件
Verilog HDL
是一種硬件描述語言
[45]
,用來描述數(shù)字系統(tǒng)硬件的結(jié)構(gòu)和行為。和一般的
高級設計語言不同,硬件描述語言并行執(zhí)行,還能描述過程中的時序,可以對各種抽象層
次的數(shù)字系統(tǒng)進行建模,這些層次按級別有系統(tǒng)級、算法級、
RTL
級、門級、開關級,在模
塊中對設計的描述方式分為數(shù)據(jù)流、行為和結(jié)構(gòu)三種方式,
Verilog HDL
于
1995
年被正式
納入
IEEE
標準。
QuartusII
是
Altera
公司的
FPGA
開發(fā)軟件,輸入形式包括原理圖、
Verilog HDL
等,其
界面友好且操作方便,涵蓋了可編程邏輯器件的完整開發(fā)過程,包括設計輸入、綜合、布
局布線、時序分析、仿真和編程配置,用戶可以在
QuartusII
中實現(xiàn)整個數(shù)字集成電路的
FPGA
設計流程。開發(fā)流程圖如
4.1
所示。
4.1.3 FPGA軟件運行流程
(1)設備上電后,復位,完成初始化。
PLL
鎖相環(huán)將輸入的
25MHz
晶振時鐘倍頻到
100MHz
,作為系統(tǒng)運行的主時鐘。
PLL
輸出穩(wěn)定后,主狀態(tài)機開始運行,并等待
AD7606
初
始化完成后,設備正式開始運行。
(
2)采樣周期計數(shù)模塊產(chǎn)生一個周期中斷作為
AD7606
的采樣頻率,中斷頻率大小由三
相鎖相環(huán)的輸出決定(初始值為
100MHz/12.8KHz=7812
)。
(
3)
ADC
采集模塊接收到周期中斷后,立刻開始同步采集并轉(zhuǎn)換
3
路電壓和
3
路電流信
號 ,轉(zhuǎn)換方程如下:
( 5 ) =
32768
5
2.
5
V
I
N R
E
F
V CODE
V
V
?
? ?
。同時正余弦計算模塊,根據(jù)三相鎖
相環(huán)輸出的鎖定相位角(初始值為
0
),計算
1-17
次諧波的正余弦值。
(
4)
SDRAM
計算模塊,將
AD
采樣的三相電流和正余弦值作為輸入,計算出其實部和
虛部,然后將其存儲在
SDRAM
中。
(5)FFT
計算模塊,以一定的周期,在
SDRAM
模塊中,抽取三相電流數(shù)據(jù)點,分別進
行
256
點
FFT
計算,然后將計算出的三相電流諧波分量幅值,存入到
RAM
中。
(6)三相鎖相環(huán)模塊,對AD
采樣的三相電壓,進行鎖相環(huán)計算,并輸出采樣頻率,通
過該值調(diào)整
AD
的采樣頻率,使當前正余弦值計算模塊的相角與三相電壓同相。
(7)最后將所有的計算數(shù)據(jù)同步更新到FSMC
的存儲寄存器組中,并輸出一個
ARM
中
斷信號,通知
ARM
對這些寄存器數(shù)據(jù)進行訪問。步驟
3-7
,必須在下一個周期中斷產(chǎn)生之前
完成。步驟
3-6
完成后,主狀態(tài)機將等待下一個周期中斷,然后重復以上步驟繼續(xù)運行。
FPGA
主程序流程圖如
4.2
所示。
4.1.4 AD7606 采樣
AD7606
的工作是通過
FPGA
控制其信號時序進行的。
AD7606
通過
CONVST_A
、
CONVST_B
引腳分別控制
V1~V4
、
V5~V8
八個通道的轉(zhuǎn)換,通過
CS
和
RD
控制數(shù)據(jù)的讀
取,通過
PAR/SER SEL
引腳控制選擇數(shù)據(jù)接口模式。本設計中將
CONVST_A
、
CONVST_B
連接在一起實現(xiàn)
8
通道同步采樣,將
PAR/SER SEL
引腳設置為低電平時采用并行數(shù)據(jù)線
DB[15: 0]
輸出。在開始采樣之前,需要給
RESET
引腳一個大于
50ns
的正脈沖進行復位,當
CONVST
信號的上升沿時
AD
轉(zhuǎn)換開啟,
AD7606
內(nèi)含有的片內(nèi)振蕩器用來實現(xiàn)轉(zhuǎn)換,同時
BUSY
信號變?yōu)楦唠娖讲l(fā)送至
FPGA
表示正在進行數(shù)據(jù)轉(zhuǎn)換,當轉(zhuǎn)換結(jié)束時
BUSY
信號恢復
低電平,此時
8
路轉(zhuǎn)換數(shù)據(jù)被鎖村到輸出數(shù)據(jù)寄存器中,設置
CS
和
RD
設置為低電平,使能
數(shù)據(jù)輸出總線
DB[15:0]
并將數(shù)據(jù)發(fā)送至
FPGA
,一次
A/D
轉(zhuǎn)換結(jié)束。
BUSY
信號高電平的持
續(xù)時間
t
CONV
的長短取決于芯片的采樣速率 ,轉(zhuǎn)換控制時序如圖
4.3
所示。
驅(qū)動程序的編寫是利用
FSM
(
Finite State Machine
,有限狀態(tài)機)設計實現(xiàn)的,
AD
數(shù)
據(jù)讀取狀態(tài)轉(zhuǎn)換過程如圖
4.5
所示,關鍵程序部分見附錄。
4.1.6 FFT運算模塊
本設計中諧波計算采用基
-2 FFT
變換,
FFT
運算模塊有兩種實現(xiàn)方法:第一種是根據(jù)
FFT
的基本原理自定義
FFT
模塊,設計模塊有蝶形運算單元、旋轉(zhuǎn)因子單元、地址發(fā)生器以
及時序控制單元等,然后再進行仿真測試,這種方式占用較多的資源,而且計算效率較
低;第二種是利用
Quartus ii
軟件上提供了專門的
FFT IP
核,根據(jù)設計要求設置參數(shù)就能得
到一個高效地 FFT 模塊,在實際工程應用中可以直接移植,在移植之前需要對其進行時序
仿真驗證。本文選擇第二種方法。
Quartus ii
提供了兩種定制
FFT
的方法:
DSP Builder
和
MegaWizard Plug-in Wizard
,本
設計選擇了第二種方法,其可以手動配置
FFT
的參數(shù)。選擇
Transforms
下
FFT v13.1
,選
擇輸出文件類型為
Verilog HDL
[47]
,新建
FFT
如圖
4.9
所示。
進入
FFT
配置界面后,配置的是轉(zhuǎn)換長度為
256
點,數(shù)據(jù)位度和旋轉(zhuǎn)因子精度都為
16bits
。
FFT IP
核元件圖如
4.10
所示,包含
10
個輸入和
8
個輸出信號:
sink_real[1 5
:
0]
和
sink_imag[1 5
:
0]
:是輸入數(shù)據(jù)的實部和虛部;
source_real[1 5
:
0]
和
source_imag[1 5
:
0]
:是輸出數(shù)據(jù)的實部和虛部;
Source_exp[5
:
0]
:是所得輸出實部和虛部數(shù)據(jù)的指數(shù);
Sink_valid
:為
1
時,表示
FFT
正接收數(shù)據(jù);
Source_valid
:為
1
時,表示正讀取
FFT
的轉(zhuǎn)換結(jié)果。
FFT
核的引擎架構(gòu)分為四輸出和單輸出,這里的“單”和“四”是指內(nèi)部FFT蝶形處理
器的吞吐量,前者分時復用一個復數(shù)乘法器,單個時鐘內(nèi)得到
1
個輸出,單輸出消耗資源
少;后者同時使用
4
個復數(shù)乘法器,單個時鐘內(nèi)得到
4
個輸出,四輸出計算速度快。本設計
采用單輸出引擎架構(gòu),可以使
FFT
處理器的資源消耗最小化。其中單輸出實現(xiàn)結(jié)果如圖
4.11
所示,
FFT
引擎通過并行方式從
RAM
中讀取復數(shù)輸入
x[k,i]
,然后通過蝶形運算得到
FFT 輸出一路結(jié)果
G[k,i]
。
FFT
核內(nèi)部數(shù)據(jù)使用塊浮點結(jié)構(gòu),以達到高信噪比
(SNR)
,
Altera FFT
核可以設置
為四種
I/O
數(shù)據(jù)流結(jié)構(gòu),按不同的速度要求由高速到低速分別為流結(jié)構(gòu)、變流結(jié)構(gòu)、緩
沖突發(fā)結(jié)構(gòu)、突發(fā)結(jié)構(gòu)四種
I/O
流方式。流結(jié)構(gòu)和變流結(jié)構(gòu)都是流水線型的,是對時間
要求很嚴格的應用場合,能實現(xiàn)很高的數(shù)據(jù)吞吐率,但缺點是占用最多的邏輯資源。硬
件實現(xiàn)的
FFT
處理速度快,即便是突發(fā)結(jié)構(gòu),
1ms
內(nèi)便可完成一次
256
點
FFT
,故選
擇
Burst
架構(gòu)。
最后要對FFT仿真激勵文件進行編寫,利用
Modelsim
仿真軟件,與
Quartus ii
自帶的
仿真功能不一樣,
Modelsim
仿真需要編寫激勵文件
(Testbench)。激勵文件主要用于給子
模塊提供信號激勵。
FFT
數(shù)據(jù)輸入輸出時序如圖
4.12
所示,仿真圖如
4.13
所示,左側(cè)為
模塊端口變量名。

4.2 ARM 模塊軟件設計
4.2.1FreeRTOS簡介
近年來嵌入式操作系統(tǒng)因其高實時性、多任務調(diào)度等優(yōu)點在各個領域得到了廣泛的應
用,目前主流的嵌入式操作系統(tǒng)有
Vxworks
、
Linux
、
μC/OS-II
及
FreeRTOS
等,不同于
Unix
操作系統(tǒng)給每個任務分配同樣的運行時間的任務調(diào)度方式,
RTOS的任務調(diào)度設計是可預測
的,
FreeRTOS
的任務調(diào)度就是根據(jù)優(yōu)先級來決定下一刻該運行哪個任務,這樣在實時環(huán)境
中操作系統(tǒng)就能夠?qū)δ骋皇录龀鰧崟r的響應。本設計采用
FreeRTOS
嵌入式實時操作系
統(tǒng),可以更合理、更有效地利用
CPU
的資源,簡化應用軟件的設計,縮短系統(tǒng)開發(fā)時間,更
好地保證系統(tǒng)的實時性和可靠性。
FreeRTOS
是一個可裁剪的小型實時操作系統(tǒng),其特點包
括:
(
1)性價比高。
FreeRTOS
是完全開源的操作系統(tǒng),其完整的源碼在官網(wǎng)就可以方便的
下載到。
(
2)高可移植性。
FreeRTOS
源碼大多用
C
語言編寫,移植起來更加方便。
(
3)可裁剪性。用戶可根據(jù)
FreeRTOS
提供的豐富的配置,選擇自己需要的內(nèi)核功能。
(
4)混合任務調(diào)度模式。
FreeRTOS
同時支持優(yōu)先級搶占式、輪轉(zhuǎn)式協(xié)同調(diào)度和時間片
調(diào)度三種方式,優(yōu)先級高的任務優(yōu)先處理,優(yōu)先級相同時則按時間片輪流執(zhí)行,這樣使得
系統(tǒng)運行時的靈活性強。
(
5
)
FreeRTOS
系統(tǒng)簡單、小巧,一般內(nèi)核僅占用4k-9k字節(jié)空間,大大節(jié)約了資源。
4.2.2 ARM軟件運行流程
ARM
上電后執(zhí)行以下初始化:
FreeRTOS
內(nèi)核初始化、板載信號燈初始化、串口初始
化、
FSMC
總線初始化、中斷
IO
初始化。
初始化完成后,將會創(chuàng)建
4
個線程:
(1)參數(shù)設置線程:ARM
通過串口,接收上位機設置的參數(shù),并執(zhí)行響應操作。
(2)數(shù)據(jù)上傳線程:ARM
通過串口,將設備運行數(shù)據(jù)上傳給上位機。
(3)FPGA
通信線程:完成
ARM
向
FPGA
寫入?yún)?shù)及
ARM
向
FPGA
讀取數(shù)據(jù)。
(4)數(shù)據(jù)計算線程:計算FPGA
上傳的數(shù)據(jù)。
線程創(chuàng)建完成后,開啟任務調(diào)度器,
RTOS
將調(diào)度上述三個線程進行運行,
ARM
主程序
流程圖如
4.14
所示。
?信邁提供STM32 ARM+FPGA的解決方案。
上位機軟件主要實現(xiàn)功能是:接受串口發(fā)送的數(shù)據(jù)并發(fā)出指令,處理和存儲通過串口
通信接收到的電能質(zhì)量數(shù)據(jù),并實現(xiàn)對電能質(zhì)量指標和波形的顯示和分析。
5.1 基本框架
本文上位機軟件開發(fā)平臺為
Microsoft Visual Studio 2013
,開發(fā)語言為
C#
。
C#
語言具有
開發(fā)速度快、良好的面向?qū)ο蟮奶匦?、基礎類庫全等優(yōu)點
[48]
。數(shù)據(jù)分析軟件編寫采用了模塊
化設計思想,方便系統(tǒng)后期的功能更新,主要包括繪圖部分、數(shù)據(jù)存儲部分以及數(shù)據(jù)分析
部分。軟件基本框架如圖
5.1
所示。
?文章來源:http://www.zghlxwxcb.cn/news/detail-539907.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-539907.html
到了這里,關于基于STM32 ARM+FPGA的電能質(zhì)量分析儀方案(二)軟件設計的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!