<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

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

作者: 時(shí)間:2010-09-21 來(lái)源:網(wǎng)絡(luò ) 收藏


這段代碼在EEPROM的寄存器數據更新完畢之后運行。在這個(gè)條件下,主機請求改變常數。存儲在EEPROM中的常數寄存器更新過(guò)后,傳輸到通信緩沖器的毫秒數值被轉換成內部單位,并通過(guò)set_E_pulse函數發(fā)送給DSP程序。

只讀寄存器

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

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

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;

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

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

定制DSP程序

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

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

改 變系統生成電表脈沖的方式。

改變前端濾波。

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

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

存儲

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

常數

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

接口程序

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

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

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

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

Get_Power: 根據參數不同,返回無(wú)功或有功功率。

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

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

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

set_E_pulse: 接受一個(gè)電表常數,并設置適當的DSP變量以使該電表常數生效。

中斷服務(wù)程序

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

中斷服務(wù)程序執行以下功能:

生成輸出脈沖:如果需要一個(gè)脈沖,則啟動(dòng)它。如果脈沖正在進(jìn)行中,則遞減持續時(shí)間計數器的值,并在計數器回零時(shí)終止脈沖。

累加求和:將最近的能量采樣值累加到所有適當的寄存器中。

累計RMS值:如果被請求,則累計I2或V2。

檢查電壓下限:如果電壓低于門(mén)限值,則遞增一個(gè)計數器值。

過(guò)零檢測:如果電壓信號正向過(guò)零,則設置一個(gè)標志位。

本文引用地址:http://dyxdggzs.com/article/180459.htm

上一頁(yè) 1 2 3 4 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>