|
|
@@ -1,7 +1,7 @@
|
|
|
-
|
|
|
#include "board.h"
|
|
|
#include "tdc_tof.h"
|
|
|
#include "alarm.h"
|
|
|
+#include "check.h"
|
|
|
|
|
|
#define TOF_PWFW_DIFF ((uint16_t)(0x1620u * 25 / 100))
|
|
|
#define TOF_PWFW_LOW ((uint16_t)(0x1620u * 40 / 100))
|
|
|
@@ -15,7 +15,7 @@ uint32_t CntErrEvent = 0;
|
|
|
uint8_t TdcIntStep = 0xFFu;
|
|
|
|
|
|
uint8_t TDC_SAMPLE_CNT = 0;//add by yuewei 261014 to count the tdc sample times
|
|
|
-uint8_t TDC_SAMPLE_TIMES_PER_SECOND = 1;//add by yuewei 261014 to define tdc sample times per 1 second
|
|
|
+uint8_t TDC_SAMPLE_TIMES_PER_RTC_INT = 1;//add by yuewei 261014 to define tdc sample times per RTC INT
|
|
|
|
|
|
float SumToF;
|
|
|
float LastSumToF;
|
|
|
@@ -84,7 +84,7 @@ void set_tdc_int_step(uint8_t int_step)
|
|
|
|
|
|
// 可调滤波参数
|
|
|
#define BUF_SIZE 5 // 窗口大小
|
|
|
-#define LPF_ALPHA 0.20f // 一阶低通系数
|
|
|
+#define LPF_ALPHA 1.0f // 一阶低通系数
|
|
|
#define TOF_MAX_CHANNELS 1
|
|
|
typedef struct
|
|
|
{
|
|
|
@@ -232,7 +232,8 @@ void read_tof_and_convert_to_flow(void)
|
|
|
}
|
|
|
if(alarm_status(ERR_BLANK_PIPE))
|
|
|
{
|
|
|
- tdc_turn_on_off_high_clk(0);
|
|
|
+ tdc_turn_on_off_high_clk(0);//关闭MS1030高频时钟,降低功耗
|
|
|
+ TDC_SAMPLE_TIMES_PER_RTC_INT = 1;//每次RTC中断采集1次数据,空管情况下2秒1次中断
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
@@ -264,76 +265,43 @@ void read_tof_and_convert_to_flow(void)
|
|
|
if (tof_state & (TOF_ST_METER | TOF_ST_CALIB))
|
|
|
{
|
|
|
DiffToFAvg += (DiffToF - DiffToFAvg) * (1.0f / 20);
|
|
|
- DiffToFAvg2 += (DiffToF - DiffToFAvg2) * (1.0f / 2);
|
|
|
- DiffToFAvg128 += (DiffToF - DiffToFAvg128) * (1.0f / 128);
|
|
|
-
|
|
|
- if (tof_flag & TOF_FLAG_VALID_FLOW)
|
|
|
+
|
|
|
+ if (fabsf(DiffToFAvg) > 0.45f)
|
|
|
{
|
|
|
- if (fabsf(DiffToFAvg) < 0.35f)
|
|
|
+ tof_flag |= TOF_FLAG_VALID_FLOW;
|
|
|
+ if(GetCheckState() == CHECKING)
|
|
|
{
|
|
|
- tof_flag &= ~TOF_FLAG_VALID_FLOW;
|
|
|
- if (tof_state & TOF_ST_CALIB && CalibTime > CALIB_TIME_LTH)
|
|
|
- {
|
|
|
- tof_flag |= TOF_FLAG_CALIB_DONE;
|
|
|
- }
|
|
|
+ TDC_SAMPLE_TIMES_PER_RTC_INT = 20;//add by yuewei 261023,有水检定模式->流采集频次0.5秒20次
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ TDC_SAMPLE_TIMES_PER_RTC_INT = 3;//add by yuewei 261015,有水大于始动流量->流采集频次0.5秒3次
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- // modified by yuewei 20260519,加入n值,始动流量
|
|
|
- // if (fabsf(DiffToFAvg) > 0.45f || fabsf(DiffToFAvg2) > 1.0f)
|
|
|
- if (fabsf(DiffToFAvg * 100.00f) > Paramx.n || fabsf(DiffToFAvg2) > 1.0f)
|
|
|
+ tof_flag &= ~TOF_FLAG_VALID_FLOW;
|
|
|
+ if(GetCheckState() == CHECKING)
|
|
|
{
|
|
|
- tof_flag |= TOF_FLAG_VALID_FLOW;
|
|
|
- TDC_SAMPLE_TIMES_PER_SECOND = 6;//add by yuewei 261015,有水大于始动流量->流采集频次1秒6次
|
|
|
+ TDC_SAMPLE_TIMES_PER_RTC_INT = 20;//add by yuewei 261023,有水检定模式->流采集频次0.5秒20次
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- tof_flag &= ~TOF_FLAG_VALID_FLOW;
|
|
|
- TDC_SAMPLE_TIMES_PER_SECOND = 2;//add by yuewei 261015,有水小于始动流量->流采集频次1秒2次
|
|
|
+ TDC_SAMPLE_TIMES_PER_RTC_INT = 1;//add by yuewei 261015,有水小于始动流量->流采集频次0.5秒1次
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 是有效的流量
|
|
|
if (tof_flag & TOF_FLAG_VALID_FLOW)
|
|
|
{
|
|
|
- TmpFloat = DiffToF * UsonicSpd * UsonicSpd * 0.00001f;
|
|
|
|
|
|
- // 一次校准模式
|
|
|
- if (tof_state & TOF_ST_CALIB)
|
|
|
+ // 正常计量模式
|
|
|
+ //DiffToF2Flow(DiffToF);
|
|
|
+ //add by yuewei 261015,当采集次数大于等于TDC_SAMPLE_TIMES_PER_RTC_INT时,才进行流量计算(节约功耗)
|
|
|
+ if(TDC_SAMPLE_CNT >= TDC_SAMPLE_TIMES_PER_RTC_INT)
|
|
|
{
|
|
|
- CumFlow += TmpFloat * pTdcItf->pipe_coe;
|
|
|
- pTdcItf->check_flow(CumFlow, TmpFloat, WaterTemp);
|
|
|
- if (tof_flag & TOF_FLAG_CALIB_FLOW)
|
|
|
- {
|
|
|
- if (DiffToFAvg2 > 0.5f)
|
|
|
- {
|
|
|
- CalibSpdLvl += TmpFloat;
|
|
|
- CalibTemp += WaterTemp;
|
|
|
- CalibTime++;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- tof_flag &= ~TOF_FLAG_CALIB_FLOW;
|
|
|
- if (CalibTime > CALIB_TIME_LTH)
|
|
|
- {
|
|
|
- CalibSpdLvl /= CalibTime;
|
|
|
- CalibTemp /= CalibTime;
|
|
|
- tof_flag |= TOF_FLAG_CALIB_FALL;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- // 正常计量模式
|
|
|
- //DiffToF2Flow(DiffToF);
|
|
|
- //add by yuewei 261015,当采集次数大于等于TDC_SAMPLE_TIMES_PER_SECOND时,才进行流量计算(节约功耗)
|
|
|
- if(TDC_SAMPLE_CNT >= TDC_SAMPLE_TIMES_PER_SECOND)
|
|
|
- {
|
|
|
- DiffToF2Flow(DiffToFAvg);
|
|
|
- }
|
|
|
- }
|
|
|
+ DiffToF2Flow(DiffToFAvg);
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
@@ -372,7 +340,7 @@ void tof_isr_convert_tof_to_flow(void)
|
|
|
TDC_SAMPLE_CNT++;
|
|
|
tdc_read_tof(TDC_CFG_DO_CKENA | TDC_CFG_DO_CKDIS);
|
|
|
read_tof_and_convert_to_flow();
|
|
|
- if(TDC_SAMPLE_CNT >= TDC_SAMPLE_TIMES_PER_SECOND)
|
|
|
+ if(TDC_SAMPLE_CNT >= TDC_SAMPLE_TIMES_PER_RTC_INT)
|
|
|
{
|
|
|
TdcIntStep = 0xFFu;
|
|
|
TDC_SAMPLE_CNT = 0;
|