新增校验功能
This commit is contained in:
parent
8cafcfd9db
commit
8a32570868
@ -1,6 +1,6 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file coulombmeter.c
|
||||
* @file power_meter.c
|
||||
* @author Motor Control SDK Team, Yuwell Software XiangenWang
|
||||
* @brief Voice Recognition Module Initialization Section,
|
||||
including peripheral initialization and message node insertion, etc.
|
||||
@ -47,7 +47,7 @@
|
||||
*/
|
||||
/* USER CODE END Header */
|
||||
|
||||
#include "coulombmeter.h"
|
||||
#include "power_meter.h"
|
||||
|
||||
|
||||
// 提供给外部的采样结果数据
|
||||
@ -92,11 +92,9 @@ static void coulombmeter_read_reg(uint8_t addr)
|
||||
COULOMBMETER_UART_TRANS_BYTE(addr);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
|
||||
uint8_t data[32];
|
||||
void User_Coulombmeter_Init(void)
|
||||
void User_PowerMeter_Init(void)
|
||||
{
|
||||
|
||||
FL_GPIO_InitTypeDef GPIO_InitStruct;
|
||||
@ -131,28 +129,22 @@ void User_Coulombmeter_Init(void)
|
||||
FL_UART_ClearFlag_RXBuffFull(COULOMBMETER_USED_UART_NUM);
|
||||
FL_UART_EnableIT_RXBuffFull(COULOMBMETER_USED_UART_NUM);
|
||||
|
||||
// 开启发送完毕中断(由于需要发送的字节较少 此处不使用)
|
||||
// FL_UART_ClearFlag_TXShiftBuffEmpty(COULOMBMETER_USED_UART_NUM);
|
||||
// FL_UART_EnableIT_TXShiftBuffEmpty(COULOMBMETER_USED_UART_NUM);
|
||||
|
||||
|
||||
// 清空结果
|
||||
memset(&elec_v_data, 0, sizeof(elec_v_data));
|
||||
memset(data, 0, sizeof(data));
|
||||
|
||||
|
||||
}
|
||||
//
|
||||
|
||||
|
||||
|
||||
// 推荐1s刷新一次 最终数据将存储在全局变量elec_v_data中
|
||||
void User_Coulombmeter_Data_refresh(void)
|
||||
{
|
||||
static uint8_t mod = 0;
|
||||
static Bus_Mod mod = MOD_CURRENT_METER;
|
||||
|
||||
if(mod == 0)
|
||||
if(mod == MOD_VOLTAGE_METER)
|
||||
{
|
||||
mod = 1;
|
||||
|
||||
mod = MOD_CURRENT_METER;
|
||||
coulombmeter_read_reg(Addr_V_RMS);
|
||||
|
||||
elec_v_data.bus_com_stm = BUS_COM_STATE_WAITE_VOLTAGE; // 转入等待电压数据状态
|
||||
@ -160,7 +152,7 @@ void User_Coulombmeter_Data_refresh(void)
|
||||
elec_v_data.voltage_raw = 0;
|
||||
}else{
|
||||
|
||||
mod = 0;
|
||||
mod = MOD_VOLTAGE_METER;
|
||||
coulombmeter_read_reg(Addr_I_RMS);
|
||||
|
||||
elec_v_data.bus_com_stm = BUS_COM_STATE_WAITE_CURRENT; // 转入等待电压数据状态
|
||||
@ -172,7 +164,6 @@ void User_Coulombmeter_Data_refresh(void)
|
||||
|
||||
|
||||
|
||||
uint8_t i = 0;
|
||||
|
||||
void UART5_IRQHandler(void)
|
||||
{
|
||||
@ -187,54 +178,72 @@ void UART5_IRQHandler(void)
|
||||
|
||||
//接收中断标志可通过读取rxreg寄存器清除
|
||||
uint8_t tmp_data = 0;
|
||||
tmp_data = FL_UART_ReadRXBuff(COULOMBMETER_USED_UART_NUM);
|
||||
|
||||
elec_v_data.voltage_raw |= (tmp_data<<(elec_v_data.current_index*8));
|
||||
tmp_data = FL_UART_ReadRXBuff(COULOMBMETER_USED_UART_NUM);
|
||||
|
||||
elec_v_data.current_index++;
|
||||
if(elec_v_data.current_index == 3)
|
||||
if(elec_v_data.current_index < 3)
|
||||
{
|
||||
elec_v_data.bus_com_stm = BUS_COM_STATE_IDLE;
|
||||
|
||||
elec_v_data.bus_rms_voltage_V =elec_v_data.voltage_raw / Voltage_K;
|
||||
|
||||
elec_v_data.voltage_raw = 0;
|
||||
|
||||
elec_v_data.current_index = 0;
|
||||
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_com_stm = BUS_COM_STATE_IDLE;
|
||||
|
||||
elec_v_data.bus_rms_voltage_V =elec_v_data.voltage_raw / Voltage_K;
|
||||
|
||||
elec_v_data.voltage_raw = 0;
|
||||
|
||||
elec_v_data.current_index = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}else if(elec_v_data.bus_com_stm == BUS_COM_STATE_WAITE_CURRENT)
|
||||
{
|
||||
uint8_t tmp_data = 0;
|
||||
tmp_data = FL_UART_ReadRXBuff(COULOMBMETER_USED_UART_NUM);
|
||||
|
||||
elec_v_data.current_raw |= (tmp_data<<(elec_v_data.current_index*8));
|
||||
|
||||
elec_v_data.current_index++;
|
||||
if(elec_v_data.current_index == 3)
|
||||
if(elec_v_data.current_index < 3)
|
||||
{
|
||||
elec_v_data.bus_com_stm = BUS_COM_STATE_IDLE;
|
||||
|
||||
elec_v_data.bus_rms_current_mA =elec_v_data.current_raw*100 / Current_K;
|
||||
|
||||
elec_v_data.current_raw = 0;
|
||||
|
||||
elec_v_data.current_index = 0;
|
||||
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;
|
||||
|
||||
if(elec_v_data.current_index == 4)
|
||||
{
|
||||
|
||||
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);
|
||||
|
||||
if(elec_v_data.current_array[3] == checkSum)
|
||||
{
|
||||
// 校验正确对数据进行赋值
|
||||
elec_v_data.bus_com_stm = BUS_COM_STATE_IDLE;
|
||||
|
||||
elec_v_data.bus_rms_current_mA =elec_v_data.current_raw*100 / Current_K;
|
||||
|
||||
elec_v_data.current_raw = 0;
|
||||
|
||||
elec_v_data.current_index = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
FL_UART_ClearFlag_RXBuffFull(COULOMBMETER_USED_UART_NUM);
|
||||
}
|
||||
|
||||
|
||||
// 发送中断处理
|
||||
if(FL_UART_IsEnabledIT_TXShiftBuffEmpty(COULOMBMETER_USED_UART_NUM) &&
|
||||
FL_UART_IsActiveFlag_TXShiftBuffEmpty(COULOMBMETER_USED_UART_NUM))
|
||||
{
|
||||
|
||||
|
||||
FL_UART_ClearFlag_TXShiftBuffEmpty(COULOMBMETER_USED_UART_NUM); //清除发送中断标志
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
/* USER CODE BEGIN Header */
|
||||
/**
|
||||
******************************************************************************
|
||||
* @file : coulombmeter.h
|
||||
* @file : power_meter.h
|
||||
* @brief : 电量计驱动程序
|
||||
* @version : 1.0
|
||||
* @changelog : version 1.0 初始版本 2025.12.31
|
||||
@ -113,56 +113,8 @@ extern "C" {
|
||||
|
||||
|
||||
|
||||
typedef union
|
||||
{
|
||||
uint8_t uByte[4];
|
||||
uint16_t uInt[2];
|
||||
uint32_t uLongs;
|
||||
}FourBytes_Type;
|
||||
|
||||
typedef union
|
||||
{
|
||||
uint8_t uByte[2];
|
||||
uint16_t uInt;
|
||||
}TwoByte_Type;
|
||||
|
||||
//全电参数数据包格式
|
||||
typedef struct
|
||||
{
|
||||
uint8_t head;
|
||||
uint8_t I_RMS[3];
|
||||
uint8_t V_RMS[3];
|
||||
uint8_t I_FAST_RMS[3];
|
||||
uint8_t WATT[3];
|
||||
uint8_t CF_CNT[3];
|
||||
uint8_t FREQ[3];
|
||||
uint8_t STATUS[3];
|
||||
uint8_t CHKSUM;
|
||||
}AllFlame_StructDef;
|
||||
|
||||
|
||||
|
||||
typedef union
|
||||
{
|
||||
uint8_t B8[23];
|
||||
AllFlame_StructDef Flame;
|
||||
}AllFlame_TypeDef;
|
||||
|
||||
//BL0942/0940的电参数定义
|
||||
typedef struct
|
||||
{
|
||||
uint16_t Energy_kwh; // 实际用电量,千瓦小时 XXXXXX,1度电/LSB,最大65535度电
|
||||
uint32_t Fir_CF_CNT; // 上一次的CF_CNT寄存器读数
|
||||
uint32_t Mid_CF_CNT; // 小于1度电的脉冲底数
|
||||
uint16_t Power_Value; // unit: 0.1W XXXX.X,整型变量,最低位代表0.1W
|
||||
|
||||
uint16_t Current_Value; // unit: 0.001A XX.XXX,整型变量,最低位代表0.001A
|
||||
uint16_t Voltage_Value; // unit:0.01V XXX.XX,整型变量,最低位代表0.01V
|
||||
uint16_t Freq; // unit:0.01Hz XX.XX,整型变量,最低位代表0.01Hz
|
||||
uint16_t F_Current_Value;
|
||||
}Elect_StructDef;
|
||||
|
||||
|
||||
/************************** ´æ´¢½á¹¹Ì嶨Òå **************************/
|
||||
typedef enum
|
||||
{
|
||||
BUS_COM_STATE_IDLE,
|
||||
@ -174,14 +126,11 @@ typedef enum
|
||||
}Bus_Com_State;
|
||||
|
||||
|
||||
|
||||
typedef union
|
||||
typedef enum
|
||||
{
|
||||
uint32_t raw_long;
|
||||
uint8_t raw_b8[4];
|
||||
|
||||
}Raw_Data;
|
||||
|
||||
MOD_CURRENT_METER,
|
||||
MOD_VOLTAGE_METER
|
||||
}Bus_Mod;
|
||||
|
||||
|
||||
typedef struct
|
||||
@ -191,7 +140,10 @@ typedef struct
|
||||
uint16_t bus_rms_voltage_V; // 总线供电电压有效值 单位为V
|
||||
|
||||
uint32_t voltage_raw;
|
||||
uint8_t voltage_array[4];
|
||||
|
||||
uint32_t current_raw;
|
||||
uint8_t current_array[4];
|
||||
|
||||
Bus_Com_State bus_com_stm;
|
||||
|
||||
@ -203,28 +155,9 @@ extern EleC_V_data elec_v_data;
|
||||
|
||||
|
||||
|
||||
|
||||
extern Elect_StructDef BL0942_Elect;
|
||||
extern uint16_t u16_TmrCnt; //定时计数
|
||||
extern bool IsGetBL0942EData; //定时到1秒,与BL0942通信获取电参数;
|
||||
|
||||
extern bool flg_Comm; //读数据是否成功状态
|
||||
|
||||
void Delay_MS(uint16_t Count);
|
||||
void Uart_Init(void);
|
||||
void Delay_100uS(uint16_t Count);
|
||||
void BL0942_Uart_Init(void);
|
||||
bool BL0942_Uart1_R(uint8_t ICAddr,uint8_t cmd);
|
||||
void BL0942_Uart1_W(uint8_t ICAddr,uint8_t cmd);
|
||||
void BL0942_Uart_ReadEData(void);
|
||||
void BL0942_Uart_ConfigInit(void);
|
||||
bool BL0942_Uart1_ReadAll(uint8_t ICAddr);
|
||||
void BL0942_Uart_ReadEDataAll(void);
|
||||
|
||||
|
||||
|
||||
/************************** 外部API函数导出 **************************/
|
||||
void User_Coulombmeter_Init(void);
|
||||
void User_PowerMeter_Init(void);
|
||||
void UART5_IRQHandler(void);
|
||||
|
||||
void User_Coulombmeter_Data_refresh(void);
|
||||
22643
MDK-ARM/JLinkLog.txt
22643
MDK-ARM/JLinkLog.txt
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -120,7 +120,6 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>DLGUARM</Key>
|
||||
<Name>?</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
@ -174,7 +173,7 @@
|
||||
<DebugFlag>
|
||||
<trace>0</trace>
|
||||
<periodic>1</periodic>
|
||||
<aLwin>1</aLwin>
|
||||
<aLwin>0</aLwin>
|
||||
<aCover>0</aCover>
|
||||
<aSer1>0</aSer1>
|
||||
<aSer2>0</aSer2>
|
||||
@ -306,11 +305,11 @@
|
||||
<GroupNumber>3</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Src\coulombmeter.c</PathWithFileName>
|
||||
<FilenameWithoutPath>coulombmeter.c</FilenameWithoutPath>
|
||||
<PathWithFileName>..\8F-3AW-PowerMeter\power_meter.c</PathWithFileName>
|
||||
<FilenameWithoutPath>power_meter.c</FilenameWithoutPath>
|
||||
<RteFlg>0</RteFlg>
|
||||
<bShared>0</bShared>
|
||||
</File>
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<TargetName>Coulombmeter</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCLANG506</pCCUsed>
|
||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
@ -340,7 +340,7 @@
|
||||
<MiscControls></MiscControls>
|
||||
<Define>FM33LG0XX,USE_FULL_ASSERT</Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>..\Drivers\CMSIS;..\Drivers\FM33LG0xx_FL_Driver\Inc;..\Inc;..\MF-config\Inc</IncludePath>
|
||||
<IncludePath>..\Drivers\CMSIS;..\Drivers\FM33LG0xx_FL_Driver\Inc;..\Inc;..\MF-config\Inc;..\8F-3AW-PowerMeter</IncludePath>
|
||||
</VariousControls>
|
||||
</Cads>
|
||||
<Aads>
|
||||
@ -420,9 +420,9 @@
|
||||
<FilePath>..\Src\fm33lg0xx_fl_common.c</FilePath>
|
||||
</File>
|
||||
<File>
|
||||
<FileName>coulombmeter.c</FileName>
|
||||
<FileName>power_meter.c</FileName>
|
||||
<FileType>1</FileType>
|
||||
<FilePath>..\Src\coulombmeter.c</FilePath>
|
||||
<FilePath>..\8F-3AW-PowerMeter\power_meter.c</FilePath>
|
||||
</File>
|
||||
</Files>
|
||||
</Group>
|
||||
|
||||
13
Src/main.c
13
Src/main.c
@ -51,7 +51,7 @@
|
||||
#include "main.h"
|
||||
#include "fm33_assert.h"
|
||||
|
||||
#include "coulombmeter.h"
|
||||
#include "power_meter.h"
|
||||
|
||||
|
||||
#define FREQ_CHECK_ENABLE (1) // 选择是否使能频率检查 仅在debug阶段使用
|
||||
@ -76,7 +76,7 @@ int main(void)
|
||||
|
||||
FL_GPIO_InitTypeDef GPIO_InitStruct;
|
||||
|
||||
// 初始化GPIO
|
||||
// 开启LED闪烁
|
||||
GPIO_InitStruct.pin = FL_GPIO_PIN_5;
|
||||
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
|
||||
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;
|
||||
@ -86,10 +86,15 @@ int main(void)
|
||||
|
||||
FL_GPIO_Init(GPIOD, &GPIO_InitStruct);
|
||||
|
||||
|
||||
// 开启压缩机继电器
|
||||
GPIO_InitStruct.pin = FL_GPIO_PIN_12;
|
||||
FL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||
|
||||
FL_GPIO_SetOutputPin(GPIOC, FL_GPIO_PIN_12);
|
||||
|
||||
|
||||
|
||||
// 初始化定时器任务
|
||||
#if FREQ_CHECK
|
||||
/* 系统始终频率检测 */
|
||||
@ -99,13 +104,15 @@ int main(void)
|
||||
#endif
|
||||
|
||||
|
||||
User_Coulombmeter_Init(); // 初始化电量计芯片
|
||||
User_PowerMeter_Init(); // 初始化电量计芯片
|
||||
|
||||
while(1)
|
||||
{
|
||||
FL_DelayMs(1000);
|
||||
|
||||
User_Coulombmeter_Data_refresh();
|
||||
|
||||
// LED灯闪烁
|
||||
FL_GPIO_ToggleOutputPin(GPIOD, FL_GPIO_PIN_5);
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user