Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Arduino&x2B的三相电压监测器/相序;EmonLib_Arduino_Embedded_Microcontroller - Fatal编程技术网

使用Arduino&x2B的三相电压监测器/相序;EmonLib

使用Arduino&x2B的三相电压监测器/相序;EmonLib,arduino,embedded,microcontroller,Arduino,Embedded,Microcontroller,我正在尝试学习/构建一个基于Arduino Mega的三相系统监控装置,该装置将允许用户通过相序检测监控220V/50Hz三相系统电压和电流,以确定正确的接线顺序(L1、l2、l3) 我从开始就关注这个项目,并在硬件部分(上面链接中的原理图和电路)取得了良好的效果。 对于软件,我使用EmonLib进行电压和电流测量。我从Arduino那里得到了正确的读数,我想我不理解在代码中添加定时器循环的相关部分 这是我修改过的代码: #包含“EmonLib.h”//include Emon库 能量监视器em

我正在尝试学习/构建一个基于Arduino Mega的三相系统监控装置,该装置将允许用户通过相序检测监控220V/50Hz三相系统电压和电流,以确定正确的接线顺序(L1、l2、l3)

我从开始就关注这个项目,并在硬件部分(上面链接中的原理图和电路)取得了良好的效果。
对于软件,我使用EmonLib进行电压和电流测量。我从Arduino那里得到了正确的读数,我想我不理解在代码中添加定时器循环的相关部分

这是我修改过的代码:

#包含“EmonLib.h”//include Emon库
能量监视器emon0;//L1实例
能量监测器emon1;//二级实例
能量监测器emon2;//L3实例
int s1=模拟读数(A3);
int s2=模拟读数(A4);
int s3=模拟读数(A5);
无符号整数g=0;
int i;//For For循环
无符号整数a22;
无效设置(){
Serial.begin(9600);
串行打印LN(“三相电压”);
延迟(1000);
emon0.电压(0,225.5,1.7);//电压:输入引脚,校准,相移
emon1.电压(1225.5,1.7);//电压:输入引脚,校准,相移
emon2.电压(2225.5,1.7);//电压:输入引脚,校准,相移
emon0.电流(6111.1);//电流:输入引脚,校准。
emon1.电流(7111.1);//电流:输入引脚,校准。
emon2.电流(8111.1);//电流:输入引脚,校准。
}
//代码开始
//用于角度计算的函数
整数计算(){
无符号整数k=0;
//完成计数的次数
g=g+1;
//转换成秒
浮动pf=(浮动)g/1000000;
//把秒转换成度
pf=pf*50*360;//此处频率=50hz
k=pf;
返回k;
}
void tloop1(){
而(1){
如果(s2!=0){
TCNT1=0;
TCCR1B=0x01;//Fcpu/1处的启动计时器1
打破
}否则{
持续
}
}
而(1){
如果(s3!=0){
TCCR1B=0x00;//停止计时器1
g=TCNT1;//获取计数数
打破
}否则{
持续
}
}
}
void tloop2(){
而(1){
如果(s3!=0){
TCNT1=0;
TCCR1B=0x01;//Fcpu/1处的启动计时器1
打破
}否则{
持续
}
}
而(1){
如果(s1!=0){
TCCR1B=0x00;//停止计时器1
g=TCNT1;//获取计数数
打破
}否则{
持续
}
}
}
浮动fmap(浮动x、浮动最小值、浮动最大值、浮动最小值、浮动最大值){
返回(x-输入最小值)*(输出最大值-输出最小值)/(输入最大值-输入最小值)+输出最小值;
}
无效阶段1(){
无符号整数a1=0;
无符号整数v1=0;
emon0.calcVI(202000);//计算所有波长数,超时
float L1supplyVoltage=emon0.Vrms;//将Vrms提取到变量中
float Irms0=emon0.Irms;//将Irms提取到变量中
浮子校准I0=0;
Serial.print(“阶段1:V=”);Serial.println(L1supplyVoltage);//打印出所有变量
cablibratedi0=fmap(Irms0,0.0,1024.0,0.0,200.0);
Serial.print(“阶段1:A=”);Serial.println(cablibratedi0);//打印出所有变量
a1=计算();
Serial.print(“阶段1:D=”);Serial.println(a1);
Serial.print(“行到下一行的电压:”);Serial.println(l1电源电压*1.732);
}
无效阶段2(){
tloop1();
无符号整数a2=0;
无符号整数v2=0;
延迟(20);
emon1.calcVI(202000);//计算所有波长数,超时
浮点L2supplyVoltage=emon1.Vrms;//将Vrms提取到变量中
float Irms1=emon1.Irms;//将Irms提取到变量中
浮子校准I1=0;
Serial.print(“第2阶段:V=”);Serial.println(L2supplyVoltage);//打印出所有变量
cablibratedi1=fmap(Irms1,0.0,1024.0,0.0,200.0);
Serial.print(“阶段2:A=”);Serial.println(cablibratedi1);//打印出所有变量
a2=计算();
a22=a2;
Serial.print(“阶段2:D=”);Serial.println(a2);
Serial.print(“行到下一行的电压:”);Serial.println(L2supplyVoltage*1.732);
延迟(700);
}
无效阶段3(){
tloop2();
无符号整数a3=0;
无符号整数v3=0;
延迟(20);
emon2.calcVI(202000);//计算所有波长数,超时
float L3supplyVoltage=emon2.Vrms;//将Vrms提取到变量中
float Irms2=emon2.Irms;//将Irms提取到变量中
浮子校准I2=0;
Serial.print(“阶段3:V=”);Serial.println(L3supplyVoltage);//打印出所有变量
cablibratedi2=fmap(Irms2,0.0,1024.0,0.0,200.0);
Serial.print(“阶段3:A=”);Serial.println(cablibratedi2);//打印出所有变量
a3=计算();
a3=a22+a3;
Serial.print(“第3阶段:D=”);Serial.println(a3);
Serial.print(“行到下一行的电压:”);Serial.println(L3supplyVoltage*1.732);
}
void循环(){
第1阶段();
阶段2();
阶段3();
延迟(1000);
}
代码编译时没有错误,但当我仅从Arduino IDE打开串行监视器时phase1()运行并显示一次

int s1 = analogRead(A3);
int s2 = analogRead(A4);
int s3 = analogRead(A5);
不要试图读取函数之外的管脚。这行不通。变量将被初始化为0。这意味着您的代码将陷入while循环

您需要做的是:

int s1;
int s2;
int s3;

[...]

void setup() {
  s1 = analogRead(A3);
  s2 = analogRead(A4);
  s3 = analogRead(A5);

代码正在运行,下面是它的副本:

int m; float n;
int m1; float n1;
int m2; float n2;

void setup()
{
  pinMode(A0,INPUT); // L1
  pinMode(A1,INPUT); // L2
  pinMode(A2,INPUT); // L3
  pinMode(A3,INPUT); // A
  pinMode(A4,INPUT); // B
  pinMode(A5,INPUT); // C
  Serial.begin(9600);
}

void loop()
{
   m=analogRead(A0);// read analog values from pin A0 across capacitor
   n=(m* .304177);// converts analog value(x) into input ac supply value using this formula ( explained in woeking section)

   Serial.print("1   analaog input  " ) ; // specify name to the corresponding value to be printed
   Serial.print(m) ; // print input analog value on serial monitor
   Serial.print("   ac voltage  ") ; // specify name to the corresponding value to be printed
   Serial.print(n) ; // prints the ac value on Serial monitor
   Serial.println();
   delay(1000);

   m1=analogRead(A1);// read analog values from pin A0 across capacitor
   n1=(m1* .304177);// converts analog value(x) into input ac supply value using this formula ( explained in woeking section)

   Serial.print("2   analaog input  " ) ; // specify name to the corresponding value to be printed
   Serial.print(m1) ; // print input analog value on serial monitor
   Serial.print("   ac voltage  ") ; // specify name to the corresponding value to be printed
   Serial.print(n1) ; // prints the ac value on Serial monitor
   Serial.println();
   delay(1000);

   m2=analogRead(A2);// read analog values from pin A0 across capacitor
   n2=(m2* .304177);// converts analog value(x) into input ac supply value using this formula ( explained in woeking section)

   Serial.print("3   analaog input  " ) ; // specify name to the corresponding value to be printed
   Serial.print(m2) ; // print input analog value on serial monitor
   Serial.print("   ac voltage  ") ; // specify name to the corresponding value to be printed
   Serial.print(n2) ; // prints the ac value on Serial monitor
   Serial.println();
   delay(1000);
}