micro_climate/App/Inc/anemometer_dev.h

167 lines
5.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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; /* 接受南北信号tofytofx<0很小 */
uint16_t tof_error_WE:1; /* 接受东西信号tofytofx<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