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...