189 lines
6.0 KiB
C
189 lines
6.0 KiB
C
#ifndef __BSP_BMP390_H
|
||
#define __BSP_BMP390_H
|
||
|
||
#include "CH58x_common.h"
|
||
#include "bsp_valve.h"
|
||
|
||
#define BMP390_IN_START (0x0001 << 0)
|
||
#define BMP390_OUT_START (0x0001 << 1)
|
||
#define BMP390_ATOM_START (0x0001 << 2)
|
||
#define BMP390_EVT_READ (0x0001 << 3)
|
||
#define BMP390_IN_READ (0x0001 << 4)
|
||
#define BMP390_OUT_READ (0x0001 << 5)
|
||
#define BMP390_ATOM_READ (0x0001 << 6)
|
||
|
||
#define CHECK_EVT_START (0x0001 << 0)
|
||
#define MOTOR_STOP_EVT (0x0001 << 1)
|
||
#define AUTO_CLOSE_CHECK_EVT (0x0001 << 2)
|
||
#define AUTO_CLOSE_TIMEOUT_EVT (0x0001 << 3)
|
||
#define MICRO_LEAK_CHECK_EVT (0x0001 << 4) // 微泄漏检测事件
|
||
|
||
#define AUTO_CLOSE_NO_FLOW_THRESHOLD 30
|
||
#define AUTO_CLOSE_CHECK_INTERVAL_MS (5 * 60 * 1000)
|
||
#define AUTO_CLOSE_CHECK_COUNT 6
|
||
#define AUTO_CLOSE_TOTAL_TIME_MS (30 * 60 * 1000)
|
||
|
||
#define MICRO_LEAK_CHECK_INTERVAL_MS (10000) // 微泄漏检测间隔(10秒)
|
||
#define MICRO_LEAK_CHECK_COUNT 6 // 微泄漏检测确认次数(6次,约1分钟)
|
||
|
||
void PRESS_LowPower(void);
|
||
|
||
void BSP_PRESS_Init(void);
|
||
void Function_Check(void);
|
||
extern uint8_t volatile fault_state;
|
||
extern uint8_t keydown_flag;
|
||
|
||
// 安全阈值参数统一定义
|
||
#define SAFETY_AUTO_OPEN_THRESHOLD 3 // 自动开阀阈值(连续检测次数)
|
||
#define SAFETY_MICRO_LEAK_THRESHOLD 5 // 微泄漏检测阈值(连续检测次数)
|
||
#define SAFETY_MICRO_LEAK_PRESS_DIFF 15 // 微泄漏压力差阈值(Pa),对应流量约0.3L/min
|
||
#define SAFETY_OVER_TEMP_THRESHOLD 65 // 超温阈值(℃)
|
||
#define SAFETY_GAS_REQUEST_PRESS_DIFF 50 // 用气请求压力差阈值(Pa)
|
||
|
||
typedef struct
|
||
{
|
||
int in_press_raw;
|
||
int out_press_raw;
|
||
|
||
int8_t in_temp;
|
||
int8_t out_temp;
|
||
int8_t atom_temp;
|
||
|
||
int in_press; // 表压 单位Pa
|
||
int out_press;
|
||
int atom_press;
|
||
|
||
// 进气端和出气端压力差值 单位Pa
|
||
int in_out_press_diff;
|
||
} TsValveRawData;
|
||
extern TsValveRawData ValveRawData;
|
||
typedef struct
|
||
{
|
||
uint8_t auto_open_count; // 自动开阀检测计数
|
||
uint8_t auto_open_flag; // 自动开阀标志
|
||
uint8_t micro_leak_count; // 微泄漏检测计数
|
||
uint8_t micro_leak_flag; // 微泄漏标志
|
||
uint8_t auto_close_enabled; // 延时关阀功能是否启用
|
||
uint8_t auto_close_check_count; // 无流量检测次数计数
|
||
uint8_t auto_close_active; // 延时关阀检测是否激活
|
||
uint32_t auto_close_start_time; // 延时关阀开始时间
|
||
TeFrameCmd lock_reason; // 阀门锁定原因
|
||
} TsValveSafetyStatus;
|
||
extern TsValveSafetyStatus valve_safety;
|
||
typedef struct
|
||
{
|
||
uint16_t over_press;
|
||
uint16_t low_press;
|
||
uint8_t over_temp;
|
||
int over_flow_press_diff_1kpa;
|
||
int over_flow_press_diff_2kpa;
|
||
int over_flow_press_diff_3kpa;
|
||
} TsValveInfo;
|
||
extern TsValveInfo ValveInfo;
|
||
|
||
// 微泄漏检测相关函数
|
||
void startMicroLeakDetection(void);
|
||
|
||
#include "bmp3.h"
|
||
|
||
/*!
|
||
* @brief Function to select the interface between SPI and I2C.
|
||
*
|
||
* @param[in] bmp3 : Structure instance of bmp3_dev
|
||
* @param[in] intf : Interface selection parameter
|
||
*
|
||
* @return Status of execution
|
||
* @retval 0 -> Success
|
||
* @retval < 0 -> Failure Info
|
||
*/
|
||
BMP3_INTF_RET_TYPE BMP390_OUT_InterfaceInit(struct bmp3_dev *bmp3, uint8_t intf);
|
||
|
||
/*!
|
||
* @brief Function for reading the sensor's registers through I2C bus.
|
||
*
|
||
* @param[in] reg_addr : Register address.
|
||
* @param[out] reg_data : Pointer to the data buffer to store the read data.
|
||
* @param[in] len : No of bytes to read.
|
||
* @param[in] intf_ptr : Interface pointer
|
||
*
|
||
* @return Status of execution
|
||
* @retval = BMP3_INTF_RET_SUCCESS -> Success
|
||
* @retval != BMP3_INTF_RET_SUCCESS -> Failure Info
|
||
*
|
||
*/
|
||
BMP3_INTF_RET_TYPE bmp3_i2c_read(uint8_t reg_addr, uint8_t *reg_data, uint32_t len, void *intf_ptr);
|
||
|
||
/*!
|
||
* @brief Function for writing the sensor's registers through I2C bus.
|
||
*
|
||
* @param[in] reg_addr : Register address.
|
||
* @param[in] reg_data : Pointer to the data buffer whose value is to be written.
|
||
* @param[in] len : No of bytes to write.
|
||
* @param[in] intf_ptr : Interface pointer
|
||
*
|
||
* @return Status of execution
|
||
* @retval = BMP3_INTF_RET_SUCCESS -> Success
|
||
* @retval != BMP3_INTF_RET_SUCCESS -> Failure Info
|
||
*
|
||
*/
|
||
BMP3_INTF_RET_TYPE bmp3_i2c_write(uint8_t reg_addr, const uint8_t *reg_data, uint32_t len, void *intf_ptr);
|
||
|
||
/*!
|
||
* @brief Function for reading the sensor's registers through SPI bus.
|
||
*
|
||
* @param[in] reg_addr : Register address.
|
||
* @param[out] reg_data : Pointer to the data buffer to store the read data.
|
||
* @param[in] len : No of bytes to read.
|
||
* @param[in] intf_ptr : Interface pointer
|
||
*
|
||
* @return Status of execution
|
||
* @retval = BMP3_INTF_RET_SUCCESS -> Success
|
||
* @retval != BMP3_INTF_RET_SUCCESS -> Failure Info
|
||
*
|
||
*/
|
||
BMP3_INTF_RET_TYPE BMP390_OUT_SPI_Read(uint8_t reg_addr, uint8_t *reg_data, uint32_t len, void *intf_ptr);
|
||
|
||
/*!
|
||
* @brief Function for writing the sensor's registers through SPI bus.
|
||
*
|
||
* @param[in] reg_addr : Register address.
|
||
* @param[in] reg_data : Pointer to the data buffer whose data has to be written.
|
||
* @param[in] len : No of bytes to write.
|
||
* @param[in] intf_ptr : Interface pointer
|
||
*
|
||
* @return Status of execution
|
||
* @retval = BMP3_INTF_RET_SUCCESS -> Success
|
||
* @retval != BMP3_INTF_RET_SUCCESS -> Failure Info
|
||
*
|
||
*/
|
||
BMP3_INTF_RET_TYPE BMP390_OUT_SPI_Write(uint8_t reg_addr, const uint8_t *reg_data, uint32_t len, void *intf_ptr);
|
||
|
||
/*!
|
||
* @brief This function provides the delay for required time (Microsecond) as per the input provided in some of the
|
||
* APIs.
|
||
*
|
||
* @param[in] period : The required wait time in microsecond.
|
||
* @param[in] intf_ptr : Interface pointer
|
||
*
|
||
* @return void.
|
||
*
|
||
*/
|
||
void bmp3_delay_us(uint32_t period, void *intf_ptr);
|
||
|
||
/*!
|
||
* @brief Prints the execution status of the APIs.
|
||
*
|
||
* @param[in] api_name : Name of the API whose execution status has to be printed.
|
||
* @param[in] rslt : Error code returned by the API whose execution status has to be printed.
|
||
*
|
||
* @return void.
|
||
*/
|
||
void bmp3_check_rslt(const char api_name[], int8_t rslt);
|
||
|
||
// 新增延时关阀功能相关函数声明
|
||
uint8_t isNoFlowDetected(void);
|
||
void startAutoCloseTimer(void);
|
||
void stopAutoCloseTimer(void);
|
||
|
||
#endif
|