基于CS5451A的三相多功能電能表設計
隨著(zhù)電子技術(shù)的飛速發(fā)展,電能表的集成度越來(lái)越高,在三相多功能電表市場(chǎng)上,主要有兩種架構:電能計量芯片加微控制器;A/D轉換芯片加微處理器。第一種方案成本比較低,功能主要取決于電能芯片,微控制器不能進(jìn)行復雜的數據處理,所以不具有諧波分析功能。第二種方案可以通過(guò)復雜的數據處理,實(shí)現非常多的功能。本文主要介紹基于CS5451A+TMS320F2801的三相多功能電表設計。
CS5451A是Cirrus Logic公司為能源測量工業(yè)設計的高度集成的Δ-Σ A/D轉換器。CS5451A在一個(gè)芯片上集成了6個(gè)Δ-Σ A/D轉換器、濾波器和一個(gè)與微控制器或DSP相聯(lián)接的串行接口。CS5451A與一個(gè)變流器或可測量電流的分流器和電阻分割器或測量用變壓器直接連接。同時(shí)該產(chǎn)品已被初始化和功能完全設置,并包括一個(gè)參考電壓。
TMS320C28x系列數字信號控制器是業(yè)界第一款32位基于DSP的控制器,具有板載Flash存儲器和高達150MIPS的性能,它們針對于工業(yè)自動(dòng)化、數字電源、汽車(chē)控制以及高級傳感應用。C28x內核是世界上最高性能控制優(yōu)化內核,提供計算帶寬來(lái)實(shí)時(shí)處理許多復雜的控制算法,如無(wú)傳感速度控制、隨機PWM以及功率因數校正。C28x還提供了足以與一般MCU相匹敵的C代碼效率,與C2000系列中的當前器件完全代碼兼容。
硬件設計
圖1:基于CS5451A+TMS320F2801的三相多功能電表框圖。
圖1所示為本方案的硬件框圖,本方案按功能可分成以下幾個(gè)模塊:
電壓轉化模塊是一個(gè)電阻網(wǎng)絡(luò ),用分壓電阻的方法,把三相電壓信號轉化成三個(gè)400mV的信號,經(jīng)過(guò)阻容濾波送入CS5451A(見(jiàn)圖2)。

圖2:采用電阻網(wǎng)絡(luò )的電壓轉化模塊。
電流轉化模塊是通過(guò)電流互感器,把0-6安的三相電流信號轉化成三個(gè)400mV的信號,經(jīng)過(guò)阻容濾波送入CS5451A(見(jiàn)圖3)。
圖3:通過(guò)電流互感器把0-6安的三相電流信號轉化成三個(gè)400mV的信號。
CS5451A模塊功能是把輸入的六通道電壓電流信號轉化成數字信號輸出。CS5451A與TMS320F2801通過(guò)SPI口連接,每隔250微秒主動(dòng)發(fā)出一組數據。
TMS320F2801有兩個(gè)SPI接口,一個(gè)作為從SPI接收CS5451A數據,另一個(gè)作為從SPI與MCU通訊。24C04用來(lái)保存設置數據和校準數據。
軟件設計
軟設計分兩大部份,TMS320F2801的軟件和MCU軟件。
MCU軟件主要是從TMS320F2801種讀取數據、顯示和與PC機通訊,本文不作介紹。
TMS320F2801的軟件實(shí)現對CS5451A的數據采集、電量計算、諧波分析、與89C52
通訊、脈沖輸出。軟件主流程如圖4。
初始化系統配置寄存器,包括系統頻率設置、Flash寄存器初始化、SPIA和SPIB的使能。SPIA用來(lái)接收CS5451A的數據,SPIB用于89C52通訊。
外部中斷用來(lái)捕捉CS5451A的同步信號,在捕捉到同步信號以后,初始化并啟動(dòng)SPIA模塊,SPIA模塊在接收到12個(gè)字節數據以后產(chǎn)生中斷,把數據保存到緩存中。流程如圖5。
![]() |
圖4:軟件主流程圖。 |
電能計算方法
電壓有效值:
電流有效值:
有功功率:
無(wú)功采用移相90度算法,In+t是移相90度后的電流值
諧波分析方法
由于電網(wǎng)頻率是變化的,采樣頻率固定,所以每個(gè)周波采集到的瞬時(shí)值個(gè)數是不固定的。要進(jìn)行64點(diǎn)FFT計算,必須把采集到的瞬時(shí)值轉化成64點(diǎn)瞬時(shí)值,轉化方法有多種,本設計采用的是拉格朗日二次差值法,精度比線(xiàn)性差值法高,計算量也可以達到要求。
![]() |
圖5:中斷處理流程圖。 |
/*
拉格朗日定理(lagrange):
若函數f(x)滿(mǎn)足:(1)f(x)在閉區間[a,b]上連續;(2)f(x)在開(kāi)區間(a,b)可導;
則在開(kāi)區間(a,b)必存在S,使得f(b)-f(a)=f'(s)(b-a)。
拉格朗日二次插值公式:
已知曲線(xiàn)上三點(diǎn)(x0,y0),(x1,y1),(x2,y2),則該二次曲線(xiàn)為:
L(x)=(x-x1)(x-x2)f(x0)/(x0-x1)(x0-x2)+(x-x0)(x-x2)f(x1)/(x1-x0)(x1-x2)+(x-x0)(x-x1)f(x2)/(x2-x0)(x2-x1);
*/
//Ta是周期值
//Points是要抽取的點(diǎn)數,本系統進(jìn)行64點(diǎn)FFT計算,Points取64
float fft_buf[128]; // 保存CS5451A采集的128點(diǎn)數據
float dataR[128]; // 保存抽出來(lái)的64點(diǎn)數據
void DataChange(float Ta,int Points)
{
int i,j,k;
int index; //offset;
float p=1.0;//初始化p
float c=1.0;
float yE=0;
float m;
int T0=25; //To單位為10us.
for(i=0;i index=(floor((i*Ta*100)/(Points*T0))); //若所求的點(diǎn)為已知點(diǎn)則跳過(guò). if((i*Ta*100)/(Points*T0)-floor((i*Ta*100)/(Points*T0))==0) { dataR[i]=fft_buf[index]; continue; } //用lagrange計算出所求的點(diǎn). for(j=0;j3;j++) { p=1; c=1; for( k=0;k3;k++) { if(k==j)continue;//判斷是否為同一個(gè)數 m=index+k; m=m*T0*Points; p=p*(Ta*i*100-m); p=p/Points; c=c*((index+j)*T0-(index+k)*T0); } //求和 yE=yE+p*fft_buf[index+j]/c; } dataR[i]=yE; yE=0; } } 本方案中數據運算量很大,對TMS320F2801的要求很高,所以FFT計算和電量計算程序用匯編語(yǔ)言編寫(xiě),程序編寫(xiě)這里不作介紹。
評論