2026-01-05 17:49:00 +08:00
|
|
|
|
/**
|
|
|
|
|
|
******************************************************************************
|
2026-01-08 08:45:31 +08:00
|
|
|
|
* @file 8f_5aw_powerMeter.c
|
2026-01-05 17:49:00 +08:00
|
|
|
|
* @author Motor Control SDK Team, Yuwell Software XiangenWang
|
|
|
|
|
|
* @brief Voice Recognition Module Initialization Section,
|
|
|
|
|
|
including peripheral initialization and message node insertion, etc.
|
|
|
|
|
|
* @version 1.0
|
2026-01-06 18:03:24 +08:00
|
|
|
|
* @changelog version 1.0 <EFBFBD><EFBFBD>ʼ<EFBFBD>汾 2026.1.6
|
2026-01-05 17:49:00 +08:00
|
|
|
|
******************************************************************************
|
|
|
|
|
|
* @attention
|
|
|
|
|
|
*
|
|
|
|
|
|
* <h2><center>© Copyright (c) 2025 Yuwell Software Danyang.Jiangsu.China.
|
|
|
|
|
|
* All rights reserved.</center></h2>
|
|
|
|
|
|
*
|
|
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
|
|
* modification, are permitted, provided that the following conditions are met:
|
|
|
|
|
|
*
|
|
|
|
|
|
* 1. Redistribution of source code must retain the above copyright notice,
|
|
|
|
|
|
* this list of conditions and the following disclaimer.
|
|
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
|
|
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
|
|
|
|
* and/or other materials provided with the distribution.
|
|
|
|
|
|
* 3. Neither the name of Yuwell Software nor the names of other
|
|
|
|
|
|
* contributors to this software may be used to endorse or promote products
|
|
|
|
|
|
* derived from this software without specific written permission.
|
|
|
|
|
|
* 4. This software, including modifications and/or derivative works of this
|
|
|
|
|
|
* software, must execute solely and exclusively on microcontroller or
|
|
|
|
|
|
* microprocessor devices manufactured by or for Yuwell Software.
|
|
|
|
|
|
* 5. Redistribution and use of this software other than as permitted under
|
|
|
|
|
|
* this license is void and will automatically terminate your rights under
|
|
|
|
|
|
* this license.
|
|
|
|
|
|
*
|
|
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY Yuwell Software AND CONTRIBUTORS "AS IS"
|
|
|
|
|
|
* AND ANY EXPRESS, IMPLIED OR STATUTORY WARRANTIES, INCLUDING, BUT NOT
|
|
|
|
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
|
|
|
|
* PARTICULAR PURPOSE AND NON-INFRINGEMENT OF THIRD PARTY INTELLECTUAL PROPERTY
|
|
|
|
|
|
* RIGHTS ARE DISCLAIMED TO THE FULLEST EXTENT PERMITTED BY LAW. IN NO EVENT
|
|
|
|
|
|
* SHALL Yuwell Software OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
|
|
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
|
|
|
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
|
|
|
|
|
|
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
|
|
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
|
|
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
|
|
|
|
|
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
|
|
*
|
|
|
|
|
|
******************************************************************************
|
|
|
|
|
|
*/
|
|
|
|
|
|
/* USER CODE END Header */
|
|
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
#include "8f_5aw_powerMeter.h"
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// <20>ṩ<EFBFBD><E1B9A9><EFBFBD>ⲿ<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2026-01-08 08:45:31 +08:00
|
|
|
|
EleC_V_Data elec_v_data;
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
#if POWER_METER_SET_FUNC_ENABLE // ʹ<><CAB9>Ĭ<EFBFBD>ϼĴ<CFBC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ļĴ<C4BC><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2026-01-06 18:03:24 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>BL0942ָ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>24λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param addr: <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(8λ)
|
|
|
|
|
|
* @param reg_data: <EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD>룬<EFBFBD>贫<EFBFBD><EFBFBD>3<EFBFBD><EFBFBD><EFBFBD>ֽڣ<EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ں<EFBFBD>
|
|
|
|
|
|
* @retval <EFBFBD><EFBFBD>
|
|
|
|
|
|
* @note 1. <EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>24bit<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>0<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD>з<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* 2. ͨ<EFBFBD><EFBFBD>Э<EFBFBD>飺UART<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD>ʽΪ[д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(BL0942_ADDR_W)+<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ+3<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>+У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
|
|
|
|
|
|
* 3. У<EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>㣺(д<EFBFBD><EFBFBD><EFBFBD><EFBFBD>+<EFBFBD><EFBFBD>ַ+3<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)<EFBFBD>ĵ<EFBFBD>8λȡ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* 4. <EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD>ʹ<EFBFBD>С<EFBFBD><EFBFBD>Ϊ3<EFBFBD><EFBFBD><EFBFBD>ֽڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
|
|
|
|
|
|
*/
|
2026-01-08 08:45:31 +08:00
|
|
|
|
static void power_meter_write_reg(uint8_t addr, uint8_t* reg_data)
|
2026-01-05 17:49:00 +08:00
|
|
|
|
{
|
|
|
|
|
|
uint8_t check_sum = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// 1. <20>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> BL0942_ADDR_W
|
2026-01-08 08:45:31 +08:00
|
|
|
|
POWER_METER_UART_TRANS_BYTE(BL0942_ADDR_W);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
// 2. <20>·<EFBFBD><C2B7><EFBFBD>Ҫд<D2AA>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
|
2026-01-08 08:45:31 +08:00
|
|
|
|
POWER_METER_UART_TRANS_BYTE(addr);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
// 3. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD>ַд<D6B7><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2026-01-08 08:45:31 +08:00
|
|
|
|
POWER_METER_UART_TRANS_BYTE(reg_data[0]);
|
|
|
|
|
|
POWER_METER_UART_TRANS_BYTE(reg_data[1]);
|
|
|
|
|
|
POWER_METER_UART_TRANS_BYTE(reg_data[2]);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
// 4. <20><><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD>
|
|
|
|
|
|
check_sum = (BL0942_ADDR_W + addr + reg_data[0] + reg_data[1] + reg_data[2]);
|
|
|
|
|
|
check_sum = ~(check_sum & 0xFF);
|
2026-01-08 08:45:31 +08:00
|
|
|
|
POWER_METER_UART_TRANS_BYTE(check_sum);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
}
|
2026-01-06 18:03:24 +08:00
|
|
|
|
#endif
|
|
|
|
|
|
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-01-06 18:03:24 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>BL0942ָ<EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param addr: <EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ(8λ)
|
|
|
|
|
|
* @retval <EFBFBD><EFBFBD>
|
|
|
|
|
|
* @note 1. ͨ<EFBFBD><EFBFBD>Э<EFBFBD>飺UART<EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD><EFBFBD>ʽΪ[<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(BL0942_ADDR_R)+<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ]
|
|
|
|
|
|
* 2. оƬ<EFBFBD>յ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>150us<EFBFBD><EFBFBD>ͨ<EFBFBD><EFBFBD>UART<EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(3<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>+1<EFBFBD>ֽ<EFBFBD>У<EFBFBD><EFBFBD>)
|
2026-01-08 08:45:31 +08:00
|
|
|
|
* 3. <EFBFBD><EFBFBD><EFBFBD><EFBFBD>500msִ<EFBFBD><EFBFBD>һ<EFBFBD>θú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UART<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>(ϵͳ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>400msˢ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>)
|
2026-01-06 18:03:24 +08:00
|
|
|
|
*/
|
2026-01-08 08:45:31 +08:00
|
|
|
|
static void power_meter_read_reg(uint8_t addr)
|
2026-01-05 17:49:00 +08:00
|
|
|
|
{
|
|
|
|
|
|
// 1. <20>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD> BL0942_ADDR_R
|
2026-01-08 08:45:31 +08:00
|
|
|
|
POWER_METER_UART_TRANS_BYTE(BL0942_ADDR_R);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
// 2. <20>·<EFBFBD><C2B7><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>
|
2026-01-08 08:45:31 +08:00
|
|
|
|
POWER_METER_UART_TRANS_BYTE(addr);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-01-06 18:03:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ؼ<EFBFBD>(UART5)<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param <EFBFBD><EFBFBD>
|
|
|
|
|
|
* @retval <EFBFBD><EFBFBD>
|
|
|
|
|
|
* @note 1. <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>UART TX/RX<EFBFBD><EFBFBD><EFBFBD>š<EFBFBD>UARTͨ<EFBFBD>Ų<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
|
|
|
|
|
* 2. UART<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9600<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>8λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>1λֹͣλ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>顢ȫ˫<EFBFBD><EFBFBD>
|
|
|
|
|
|
* 3. <EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD>UART5<EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><EFBFBD><EFBFBD>Ϊ2
|
|
|
|
|
|
* 4. <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<EFBFBD><EFBFBD>elec_v_data
|
|
|
|
|
|
*/
|
2026-01-06 16:00:44 +08:00
|
|
|
|
void User_PowerMeter_Init(void)
|
2026-01-05 17:49:00 +08:00
|
|
|
|
{
|
|
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
FL_GPIO_InitTypeDef GPIO_InitStruct;
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC>GPIO
|
2026-01-08 08:45:31 +08:00
|
|
|
|
GPIO_InitStruct.pin = POWER_METER_UART_RX_GPIO_PIN;
|
2026-01-05 17:49:00 +08:00
|
|
|
|
GPIO_InitStruct.mode = FL_GPIO_MODE_DIGITAL;
|
|
|
|
|
|
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
|
|
|
|
|
|
GPIO_InitStruct.pull = FL_DISABLE;
|
|
|
|
|
|
GPIO_InitStruct.remapPin = FL_DISABLE;
|
|
|
|
|
|
GPIO_InitStruct.analogSwitch = FL_DISABLE;
|
|
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
FL_GPIO_Init(POWER_METER_UART_RX_GPIO_PORT, &GPIO_InitStruct);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
GPIO_InitStruct.pin = POWER_METER_UART_TX_GPIO_PIN;
|
|
|
|
|
|
FL_GPIO_Init(POWER_METER_UART_TX_GPIO_PORT, &GPIO_InitStruct);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>
|
|
|
|
|
|
FL_UART_InitTypeDef UART_InitStruct = {0};
|
|
|
|
|
|
UART_InitStruct.baudRate = 9600; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
UART_InitStruct.dataWidth = FL_UART_DATA_WIDTH_8B; //<2F><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
UART_InitStruct.stopBits = FL_UART_STOP_BIT_WIDTH_1B; //ֹͣλ
|
|
|
|
|
|
UART_InitStruct.parity = FL_UART_PARITY_NONE; //<2F><>żУ<C5BC><D0A3>
|
|
|
|
|
|
UART_InitStruct.transferDirection = FL_UART_DIRECTION_TX_RX; //<2F><><EFBFBD><EFBFBD>-<2D><><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
2026-01-08 08:45:31 +08:00
|
|
|
|
FL_UART_Init(POWER_METER_USED_UART_NUM, &UART_InitStruct);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
NVIC_DisableIRQ(POWER_METER_IRQn);
|
|
|
|
|
|
NVIC_SetPriority(POWER_METER_IRQn,2); //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
NVIC_EnableIRQ(POWER_METER_IRQn);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
2026-01-08 08:45:31 +08:00
|
|
|
|
FL_UART_ClearFlag_RXBuffFull(POWER_METER_USED_UART_NUM);
|
|
|
|
|
|
FL_UART_EnableIT_RXBuffFull(POWER_METER_USED_UART_NUM);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>
|
|
|
|
|
|
memset(&elec_v_data, 0, sizeof(elec_v_data));
|
|
|
|
|
|
}
|
2026-01-06 16:00:44 +08:00
|
|
|
|
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
|
2026-01-06 18:03:24 +08:00
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @brief ˢ<EFBFBD>¿<EFBFBD><EFBFBD>ؼƵĵ<EFBFBD>ѹ/<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD>ѯ<EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>
|
|
|
|
|
|
* @param <EFBFBD><EFBFBD>
|
|
|
|
|
|
* @retval <EFBFBD><EFBFBD>
|
|
|
|
|
|
* @note 1. <EFBFBD>Ƽ<EFBFBD>1s<EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>θú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD>ѹ<EFBFBD>͵<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Чֵ
|
|
|
|
|
|
* 2. <EFBFBD>״ε<EFBFBD><EFBFBD>ö<EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>(Addr_I_RMS)<EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><EFBFBD>ζ<EFBFBD>ȡ<EFBFBD><EFBFBD>ѹ<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD>(Addr_V_RMS)<EFBFBD><EFBFBD>ѭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* 3. <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><EFBFBD>UART<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* 4. <EFBFBD><EFBFBD><EFBFBD>ս<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>ѹ/<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD>洢<EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>elec_v_data<EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
2026-01-08 08:45:31 +08:00
|
|
|
|
void User_Power_refresh(void)
|
2026-01-05 17:49:00 +08:00
|
|
|
|
{
|
2026-01-08 08:45:31 +08:00
|
|
|
|
static Bus_Mod mod = MOD_VOLTAGE_METER;
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
2026-01-06 16:00:44 +08:00
|
|
|
|
if(mod == MOD_VOLTAGE_METER)
|
2026-01-05 17:49:00 +08:00
|
|
|
|
{
|
2026-01-06 16:00:44 +08:00
|
|
|
|
mod = MOD_CURRENT_METER;
|
2026-01-08 08:45:31 +08:00
|
|
|
|
power_meter_read_reg(Addr_V_RMS);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
elec_v_data.bus_com_stm = BUS_COM_STATE_WAITE_VOLTAGE; // ת<><D7AA><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>״̬
|
|
|
|
|
|
elec_v_data.current_index = 0;
|
|
|
|
|
|
elec_v_data.voltage_raw = 0;
|
2026-01-08 08:45:31 +08:00
|
|
|
|
}else if(mod == MOD_CURRENT_METER){
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
mod = MOD_POWER_METER;
|
|
|
|
|
|
power_meter_read_reg(Addr_I_RMS);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
elec_v_data.bus_com_stm = BUS_COM_STATE_WAITE_CURRENT; // ת<><D7AA><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
2026-01-05 17:49:00 +08:00
|
|
|
|
elec_v_data.current_index = 0;
|
|
|
|
|
|
elec_v_data.current_raw = 0;
|
2026-01-08 08:45:31 +08:00
|
|
|
|
}else if(mod == MOD_POWER_METER){
|
|
|
|
|
|
|
|
|
|
|
|
mod = MOD_VOLTAGE_METER;
|
|
|
|
|
|
power_meter_read_reg(Addr_WATT);
|
|
|
|
|
|
|
|
|
|
|
|
elec_v_data.bus_com_stm = BUS_COM_STATE_WAITE_POWER; // ת<><D7AA><EFBFBD>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
|
|
|
|
|
elec_v_data.current_index = 0;
|
|
|
|
|
|
elec_v_data.power_raw = 0;
|
2026-01-05 17:49:00 +08:00
|
|
|
|
}
|
2026-01-08 08:45:31 +08:00
|
|
|
|
|
2026-01-05 17:49:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-01-06 18:03:24 +08:00
|
|
|
|
/**
|
2026-01-08 08:45:31 +08:00
|
|
|
|
* @brief UART5<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><EFBFBD>
|
2026-01-06 18:03:24 +08:00
|
|
|
|
* @param <EFBFBD><EFBFBD>
|
|
|
|
|
|
* @retval <EFBFBD><EFBFBD>
|
|
|
|
|
|
* @note 1. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>(RXBuffFull)
|
2026-01-08 08:45:31 +08:00
|
|
|
|
* 2. <EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ǰͨ<EFBFBD><EFBFBD>״̬(BUS_COM_STATE)<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ/<EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2026-01-06 18:03:24 +08:00
|
|
|
|
* 3. <EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD>ո<EFBFBD>ʽ<EFBFBD><EFBFBD>3<EFBFBD>ֽ<EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>ǰ)+1<EFBFBD>ֽ<EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
2026-01-08 08:45:31 +08:00
|
|
|
|
* 4. У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֤ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊʵ<EFBFBD>ʵ<EFBFBD>ѹ(V)/<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(mA)/<EFBFBD>й<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȫ<EFBFBD>ֱ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* 5. <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<EFBFBD>־ͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡRXBuff<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><EFBFBD><EFBFBD>ֶ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RXBuffFull<EFBFBD><EFBFBD>־
|
2026-01-06 18:03:24 +08:00
|
|
|
|
*/
|
2026-01-05 17:49:00 +08:00
|
|
|
|
void UART5_IRQHandler(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>жϴ<D0B6><CFB4><EFBFBD>
|
2026-01-08 08:45:31 +08:00
|
|
|
|
if(FL_UART_IsEnabledIT_RXBuffFull(POWER_METER_USED_UART_NUM) &&
|
|
|
|
|
|
FL_UART_IsActiveFlag_RXBuffFull(POWER_METER_USED_UART_NUM))
|
2026-01-05 17:49:00 +08:00
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
if(elec_v_data.bus_com_stm == BUS_COM_STATE_WAITE_VOLTAGE)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־<EFBFBD><D6BE>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ȡrxreg<65>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
uint8_t tmp_data = 0;
|
2026-01-08 08:45:31 +08:00
|
|
|
|
tmp_data = FL_UART_ReadRXBuff(POWER_METER_USED_UART_NUM);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
2026-01-06 16:00:44 +08:00
|
|
|
|
if(elec_v_data.current_index < 3)
|
2026-01-05 17:49:00 +08:00
|
|
|
|
{
|
2026-01-06 16:00:44 +08:00
|
|
|
|
elec_v_data.voltage_raw |= (tmp_data<<(elec_v_data.current_index*8));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
elec_v_data.voltage_array[elec_v_data.current_index++] = tmp_data;
|
|
|
|
|
|
|
|
|
|
|
|
if(elec_v_data.current_index == 4)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t checkSum = ~((elec_v_data.voltage_array[0] + elec_v_data.voltage_array[1] + elec_v_data.voltage_array[2] + BL0942_ADDR_R + Addr_V_RMS)&0xFF);
|
|
|
|
|
|
if(elec_v_data.voltage_array[3] == checkSum)
|
|
|
|
|
|
{
|
|
|
|
|
|
elec_v_data.bus_rms_voltage_V =elec_v_data.voltage_raw / Voltage_K;
|
|
|
|
|
|
|
|
|
|
|
|
elec_v_data.voltage_raw = 0;
|
|
|
|
|
|
}
|
2026-01-08 09:26:21 +08:00
|
|
|
|
|
|
|
|
|
|
// У<><D0A3><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>и<EFBFBD>ֵ
|
|
|
|
|
|
elec_v_data.bus_com_stm = BUS_COM_STATE_IDLE;
|
|
|
|
|
|
elec_v_data.current_index = 0;
|
2026-01-05 17:49:00 +08:00
|
|
|
|
}
|
2026-01-06 16:00:44 +08:00
|
|
|
|
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
|
|
|
|
|
}else if(elec_v_data.bus_com_stm == BUS_COM_STATE_WAITE_CURRENT)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t tmp_data = 0;
|
2026-01-08 08:45:31 +08:00
|
|
|
|
tmp_data = FL_UART_ReadRXBuff(POWER_METER_USED_UART_NUM);
|
2026-01-05 18:53:05 +08:00
|
|
|
|
|
2026-01-06 16:00:44 +08:00
|
|
|
|
if(elec_v_data.current_index < 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
elec_v_data.current_raw |= (tmp_data<<(elec_v_data.current_index*8));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
elec_v_data.current_array[elec_v_data.current_index++] = tmp_data;
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
2026-01-06 16:00:44 +08:00
|
|
|
|
if(elec_v_data.current_index == 4)
|
2026-01-05 17:49:00 +08:00
|
|
|
|
{
|
|
|
|
|
|
|
2026-01-06 16:00:44 +08:00
|
|
|
|
uint8_t checkSum = ~((elec_v_data.current_array[0] + elec_v_data.current_array[1] + elec_v_data.current_array[2] + BL0942_ADDR_R + Addr_I_RMS)&0xFF);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
|
2026-01-06 16:00:44 +08:00
|
|
|
|
if(elec_v_data.current_array[3] == checkSum)
|
|
|
|
|
|
{
|
|
|
|
|
|
// У<><D0A3><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>и<EFBFBD>ֵ
|
|
|
|
|
|
elec_v_data.bus_rms_current_mA =elec_v_data.current_raw*100 / Current_K;
|
2026-01-08 09:26:21 +08:00
|
|
|
|
|
2026-01-06 16:00:44 +08:00
|
|
|
|
}
|
2026-01-08 09:26:21 +08:00
|
|
|
|
elec_v_data.bus_com_stm = BUS_COM_STATE_IDLE;
|
|
|
|
|
|
elec_v_data.current_index = 0;
|
|
|
|
|
|
|
|
|
|
|
|
elec_v_data.current_raw = 0;
|
2026-01-05 17:49:00 +08:00
|
|
|
|
}
|
2026-01-06 18:03:24 +08:00
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
|
|
|
|
|
|
}else if(elec_v_data.bus_com_stm == BUS_COM_STATE_WAITE_POWER)
|
|
|
|
|
|
{
|
|
|
|
|
|
uint8_t tmp_data = 0;
|
|
|
|
|
|
tmp_data = FL_UART_ReadRXBuff(POWER_METER_USED_UART_NUM);
|
|
|
|
|
|
|
|
|
|
|
|
if(elec_v_data.current_index < 3)
|
|
|
|
|
|
{
|
|
|
|
|
|
elec_v_data.power_raw |= (tmp_data<<(elec_v_data.current_index*8));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
elec_v_data.power_array[elec_v_data.current_index++] = tmp_data;
|
|
|
|
|
|
|
|
|
|
|
|
if(elec_v_data.current_index == 4)
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t checkSum = ~((elec_v_data.power_array[0] + elec_v_data.power_array[1] + elec_v_data.power_array[2] + BL0942_ADDR_R + Addr_WATT)&0xFF);
|
|
|
|
|
|
|
|
|
|
|
|
if(elec_v_data.power_array[3] == checkSum)
|
|
|
|
|
|
{
|
|
|
|
|
|
// У<><D0A3><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>и<EFBFBD>ֵ
|
2026-01-08 09:26:21 +08:00
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ֵʱ<D6B5><CAB1><EFBFBD><EFBFBD>תΪ<D7AA><CEAA>ֵ
|
|
|
|
|
|
if(elec_v_data.power_array[2] > 0x7F)
|
|
|
|
|
|
{
|
2026-01-08 09:26:21 +08:00
|
|
|
|
elec_v_data.power_raw = (~elec_v_data.power_raw & 0xFFFFFF) + 1;
|
2026-01-08 08:45:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
elec_v_data.bus_active_power_watt = elec_v_data.power_raw * 100 /Power_K;
|
|
|
|
|
|
}
|
2026-01-08 09:26:21 +08:00
|
|
|
|
|
|
|
|
|
|
elec_v_data.bus_com_stm = BUS_COM_STATE_IDLE;
|
|
|
|
|
|
elec_v_data.power_raw = 0;
|
|
|
|
|
|
elec_v_data.current_index = 0;
|
2026-01-08 08:45:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-05 17:49:00 +08:00
|
|
|
|
}
|
2026-01-08 08:45:31 +08:00
|
|
|
|
|
2026-01-06 16:00:44 +08:00
|
|
|
|
|
2026-01-08 08:45:31 +08:00
|
|
|
|
FL_UART_ClearFlag_RXBuffFull(POWER_METER_USED_UART_NUM);
|
2026-01-05 17:49:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/************************ (C) COPYRIGHT YUWELL *****END OF FILE****/
|