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