167 lines
5.5 KiB
C
167 lines
5.5 KiB
C
#ifndef _ANEMOMETER__H_
|
||
#define _ANEMOMETER__H_
|
||
|
||
#include "adc.h"
|
||
#include "dma.h"
|
||
#include "i2c.h"
|
||
#include "usart.h"
|
||
#include "tim.h"
|
||
#include "gpio.h"
|
||
#include "stdio.h"
|
||
#include "string.h"
|
||
#include "math.h"
|
||
|
||
#include "arr_tool.h"
|
||
|
||
#include "FreeRTOS.h"
|
||
#include "cmsis_os.h"
|
||
|
||
#include "arm_math.h"
|
||
|
||
|
||
|
||
|
||
|
||
// 延时REV_MUTE_DELAY us启动ADC采集数据
|
||
// 最大风速30m/s 2.5M 采样率 延时260uS
|
||
#define REV_MUTE_DELAY_US 260
|
||
// adc 采样率
|
||
// 5 5M
|
||
// 4 4M
|
||
// 3 3M
|
||
#define ADC_SAMP_RATE_MHz ((float32_t)2.5)
|
||
|
||
// 驱动方波频率
|
||
#define DRIVE_FREQ_MHz ((float32_t)0.2)
|
||
|
||
// 驱动方波个数 实际个数 DRIVE_NUM+1
|
||
|
||
#define DRIVE_NUM 2
|
||
|
||
|
||
///已将DISTANCE写入配置文件,在结构体g_stConfigInfo.transducer_distace中
|
||
// 传播距离 风速计算公式中的L参数
|
||
//探头表面距离115.12mm(57.56mm*2),换能器探头到探头表面距离暂定2mm(1mm*2)
|
||
//#define DISTANCE ((float32_t)115120.0 + (float32_t)2000.0)
|
||
//探头表面距离115.12mm(57.56mm*2),换能器内部2mm速度2000,时间算2us减在tof上
|
||
//#define DISTANCE ((float32_t)115120.0)
|
||
// 传播距离 风速计算公式中的L参数
|
||
//#define DISTANCE ((float32_t)120000.0)
|
||
// 富奥通结构 L = 118946
|
||
// #define DISTANCE 118946
|
||
|
||
// x方向
|
||
#define WIND_DIRECTION_X 0x00
|
||
// y方向
|
||
#define WIND_DIRECTION_Y 0x01
|
||
|
||
// adc 采集buf长度
|
||
#define ADC_VAL_LEN 1024
|
||
|
||
extern int16_t adc_val[ADC_VAL_LEN];
|
||
extern int16_t adc_val1[ADC_VAL_LEN];
|
||
|
||
//滑动平均值结构体
|
||
typedef struct {
|
||
float speed_data[3]; // 存储数据点的数组
|
||
float direction_data[3]; // 存储数据点的数组
|
||
int index; // 指向队列头部的索引(实际上是最近添加的元素)
|
||
int count; // 当前队列中的元素数量
|
||
} SlidingWindow_3s;
|
||
typedef struct {
|
||
float speed_data[60]; // 存储数据点的数组
|
||
float direction_data[60]; // 存储数据点的数组
|
||
int index; // 指向队列头部的索引(实际上是最近添加的元素)
|
||
int count; // 当前队列中的元素数量
|
||
} SlidingWindow_1mim;
|
||
typedef struct {
|
||
float speed_data[600]; // 存储数据点的数组
|
||
float direction_data[600]; // 存储数据点的数组
|
||
float ave_speed_data[600]; // 存储数据点平均值的数组
|
||
float ave_direction_data[600]; // 存储数据点平均值的数组
|
||
int index; // 指向队列头部的索引(实际上是最近添加的元素)
|
||
int count; // 当前队列中的元素数量
|
||
} SlidingWindow_10min;
|
||
|
||
#pragma pack(push,1)
|
||
typedef struct __weather_param
|
||
{
|
||
float32_t wind_velocity_x;
|
||
// 校准dtof 偏差
|
||
//float32_t wind_velocity_x_dtof_offset;
|
||
|
||
float32_t wind_velocity_y;
|
||
//float32_t wind_velocity_y_offset;
|
||
// 风速
|
||
float32_t wind_velocity;
|
||
// 超声波传播速度
|
||
float32_t wind_c;
|
||
// 风向
|
||
float32_t wind_angle;
|
||
// 温度
|
||
float32_t temperature;
|
||
// 湿度
|
||
float32_t humidity;
|
||
// 降雨量
|
||
float32_t precipitation;
|
||
|
||
} Weather_param;
|
||
extern Weather_param weather_info;
|
||
|
||
typedef struct _mcs_para{
|
||
float32_t min_wind_direction; /* 最小风向 */
|
||
float32_t average_wind_direction; /* 平均风向 */
|
||
float32_t instantaneous_wind_direction; /* 瞬时风向 */
|
||
float32_t max_wind_direction; /* 最大风向 */
|
||
float32_t min_wind_speed; /* 最小风速 */
|
||
float32_t trough_wind_speed; /* 极小风速 */
|
||
float32_t average_wind_speed; /* 平均风速 */
|
||
float32_t instantaneous_wind_speed; /* 瞬时风速 */
|
||
float32_t peak_wind_speed; /* 极大风速 */
|
||
float32_t max_wind_speed; /* 最大风速 */
|
||
float32_t temperature; /* 环境温度 */
|
||
float32_t humidity; /* 环境湿度 */
|
||
float32_t pressure; /* 压强 */
|
||
float32_t precipitation; /* 雨量 */
|
||
float32_t precipitation_intensity; /* 光辐射 */
|
||
}mcs_para;
|
||
extern mcs_para g_stMcs_Para;
|
||
|
||
typedef struct _error_log{
|
||
uint16_t tof_error_NS:1; /* 接受南北信号(tofy,tofx<0)很小 */
|
||
uint16_t tof_error_WE:1; /* 接受东西信号(tofy,tofx<0)很小 */
|
||
uint16_t temp_error_SHT30:1; /* SHT30错误日志(温湿度) */
|
||
uint16_t temp_error_HP203B:1; /* HP203B错误日志(大气压) */
|
||
uint16_t error_4:1; /* 保留 */
|
||
uint16_t error_5:1; /* 保留 */
|
||
uint16_t error_6:1; /* 保留 */
|
||
uint16_t error_7:1; /* 保留 */
|
||
uint16_t error_8:1; /* 保留 */
|
||
uint16_t error_9:1; /* 保留 */
|
||
uint16_t error_10:1; /* 保留 */
|
||
uint16_t error_11:1; /* 保留 */
|
||
uint16_t error_12:1; /* 保留 */
|
||
uint16_t error_13:1; /* 保留 */
|
||
uint16_t error_14:1; /* 保留 */
|
||
uint16_t error_15:1; /* 保留 */
|
||
}error_log;
|
||
extern error_log g_error_log;
|
||
#pragma pack(pop)
|
||
|
||
// 切换通道
|
||
void change_channel(uint32_t channel);
|
||
|
||
// 采集一次数据
|
||
void play_one_measure(int16_t* result_data,uint32_t len);
|
||
|
||
// 通过采集的数据计算 风速 风向
|
||
void calculate_param(Weather_param *parm ,uint32_t direction , int16_t *adc_buf1,int16_t *adc_buf2,uint32_t len);
|
||
|
||
|
||
void wind_task(void const * argument);
|
||
void tem_hum_update_task(void const * argument);
|
||
void wind_update_task(void const * argument);
|
||
void my_update_mcs_param(float new_wind_speed, float new_wind_dirction);
|
||
|
||
#endif
|