你的位置: 首页 > 仪器仪表 > 电工仪器仪表

DIY高精度数字交流电能表的教程

2023-08-12 11:26:54 | 人围观 | 评论:

  处理 220V-AC 电源电压和测量 AC 负载的真实功率、电压和电流参数一直被认为是电子设计人员在电路设计和计算方面面临的一大挑战。当我们处理电感负载时,情况会变得更加复杂,因为电感负载会改变交流信号的正弦波形(电阻负载不会)。

  在这篇文章中,我介绍了一种可以测量负载的交流电压、RMS 电流、有功功率、视在功率、功率因数和能耗 (KWh) 的电路。我使用了一个 Arduino-Nano 板作为处理器,以使其对初学者来说更具教育性和吸引力。该设备独立测量上述参数并在 4*20 LCD 上显示结果。测量错误率约为 0.5% 或更低。

  A. 电路分析

  图 1 显示了交流电能测量电路的示意图。很明显,该设计的两个主要组件是 Arduino-Nano 板 和 HLW8032 芯片

poYBAGLuITuAEIpXAAJ-PZ-lWgE095.png

pYYBAGLuITiAd9yhAAP10B-ktIU503.png

  图1-数字式交流电能表装置示意图

  A-1:电源输入

  我开始从上到下解释原理图。P1 和 P2 是电源连接器,可为 220V 电​​源和负载提供牢固的螺钉连接。C1 是一个 100nF X2 额定电容,可降低输入噪声。F1、R1 和 R2 提供电源输入保护。T1 是一种共模扼流圈,也用于降低共模噪声。

  R3、R4、R5 和 R6 是 4 毫欧 2512 电阻器,并联构成一个 4W 1 毫欧分流电阻器。您应该从 1% 的 2512 封装电阻器中选择这些电阻器。如果由于某种原因您无法使用这些电阻器,则可以并联使用两个 2 毫欧电阻器,但是,上述组合在精度和额定分流功率方面提供了最佳结果。

  A2:非隔离电源

  HLW8032 芯片的电源应该是非隔离的,参考市电。原因是芯片必须直接读取分流电阻和电源电压值。C2 是一个 470nF-630V 电容器,用于降低电源电压,R8 用于限制电流。R7减少C2的放电时间。D1 和 D2 为整流二极管,D3 为 15V 稳压二极管,用于将电压调节在 15V 左右。C4、C5 和 R9 创建一个低通 RC 滤波器,以尽可能降低噪声。

  REG-1 是 TS2937CW50 [3] 5V 线性稳压器。很明显,它将电压调节并固定为 5V。C3 是输出电容,它可以降低稳压器噪声。

  A-3:隔离供应

  该部分由 U1 组成,即 HLK-PM01 交直流转换模块。它为 Arduino 板提供隔离电源。C6、C7 和 L1 提供低通 Pi 滤波器以降低 U1 的输出噪声。

  A-4:能量计

  这部分的主要部件是IC1,它是HLW8032芯片。数据表显示:“HLW8032是一款高精度电能计量IC,采用CMOS工艺制造,主要应用于单相应用。它可以测量线路电压和电流,并计算有功功率、视在功率和功率因数。装置内部集成了两个∑-Δ型ADC和一个高精度电能计量内核。HLW8032可以通过UART口进行数据通信,采用5V供电,内置3.579M晶振,采用8Pin的SOP封装。HLW8032具有高精度、低功耗、高可靠性、环境适应性强等特点,适用于单相两线制电力用户的电能计量。”

  C8 和 C9 是去耦电容。C10、C11、R12 和 R15 是分流电阻读取网络的一部分(参见数据表)。R16.。.R20 和 C12 也是电压测量网络的一部分(参见数据表)。IC2 和 IC3 是数字隔离器光耦合器),用于将数字串行信号传输到 Arduino 板。R10 和 R13 是上拉电阻。

  A-5。Arduino纳米

  AR1 是著名的 Arduino-nano 板,IDC1 是 2*8 IDC 连接器,用于将 4*20 绿色背光字符 LCD 连接到板。R23…R26 是下拉电阻,R22 调节 LCD 的对比度。C13 和 C14 是去耦电容。

  B. PCB 布局

  图 2 显示了设计的 PCB 布局。它是两层 PCB 板,我使用了各种 SMD 和通孔组件。图 3 显示了 PCB 板和装配图的 3D 视图。

pYYBAGLuITKAG5p_AAaWkrqA5Ss233.png

pYYBAGLuIS6AWvRtAAYIOpTAxsE867.png

pYYBAGLuISuAeV6SAAVOC1FhfPc294.png

  图 2-数字电能表电路的PCB布局

poYBAGLuISeAdNuMAAWB3nFuBSg403.png

pYYBAGLuISKAHCbdAAIHSzqdFm8632.png

  图 3-PCB 板和装配图的 3D 视图

  C. 校准

  要校准设备,您只需要一个电阻负载(例如经典灯泡,而不是 LED 灯泡!)和一个精确的 RMS 万用表。我使用了 Silent SDM3045X 万用表(图 4)。请观看 YouTube 视频了解更多详情。

pYYBAGLuIR-AYfFoAAXp6YKiR20324.png

  图 4-RMS电流测量(校准过程)

  完成该步骤后,您必须更改“HLW8032.h”头文件(Arduino 库)中的分流电阻值。转到第 62 行并修改“float CurrentRF”值。就我而言,最佳值是 0.0012。

  D. 代码

  Arduino 代码已插入到下面的框中。您还可以从我自己的 GitHub 存储 [4] 下载 Arduino 库。我假设您知道如何手动安装 Arduino 库。这很容易。

  #include "HLW8032.h"

#include
#define SYNC_TIME 500


const int rs = 12, en = 11, d4 = 10, d5 = 9, d6 = 8, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


static unsigned long start_time, end_time;
HLW8032 HL;


void setup()
{
  lcd.begin(20, 4);
  HL.begin(Serial, 4);
  start_time = millis();
}

void loop()
{


  end_time = millis();
  HL.SerialReadLoop();


  if (end_time - start_time > SYNC_TIME)
  {
    if (HL.SerialRead == 1)
    {
      lcd.setCursor(0, 0);
      lcd.print("Voltage[V]: ");
      lcd.setCursor(12, 0);
      lcd.print(HL.GetVol() * 0.001, 2);


      lcd.setCursor(0, 1);
      lcd.print("Current[A]: ");
      lcd.setCursor(12, 1);
      lcd.print(HL.GetCurrent(), 2);


      lcd.setCursor(0, 2);
      lcd.print("Power[W]: ");
      lcd.setCursor(10, 2);
      lcd.print(HL.GetActivePower() * 0.001, 2);


      lcd.setCursor(0, 3);
      lcd.print("Energy[KWh]: ");
      lcd.setCursor(13, 3);
      lcd.print(HL.GetKWh(), 2);
    }
    start_time = end_time;
  }
}

  E. 测试

  校准后,您可以在任何您喜欢的地方使用该设备。图 5 显示了 LCD 屏幕上的打印信息。在您的工作场所和家中,此设备有很多用例。玩得开心!

poYBAGLuIRiAeMcpAAK2H4BBEIc817.png

  图 5-交流负载的计算参数(电压、电流、功率、KWh)

  F. 液晶显示器

  使用的 LCD 是标准的绿色背光 4*20 字符 LCD。LCD和板子之间的连接方式是直接点对点连接。这意味着IDC的第一个引脚(左侧)从左侧(VSS)连接到LCD的第一个引脚。图 6 显示了 LCD 接线。

poYBAGLuIRSAdsljAAjJWGJKHlM451.png

  图 6-4*20 LCD连接板

  G. 物料清单

  图 7 显示了物料清单。Octopart 网站是构建任何类型 BOM 的非常好的工具。

pYYBAGLuIRGAHnOQAAPygVEXFZQ532.png

  图 7-材料清单





标签:[db:tags]