current_v/8F_5AW_PowerMeter/8f_5aw_powerMeter.h

184 lines
6.3 KiB
C
Raw Permalink Normal View History

2026-01-05 17:49:00 +08:00
/* USER CODE BEGIN Header */
/**
******************************************************************************
2026-01-08 08:45:31 +08:00
* @file : 8f_5aw_powerMeter.h
2026-01-05 17:49:00 +08:00
* @brief : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @version : 1.0
* @changelog : version 1.0 <EFBFBD><EFBFBD>ʼ<EFBFBD> 2025.12.31
******************************************************************************
* @attention
*
* Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China
* THIS SOFTWARE is licensed under the Mulan PSL v1.
* can use this software according to the terms and conditions of the Mulan PSL v1.
* You may obtain a copy of Mulan PSL v1 at:
* http://license.coscl.org.cn/MulanPSL
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
* PURPOSE.
* See the Mulan PSL v1 for more details.
*
******************************************************************************
*/
/* USER CODE END Header */
/* Define to prevent recursive inclusion -------------------------------------*/
2026-01-08 08:45:31 +08:00
#ifndef __8F_5AW_POWER_METER_H
#define __8F_5AW_POWER_METER_H
2026-01-05 17:49:00 +08:00
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#include "mf_config.h"
#include "string.h"
/************************** Ӳ<><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3> **************************/
2026-01-08 08:45:31 +08:00
// <20><>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ض<EFBFBD><D8B6><EFBFBD>
#define POWER_METER_USED_UART_NUM UART5
#define POWER_METER_UART_TX_GPIO_PORT GPIOC
#define POWER_METER_UART_TX_GPIO_PIN FL_GPIO_PIN_5
#define POWER_METER_UART_RX_GPIO_PORT GPIOC
#define POWER_METER_UART_RX_GPIO_PIN FL_GPIO_PIN_4
2026-01-05 17:49:00 +08:00
2026-01-08 08:45:31 +08:00
#define POWER_METER_IRQn UART5_IRQn
2026-01-05 17:49:00 +08:00
// CPU<50><55><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
2026-01-08 08:45:31 +08:00
#define CHECK_TRANS_DONE while(FL_UART_IsActiveFlag_TXShiftBuffEmpty(POWER_METER_USED_UART_NUM) != FL_SET){};
#define POWER_METER_UART_TRANS_BYTE(x) FL_UART_WriteTXBuff(POWER_METER_USED_UART_NUM, x);CHECK_TRANS_DONE;
2026-01-05 17:49:00 +08:00
2026-01-08 08:45:31 +08:00
#define POWER_METER_SET_FUNC_ENABLE (0)
2026-01-05 17:49:00 +08:00
/************************** оƬ<D0BE>ڲ<EFBFBD><DAB2>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD> **************************/
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>
#define Addr_I_WAVE 0x01 // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Addr_V_WAVE 0x02 // <20><>ѹͨ<D1B9><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Addr_I_RMS 0x03 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ
#define Addr_V_RMS 0x04 // <20><>ѹ<EFBFBD><D1B9>Чֵ
#define Addr_I_FAST_RMS 0x05 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ
#define Addr_WATT 0x06 // <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
#define Addr_CF_CNT 0x07 // <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define Addr_FREQ 0x08 // <20><>ƵƵ<C6B5><C6B5>
#define Addr_STATUS 0x09 // ״̬
#define Addr_VERSION 0x0F // <20>
// <20>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
#define Addr_I_CHOS 0x11 // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>ֱ<EFBFBD><D6B1>ƫ<EFBFBD><C6AB>У<EFBFBD><D0A3>
#define Addr_I_RMSOS 0x12 // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ЧֵС<D6B5>ź<EFBFBD>У<EFBFBD><D0A3>
#define Addr_WA_CREEP 0x14 // <20>й<EFBFBD><D0B9><EFBFBD><EFBFBD>ʷ<EFBFBD>DZ<EFBFBD><C7B1>ֵ
#define Addr_FAST_RMS_TH 0x15 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ<D0A7><D6B5>ֵ<EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
#define Addr_FAST_RMS_CYC 0x16 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵˢ<D6B5><CBA2><EFBFBD><EFBFBD><EFBFBD>ڼĴ<DABC><C4B4><EFBFBD>
#define Addr_FREQ_CYC 0x17 // <20>ߵ<EFBFBD>ѹƵ<D1B9><C6B5>ˢ<EFBFBD><CBA2><EFBFBD><EFBFBD><EFBFBD>ڼĴ<DABC><C4B4><EFBFBD>
#define Addr_MASK 0x18 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>üĴ<C3BC><C4B4><EFBFBD>
#define Addr_MODE 0x19 // <20>û<EFBFBD>ģʽѡ<CABD><D1A1><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD>
#define Addr_GAIN_CR 0x1A // <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƼĴ<C6BC><C4B4><EFBFBD>
#define Addr_SOFT_RESET 0x1C // <20><><EFBFBD><EFBFBD>λ
#define Addr_WRPROT 0x1D // <20>û<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//ע<><D7A2> BL0940<34>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڹ̶<DAB9>Ϊ0x58+ICAddr<64><72>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽڹ̶<DAB9>Ϊ0xA8+ICAddr<64><72>SOP10<31><30>װоƬ<D0BE><C6AC>IC_Addr<64><72>ַ<EFBFBD>̶<EFBFBD>Ϊ0
// BL0942 TSSOP14<31><34>װ<EFBFBD><D7B0><EFBFBD><EFBFBD>ַѡ<D6B7><D1A1><EFBFBD>ܽţ<DCBD><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>A1~A2<41><32>ַѡ<D6B7><D1A1><EFBFBD>ܽŵĵ<C5B5>ƽ<EFBFBD><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
// 8F-5AW <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>SOP-10<31><30>װоƬ <20><>ַΪICAddr = 0
#define BL0942_ADDR_R 0x58
#define BL0942_ADDR_W 0xA8
//<2F><><EFBFBD><EFBFBD>У׼оƬ<D0BE><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1%<25><><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD><C8BF><EFBFBD>1%<25><><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD>ͬһϵ<D2BB><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> EEPROM<4F><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ϵ<EFBFBD><CFB5>=3537*1<><31>ŷ*0.51K*1000/(1.218*1.218)/(390K*5+0.51K)=623.39 ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3>Ŵ<EFBFBD>10<31><30><EFBFBD><EFBFBD>*10=6234
2026-01-05 18:53:05 +08:00
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ϵ<EFBFBD><CFB5>=305978*1<><31>ŷ/1.218=251213<31><33><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С10<31><30><EFBFBD><EFBFBD>/10=25121
// <20><><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ϵ<EFBFBD><CFB5>=305978*2<><32>ŷ/1.218=502426<32><36><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǣ<EFBFBD><C7A3><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С10<31><30><EFBFBD><EFBFBD>/10=50243
// <20><>ѹת<D1B9><D7AA>ϵ<EFBFBD><CFB5>=73989*0.51K*1000/1.218/(390K*5+0.51K)=15883 0
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>3<EFBFBD><33>620k<30>ĵ<EFBFBD><C4B5><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>390k<30>ĵ<EFBFBD><C4B5>
// = 16650
2026-01-05 17:49:00 +08:00
// <20><><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5>=3600000*Power_K/1638.4/256=5350.6,<2C><>Ӧ<EFBFBD><D3A6>1<EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ŷ<EFBFBD><C5B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>390K*5+0.51K<EFBFBD><EFBFBD><EFBFBD>з<EFBFBD>ѹ<EFBFBD><EFBFBD>ʵ<EFBFBD>ʲ<EFBFBD><EFBFBD>Է<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>΢<EFBFBD><EFBFBD>
// BL0942<34><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6A3AC><EFBFBD><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>Ƭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD><EFBFBD><><CCA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MS121WF100NT4E )<29><>ʵ<EFBFBD>ʲ<EFBFBD><CAB2><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31>ŷƫС<C6AB><D0A1>Լ0.93<EFBFBD><EFBFBD>ŷ
2026-01-08 08:45:31 +08:00
#define Power_K 6234; // <20><><EFBFBD><EFBFBD>ֵ
#define Current_K 25121; // <20><><EFBFBD><EFBFBD>ֵ
#define Voltage_K 16650; // <20><><EFBFBD><EFBFBD>ֵ
2026-01-08 08:45:31 +08:00
#define Energy_K 4976; // <20><><EFBFBD><EFBFBD>ֵ
2026-01-05 17:49:00 +08:00
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¡1<C2A1><31>ŷ<EFBFBD><C5B7>Ƭ<EFBFBD>Ͻ<EFBFBD><CFBD><EFBFBD><EFBFBD>裬ʵ<E8A3AC>ʱ<EFBFBD>1<EFBFBD><31>ŷƫ<C5B7><C6AB><EFBFBD><EFBFBD>Լ1.023<EFBFBD><EFBFBD>ŷ
/*
#define Power_K 6378; //<2F><><EFBFBD><EFBFBD>ֵ*1.023
#define Current_K 25699; //<2F><><EFBFBD><EFBFBD>ֵ*1.023
#define Voltage_K 15883; //
#define Energy_K 5474; //<2F><><EFBFBD><EFBFBD>ֵ*1.023
*/
2026-01-06 16:00:44 +08:00
/************************** <20><EFBFBD><EFBFBD><EFBFBD><E5B6A8> **************************/
2026-01-05 17:49:00 +08:00
typedef enum
{
BUS_COM_STATE_IDLE,
BUS_COM_STATE_WAITE_CURRENT,
BUS_COM_STATE_WAITE_VOLTAGE,
2026-01-08 08:45:31 +08:00
BUS_COM_STATE_WAITE_POWER,
2026-01-05 17:49:00 +08:00
BUS_CHECK_ERROR,
BUS_COM_STATE_WAITE_CHECK
}Bus_Com_State;
2026-01-06 16:00:44 +08:00
typedef enum
2026-01-05 17:49:00 +08:00
{
2026-01-06 16:00:44 +08:00
MOD_CURRENT_METER,
2026-01-08 08:45:31 +08:00
MOD_VOLTAGE_METER,
MOD_POWER_METER
2026-01-06 16:00:44 +08:00
}Bus_Mod;
2026-01-05 17:49:00 +08:00
typedef struct
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2026-01-08 08:45:31 +08:00
uint16_t bus_rms_current_mA; // <20><><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7>Чֵ <20><>λΪmA
uint16_t bus_rms_voltage_V; // <20><><EFBFBD>߹<EFBFBD><DFB9><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9>Чֵ <20><>λΪV
uint16_t bus_active_power_watt; // <20><><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>*10 <20><>λΪ<CEBB><CEAA><EFBFBD><EFBFBD>*10
2026-01-05 17:49:00 +08:00
2026-01-08 08:45:31 +08:00
uint32_t power_raw;
uint8_t power_array[4];
2026-01-05 17:49:00 +08:00
uint32_t voltage_raw;
2026-01-06 16:00:44 +08:00
uint8_t voltage_array[4];
2026-01-05 17:49:00 +08:00
uint32_t current_raw;
2026-01-06 16:00:44 +08:00
uint8_t current_array[4];
2026-01-05 17:49:00 +08:00
Bus_Com_State bus_com_stm;
uint8_t current_index;
2026-01-08 08:45:31 +08:00
}EleC_V_Data;
2026-01-05 17:49:00 +08:00
2026-01-08 08:45:31 +08:00
extern EleC_V_Data elec_v_data; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD>¸ýṹ<C3BD><E1B9B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD> ͨ<><CDA8><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD><D0B9><EFBFBD><EFBFBD><EFBFBD>
2026-01-05 17:49:00 +08:00
/************************** <20>ⲿAPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> **************************/
2026-01-08 08:45:31 +08:00
void User_PowerMeter_Init(void); // <20>ϵ<EFBFBD><CFB5><EFBFBD>ִ<EFBFBD><D6B4>һ<EFBFBD><D2BB> <20><><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><CABC>GPIO UART
void User_Power_refresh(void); // ÿ500ms<6D><73><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>ִ<EFBFBD><D6B4>һ<EFBFBD>θú<CEB8><C3BA><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD><CBA2>elec_v_data<74><61><EFBFBD><EFBFBD><EFBFBD>ݡ<EFBFBD>
2026-01-05 17:49:00 +08:00
2026-01-08 08:45:31 +08:00
void UART5_IRQHandler(void);
2026-01-05 17:49:00 +08:00
#ifdef __cplusplus
}
#endif
2026-01-08 08:45:31 +08:00
#endif /* __8F_5AW_POWER_METER_H */
2026-01-05 17:49:00 +08:00
/************************ (C) COPYRIGHT Yuwell *****END OF FILE****/