长汀无线电厂交流论坛

标题: 电表电路ADE7755+2051做功率表 [打印本页]

作者: gongyuancun    时间: 2011-7-11 15:09
标题: 电表电路ADE7755+2051做功率表
本帖最后由 gongyuancun 于 2011-9-8 17:53 编辑

ADE7755的电表电路板,12脚接负13脚14脚接正极可输出高频脉冲,我这个电表光耦输出毎瓦0.57Hz的脉冲,我改了电压取样电阻,使100瓦就输出100Hz频率信号,用2051频率计就可以显示功率,你也可以改频率计延时

2051功率显示电路.GIF (11.19 KB, 下载次数: 524)

2051功率显示电路.GIF

ADE7755电度表.jpg (42.96 KB, 下载次数: 460)

ADE7755电度表.jpg

作者: gongyuancun    时间: 2011-7-11 15:14
本帖最后由 gongyuancun 于 2011-9-8 18:16 编辑

频率计程序                        
#include<reg2051.h>
#define ON 0
#define OFF 1
/****************定义显示*****************/
sbit led1=P3^5; //指示灯
sbit led2=P3^7;
sbit L1=P3^0; //扫描位
sbit L2=P3^1;
sbit L3=P3^2;
sbit L4=P3^3;
char code disp_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,}; //段码
char disp_buffer[4]; //显存
char disp_count;  //显示指针
/**************定义计时,计数**************/
unsigned char count;
unsigned char time;
bit timer_flag;
/***************************************************
延时1S
***************************************************/
void delay(void)
{
unsigned char ys1,ys2,ys3;
for(ys1=167;ys1;ys1--)  //设
  for(ys2=39;ys2;ys2--)
   for(ys3=76;ys3;ys3--);
}
/***************************************************
定时器1中断
功能: 计数溢出中断,用于计数扩展
***************************************************/
void count_timer0(void) interrupt 1
{
count++;
}
/***************************************************
定时器0中断
功能: 1S计时和显示
***************************************************/
void timer1(void) interrupt 3 using 0
{
TL1|=0x60;  //4MS 12M晶振
TH1=0xF0;
led2=OFF;
//1S计时
if(++time==250)
{
  TR0=0;
  TR1=0;
  time=0x00;
  timer_flag=1;
}

//显示
P3 |= 0x0F;
P1=disp_buffer[disp_count];
switch(disp_count)
{
  case 0:
   L1=0;
   break;
  case 1:
   L2=0;
   break;
  case 2:
   L3=0;
   break;
  case 3:
   L4=0;
   break;   
}
if(++disp_count==4) disp_count=0x00;
}
/********************************
1. 定时器0作为外部输入计数器
2. 定时器1作为定时器,用于1S计时和显示
******************
void main(void)
{
unsigned long x;
unsigned char i,j,temp;

delay();
led1=ON;
led2=ON;
TMOD=0x15;
EA=1;
ET0=1;
ET1=1;
PT1=1;
// TH1=0xF0;
// TL1=0x60+0x12;
TR1=1;
// TR0=1;
while(1)
{
  PCON |= 0x01;
  //1S计时时间到的处理
  if(timer_flag)
  {
   //计算计数值
   ((char*)&x)[3]=TL0;
   ((char*)&x)[2]=TH0;
   ((char*)&x)[1]=count;
   //开始第二次测量
   led2=ON;
   timer_flag=0;
   count=0x00;
   TH1=0xF0;
   TL1=0x60+0x12;
   TH0=0x00;
   TL0=0x00;
   TR1=1;
   TR0=1;

   //确定小数点位置和显示的数
   if(x<1000)
   {
    led1=OFF;  //KHZ单位小数点灭
    j=4;   //小数点不显示
   }
   else if(x<10000)
   {
    led1=ON;  //KHZ单位小数点亮
    j=3;   //小数点位置
   }
   else if(x<100000)
   {
    led1=ON;
    j=2;
    x/=10;   //只要显示高四位
   }
   else if(x<1000000)
   {
    led1=ON;
    j=1;
    x/=100;
   }

   //将要显示的内容存放到显示缓存
   for(i=0;i<4;i++)
   {
    temp=x%10;
    disp_buffer=disp_data[temp];
    if(i==j) disp_buffer &= 0xFB; //小数点
    x/=10;
   }
   for(i=3;i;i--)
     if(disp_buffer==0xc0)
     disp_buffer=0xff;
    else
     break;
  }
}
}

作者: gongyuancun    时间: 2011-9-8 18:27
本帖最后由 gongyuancun 于 2013-4-16 11:37 编辑

一个装在总开关盒上,一个平时用,使用了一年多,效果不错

ADE7755功率表1.JPG (188.19 KB, 下载次数: 0)

ADE7755功率表1.JPG

ADE7755功率表3.JPG (250.5 KB, 下载次数: 3)

ADE7755功率表3.JPG

作者: 社建电子    时间: 2013-6-29 16:56
老师,原来单片机也挺牛的啊。
作者: ksd    时间: 2013-9-4 13:58
这个东西好,多功能表啊
作者: 大漠游民    时间: 2013-9-17 16:28
不错,我也有个ADE7755的电表电路板,不知道好坏,改天也做个试试




欢迎光临 长汀无线电厂交流论坛 (http://www.ctwxd.com/) Powered by Discuz! X3.1