ESP8266 電能計量晶元

2021-09-26 21:15:11 字數 3651 閱讀 4662

1. bl0937計量晶元的介紹

bl0937的應用電路圖

bl0937的外圍電路圖

2. esp8266與bl0937晶元的引腳連線

esp引腳

bl0937引腳

gpio3

selgpio4

cfgpio5

cf13. 程式設計思路

採用系統時間實現單週期測量

假設gpio外部中斷型別為下降沿觸發,設下降沿數量為num=0,則測量邏輯如下所示:

下降沿個數

週期數102

1故在第乙個下降沿到來和第二個下降沿到來時獲取系統時間,此為單週期時間,然後清零重新計數。多個外部中斷時需要注意不同外部中斷的下降沿時間間隔,防止持續進入某個外部中斷。

2. 採用定時器實現平均測量

定時器測量時需要注意應該採用硬體定時器,時鐘源為nmi時鐘源,此時鐘源優先順序高於外部中斷,可保證定時的準確性。

4. 需要注意的問題

開啟中斷之後,下降沿可能不會立即觸發中斷,一種是加延時,具體時間要根據負載而定;一種方法是執行while迴圈,判斷計時時間是否到達。總的來說,整個過程對於週期的測量並不準確,誤差在2以內。

5. 功率電能完整**

/*

* time_pw.c

* * created on: 2023年9月4日

* author: 49403

*/#include "user_main.h"

#include "osapi.h"

#include "os_type.h"

#include "driver/uart.h"

#include "user_inte***ce.h"

#include "spi_flash.h"

#include "espconn.h"

#include "user_config.h"

#include "hal_key.h"

#include "tosee_common.h"

#include "tosee_led.h"

#include "config.h"

#include "power.h"

#include "test.h"

#include "ets_sys.h"

#include "ip_addr.h"

#include "mem.h"

#include "user_main.h"

#include "hw_timer.h"

int num1; //功率脈衝

int num2; //電能脈衝

float fcf; //功率

float p; //w,kwh

float w;

//定義電壓電流轉換係數

int kp = 15;

int kw = 10;

int flag=0;

int flag1=0;

void icache_flash_attr bl_interrupt()

gpio_reg_write(gpio_status_w1tc_address, gpio_status);

if(flag==0)

else

}void icache_flash_attr pw_handler()

else

}void hw_test_timer_cb(void)

void icache_flash_attr hz_handler()

void icache_flash_attr pw_init()}}

}

7.電壓電流測量完整**

/*

* time_ui.c

* * created on: 2023年9月4日

* author: 49403

*/#include "ets_sys.h"

#include "osapi.h"

#include "ip_addr.h"

#include "espconn.h"

#include "mem.h"

#include "user_inte***ce.h"

#include "smartconfig.h"

#include "airkiss.h"

#include "driver/uart.h"

#include "hw_timer.h"

int num0 = 0; //電流電壓脈衝

float fcf1 = 0; //電流電壓hz

int u=0;

int i=0; //v,ma

//定義電壓電流轉換係數

int ku = 220;

float ki = 0.18;

int flag=0;

int flag1=0;

/* * 脈衝中斷計數函式

*/void icache_flash_attr bl_interrupt()

gpio_reg_write(gpio_status_w1tc_address, gpio_status);

if(flag==0)

else

}void icache_flash_attr bl_select()

else

flag1=1;

}void hw_test_timer_cb(void)

void icache_flash_attr hz_handler()

void icache_flash_attr time_ui_init()}}}

8. 需要解決的問題計算問題

esp8266的基礎計算沒有了解過,但是在整個程式中發現計算有誤。(1)中斷執行函式中,這兩句程式只會執行第乙個,不明白什麼原因;(2)主程式中最後判斷是否對num1清零。這條程式會先於hz_handler()和pw_handler()函式執行。雖然執行條件未達到。這個也不明白;(3)貌似esp8266會優先執行賦值語句;同乙個函式下兩條計算語句會只執行第一條。

引數型別問題

預設p=x.x(w),w=x.xx(kwh)。那麼設定計算函式的時候要注意各個引數的型別。

float p,w;

int num1,num2;

float fcf,kp,kw;

fcf=num1/2.0;

p=kp*fcf;

w=num2*kw;

電能計量晶元

電能計量晶元 圖1 1 方案一 如圖1 2,這是官方給出來的應用圖,220v取樣可以看到是使用了電阻分壓法,計量晶元與mcu共地。圖1 2 方案二 電壓取樣同樣使用電阻分壓法,但是在供電上,供電變壓器使用兩個隔離的繞組,一組給計量晶元供電,一組給mcu供電,在通訊時,採用光耦隔離。方案三 計量晶元和...

ESP8266 利用網頁控制ESP8266

說明 發出 gpio 1 就輸出 亮燈 gpio 0 就輸出 滅燈 include const char ssid jia 這裡輸入wifi名稱 const char password lm654321 這裡輸入wifi密碼 wifiserver server 80 開啟板子的80埠 int val...

ESP8266學習筆記

因為此模式可控性高且方便,所以推薦此模式 測試指令 at 應用模式設定 at cwmode 3 ap 模式 1 esp8266模組作為熱點,實現手機或電腦直接與模組通訊,實現區域網無線控制。sta 模式 2 esp8266模組通過路由器連線網際網路,手機或電腦通過網際網路實現對裝置的遠端控制 sta...