ATT7053智能电表程序与电路图设计

  • 学习16904次

ATT7053AU 是一颗带 SPI 的单相多功能计量芯片(EMU) 。
芯片的工作范围是 3.0 ~ 3.6V。使用晶振为 5.5296MHz。

1.att7053电路图

att7053电路图

2.att7053 PCB图

att7053 PCB

3.做好的成品板

att7053电路板

4.LPC1114单片机与ATT7053采用SPI通信方式,下面采用软件模拟SPI时序

5.SPI读程序

uint32_t SPI_Read(uint8_t address)
{
  int8_t i;
  uint32_t temp_data;
  temp_data = 0;
  SCK_L;
  Delay(1);
  CS_H;
  Delay(2);
  CS_L;
  Delay(5);
  SCK_H;
  Delay(1);
  MOSI_L;
  Delay(1);
  SCK_L;
  Delay(1);
  for(i=6; i>=0; i--)
  {
    SCK_H;
    Delay(1);
    if((address & (0x01<<i))>>i) MOSI_H;
    else MOSI_L;
    Delay(1);
    SCK_L;
    Delay(1);
  }
  Delay(2);
  SCK_H;
  Delay(1);
  SCK_L;
  if(MISO_H) temp_data=temp_data|1;
  Delay(1);
  for(i=0; i<23; i++)
  {
    SCK_H;
    Delay(1);
    SCK_L;
    if(MISO_H)miso_val=1;
    else miso_val=0;
    temp_data = (temp_data<<1) | miso_val;
    Delay(1);
  }
  CS_H;
  return temp_data;
}

6. SPI写程序

void SPI_Write(uint8_t address, uint32_t write_data)
{
  int8_t i;
  uint32_t temp_data;
  temp_data = 1;
  SCK_L;
  Delay(100);
  CS_H;
  Delay(50);
  CS_L;
  Delay(100);
  SCK_H;
  Delay(10);
  MOSI_H;
  Delay(10);
  SCK_L;
  Delay(10);
  for(i=6; i>=0; i--)
  {
    SCK_H;
    Delay(10);
    if((address & (0x01<<i))>>i)
    {
      MOSI_H;
    }
    else MOSI_L;
    Delay(10);
    SCK_L;
    Delay(10);
  }
  Delay(40);
  for(i=23; i>=0; i--)
  {
    SCK_H;
    Delay(10);
    if((write_data & (temp_data<<i))>>i)
    {
      MOSI_H;
    }
    else MOSI_L;
    Delay(10);
    SCK_L;
    Delay(10);
  }
  CS_H;
}

7.att7053初始化工作

初始化工作需要打开寄存器写保护和写入电流通道的增益,如下:

SPI_Write(0x32, 0x00a6); //打开写保护
 SPI_Write(0x59, 0x000c); //写入电流通道增益

8.读取电压值

v_rms=SPI_Read(0x08);

9.读取电流值

i_rms=SPI_Read(0x06);

10.读取功率值

p_rms = SPI_Read(0x0a);

电路图下载:ATT7053电路图(Protel文件)
程序:ATT7053程序(使用单片机LPC1114 Keil4工程)

发表评论