闲的蛋疼,打算做个TrueRMS功率表,周末开工,画个草图大家看看有什么问题。
http://cache.amobbs.com/bbs_upload782111/files_7/armok01161522.JPGhttp://cache.amobbs.com/bbs_upload782111/files_7/armok01161523.JPG
TA14Z是电流互感器,12V电源变压器兼做电压采样。 精度很低 可以参考avr465 的设计 精度应该还可以吧 果然是闲的,呵呵,有很多集成的IC,ADI,炬力,SAMES,Microchip 现成的芯片都是电度表吧?不能显示功率而且必须搭配专用LCD面板。 刚才把avr465看了,精度不能满足要求。
用免费的Visual C++ 2005 Express验证了一下算法,还是相当理想的,最终输出如下:
25003602 (Watt0)
21651414 (Watt30)
49 (Watt90)
49 (VAR0)
-12498567(VAR30)
-25003504(VAR90)
866 (PF30)
下面是源程序:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <math.h>
#define PI 3.1415926535
#define SAMPLES 200 // interval 100us @ a 20ms cycle
#define OFFSET 512 // a/d sample dc middle level indicating AC zero
#define SCALE 500 // a/d full scale
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
unsigned int v,i0,i30,i90;
unsigned int i;
long watt0,watt30,watt90,var0,var30,var90,temp0,temp1,temp2;
double d;
// make the origin sample data
for(i=0;i<SAMPLES;i++){
v=SCALE*sin(PI*2*i/SAMPLES)+OFFSET;
i0=SCALE*sin(PI*2*i/SAMPLES)+OFFSET;
i30=SCALE*sin(PI*2*i/SAMPLES-PI*2/12)+OFFSET;
i90=SCALE*sin( PI*2*i/SAMPLES-PI*2/4)+OFFSET;
cout<<"
i0:"<<i0<<" i30:"<<i30<<" i90:"<<i90;
}
// process the data
watt0=0;
watt30=0;
watt90=0;
var0=0;
var30=0;
var90=0;
for(i=0;i<SAMPLES;i++){
temp0=v; // voltage in quadrature
temp0-=OFFSET; cout<<'
'<<temp0;
temp1=v;// voltage in phase
temp1-=OFFSET;
temp2=i0;
temp2-=OFFSET;
watt0+=temp1*temp2;
var0+=temp0*temp2;
temp2=i30;
temp2-=OFFSET;
watt30+=temp1*temp2;
var30+=temp0*temp2;
temp2=i90;
temp2-=OFFSET;
watt90+=temp1*temp2;
var90+=temp0*temp2;
}
cout<<'
'<<watt0;
cout<<'
'<<watt30;
cout<<'
'<<watt90;
cout<<'
'<<var0;
cout<<'
'<<var30;
cout<<'
'<<var90;
// Power Factor
watt30/=4000;
var30/=4000;
d=watt30*watt30+var30*var30;
d=sqrt(d)/1000;
d=watt30/d;
temp0=d;
cout<<'
'<<temp0;
return 0;
} 等着看你的大作。
-----此内容被fetish于2007-07-13,19:32:47编辑过 板子焊完了,Show一下,下面就要把三块板子(+1602)连起来了。
http://cache.amobbs.com/bbs_upload782111/files_7/armok01161977.JPG
http://cache.amobbs.com/bbs_upload782111/files_7/armok01161978.JPG 你这个壳子漂亮,实用。在哪买的?好想买几个,自己做的东西都祼体中。。。 http://cache.amobbs.com/bbs_upload782111/files_7/armok01162017.JPG
http://cache.amobbs.com/bbs_upload782111/files_7/armok01162018.JPG 电压测试基本完成
为什么没人给点建议? 顶一下 可耻地失败了,测白炽灯没问题,测电脑这种谐波分量大的负载,差的一塌糊涂。 替 楼主的 精神 顶你一下~! 呵呵 对呀,早期发的图片不显了,估计服务器做什么调整或出了差错。 哎呀
疼死我啦! 你用电流互感器采样电流,直流分量没了,并且直流分量会导致互感器饱和,即使使用抗直流的互感器,精度也只能到达百分之几,电压采样经过了电容,在低频下,阻抗太大,并且对频率太敏感。 你用AVR做不成的,因为你不能作到U,I同步采样,而且精度不够,最少要16位的AD,还涉及到算法,你头就晕了, 不能作到U,I同步采样,可以补偿的 对于开关电源这种负载,给负载加上功率因素补偿再测 对于开关电源这种负载,给负载加上功率因素补偿再测
电表还限制用户怎么用电,不现实啊,只是MCU做,因为采样次数太低,谐波肯定做不好,普通的电表芯片4K采样速度4K左右的采样速度,大谐波时候也是有些误差。 参考18楼19楼。两种方法:同步采样或加补偿 蛋疼的人蛋继续痛
痛并快乐着…… 强帖留名 找资料挖坟
页:
[1]