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