基于CS5451A的三相多功能電能表設(shè)計(jì)
隨著電子技術(shù)的飛速發(fā)展,電能表的集成度越來越高,在三相多功能電表市場(chǎng)上,主要有兩種架構(gòu):電能計(jì)量芯片加微控制器;A/D轉(zhuǎn)換芯片加微處理器。第一種方案成本比較低,功能主要取決于電能芯片,微控制器不能進(jìn)行復(fù)雜的數(shù)據(jù)處理,所以不具有諧波分析功能。第二種方案可以通過復(fù)雜的數(shù)據(jù)處理,實(shí)現(xiàn)非常多的功能。本文主要介紹基于CS5451A+TMS320F2801的三相多功能電表設(shè)計(jì)。
CS5451A是Cirrus Logic公司為能源測(cè)量工業(yè)設(shè)計(jì)的高度集成的Δ-Σ A/D轉(zhuǎn)換器。CS5451A在一個(gè)芯片上集成了6個(gè)Δ-Σ A/D轉(zhuǎn)換器、濾波器和一個(gè)與微控制器或DSP相聯(lián)接的串行接口。CS5451A與一個(gè)變流器或可測(cè)量電流的分流器和電阻分割器或測(cè)量用變壓器直接連接。同時(shí)該產(chǎn)品已被初始化和功能完全設(shè)置,并包括一個(gè)參考電壓。
TMS320C28x系列數(shù)字信號(hào)控制器是業(yè)界第一款32位基于DSP的控制器,具有板載Flash存儲(chǔ)器和高達(dá)150MIPS的性能,它們針對(duì)于工業(yè)自動(dòng)化、數(shù)字電源、汽車控制以及高級(jí)傳感應(yīng)用。C28x內(nèi)核是世界上最高性能控制優(yōu)化內(nèi)核,提供計(jì)算帶寬來實(shí)時(shí)處理許多復(fù)雜的控制算法,如無傳感速度控制、隨機(jī)PWM以及功率因數(shù)校正。C28x還提供了足以與一般MCU相匹敵的C代碼效率,與C2000系列中的當(dāng)前器件完全代碼兼容。
硬件設(shè)計(jì)
圖1:基于CS5451A+TMS320F2801的三相多功能電表框圖。
圖1所示為本方案的硬件框圖,本方案按功能可分成以下幾個(gè)模塊:
電壓轉(zhuǎn)化模塊是一個(gè)電阻網(wǎng)絡(luò),用分壓電阻的方法,把三相電壓信號(hào)轉(zhuǎn)化成三個(gè)400mV的信號(hào),經(jīng)過阻容濾波送入CS5451A(見圖2)。
|
圖2:采用電阻網(wǎng)絡(luò)的電壓轉(zhuǎn)化模塊。
電流轉(zhuǎn)化模塊是通過電流互感器,把0-6安的三相電流信號(hào)轉(zhuǎn)化成三個(gè)400mV的信號(hào),經(jīng)過阻容濾波送入CS5451A(見圖3)。
圖3:通過電流互感器把0-6安的三相電流信號(hào)轉(zhuǎn)化成三個(gè)400mV的信號(hào)。
CS5451A模塊功能是把輸入的六通道電壓電流信號(hào)轉(zhuǎn)化成數(shù)字信號(hào)輸出。CS5451A與TMS320F2801通過SPI口連接,每隔250微秒主動(dòng)發(fā)出一組數(shù)據(jù)。
TMS320F2801有兩個(gè)SPI接口,一個(gè)作為從SPI接收CS5451A數(shù)據(jù),另一個(gè)作為從SPI與MCU通訊。24C04用來保存設(shè)置數(shù)據(jù)和校準(zhǔn)數(shù)據(jù)。
軟件設(shè)計(jì)
軟設(shè)計(jì)分兩大部份,TMS320F2801的軟件和MCU軟件。
MCU軟件主要是從TMS320F2801種讀取數(shù)據(jù)、顯示和與PC機(jī)通訊,本文不作介紹。
TMS320F2801的軟件實(shí)現(xiàn)對(duì)CS5451A的數(shù)據(jù)采集、電量計(jì)算、諧波分析、與89C52
通訊、脈沖輸出。軟件主流程如圖4。
初始化系統(tǒng)配置寄存器,包括系統(tǒng)頻率設(shè)置、Flash寄存器初始化、SPIA和SPIB的使能。SPIA用來接收CS5451A的數(shù)據(jù),SPIB用于89C52通訊。
外部中斷用來捕捉CS5451A的同步信號(hào),在捕捉到同步信號(hào)以后,初始化并啟動(dòng)SPIA模塊,SPIA模塊在接收到12個(gè)字節(jié)數(shù)據(jù)以后產(chǎn)生中斷,把數(shù)據(jù)保存到緩存中。流程如圖5。
圖4:軟件主流程圖。 |
電能計(jì)算方法
電壓有效值:
電流有效值:
有功功率:
無功采用移相90度算法,In+t是移相90度后的電流值
諧波分析方法
由于電網(wǎng)頻率是變化的,采樣頻率固定,所以每個(gè)周波采集到的瞬時(shí)值個(gè)數(shù)是不固定的。要進(jìn)行64點(diǎn)FFT計(jì)算,必須把采集到的瞬時(shí)值轉(zhuǎn)化成64點(diǎn)瞬時(shí)值,轉(zhuǎn)化方法有多種,本設(shè)計(jì)采用的是拉格朗日二次差值法,精度比線性差值法高,計(jì)算量也可以達(dá)到要求。
圖5:中斷處理流程圖。 |
/*
拉格朗日定理(lagrange):
若函數(shù)f(x)滿足:(1)f(x)在閉區(qū)間[a,b]上連續(xù);(2)f(x)在開區(qū)間(a,b)可導(dǎo);
則在開區(qū)間(a,b)必存在S,使得f(b)-f(a)=f'(s)(b-a)。
拉格朗日二次插值公式:
已知曲線上三點(diǎn)(x0,y0),(x1,y1),(x2,y2),則該二次曲線為:
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)數(shù),本系統(tǒng)進(jìn)行64點(diǎn)FFT計(jì)算,Points取64
float fft_buf[128]; // 保存CS5451A采集的128點(diǎn)數(shù)據(jù)
float dataR[128]; // 保存抽出來的64點(diǎn)數(shù)據(jù)
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<POINTS;I++)
{ //找到所需的三個(gè)點(diǎn)的第一個(gè)點(diǎn). 整除的狀況要考慮.
index=(floor((i*Ta*100)/(Points*T0))); //若所求的點(diǎn)為已知點(diǎn)則跳過.
if((i*Ta*100)/(Points*T0)-floor((i*Ta*100)/(Points*T0))==0)
{
dataR[i]=fft_buf[index];
continue;
} //用lagrange計(jì)算出所求的點(diǎn).
for(j=0;j<3;j++)
{
p=1;
c=1;
for( k=0;k<3;k++)
{
if(k==j)continue;//判斷是否為同一個(gè)數(shù)
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;
}
}
本方案中數(shù)據(jù)運(yùn)算量很大,對(duì)TMS320F2801的要求很高,所以FFT計(jì)算和電量計(jì)算程序用匯編語(yǔ)言編寫,程序編寫這里不作介紹。