? ? ? ?ADE7758芯片
ADE7758僅簡化了 電力測量新應(yīng)用模塊的設(shè)計(jì)難度,可做到全電子或真正固體化、靜止化,以有利于提高性能,降低成本;還可以利用現(xiàn)有的電話線、專線、高頻無線電調(diào)制解調(diào)器、光纜、低壓配電線載波等技術(shù)手段完成自動(dòng)抄讀表、分時(shí)電價(jià)、實(shí)時(shí)電價(jià)、多功能計(jì)量、預(yù)付費(fèi)等擴(kuò)充應(yīng)用功能。使電能計(jì)量具有高精度、高可靠性、免維護(hù)和雙向通訊功能,適應(yīng)電力市場化下的電力公司提供新的增值服務(wù)。
ADE7758 是一款功能先進(jìn)的數(shù)字電能表芯片,它與單片機(jī) PIC16F877 、LCD 模塊、電源等構(gòu)成的一種多費(fèi)率電子電能表電路見圖。ADE7753 通過串行接口與單片機(jī)通信,接收單片機(jī)控制,實(shí)現(xiàn)多費(fèi)率計(jì)量。
ADE7758 提供系統(tǒng)的校正功能如:有效值偏移的校正、相位和功率的校正等等。引腳 APCF 的邏輯輸出給出了有功功率的信息,引腳 VARCF 的輸出提供了瞬時(shí)復(fù)功率和視在功率的信息。ADE7758 具有一個(gè)波形取樣寄存器,其值來自于 ADC 的輸出。波形采樣部分集成有一個(gè)用于短時(shí)持續(xù)低電平或高電平的監(jiān)測電路,門檻電平和持續(xù)時(shí)間是由用戶編程來決定的。三相中的任一相過零監(jiān)測是同步進(jìn)行的,過零監(jiān)測的結(jié)果可用于測量三路電壓輸入中任一路的周期。
ADE7758 的所有功能都是通過讀、寫片上寄存器來實(shí)現(xiàn)的,即 ADE7758 的各種設(shè)定和操作主要是對其眾多寄存器的讀和寫。每個(gè)寄存器在讀、寫時(shí),首先要執(zhí)行一個(gè)寫通信寄存器的操作,然后開始傳輸數(shù)據(jù)。 電能表的測控命令和測量信息可以多種方式與 MCU 通訊。MCU 輸入的命令字控制著 ADE7758 的工作模式、測量模式、波形采樣模式、有效值偏差補(bǔ)償量和中斷模式等。例如:每相的電流通道在信號通路中都有一個(gè)乘法器。電流波形可以改變±50%,這主要是由寫入 12 位有符號電流波形增益寄存器(AIGAIN, BIGAIN ,CIGAIN)中的 2 進(jìn)制數(shù)決定的:如果 7FFH 寫入這三個(gè)寄存器,則 ADC 的輸出標(biāo)定值將增加 50%;如果 800H 被寫入,則輸出減小 50%。
ade7758讀寫程序詳解分享
程序清單如下:
#include “msp430x44x.h”
unsigned char SPIData[3]; // 收到的ADE7758的數(shù)據(jù)信息
unsigned char SPI_Num; // 接收字符計(jì)數(shù)器
unsigned char SPICMD[3]; // 待發(fā)送命令字符串
// *****************************************************************************
// 同步串行通訊 -- 延時(shí)子程序
void SPIDelay(int DelayTimes)
{ while (DelayTimes 》 0) DelayTimes--;
}
// *****************************************************************************
// 同步串行通訊 -- 初始化7758通訊接口模塊
void Init_SPI1(void)
{ // 初始化USART1為SPI工作模式
UCTL1 &= ~SWRST; // 開始 USART1 的初始化設(shè)置
UCTL1 |= CHAR; // USART1 8 BITS 數(shù)據(jù)模式
UCTL1 |= SYNC; // USART1 SPI 通訊模式
UCTL1 |= MM; // USART1 SPI 主模式
UTCTL1 |= STC; // 從機(jī)發(fā)送模式,1是SPI的3線模式,STE引腳不作用
UTCTL1 |= SSEL1; // 選擇子系統(tǒng)時(shí)鐘 SMCLK
UTCTL1 |= SSEL0; //
//UTCTL1 |= CKPL; // UCLK1信號 與 UCLK信號 極性相反
UTCTL1 &= ~CKPL;
UBR01 = 0x08; // 同步信號分頻因子 1MHz @ 8MHz
UBR11 = 0x00;
UMCTL1 = 0x00; // 波特率因子調(diào)整因子
ME2 |= USPIE1; // 開啟USART1 的 SPI 模塊
P4SEL |= 0X3C; // 進(jìn)行特定的端子設(shè)置
P4DIR |= 0X0C;
IE2 |= URXIE1; // SPI 接收中斷允許
UCTL1 &= ~SWRST; // USART1 SPI 模式設(shè)置完畢
P4OUT &= ~BIT2; // ADE7758 常選通狀態(tài)
}
// *****************************************************************************
// 同步串行通訊 -- 寫ADE7758模塊
// Addr 為ADE7758模塊內(nèi)部寄存器地址
// Length 為ADE7758相應(yīng)的寄存器數(shù)據(jù)長度
// SPICMD[0..2] 待發(fā)送信息
void Write_7758(unsigned char Address,unsigned char Length)
{ unsigned char num;
// 選通 ADE7758
while ((UTCTL1 & TXEPT)==0); // 判斷發(fā)送緩沖區(qū)是否為空
TXBUF1 = Address | 0x80; // 發(fā)送 待寫地址
SPIDelay(10); // 延時(shí)
for (num = 0; num 《 Length; num++) // 循環(huán)發(fā)送多字節(jié)信息
{ while ((UTCTL1 & TXEPT)==0); // 判斷發(fā)送緩沖區(qū)是否為空
TXBUF1 = SPICMD[num]; // 發(fā)送 待寫地址
SPIDelay(1); // 延時(shí)
}
}
// *****************************************************************************
// 同步串行通訊 -- 讀ADE7758模塊
// Addr 為ADE7758模塊內(nèi)部寄存器地址
// Length 為ADE7758相應(yīng)的寄存器數(shù)據(jù)長度
// SPIData[0..2] 為接收到的數(shù)據(jù)信息
void Read_7758(unsigned char Address)
{ // 選通 ADE7758
while ((UTCTL1 & TXEPT)==0); // 判斷發(fā)送緩沖區(qū)是否為空
TXBUF1 = Address; // 發(fā)送 讀地址
SPIDelay(1); // 延時(shí)
SPI_Num = 0; // 初始化接收數(shù)據(jù)個(gè)數(shù)
}
// *****************************************************************************
// 同步串行通訊 -- 初始化ADE7758模塊
void Init_7758(void)
{
// SPCR=0x2A;
SPICM
D[0] = 0x40; // 操作模式寄存器
Write_7758(0x13,1); // measurement mode
SPIDelay(10);
Read_7758(0x13);
SPICMD[0] = 0x00; // 軟件復(fù)位
Write_7758(0x13,1); // measurement mode
SPIDelay(10);
SPICMD[0] = 0x38; // Line Cycle Accumulation Mode
Write_7758(0x17,1);
SPICMD[0] = 0x00; // Interrupt Mask
SPICMD[1] = 0x00;
SPICMD[2] = 0x00;
Write_7758(0x18,3);
SPICMD[0] = 0x00; // Gain
Write_7758(0x23,1);
//SPCR=0x22;
}
#pragma vector = USART1RX_VECTOR // USART 1 接收信息中斷
__interrupt void U7758_ISP(void) // SPI1 發(fā)送中斷服務(wù)程序
{
SPIData[SPI_Num] = RXBUF1;
IFG2 &= ~URXIFG1;
SPI_Num++;
}
void main(void)
{ int i;
WDTCTL = WDTPW + WDTHOLD;
// FLL_CTL0 |= XCAP14PF;
SCFI0 = 0X20;
// FN_4; // 設(shè)置系統(tǒng)工作頻率
SCFI1 = 0X20;
//SCFQCTL = 64; // (121+1) * 32768 * 2 = 7.99MHz
FLL_CTL0 = 0XEC;
FLL_CTL1 = 0X00;
P1DIR = 32;
P1SEL = 32;
Init_SPI1();
// Init_7758();
_EINT();
for (i=0;i《100;i++) Read_7758(i);
while (1) Read_7758(0x46);
}
MSP430F449采用三線SPI主模式,采用1MHZ的通訊頻率與ADE7758通訊。
449采用中斷方式進(jìn)行接收。
通過示波器可以看到收發(fā)的時(shí)序。
評論
查看更多