新聞中心

        EEPW首頁 > 電源與新能源 > 設計應用 > 基于MAXQ3120微控制器的電表(EM)參考設計

        基于MAXQ3120微控制器的電表(EM)參考設計

        作者: 時間:2010-09-21 來源:網(wǎng)絡 收藏


        這段代碼在EEPROM的寄存器數(shù)據(jù)更新完畢之后運行。在這個條件下,主機請求改變常數(shù)。存儲在EEPROM中的常數(shù)寄存器更新過后,傳輸?shù)酵ㄐ啪彌_器的毫秒數(shù)值被轉(zhuǎn)換成內(nèi)部單位,并通過set_E_pulse函數(shù)發(fā)送給DSP程序。

        只讀寄存器

        一些只讀寄存器只是簡單地從EEPROM中讀取數(shù)據(jù)(如用電量),并通過電表的其它進程來更新其中的數(shù)據(jù)。然而,另外一些只讀寄存器(如RMS電壓)并未存儲在EEPROM內(nèi)。這些寄存器數(shù)據(jù)存儲在EEPROM內(nèi)是沒有任何意義的,而且如果這樣做并連續(xù)更新數(shù)據(jù),會迅速損耗EEPROM!你可以在ProcessRegisterNumber中的表格注釋里找到這些寄存器,表述為“not stored in EEPROM”(未存儲在EEPROM內(nèi))。

        這些寄存器由寄存器管理器的GetSpecialRegister程序來控制。對應每個只讀寄存器,程序都在switch分支選擇語句中提供相應的條件。例如:

        case 0xB611:// voltage (phase A)
        g_MessageBoard.EEPROMOpPending = 1;
        Request_RMS(RMS_VOLTAGE_REQUEST);
        SpinTaskWheel();
        while(!(DSP_CTRL 0x20))
        SpinTaskWheel();
        *value = Get_RMS() / 1000;
        g_MessageBoard.EEPROMOpPending = 0;
        *size = 2;
        break;

        這個例子闡明了一個重要事實,即任何任務都不能掛起任務輪。case的第一條語句將消息板中的EEPROMOpPending標志位置為高。然后它要求DSP函數(shù)計算RMS電壓值,并在DSP函數(shù)忙時遞歸調(diào)用任務輪。當EEPROMOpPending標志位置為高后,執(zhí)行一次任務輪循環(huán),并且不調(diào)用寄存器管理器,從而避免了無限遞歸。一旦DSP函數(shù)完成,將提取RMS值并清除EEPROMOpPending標志位。

        請注意,對于這種類型的只讀寄存器,不必在RD.h文件中添加結構來保留EEPROM存儲空間。也不必向ProcessRegisterNumber表添加成員。在處理EEPROM的寄存器之前,寄存器管理器主程序總要調(diào)用GetSpecialRegister。

        定制DSP程序

        的DSP程序是一套匯編語言模塊,它負責處理從ADC到脈沖生成以及報告電壓、電流、功率和用電量的整個信號流。大部分程序不需要修改,但也許你希望修改以下方面:

        采用一個不同的電流或電壓變換器,從而需要不同的增益因子。

        改 變系統(tǒng)生成電表脈沖的方式。

        改變前端濾波。

        DSP程序是如何工作的,以及你可以安全地改變哪些單元,以下部分從較高的層次對此進行了說明。

        注意:DSP模塊以預編譯的目標文件形式公開發(fā)布。只有在簽署了保密協(xié)議(NDA)的情況下才可以提供匯編語言源代碼。更多信息,請聯(lián)系Dallas Siconductor/Maxim。

        存儲

        DSP程序用到RAM空間的低地址部分。在DSP模塊中搜索“Data Memory Map”,可以看到DSP程序用到的一系列RAM變量。前兩個字節(jié)是一組控制DSP函數(shù)運行的數(shù)據(jù)位。

        常數(shù)

        可通過調(diào)整兩個常數(shù)來設置電壓和電流通道的滿量程讀數(shù)。它們分別是W_V_Scale和W_I_Scale。缺省情況下,這兩個常量被設置為400V和250A。電壓被設置為正常條件下不會超越的電平值(280VRMS以上),而電流設定值與可能的電表分流值相一致(250μ至500μ,典型值)。

        接口程序

        用戶程序可以直接使用一些內(nèi)置程序的返回值。如果可能,你應該通過這些內(nèi)置程序與DSP函數(shù)接口,而不是直接與DSP函數(shù)使用的內(nèi)部變量接口。

        Get_and_Clear_Usage: 這是C代碼用來提取電量累計值的主程序。通常情況下,需要對用電量進行累計時,DSP程序會通知異步事件管理器。然而,隨時都可以調(diào)用這個程序以獲取精確的用電量讀數(shù)(截至當前)。注意,IAR編譯器會自動傳遞A[0]內(nèi)的函數(shù)參數(shù),并將結果返回給A[0]。

        Get_Frequency: 返回0.1mHz步長的線路頻率。值得注意的是,這個子程序缺省情況下并未加載;DL/T 645標準并未要求頻率結果。

        Get_Power_Factor: 返回負載的功率因子。

        Get_Power: 根據(jù)參數(shù)不同,返回無功或有功功率。

        Get_MaxD: 返回自上次調(diào)用該函數(shù)后,電表記錄的最大需量(功率)值。

        Request_RMS: 根據(jù)參數(shù)不同,要求DSP計算RMS電流或電壓值。

        Get_RMS: 返回最近一次請求的RMS值。

        set_E_pulse: 接受一個電表常數(shù),并設置適當?shù)腄SP變量以使該電表常數(shù)生效。

        中斷服務程序

        只使能了一個中斷:就是AFE中斷,ADC上有一組新的采樣數(shù)據(jù)時產(chǎn)生該中斷。因為ADC采樣周期為48μs,實際上中斷服務程序會很快地結束它的工作,并返回到主代碼中D在兩個中斷之間只有384個指令周期!

        中斷服務程序執(zhí)行以下功能:

        生成輸出脈沖:如果需要一個脈沖,則啟動它。如果脈沖正在進行中,則遞減持續(xù)時間計數(shù)器的值,并在計數(shù)器回零時終止脈沖。

        累加求和:將最近的能量采樣值累加到所有適當?shù)募拇嫫髦小?br />
        累計RMS值:如果被請求,則累計I2或V2。

        檢查電壓下限:如果電壓低于門限值,則遞增一個計數(shù)器值。

        過零檢測:如果電壓信號正向過零,則設置一個標志位。

        本文引用地址:http://www.104case.com/article/180459.htm

        上一頁 1 2 3 4 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 南雄市| 承德县| 肥乡县| 青河县| 华阴市| 肇源县| 德清县| 新民市| 阿巴嘎旗| 灵台县| 南华县| 青海省| 阳春市| 阳朔县| 黔江区| 德惠市| 漠河县| 河东区| 奉新县| 临夏县| 辽宁省| 克拉玛依市| 巍山| 河东区| 锦屏县| 博野县| 婺源县| 山西省| 深州市| 曲水县| 佛山市| 凤山县| 盖州市| 札达县| 莒南县| 区。| 柳河县| 邵东县| 土默特左旗| 泾阳县| 清河县|