Compare commits
4 Commits
bcd0c963d7
...
d49f35ffeb
Author | SHA1 | Date |
---|---|---|
|
d49f35ffeb | |
|
980d3a2429 | |
|
117777c092 | |
|
955999ece9 |
|
@ -23,22 +23,23 @@ typedef enum
|
|||
typedef enum
|
||||
{
|
||||
FRT_REGISTER_MIN_WIND_DIRECTION = 0, /* 最小风向 */
|
||||
FRT_REGISTER_THROUGH_WIND_DIRECTION = 1, /* 极小风向 */
|
||||
FRT_REGISTER_AVERAGE_WIND_DIRECTION = 2, /* 平均风向 */
|
||||
FRT_REGISTER_INSTANTANEOUS_WIND_DIRECTION = 3, /* 瞬时风向 */
|
||||
FRT_REGISTER_PEAK_WIND_DIRECTION = 4, /* 极大风向 */
|
||||
FRT_REGISTER_MAX_WIND_DIRECTION = 5, /* 最大风向 */
|
||||
FRT_REGISTER_MIN_WIND_SPEED = 6, /* 最小风速 */
|
||||
FRT_REGISTER_THROUGH_WIND_SPEED = 7, /* 极小风速 */
|
||||
FRT_REGISTER_AVERAGE_WIND_SPEED = 8, /* 平均风速 */
|
||||
FRT_REGISTER_INSTANTANEOUS_WIND_SPEED = 9, /* 瞬时风速 */
|
||||
FRT_REGISTER_PEAK_WIND_SPEED = 10, /* 极大风速 */
|
||||
FRT_REGISTER_MAX_WIND_SPEED = 11, /* 最大风速 */
|
||||
FRT_REGISTER_TEMPERATURE = 12, /* 大气温度 */
|
||||
FRT_REGISTER_HUMIDITY = 13, /* 大气湿度 */
|
||||
FRT_REGISTER_PRESSURE = 14, /* 大气压 */
|
||||
FRT_REGISTER_RAIN = 15, /* 雨量 */
|
||||
FRT_REGISTER_PRECIPITATION_INTENSITY = 16, /* 总辐射 */
|
||||
FRT_REGISTER_AVERAGE_WIND_DIRECTION = 1, /* 平均风向 */
|
||||
FRT_REGISTER_MAX_WIND_DIRECTION = 2, /* 最大风向 */
|
||||
FRT_REGISTER_MIN_WIND_SPEED = 3, /* 最小风速 */
|
||||
FRT_REGISTER_AVERAGE_WIND_SPEED = 4, /* 平均风速 */
|
||||
FRT_REGISTER_MAX_WIND_SPEED = 5, /* 最大风速 */
|
||||
FRT_REGISTER_TEMPERATURE = 6, /* 大气温度 */
|
||||
FRT_REGISTER_HUMIDITY = 7, /* 大气湿度 */
|
||||
FRT_REGISTER_PRESSURE = 8, /* 大气压 */
|
||||
FRT_REGISTER_RAIN = 9, /* 雨量 */
|
||||
FRT_REGISTER_PRECIPITATION_INTENSITY = 10, /* 总辐射 */
|
||||
FRT_REGISTER_UV_INTENSITY = 11, /* 紫外强度 */
|
||||
FRT_REGISTER_THROUGH_WIND_DIRECTION = 12, /* 极小风向 */
|
||||
FRT_REGISTER_INSTANTANEOUS_WIND_DIRECTION = 13, /* 瞬时风向 */
|
||||
FRT_REGISTER_PEAK_WIND_DIRECTION = 14, /* 极大风向 */
|
||||
FRT_REGISTER_THROUGH_WIND_SPEED = 15, /* 极小风速 */
|
||||
FRT_REGISTER_INSTANTANEOUS_WIND_SPEED = 16, /* 瞬时风速 */
|
||||
FRT_REGISTER_PEAK_WIND_SPEED = 17, /* 极大风速 */
|
||||
|
||||
FRT_REGISTER_DEVICE_ADDR = 20, /* 设备地址 */
|
||||
FRT_REGISTER_COMMU_BAUDRATE = 21, /* 波特率 */
|
||||
|
|
|
@ -39,6 +39,8 @@ typedef struct _usr_config_info{
|
|||
u_int16_t temp5; /* 占位留待升级 */
|
||||
u_int16_t temp6; /* 占位留待升级 */
|
||||
u_int16_t temp7; /* 占位留待升级 */
|
||||
u_int16_t temp8; /* 占位留待升级 */
|
||||
u_int16_t temp9; /* 占位留待升级 */
|
||||
u_int8_t flag_end;
|
||||
}usr_config_info;
|
||||
|
||||
|
|
|
@ -460,6 +460,7 @@ char str[100];
|
|||
//}
|
||||
|
||||
|
||||
SlidingWindow_10min win_10min = {0};
|
||||
void wind_task(void const * argument)
|
||||
{
|
||||
//软件加密校验
|
||||
|
@ -527,7 +528,6 @@ void wind_task(void const * argument)
|
|||
// 接受信号很小
|
||||
if(tofx<0||tofy<0)
|
||||
{
|
||||
tof_error_log_NS ++;
|
||||
// 放弃本次采样,可以有效筛选雨滴等导致的异常大的风速数据
|
||||
// 但是持续的遮挡会导致风速数据保持不变。
|
||||
// 连续10次采样有问题判定为有遮挡,置错误标志位,将声速与风速分量置0
|
||||
|
@ -540,6 +540,7 @@ void wind_task(void const * argument)
|
|||
}
|
||||
else
|
||||
{
|
||||
tof_error_log_NS ++;
|
||||
continue;
|
||||
}
|
||||
// 手动设置渡越时间差为0,会在探头受遮挡的时候输出0,持续遮挡的时候也输出0,但是计算出声速将变得很大
|
||||
|
@ -594,7 +595,6 @@ void wind_task(void const * argument)
|
|||
// 如果测量的信号幅值过小。
|
||||
if(tofx<0||tofy<0)
|
||||
{
|
||||
tof_error_log_WE ++;
|
||||
// 放弃本次采样,可以有效筛选雨滴等导致的异常大的风速数据
|
||||
// 但是持续的遮挡会导致风速数据保持不变。
|
||||
// 连续10次采样有问题判定为有遮挡,置错误标志位,将声速与风速分量置0
|
||||
|
@ -607,6 +607,7 @@ void wind_task(void const * argument)
|
|||
}
|
||||
else
|
||||
{
|
||||
tof_error_log_WE ++;
|
||||
continue;
|
||||
}
|
||||
// 手动设置渡越时间差为0,会在探头受遮挡的时候输出0,持续遮挡的时候也输出0,但是计算出声速将变得很大
|
||||
|
@ -663,6 +664,9 @@ void wind_task(void const * argument)
|
|||
{
|
||||
av_speed = 0;
|
||||
av_angle = 0;
|
||||
//滑动平均值索引归零
|
||||
win_10min.count = 0;
|
||||
win_10min.index = 0;
|
||||
}
|
||||
// 360一圈
|
||||
if(av_speedy<0)
|
||||
|
@ -844,7 +848,6 @@ void update_mcs_param(float new_wind_speed, float new_wind_dirction)
|
|||
}
|
||||
}
|
||||
|
||||
SlidingWindow_10min win_10min = {0};
|
||||
SlidingWindow_3s win_3s = {0};
|
||||
//求和函数
|
||||
float sum(float arr[], int n)
|
||||
|
@ -1066,7 +1069,6 @@ void tem_hum_update_task(void const * argument)
|
|||
uint8_t tem_hun_check_flag = JudgeEncrypt();
|
||||
|
||||
uint16_t time_s_temp_humi = 0;//1秒计时,温湿度更新
|
||||
uint32_t time_s_1Day = 0;//1天的秒数
|
||||
|
||||
float backupTemperature;
|
||||
uint8_t hp203_ret;
|
||||
|
@ -1097,7 +1099,6 @@ void tem_hum_update_task(void const * argument)
|
|||
osDelay(1000);
|
||||
if(!tem_hun_check_flag)continue;
|
||||
time_s_temp_humi ++;
|
||||
time_s_1Day ++;
|
||||
// 温湿度大气压更新
|
||||
if (time_s_temp_humi >= g_usrConfigInfo.temp_hum_update_time)
|
||||
{
|
||||
|
@ -1129,12 +1130,6 @@ void tem_hum_update_task(void const * argument)
|
|||
// 计时重置
|
||||
time_s_temp_humi = 0;
|
||||
}
|
||||
// 一天重启
|
||||
if (time_s_1Day >= 86400)
|
||||
{
|
||||
__iar_builtin_set_FAULTMASK(1);
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
// 风速风向更新
|
||||
my_update_mcs_param(weather_info.instantaneous_wind_speed, weather_info.instantaneous_wind_direction);
|
||||
}
|
||||
|
|
|
@ -1298,9 +1298,10 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg)
|
|||
u_int16_t reg_num= (data[4] << 8)| data[5];
|
||||
if ( \
|
||||
start_reg_addr < 0x00 ||\
|
||||
(start_reg_addr > FRT_REGISTER_PRESSURE && start_reg_addr < FRT_REGISTER_DEVICE_ADDR) ||\
|
||||
(start_reg_addr > FRT_REGISTER_PRESSURE && start_reg_addr < FRT_REGISTER_THROUGH_WIND_DIRECTION) ||\
|
||||
(start_reg_addr > FRT_REGISTER_PEAK_WIND_SPEED && start_reg_addr < FRT_REGISTER_DEVICE_ADDR) ||\
|
||||
(start_reg_addr > FRT_REGISTER_TEMPHUM_UPDATE_TIME && start_reg_addr < FRT_REGISTER_TRANSDUCER_CFG_1R5) ||\
|
||||
start_reg_addr > FRT_REGISTER_ID_4 \
|
||||
start_reg_addr > FRT_REGISTER_ID_4 \
|
||||
)
|
||||
|
||||
{
|
||||
|
@ -1310,9 +1311,10 @@ void FRT_MsgProc_ReadRegister(device_handle device, void *pMsg)
|
|||
|
||||
if ( \
|
||||
reg_num < 0x01 ||\
|
||||
(((reg_num + start_reg_addr - 1) > FRT_REGISTER_PRESSURE) && ((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR)) ||\
|
||||
(((reg_num + start_reg_addr - 1) > FRT_REGISTER_PRESSURE) && ((reg_num + start_reg_addr - 1) < FRT_REGISTER_THROUGH_WIND_DIRECTION)) ||\
|
||||
(((reg_num + start_reg_addr - 1) > FRT_REGISTER_PEAK_WIND_SPEED) && ((reg_num + start_reg_addr - 1) < FRT_REGISTER_DEVICE_ADDR)) ||\
|
||||
(((reg_num + start_reg_addr -1) > FRT_REGISTER_TEMPHUM_UPDATE_TIME) && ((reg_num + start_reg_addr -1) < FRT_REGISTER_TRANSDUCER_CFG_1R5)) ||\
|
||||
((reg_num + start_reg_addr -1) > FRT_REGISTER_ID_4) \
|
||||
((reg_num + start_reg_addr -1) > FRT_REGISTER_ID_4) \
|
||||
)
|
||||
|
||||
{
|
||||
|
|
|
@ -188,6 +188,8 @@ void SensorTask(void const * argument)
|
|||
}
|
||||
/* USER CODE END Application */
|
||||
|
||||
uint16_t time_s_1Hour = 0;//1小时的秒数
|
||||
uint8_t time_h_1Day = 0;//1天的小时
|
||||
void LEDTask(void const * argument)
|
||||
{
|
||||
/* USER CODE BEGIN StartDefaultTask */
|
||||
|
@ -196,9 +198,22 @@ void LEDTask(void const * argument)
|
|||
for(;;)
|
||||
{
|
||||
osDelay(1000);
|
||||
time_s_1Hour ++;
|
||||
if(LED_Check_flag)
|
||||
{
|
||||
HAL_GPIO_TogglePin(GPIOC,GPIO_LED_CTRL_Pin);
|
||||
// 一天重启
|
||||
if (time_s_1Hour >= 3600)
|
||||
{
|
||||
time_s_1Hour = 0;
|
||||
time_h_1Day++;
|
||||
}
|
||||
if (time_h_1Day >= 24)
|
||||
{
|
||||
time_h_1Day = 0;
|
||||
__iar_builtin_set_FAULTMASK(1);
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
}
|
||||
}
|
||||
/* USER CODE END StartDefaultTask */
|
||||
|
|
|
@ -10,14 +10,44 @@ void initLowPassFilter(SL_LowPassFilter* filter, float alpha)
|
|||
filter->alpha = alpha;
|
||||
// 初始化上一次的输出值为0
|
||||
filter->previous = 0.0f;
|
||||
|
||||
filter->x = 0;
|
||||
filter->times = 0;
|
||||
}
|
||||
|
||||
// 更新滤波器输出值
|
||||
float updateFilter(SL_LowPassFilter* filter, float new_input)
|
||||
{
|
||||
// 更新滤波后的值
|
||||
float output = (1.0f - filter->alpha) * filter->previous + filter->alpha * new_input;
|
||||
// 滤波新值
|
||||
float filtedData = (1.0f - filter->alpha) * filter->previous + filter->alpha * new_input;
|
||||
|
||||
//差值大于一定值认为有问题,暂定4
|
||||
if((filter->x) - filtedData > 4 || (filtedData) - filter->x > 4 )
|
||||
{
|
||||
// 将有问题的值存起来
|
||||
(filter->x) = filtedData;
|
||||
// 使用上一次的正确值当结果
|
||||
filtedData = filter->previous;
|
||||
// 清空计数
|
||||
filter->times = 0;
|
||||
}else
|
||||
{
|
||||
// 差值在允许范围内
|
||||
// 差值合理一定时间后认为数据没问题
|
||||
if(filter->times < 3)
|
||||
{
|
||||
filter->times++;
|
||||
// 没满足次数,使用旧值
|
||||
filtedData = filter->previous;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 将值存起来,直接使用滤波后的值
|
||||
(filter->x) = filtedData;
|
||||
}
|
||||
}
|
||||
|
||||
// 更新上一次的输出值
|
||||
filter->previous = output;
|
||||
return output;
|
||||
filter->previous = filtedData;
|
||||
return filtedData;
|
||||
}
|
|
@ -9,6 +9,8 @@
|
|||
typedef struct {
|
||||
float alpha; // 滤波器系数
|
||||
float previous; // 上一次的输出值
|
||||
float x; // 上一次的输入值
|
||||
uint8_t times; // 次数
|
||||
} SL_LowPassFilter;
|
||||
|
||||
extern SL_LowPassFilter low_pass_filter_x;
|
||||
|
|
Loading…
Reference in New Issue