本文的研究對象是太陽能LED照明控制系統(tǒng)控制器中的處理器。系統(tǒng)通過控制器實現(xiàn)系統(tǒng)工作狀態(tài)的管理、蓄電池剩余容量的管理、蓄電池充電、放電控制、太陽能電池電源及市電電源的切換控制以及LED 負載半功率控制等主要功能。而控制器是主要依靠處理器的運轉(zhuǎn)來實現(xiàn)上述功能的。
1 系統(tǒng)構(gòu)成
太陽能LED照明控制系統(tǒng)主要由太陽能電池、蓄電池、系統(tǒng)控制器、LED 照明負載和市電電源5 部分組成, 系統(tǒng)組成原理圖如圖1 所示。系統(tǒng)正常工作時, 由蓄電池向LED 負載供電, 在蓄電池電壓不足時, 由市電( 備用電源) 直接向LED 負載供電, 避免了蓄電池電壓不足時LED 負載不亮的情況。有了市電作為備用電源, 在設(shè)計時可以適當降低蓄電池的容量, 降低成本。同時避免了由于利用太陽能而導致的市電資源的浪費,達到可靠性和經(jīng)濟性要求。
圖1 太陽能LED 照明系統(tǒng)組成原理圖
系統(tǒng)工作時通過太陽能電池將太陽輻射能轉(zhuǎn)化為電能, 但是由于太陽能電池的輸出受溫度和太陽輻射強度影響很大, 輸出功率不穩(wěn)定, 因而在太陽輻射強度足夠大的時( 白天) 需要利用蓄電池將轉(zhuǎn)化的電能儲存起來, 以便在需要照明時( 晚上) 向半導體照明負載供電。在太陽能半導體照明系統(tǒng)中, 控制器是其核心部分, 系統(tǒng)工作時通過控制器實現(xiàn)對系統(tǒng)工作狀態(tài)的控制和對蓄電池充放電過程的管理, 以使系統(tǒng)在不同的工作狀態(tài)下均能穩(wěn)定可靠地工作。
系統(tǒng)各個組成部分的主要功能如下:
(1) 太陽能電池。由許多太陽能電池組件串、并聯(lián)而成, 其合成的容量可以是數(shù)百峰瓦(Wp) , 也可達數(shù)個兆峰瓦(Wp) 甚至更大, 組件可由單晶硅、多晶硅、非晶硅或其他類型的太陽能電池組成。一般來說, 光伏陣列由于多為半導體器件構(gòu)成, 其伏安特性具有強烈的非線性。
(2) 蓄電池組。蓄電池也稱電瓶, 是太陽能LED照明系統(tǒng)的關(guān)鍵部分。一般是由一定數(shù)量的鉛酸蓄電池經(jīng)由串、并聯(lián)組合而成, 其容量的選擇應與太陽能電池陣列的容量相匹配。它的主要作用是在白天儲存太陽能陣列所產(chǎn)生的電能, 晚上把儲存的能量釋放出來,供負載照明使用。它的最佳充電電流和放電電流, 一般按10 h 充、放電率計算。
由于蓄電池對電壓的波動具有/ 緩沖0作用, 還可使得負載系統(tǒng)的運行更加平穩(wěn)可靠。雖然鉛酸蓄電池具有容量大、價格低等優(yōu)點, 但若使用不當, 很容易加速蓄電池的老化, 使蓄電池的壽命急劇縮短, 造成系統(tǒng)運行成本的增加, 充、放電電流過大都會對電瓶的壽命有一定的影響。因此對蓄電池的充放電進行合理規(guī)劃和控制是光伏充電系統(tǒng)中必不可少的環(huán)節(jié)。
(3) 控制器??刂破鞯淖饔檬菍μ柲茈姵?、蓄電池電壓、市電電源和LED 負載進行總體監(jiān)控。為蓄電池提供最佳的充電電流和電壓, 同時保護蓄電池, 避免過充電和過放電現(xiàn)象的發(fā)生。需要時完成太陽能電池和市電2 個電源之間的轉(zhuǎn)換, 保證LED 負載穩(wěn)定可靠的工作。
以處理器為核心的控制器結(jié)構(gòu)可以給系統(tǒng)帶來極大的可配置型, 增強系統(tǒng)的應用范圍。
(4) LED 照明光源。半導體LED 照明光源是系統(tǒng)的重要組成部分。LED 應保證亮度高, 亮度輻射范圍大且均勻, 所使用的白光LED 數(shù)量少??刂破髦械呢撦d控制策略和LED 驅(qū)動電路的設(shè)計直接決定了系統(tǒng)的照明效果。因此, 需要根據(jù)LED 響應速度快和低壓直流驅(qū)動等特性, 選擇合適的驅(qū)動方案及控制策略, 實現(xiàn)與蓄電池電壓的匹配, 以充分發(fā)揮LED 照明的優(yōu)點。
(5) 市電電源。在出現(xiàn)陰雨天時, 蓄電池不能及時充電, 出現(xiàn)蓄電池電壓不足, 不能正常向負載供電時, 由開關(guān)電源將220 V 交流市電變換成低壓直流電, 供LED 負載使用??刂破飨到y(tǒng)設(shè)計中為市電電源提供了一個低壓直流電輸入接口。
2 處理器需求分析
控制器是系統(tǒng)的核心部分, 系統(tǒng)工作過程通過它進行管理和控制。系統(tǒng)通過控制器實現(xiàn)系統(tǒng)工作狀態(tài)的管理、蓄電池剩余容量的管理、蓄電池充電、放電控制、太陽能電池電源及市電電源的切換控制以及LED 負載半功率控制等主要功能。而處理器又是控制器的核心。其負責根據(jù)程序指揮控制器中元器件實現(xiàn)控制器的上述功能。
在此設(shè)計的太陽能LED 照明控制系統(tǒng)供街道和住宅小區(qū)照明使用, 設(shè)計控制器中的處理器具有如下功能:
(1) 支持5 V 直流系統(tǒng)工作電壓;
(2) 可提供輸出接口, 控制狀態(tài)指示燈或顯示屏指示工作狀態(tài);
(3) 可提供輸入接口, 接受外部按鍵輸入;
(4) 可控制大功率MOS 管支持最大至9 A 的充放電電流;
(5) 可提供直流、脈沖兩種充電方式的控制;
(6) 可精確計時以提供深夜使半導體照明燈具亮度減半的功能;
(7) 可接收一路A/ D 轉(zhuǎn)換器指示, 能檢測蓄電池的電壓, 對蓄電池的充、放電過程進行控制, 并當蓄電池電量不足時, 自動切換到市電電源供電;
(8) 可接收另一路A/ D 轉(zhuǎn)換器指示, 能檢測太陽能電池的電壓, 自動轉(zhuǎn)換工作模式;
(9) 可提供運算指令以計算各輸入信號關(guān)系判斷系統(tǒng)運行轉(zhuǎn)態(tài);
(10) 可提供跳轉(zhuǎn)指令以使控制器在各狀態(tài)間切換;
(11) 可暫存狀態(tài)標志, 以供處理器智能判斷狀態(tài);
(12) 低功耗設(shè)計以提高控制器在系統(tǒng)中的工作效率;
根據(jù)以上需求給出處理器的設(shè)計目標: 采用精簡指令集設(shè)計; 采用流水線設(shè)計以實現(xiàn)低功耗; 具有寄存器堆; 具有IO 接口; 具有PWM 功能模塊; 具有定時器模塊。
3 指令集設(shè)計
在本系統(tǒng)中, 處理器要對AD 以及按鍵的輸入量進行處理。這些輸入數(shù)據(jù)位寬小且處理過程為常規(guī)運算,不需要進行使用高級數(shù)學算法進行繁雜的數(shù)據(jù)運算。所以本設(shè)計采用精簡指令集(RISC) 的設(shè)計方法。
精簡指令集具如下特點為: 指令系統(tǒng)的規(guī)模較小且復雜程度小; 操作數(shù)預存在寄存器中; 指令格式統(tǒng)一; 避免不必要的存儲器訪問。
采用RISC 指令集設(shè)計可直接減小芯片面積, 節(jié)省成本, 減少開發(fā)人員的開發(fā)與維護開銷。是嵌入式設(shè)備處理器的主流設(shè)計方法。
本處理器具有l(wèi)oad/ store 結(jié)構(gòu), 也就是說與主存儲器通信只能通過LOAD 和STORE 指令進行。運算操作數(shù)只與寄存器組有關(guān), 而并不在主存儲器上。TOP2的指令分為4 類: 運算指令、寄存器指令、跳轉(zhuǎn)指令、存儲器指令, 如表1 所示。
針對太陽能LED 照明控制系統(tǒng)的處理器指令集設(shè)計考慮到功耗及面積成本, 只包含6 條運算指令, 沒有連續(xù)移位指令和硬件乘法器。經(jīng)測試本指令集可滿足上一節(jié)所述對處理器的功能需求。
作為RISC 體系的特點之一就是指令格式簡單規(guī)則, 筆者遵循這一原則, 指令集中的11 條指令均為4 位操作碼和12 位操作目標位 。
4 處理器結(jié)構(gòu)
處理器主體結(jié)構(gòu)如圖2 所示, 下面具體介紹處理器各部分。
4. 1 存儲結(jié)構(gòu)
本處理器的存儲結(jié)構(gòu)采用哈佛( Harvard) 結(jié)構(gòu)。這是嵌入式處理器中被廣泛采用的結(jié)構(gòu), 如ARM、MIPS 等。特別適用于采用RISC 指令集的處理器。哈佛結(jié)構(gòu)的主要特點是: 程序指令存儲通路與數(shù)據(jù)指令存儲通路物理上是分離的。使得兩個存儲器可以獨立編址、獨立訪問, 從而避免了程序訪問與數(shù)據(jù)訪問之間產(chǎn)生的相關(guān)性沖突。這中并行設(shè)計架構(gòu)相當于提高了1 倍的吞吐量, 從而提高了處理器性能。
4. 2 流水線結(jié)構(gòu)
基于哈佛存儲結(jié)構(gòu), 處理器核心的設(shè)計采用5 級流水線( pipe2line) 結(jié)構(gòu) 分別是: 取指令級( IF) 、譯碼級( ID) 、寄存器訪問級( LO) 、運算級( EX) 、回寫級(WB) 。流水線的設(shè)計方法在高性能大規(guī)模系統(tǒng)中得到廣泛應用, 其實際上就是把規(guī)模較大、層次較多的組合邏輯分為幾個級, 在每一級插入寄存器并暫存中間數(shù)據(jù)。這樣做大大地增加了時鐘周期的利用率, 最大限度地發(fā)揮電路潛能。在不提高時鐘頻率的前提下提高了處理器效率, 可以實現(xiàn)在同等效率下相對于非流水線設(shè)計功率可降低25 倍 , 實現(xiàn)低功耗設(shè)計。
4. 3 片內(nèi)其他模塊
整個芯片是圍繞著流水線核心實現(xiàn)。根據(jù)系統(tǒng)需求, 處理器要實現(xiàn)精確計時以及脈沖充電方式。為了實現(xiàn)這兩種功能, 在流水線核心的基礎(chǔ)上添加了兩個可獨立流水線運行的模塊: TIMER( 定時器) 和PWM( 脈寬調(diào)制) 。T IMER 模塊是16 位定時器, 時鐘源采用32 768 Hz晶振。其可以準確分辨1 s 時間單位, 誤差低, 可為本系統(tǒng)長年室外穩(wěn)定工作提供支持。定時器可以供中斷和查詢2 種操作方式, 以供系統(tǒng)后期的靈活配置。PWM 是脈沖調(diào)制模塊。其功能是產(chǎn)生占空比可變的方波, 以驅(qū)動大功率MOS 管進行脈沖充電。其占空比變化范圍為0~ 100% , 步長1%。本模塊減輕了處理器流水線部分的負擔, 使脈沖驅(qū)動可與其他控制信號并行執(zhí)行, 增強了系統(tǒng)的穩(wěn)定性。
處理器片內(nèi)還包含通用I/ O 控制單元。此單元完成對管腳數(shù)據(jù)方向的控制, 并為輸出數(shù)據(jù)提供保持功能, 對輸入數(shù)據(jù)進行同步。此單元對外部異步信號域與內(nèi)部同步信號域進行隔離。避免產(chǎn)生信號毛刺, 簡化時序分析。
5 仿真與實現(xiàn)
本設(shè)計通過FPGA 實現(xiàn)了所需求功能。設(shè)計流程如圖3 所示。
5. 1 仿真
在太陽能LED 照明控制系統(tǒng)中, 控制器所需要面對的指令流主要有三種: 運算指令流( 順序執(zhí)行) 、分支跳轉(zhuǎn)指令流、循環(huán)指令流。
5. 1. 1 運算操作指令流( 加法)
完成加法指令需要的步驟包括:
(1) 準備2 個操作數(shù)。這2 個操作數(shù)如果已經(jīng)存在于寄存器組中則可以忽略此步驟, 如果其中一個或兩個是立即數(shù)或者在存儲器中, 則需要MOV 指令或LOAD 指令完成準備過程。
(2) 進行運算。一條ALU 加操作。
(3) 寫回存儲器。根據(jù)不同的需求會編譯出不同的指令組合, 這里以兩立即數(shù)相加結(jié)果存放在寄存器中為例進行加法操作。這需要首先執(zhí)行兩條MOVD 指令準備操作數(shù), 之后進行加法操作。需要注意的是, 在流水線中由于數(shù)據(jù)相關(guān)性問題, 在MOVD 指令之后ADD 指令不能馬上進入流水線執(zhí)行。
當ADD 指令進入LO 級進行取數(shù)操作時, 其之前的兩條MOVD 指令分別在EX 級與WB 級運行著, 此時從寄存器組中取數(shù)是不正確的。所以要把ADD 指令推后, 等到MOVD 指令退出流水線后, 方可進行取數(shù)。如果是第二條MOVD 指令推出流水線時ADD 進入LO 級的話, 中間需要間隔3 個流水線周期。但實際上只需間隔兩個流水線周期就夠了。這是由本處理器ALU 操作體系決定的。ALU 的第一操作數(shù)是從寄存器中直接取出, 無需通過LO 級。等價于第一操作數(shù)比第二操作數(shù)要快一個流水線周期。所以, 這里設(shè)計讓第一條MOVD指令存儲第二操作數(shù), 當此指令完成后,ADD 進入LO 級將第二操作數(shù)取出。經(jīng)過一個流水線周期ADD 指令進入EX 級時, 第二條MOVD 也把第一操作數(shù)存儲到了寄存器。
之后再經(jīng)過兩個周期, 運算結(jié)果存入寄存器組。
整個過程如圖4 所示。
從第一條指令輸入到結(jié)果寫入寄存器組共用了10 個流水線周期( 20 個時鐘周期) ??紤]到指令串的流水化運行, 在大段程序中費時是指令輸入的5 個流水線按周期。實際上, 在這5 個流水線周期中的2 個間隔周期并不必須為空, 只要與本條指令沒有數(shù)據(jù)相關(guān)就可以, 例如進行兩個存儲器操作。這樣最好情況下一個加法操作只需3 個流水線周期。
5. 1. 2 分支跳轉(zhuǎn)指令流
分支跳轉(zhuǎn)指令是高級語言中經(jīng)常用到的關(guān)鍵語句。現(xiàn)在用跳轉(zhuǎn)指令( JUMPI) 來構(gòu)建條件跳轉(zhuǎn)操作。分支跳轉(zhuǎn)語句首先是要判斷條件是否成立, 如果條件成立則順序執(zhí)行, 如果不成立則跳到下一程序塊執(zhí)行。編譯成處理器的操作碼后變?yōu)? 送條件; 進行比較,置標志位; 根據(jù)標志位跳轉(zhuǎn)。在這種情況下, 實現(xiàn)一個無內(nèi)容條件結(jié)構(gòu)需要7 條語句( 7 個流水線周期) 。其中兩個周期可以插入無關(guān)操作, 還有兩個周期可以提前執(zhí)行JUMPI 后續(xù)指令。所以最好情況下需要三個流水線周期完成。
5. 1. 3 循環(huán)語句
循環(huán)語句在高級語言中也是常用語句之一。它的實現(xiàn)與分支跳轉(zhuǎn)類似, 同樣是跳轉(zhuǎn)指令的應用。
循環(huán)語句中要定義一個條件變量, 通過循環(huán)體的運行改變條件變量的值, 完成后進行判斷, 符合條件跳出循環(huán)體, 否則重新開始循環(huán)體。
此種循環(huán)情況下, 循環(huán)結(jié)構(gòu)共需7 條指令, 如條件允許優(yōu)化NOP 指令, 最好情況下只需3 個流水線周期。在時序驗證完成后, 筆者結(jié)合XILINX 公司的Virtex2 FPGA, 利用Synplify 7. 5 對設(shè)計進行了綜合,綜合報表顯示時鐘頻率最高可到153 MHz。
5. 2 FPGA 實現(xiàn)
將設(shè)計下載至FPGA 后, 筆者采用名為Chipscope Pr o Analyzer 的波形觀察工具。Chipscope Pro 是采用JTAG 方式觀察FPGA 內(nèi)部的信號, 再反映到終端上,與板級驗證方法原理一致, 而節(jié)省了板級布線時間。
將Chipscope Pro 設(shè)置為arm( 伺機捕獲) 狀態(tài), 當觸發(fā)條件滿足時捕獲數(shù)據(jù), 并且在緩沖區(qū)填滿后停止捕獲, 并將數(shù)據(jù)上傳, 由波形窗口顯示出來。
觸發(fā)條件( 復位后) 滿足時捕獲到的波形圖如圖5所示。所觀察的數(shù)據(jù)共有16 位, 其中port[ 0]2por t[ 7] 為存儲器地址輸出, port[ 8]2port[ 15] 為存儲器數(shù)據(jù)輸出。程序數(shù)我們前面所介紹過的加法操作, 并且在得到結(jié)果后利用STORE 指令輸出到總線上。程序為:
MOVD R2 1B
MOVD R1 10B
NOP
NOP
ADD R3 R2
NOP
NOP
ST ORE 11110000B R3
程序的操作是1 加2, 結(jié)果為3, 將其送到11110000B 地址, 其后仿真波形如圖6 所示。
與FPGA 中結(jié)果完全相同。設(shè)計正確。
6 結(jié) 語
本文針對太陽能LED 照明控制系統(tǒng)設(shè)計了一款低功耗面積小的精簡指令集處理器, 指令集共包含12 條指令。處理器綜合頻率達150 MHz, 實際在板最高工作頻率為100 MHz。系統(tǒng)外設(shè)包括計時器和脈寬調(diào)制模塊。能夠?qū)崿F(xiàn)系統(tǒng)所需功能, 完成控制器功能。待下一步進行系統(tǒng)統(tǒng)調(diào)后進行芯片后端設(shè)計。