You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

215 lines
3.8 KiB

1 year ago
#ifndef APP_TASK_ADC_H
#define APP_TASK_ADC_H
#include "common.h"
#include "../ctask/task.h"
#include "../bsp/bsp_cs1232.h"
#include "../bsp/bsp_config.h"
#define D_ADC_BLUR_MID_MAX 5
enum D_TASK_ADC_CHANNEL
{
TS_ADC_CH_01 = 0x00,
TS_ADC_CH_02 = 0x01,
TS_ADC_CH_03 = 0x02,
TS_ADC_CH_04 = 0x03,
};
//对每一路进行采样
#define D_ADC_CH_SAMPLE_BUF_MAX 50
#define D_ADC_CH_BLUE_POOL_NUM 3
#define MAX_OUT_NUM 10
typedef struct
{
TS_task task;
vU8 pending_ch;
}TS_ADC_CH_SWITCH;
typedef struct
{
TS_task task;
vS32 adcval;
vS32 status;
vS32 pool;
vU8 ch;
vU8 n;
vU32 out[MAX_OUT_NUM];
}TS_ADC_CH_SAMPLE;
//中值滤波
typedef struct ts_adc_ch_mid_blur
{
TS_task task;
vU8 ch;
vU8 max;
vU32 in[MAX_OUT_NUM];
vU32 midval;
vU8 n;
vU32 out[MAX_OUT_NUM];
}TS_ADC_CH_MID_BLUR;
// 均值滤波
typedef struct ts_adc_ch_avg_blur
{
TS_task task;
vU8 ch;
vU8 max;
vU32 in[MAX_OUT_NUM];
vU32 avgval;
vU8 n;
vU32 out[MAX_OUT_NUM];
}TS_ADC_CH_AVG_BLUR;
// 移位滤波
typedef struct ts_adc_ch_shift_blur
{
TS_task task;
vU8 ch;
vU8 h;//均值有数值
vU8 n;//移位有值
vU8 max;
vU32 in;
vU32 sum;
vU32 shiftval;
vU32 out[MAX_OUT_NUM];
}TS_ADC_CH_SHIFT_BLUR;
#if 0
//对每一路进行滤波
typedef struct
{
TS_task task;
vU8 ch;
vU8 ch_n;
//平均滤波
vS32 SA_sum;
vS32 SA_avg;
vS32 SA_n;
//移位滤波
vS32 SHA_sum;
vS32 SHA_avg;
vU8 n;
}TS_ADC_CH_BLUR;
#endif
//和值滤波
typedef struct
{
TS_task task;
vU8 n;
vS32 sum;
vS32 SHA_sum_0;
vS32 SHA_avg_0;
vS32 SHA_pool_0[D_ADC_CH_BLUE_POOL_NUM];
vS32 SHA_sum_1;
vS32 SHA_avg_1;
//vS32 SHA_pool_1[D_ADC_CH_BLUE_POOL_NUM];
}TS_ADC_ALL_BLUR;
//和值阈值判定(滤波方式切换)决定输出
#define D_ADC_ALL_OUT_POOL_NUM 5
typedef struct
{
TS_task task;
vS32 val;
vS32 SHA_pool[D_ADC_CH_BLUE_POOL_NUM];
vU32 SHA_diff[D_ADC_CH_BLUE_POOL_NUM-1];
vU32 SHA_ddiff[D_ADC_CH_BLUE_POOL_NUM-2];
vU8 n;
vS32 sum;
}TS_ADC_ALL_OUT;
typedef struct
{
TS_task task;
vS8 pool_gt;
vS32 pool_val;
vS32 val;
vU16 u16_v;
U32 diff_val;
vU8 times[D_weight_show_limit_num];
U8 stable;
}TS_ADC_SHOW;
typedef struct
{
TS_task task;
U8 cnt1;//不稳定判定次数
U8 cnt2;//稳定判定次数
vS32 r_val;//实际值
vS32 s_val;//显示值
vS32 r_val_pool;//上一个实际值
vU8 n;
}TS_ADC_STABLE;
#if 0
typedef struct _TS_ADC_SampleM_
{
//中值滤波
vS32 mid[D_ADC_BLUR_MID_MAX];
vS32 midv;
//均值滤波
vS32 SA_sum;
vS32 SA_avg;
//移位滤波
vS32 SHA_sum;
vS32 SHA_avg;
}TS_ADC_SampleM;
typedef struct
{
TS_task task;
vU8 error;
vU8 m_n;
vU8 a_n;
vU8 ch;
vU8 ch_n;
vU16 u16_v;
TS_ADC_SampleM ts_sample;
}TS_task_ADC_;
#endif
extern TS_ADC_CH_SWITCH ts_adc_ch_switch;
extern TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num];
extern TS_ADC_CH_MID_BLUR ts_adc_ch_mid_blur[D_ch_max_num];
extern TS_ADC_CH_AVG_BLUR ts_adc_ch_avg_blur[D_ch_max_num];
extern TS_ADC_CH_SHIFT_BLUR ts_adc_ch_shift_blur[D_ch_max_num];
//extern TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num];
extern TS_ADC_ALL_BLUR ts_adc_all_blur;
extern TS_ADC_ALL_OUT ts_adc_all_out;
extern TS_ADC_SHOW ts_adc_show;
extern TS_ADC_STABLE ts_adc_stable;
extern void L3_task_adc_init(U8 ch);
extern void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s);
//extern void L3_task_adc_all_blur(TS_ADC_ALL_BLUR *s);
//extern void L3_task_adc_all_out(TS_ADC_ALL_OUT *s);
extern void L3_task_adc_show(TS_ADC_SHOW *s);
extern void L3_task_show_times_reset();
//extern void L3_task_weight_stable(TS_ADC_STABLE *s);
extern void L3_task_weight_init(void);
//extern void L3_task_adc_ch_mid_blur(TS_ADC_CH_MID_BLUR *s);
//extern void L3_task_adc_ch_avg_blur(TS_ADC_CH_AVG_BLUR *s);
//extern void L3_task_adc_ch_shift_blur(TS_ADC_CH_SHIFT_BLUR *s);
extern void L3_task_adc_handler(u8 ch);
extern void L3_task_all_adc_handler(void);
#endif