<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 電源與新能源 > 設計應用 > 基于AT73C500/501專用芯片組的電參量測量模塊

          基于AT73C500/501專用芯片組的電參量測量模塊

          作者: 時間:2004-12-06 來源:網(wǎng)絡 收藏
          摘要:介紹美國Ateml公司新型電能量的性能指標和工作原理;給出采用此的電參數(shù)應用設計要點和抗干擾設計方法,并利用PC機編寫自動參數(shù)校準軟件,實現(xiàn)快速精確配置系數(shù);實現(xiàn)簡單通用的智能電測量。

          關鍵詞:測量 參數(shù)校準 AVR單片機

          近向年來,國外許多IC設計制造公司推出了系列電(針對工頻電網(wǎng)的電壓、電流、有功、無功、頻率等參數(shù))測量的專用芯片,如CS5460A、ADE7755、等。利用它們可以方便實現(xiàn)單相、三相電能表的設計,達到很高的測量精度,同時大幅降低產(chǎn)品成本。

          這些不同的電參量測量芯片功能各有側重,性能各有所長。我們在使用這些芯片過程中,發(fā)現(xiàn)不少特殊問題,并針對這些特點設計了通用的智能電參量測量模塊。本文根據(jù)實際應用AT73C500/501過程中出現(xiàn)的問題,對該芯片的應用進行了深入探討,給出相應解決辦法;同時,設計了高效的電參量測量模塊校準軟件,實現(xiàn)電參量測量模塊自動、快速生產(chǎn)調(diào)試。

          圖1

          1 AT73C500/501芯片簡介

          1.1 芯片性能指標

          AT73C500/C501為美國Atmel公司2000年推出的電能測量專用芯片組。其中AT73C501為A/D變換芯片用于測量前端信號采樣;AT73C500為DSP芯片,根據(jù)AT73C501的采樣數(shù)據(jù)完成電參量的計算。使用這兩種芯片配合工作測量三相電參數(shù)個有如下特點:

          *滿足IEC1036一級精度要求;

          *使用外部溫度補償?shù)膮⒖茧娫矗瑵M足IEC687的0.5和0.2級精度;

          *測量三相有功功率、無功功率、視在功率和電能;

          *測量功率因數(shù)、電網(wǎng)頻率、電壓和電流有效值;

          *多相或單相運行;

          *接口靈活,具有8位微處理器接口、8位狀態(tài)輸出、8路脈沖輸出;

          *支持增益和相位校準;

          *支持低端非線性校準;

          *啟動電流可編程;

          *最大可測帶寬1kHz;

          *單+5V供電;

          *校準數(shù)據(jù)可以從串行EEPROM讀取,也可以由外接微處理器讀取。

          1.2 AT73C500/501芯片簡介

          AT73C501是28引腳PLCC封裝的六路Sigma-Delta A/D變換器。AT73C501內(nèi)部包含六路16位A/D變換器、1個參考電壓發(fā)生器、1個電源電壓監(jiān)視單元和1個時鐘單元。每路A/D變換器都由高性能、過采樣的Sigma-Delta調(diào)制器和數(shù)字均分濾波器組成。

          芯片的AIN1、AIN3、AIN5為電流采樣通道輸入,AIN2、AIN4、AIN6為電壓采樣通道輸入,所有六路A/D輸入都是單端輸入,簡化了外圍設計。其它主要引腳有:

          ACK―采樣數(shù)據(jù)輸出準備好;

          OX、XI―接外部晶體3.2768MHz,提供工作時鐘;

          CLK―提供DSP AT73C500工作時鐘輸出;

          CLKR―串行總線數(shù)據(jù)輸出時鐘;

          FSR―輸出采樣的幀信號;

          DATA―串行總線采樣數(shù)據(jù)輸出。

          AT73C500為44引腳PLCC封裝的新型電能測量專用DSP芯片,具有一個高效的數(shù)字信號處理器(DSP)內(nèi)核,DSP技術的使用,使AT73C500具有其它電能測量芯片所沒有的一些特點和復雜功能。主要引腳如下;

          B0~B7―MCU總線;

          B8~B15―狀態(tài)、工作模式總線;

          IRQ1―接AT73C501的ACK,外部采樣數(shù)據(jù)中斷請求;

          CLK―時鐘輸入,3.2768MHz;

          STROBE、BRDY、RD/WR、ADDR0、ADDR1―AT73C500和外部MCU的數(shù)據(jù)傳輸接口信號;

          SOUT0―時鐘輸出給外部串行EEPROM;

          SOUT1―串行輸出,作為AT73C500的片選信號或外部EEPROM的數(shù)據(jù)輸入(DI);

          SIN―串行數(shù)據(jù)輸入,接收AT73C501或外部EEPROM的數(shù)據(jù)輸入(DO);

          SCLK―串行位時鐘輸入來自AT73C501。

          2 智能電參量采集模塊設計

          我們設計的智能電參量采集模塊,用于低壓變壓器在線監(jiān)測設備中。測量模塊作為關鍵的臺變運行監(jiān)測部件,要求設計成通用性強的采集模塊。這樣,可以方便地和現(xiàn)有的各種設備接口,擴展現(xiàn)有設備的功能。應具有造價低,可靠性強,便于維護等優(yōu)點。針對功能需求,在綜合對比幾種電能量測量芯片的價格、性能、系統(tǒng)實現(xiàn)難易程度等幾方面的基礎上,我們采用AT73C500/501設計了智能電參量采集模塊。

          2.1 智能電參量采集模塊前端原理

          電參量采集模塊前端以AT73C500/501為核心,由信號取樣電路、邏輯電路及其它元器件測量單元結構共同組成。三相電壓信號分別使用電阻分壓器的互感器提取。被測三相電流由一次電流1.5A或6A、二次電流5mA、二次負荷20Ω的電流互感器轉化為電壓信號。

          圖1為測量采集模塊原理。

          選擇AT73C500的工作模式時,由于校準數(shù)據(jù)直接影響測量精度,而且每次復位后AT73C500都要重新讀入校準數(shù)據(jù),如果AT73C500使用微處理器模式,導入校準數(shù)據(jù)的握手協(xié)議過于復雜,需要單片機軟件干預;因此從可靠性角度考慮,AT73C500被設置成EEPROM模式,將校準數(shù)據(jù)從EEPROM AT93C46中讀出,同時,單片機也能對AT93C46內(nèi)的校準數(shù)據(jù)讀寫。

          前端測量電路工作流程:上電復位后,單片機對AT73C500復位,然后AT73C500進行初始化工作。首先將RD/WR寫高,狀態(tài)/模式總線上的四個三態(tài)門被選通,AT73C500通過BUS12至BUS15讀入模式信息。在判斷工作模式為EEPROM模式后,AT73C500向狀態(tài)/模式總線的最低位(BUS8)寫低電平,經(jīng)邏輯譯碼電路(GAL20V8)后產(chǎn)生初始化信號CS1。CS1信號選通串行EEPROM AT93C46,AT73C500讀出存儲在AT93C46中的校準數(shù)據(jù)。校準數(shù)據(jù)讀出以后,AT73C500向BUS8寫高電平,經(jīng)鎖存后CS1變成高電平,初始化階段結束,測量單元開始正常的測量工作。AT73C501開始通過同步串行總線向AT73C500傳送采樣結果。

          AT73C500的計算結果有兩種輸出方式:一種是以數(shù)據(jù)的形式輸出,另一種是以脈沖的形式輸出。兩種方式共和數(shù)據(jù)總線,因此使用邏輯譯碼電路(GAL20V8)區(qū)分。當有一包數(shù)據(jù)要輸出時,AT73C500向狀態(tài)總線的BUS9寫高電平脈沖,經(jīng)鎖存后產(chǎn)生數(shù)據(jù)就緒信號DATRDY。DATRDY信號用于智能外接單片機線上數(shù)據(jù)就緒,此時ADDR0為低電平,無脈沖輸出。數(shù)據(jù)輸出結束后,DATRDY變?yōu)榈碗娖健?shù)據(jù)總線輸出脈沖時,DATRDY始終為低電平;同時,DR/WR為低電平,ADDR0為高電平。

          2.2 AT73C500數(shù)據(jù)采集接口單元設計

          2.2.1 單片機選型

          對智能電參量采集模塊的各項數(shù)據(jù)進一步加工處理和與外部通信等功能,一般要由單片機來完成。前端測量單元的測量結果由AT73C500的數(shù)據(jù)總線送出。AT73C500的數(shù)據(jù)總線為并行總線??偩€上數(shù)據(jù)傳輸速度非???,其中鎖存信號STROBE的脈寬僅為153ns。速度、成本上的考慮,選用美國Atmel公司的精簡指令集(RISC)AVR單片機AT90S8535實現(xiàn)接口單元的功能。AT90S8535內(nèi)部有8KB Flash程序存儲器,512B SRAM,使用8MHz的晶振,每條指令的執(zhí)行時間僅為125ns。

          2.2.2 接口邏輯控制電路

          由于AT73C500/501有多種工作模式和數(shù)據(jù)傳輸方式,同時系統(tǒng)有1片EEPROM AT93C46存儲器,保存校準參數(shù)信息。AT93C46必須能夠由單片機讀寫,還要能由AT73C500讀取系數(shù)??紤]到還有其它的復雜數(shù)據(jù)控制接口信號,因此,采用1片PLD GAL20V8實現(xiàn)復雜邏輯功能和數(shù)據(jù)、地址譯碼。圖2為接口邏輯控制電路。

          2.2.3 單片機數(shù)據(jù)采集接口單元

          測量單元的測量結果通過并行數(shù)據(jù)總線高速輸出,因此,如何準確及時地接收總線上的數(shù)據(jù)是接口單元要解決的首要問題。

          AT73C500數(shù)據(jù)總線時序中有兩個不利于數(shù)據(jù)接收的問題。

          AT73C500數(shù)據(jù)總線時序中有兩個不利于數(shù)據(jù)接收的問題。

          一是數(shù)據(jù)寫到總線選通STROBE信號低電平寬度太窄,不利于單片機捕捉。這個問題即使使用了AVR單片機依然不能忽視。如果AT90S8535采用查詢普通I/O口的辦法捕捉STROBE脈沖,查詢一次至少要執(zhí)行兩個單周期指令或執(zhí)行一條兩周期指令,執(zhí)行時間最少為250ns,超過了STROBE低電平的寬度(153ns),因此丟失數(shù)據(jù)的可能性非常大。為了準確地捕捉STROBE信號,該信號被連接到AT90S8535外中斷0的輸入引腳(1NT0)。當INT0引腳上的STROBE信號觸發(fā)了INT0中斷請求時,通用中斷標志寄存器GIFR中的INTF0位被置1,AT90S8535通過查詢INTF0位,判斷是否出現(xiàn)STROBE信號。使用這種方法STROBE低電平狀態(tài)由單片機硬件捕捉,不存在丟失STROBE事件的可能性,只要在下一次中斷申請出現(xiàn)以前將INTF0位清除即可。

          圖3

          另一個不利于數(shù)據(jù)接收的問題是,兩個STROBE信號之間的時間過短,最短時間間隔只有11個時鐘周期(3.2768MHz)。針對這種情況,考慮到數(shù)據(jù)包有效時的信號DATARDY可以利用,將DATARDY接到INT1引腳,利用DATARDY和STROBE的關系,進行數(shù)據(jù)接收,硬件連接如圖3所示。

          3 智能電參量采集模塊軟件設計

          電參量采集模塊軟件主要是單片機AT90S8535的控制軟件。軟件主要的功能是完成對AT73C500/501的配置,測量數(shù)據(jù)的處理;同時,利用外部通信接口傳輸采集的數(shù)據(jù),響應外部設備的各種查詢,校準數(shù)據(jù)設置操作。程序設計的難點在于對AT73C500測量數(shù)據(jù)的采集。

          采集程序初始化時,只允許INT1中斷(由數(shù)據(jù)包準備好標志DATARDY觸發(fā))。當DATARDY有效,進入INT1中斷時,在中斷內(nèi)允許INT0中斷(由數(shù)據(jù)寫到總線選通STROBE信號觸發(fā))。這樣,在INT1中斷程序內(nèi),查詢到STROBE引起的中斷有效標志INTF0后,馬上讀出AT73C500寫到總線的數(shù)據(jù)。然后,清除INTF0,等待接收下個數(shù)據(jù),直到把1個完整數(shù)據(jù)包16個字節(jié)全部接收完成,再退出INT1中斷。由于每包數(shù)據(jù)之間有至少20ms的間隔時間可供AT90S8535處理,這樣接收完成1包數(shù)據(jù)后,在20ms的時間內(nèi)由AT90S8535完成對包數(shù)據(jù)的分析,依次完成6包數(shù)據(jù)的接收處理。

          關鍵的數(shù)據(jù)包中斷接收代碼程序如下:

          interrupt[EXT_INT1]void ext_int1_isr(void)

          {

          #asm("cli") //禁止所有中斷

          CIMSK=0x40; //禁止int1,允許int0

          strobe1:

          if(GIFR==0)goto strobe1;//等待第1個數(shù)據(jù)選通信號有效

          temp_pack0=PINB; //syncls讀出同步數(shù)據(jù)1

          GIFR=0xc0;BRDY=0;

          strobe2:

          if(GIFR==0)goto strobe2;//等待第2個數(shù)據(jù)選通信號有效

          temp_pack1=PINB; //syncms讀出同步數(shù)據(jù)2

          GIFR=0xc0;BRDY=0;

          …………

          strobe16:

          if(GIFR==0)goto strobe16;//等待第16個數(shù)據(jù)選通信號有效

          temp_pack15=PINB;

          BRDY=0;GIMSK=0x80;GIFR=0xc0;//讀寫16個字節(jié),完成1包數(shù)據(jù)接收

          #asm("sei")

          }

          在設計調(diào)試電參量測量模塊過程中發(fā)現(xiàn)很多問題。最嚴重的問題是在測量過程中,當在AT73C501信號輸入端出現(xiàn)電壓類峰脈沖干擾時,AT73C500/501芯片組出現(xiàn)死機現(xiàn)象。具體表現(xiàn)為AT73C500不再向數(shù)據(jù)總線發(fā)送測量數(shù)據(jù)。同時AT73C501迅速升沿發(fā)燙,而此時芯片組的復位控制信號不再起作用,單片機無法控制AT73C500/501;只有模塊停電,再上電之后,才能恢復正常工作。這種故障在實際的工業(yè)控制中是必須要解決的。

          針對此現(xiàn)象,我們經(jīng)過反復實驗,采用軟件和硬件相結合的辦法,圓滿解決了這個問題。

          硬件方面:

          *在模塊的供電電源上串接電源濾波器,消除從電源側引入的干擾;

          *AT73C501的6路單端A/D輸入端接入EMI磁珠,同時輸入端并接雙向肖特基保護管,對輸入的超出輸入范圍的信號限幅,保護內(nèi)部電路;

          *AT73C500/501芯片組的供電由晶體管電子開關控制,在發(fā)生故障時,可由單片機及時切斷電路,實現(xiàn)重新上電。

          軟件方面:

          *增加軟件看門狗,由AT73C500的數(shù)據(jù)包傳輸中斷不斷清除,一旦出現(xiàn)故障,沒有數(shù)據(jù)包傳輸中斷,則看門狗復位系統(tǒng);

          *軟件對采集的數(shù)據(jù)進行合理性分析,出現(xiàn)異常非法測量數(shù)據(jù)時,復位AT73C500/501芯片組;

          *軟件定時對AT73C500的校準參數(shù)進行重裝載,防止AT73C500內(nèi)部寄存器校準系統(tǒng)系數(shù)失效。

          采用以上措施,使電參量測量模塊的可靠性大大提高。使因此測量模塊的現(xiàn)場安裝運行的臺變監(jiān)測設備運行年1來年,穩(wěn)定可靠,獲得用戶好評。

          電能表相關文章:電能表原理


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();