Initial commit: my SECS2 project

This commit is contained in:
2026-06-12 14:19:01 +08:00
commit 2c3e2c4dc2
1138 changed files with 603966 additions and 0 deletions

96
usr/app/GasData.c Normal file
View File

@@ -0,0 +1,96 @@
#include "GasData.h"
#include "stdio.h"
#include "bsp_Print.h"
#include "dsp_Demod.h"
#include "bsp_TEC.h"
#include "bsp_ADC.h"
#include "laser.h"
#include "algo_Laser.h"
#include "bsp_Uart.h"
#include "algo_Calib.h"
#include "GasData.h"
#include "algo_Filter.h"
#include "dsp_Demod.h"
#include "app.h"
#include "bsp_Flash.h"
#include "bsp_print.h"
static void GasData_Task(void);
static char *GasData_GetName(u8 GasType);
static char *GasData_GetUnit(u8 Unit);
GasData_t GasData=
{
.Task = GasData_Task,
.GetName = GasData_GetName,
.GetUnit = GasData_GetUnit,
};
GasData_t *pGasData = &GasData;
static void GasData_Task(void)
{
// if(BSP_PRINT_CURDATA == bsp_Print_DataTyppe)
// {
// printf("R_AD,%u,Cal_AD,%u,M_AD,%u,C_AD,%u,C_Val,%d,Val,%d\n",
// pGasData->Gas_1.R_AD,pGasData->Gas_1.R_AD_Cal,pGasData->Gas_1.Measur_AD,pGasData->Gas_1.Cali_AD,pGasData->Gas_1.Fac_Value,pGasData->Gas_1.Usr_Value);
// }
pGasData->Gas_1.Left = LaserSensor.SHG.Pix_Light_Max;
pGasData->Gas_1.Mid = LaserSensor.SHG.Pix_Light_Min;
pGasData->Gas_1.Light_AD = LaserSensor.ORI.Light_AD;
pGasData->Gas_1.TempAD = ADC.AD[ADC_BOARD];
pGasData->Gas_1.Temp = ADC.Value[ADC_BOARD] * 100;
pGasData->Gas_1.TECAD = ADC.AD[ADC_TEC];
pGasData->Gas_1.TECTemp = ADC.Value[ADC_TEC] * 100;
pGasData->Gas_1.Slope = FilterMeasur.Slope;
pGasData->Gas_1.FastFlag = FilterMeasur.FastFlag;
if(BSP_PRINT_CURDATA == bsp_Print_DataTyppe)
{
printf("f2pp=%u,caliAD=%u,RRtestAD=%u,cr=%d,con=%d,Cz=%d,left=%u,mid=%u,light_AD=%u,T=%d,TAD=%u,TECTemp=%d,TECAD=%u,Slope=%f,Fast=%d\n",
pGasData->Gas_1.Measur_AD, pGasData->Gas_1.Cali_AD, pGasData->Gas_1.R_AD_Cal,
pGasData->Gas_1.R_Value, pGasData->Gas_1.Fac_Value, pGasData->Gas_1.Usr_Value,
pGasData->Gas_1.Left, pGasData->Gas_1.Mid, pGasData->Gas_1.Light_AD,
pGasData->Gas_1.Temp, pGasData->Gas_1.TempAD, pGasData->Gas_1.TECTemp, pGasData->Gas_1.TECAD,
pGasData->Gas_1.Slope, pGasData->Gas_1.FastFlag
);
}
}
static char *GasData_GetName(u8 GasType)
{
switch(GasType)
{
case GASDATA_TYPE_CH4 : return "CH4 ";
case GASDATA_TYPE_CO2 : return "CO2 ";
case GASDATA_TYPE_CO : return "CO2 ";
case GASDATA_TYPE_CnHm: return "CnHm";
case GASDATA_TYPE_SO2 : return "SO2 ";
case GASDATA_TYPE_H2S : return "H2S ";
case GASDATA_TYPE_H2 : return "H2 ";
case GASDATA_TYPE_O2 : return "O2 ";
case GASDATA_TYPE_HF : return "HF ";
case GASDATA_TYPE_NH3 : return "NH3 ";
default : return "unknow";
}
}
static char *GasData_GetUnit(u8 Unit)
{
switch(Unit)
{
case GASDATA_UNIT_PPM : return "ppm ";
case GASDATA_UNIT_MG_M3 : return "mg/m3";
case GASDATA_UNIT_PERCENT : return "% ";
case GASDATA_UNIT_M_S : return "m/s ";
case GASDATA_UNIT_M3_H : return "m3/h ";
default : return "unknow";
}
}

67
usr/app/GasData.h Normal file
View File

@@ -0,0 +1,67 @@
#ifndef _GASDATA_H_
#define _GASDATA_H_
#include "main.h"
#define GASDATA_TYPE_CH4 (0x00)
#define GASDATA_TYPE_CO2 (0x01)
#define GASDATA_TYPE_CO (0x02)
#define GASDATA_TYPE_CnHm (0x03)
#define GASDATA_TYPE_SO2 (0x04)
#define GASDATA_TYPE_H2S (0x05)
#define GASDATA_TYPE_H2 (0x06)
#define GASDATA_TYPE_O2 (0x07)
#define GASDATA_TYPE_HF (0x1C)
#define GASDATA_TYPE_NH3 (0x1D)
#define GASDATA_UNIT_PPM (0)
#define GASDATA_UNIT_MG_M3 (1)
#define GASDATA_UNIT_PERCENT (2)
#define GASDATA_UNIT_M_S (3)
#define GASDATA_UNIT_M3_H (4)
typedef struct
{
u8 GasType;
u8 Uint;
u8 Point;
u16 Range;
}GasData_Flash_t;
typedef struct
{
GasData_Flash_t FlashData; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ*/
float Slope; /*б<><D0B1>*/
u8 FastFlag; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>־λ*/
u16 Left,Mid; /*<2A>ҷ<EFBFBD>*/
u16 Light_AD; /*<2A><EFBFBD><E2B9A6>*/
u16 TempAD; /*<2A><EFBFBD>AD*/
s16 Temp; /*<2A><EFBFBD>*/
u16 TECAD; /*TEC AD*/
s16 TECTemp; /*TEC <20><EFBFBD>*/
u16 R_AD; /*ԭʼADֵ*/
u16 R_AD_Cal; /*ԭʼADֵ*/
u16 Cali_AD; /*У׼ʱ<D7BC><CAB1><EFBFBD>˲<EFBFBD>ADֵ*/
u16 Measur_AD; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>˲<EFBFBD>ADֵ*/
s16 R_Value; /*<2A>˲<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>Ũ<EFBFBD><C5A8>*/
s16 Fac_Value; /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>Ũ<EFBFBD><C5A8>*/
s16 Usr_Value; /*<2A>û<EFBFBD>У׼<D0A3><D7BC><EFBFBD><EFBFBD>Ũ<EFBFBD><C5A8>*/
}GasDataClass_t;
typedef struct
{
GasDataClass_t Gas_1,Gas_2;
void (*Task)(void);
char *(*GetName)(u8);
char *(*GetUnit)(u8);
}GasData_t;
extern GasData_t GasData;
#endif

62
usr/app/app.c Normal file
View File

@@ -0,0 +1,62 @@
#include "app.h"
#include "os_timer.h"
#include "stdio.h"
#include "bsp_Uart.h"
#include "bsp_iap.h"
/*Э<><D0AD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
const char SwVersion[20] = "V0.001.0";
void TASK_Idle(void);
void Task_10ms(void);
void Task_50ms(void);
void Task_100ms(void);
void Task_200ms(void);
void Task_500ms(void);
void Task_1s(void);
void Task_2s(void);
/******************************************
* <20><><EFBFBD><EFBFBD>: AppInit
* <20><><EFBFBD><EFBFBD>: <20><>ʼ<EFBFBD><CABC>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>
******************************************/
void App_Init(void)
{
OsTimer_Init(); /*<2A><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>*/
// COM_Uart1.Init(&COM_Uart1);
COM_Uart2.Init(&COM_Uart2);
iap.init();
}
/******************************************
* <20><><EFBFBD><EFBFBD>: App_Task
* <20><><EFBFBD><EFBFBD>: <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>
* <20><><EFBFBD><EFBFBD>: <20><>ѭ<EFBFBD><D1AD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
******************************************/
void App_Task(void)
{
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_10ms, osTime_MSecTick, 10))
{
OsTimeTick_10ms = osTime_MSecTick;
Task_10ms();
}
TASK_Idle();
}
/*<2A><><EFBFBD><EFBFBD>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD>*/
void TASK_Idle(void)
{
COM_Uart1.Rx_Task(&COM_Uart1);
COM_Uart2.Rx_Task(&COM_Uart2);
iap.task();
}
void Task_10ms(void)
{
}

9
usr/app/app.h Normal file
View File

@@ -0,0 +1,9 @@
#ifndef _APP_H_
#define _APP_H_
extern const char SwVersion[20];
void App_Init(void);
void App_Task(void);
#endif

131
usr/app/laser.c Normal file
View File

@@ -0,0 +1,131 @@
#include "laser.h"
#include "algo_Laser.h"
#include "stdio.h"
#include "string.h"
#include "bsp_DriveWave.h"
#include "bsp_ADS8864.h"
#include "dsp_Demod.h"
#include "wk_usart.h"
#include "algo_Calib.h"
#include "algo_Filter.h"
#include "GasData.h"
#include "proto_Transform.h"
/*<2A>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD> Ϊ2<CEAA><32>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>*/
#define LASER_SAMPLE_LSH (3U)
#define LASER_SAMPLE_NUM (8)
/*<2A>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>*/
static u32 Laser_WaveSample[DRIVEWAVE_VALID_NUM];
static void Laser_Task(void);
static void Laser_WaveIO_Int(void);
static void Laser_Init(void);
Laser_t Laser =
{
.pWaveSample = Laser_WaveSample,
.Init = Laser_Init,
.WaveIO_Int = Laser_WaveIO_Int,
.Task = Laser_Task,
};
/*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
void Laser_Sample_Start(void)
{
tmr_counter_value_set(TMR1,0);
tmr_interrupt_enable(TMR1,TMR_OVF_INT,TRUE);
tmr_counter_enable(TMR1,TRUE);
}
static void Laser_Init(void)
{
Laser_Sample_Start();
}
/*ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>*/
void Laser_Sample_Stop(void)
{
tmr_counter_enable(TMR1,FALSE);
tmr_interrupt_enable(TMR1,TMR_OVF_INT,FALSE);
}
static void Laser_Task(void)
{
/*<2A>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>*/
if(DriveWave.DriveCount >= LASER_SAMPLE_NUM)
{
u16 i;
float x;
/*<2A><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>*/
for(i=0;i<DRIVEWAVE_VALID_NUM;i++)
{
Laser_WaveSample[i] >>= LASER_SAMPLE_LSH;
Demod.inWave[i] = Laser_WaveSample[i];
}
/*<2A>źŽ<C5BA><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
Demod.Task();
/*<2A><><EFBFBD><EFBFBD>г<EFBFBD><D0B3><EFBFBD><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
LaserSensor.Calculate();
/*<2A><><EFBFBD><EFBFBD><EFBFBD>˲<EFBFBD>*/
GasData.Gas_1.R_AD = LaserSensor.SHG.PP_Ori;
GasData.Gas_1.R_AD_Cal = LaserSensor.SHG.PP_CalLight;
LaserSensor.SHG.PP_MeasurAvg = FilterMeasur.FastFilter(&FilterMeasur,LaserSensor.SHG.PP_CalLight);
GasData.Gas_1.Measur_AD = LaserSensor.SHG.PP_MeasurAvg;
LaserSensor.SHG.PP_CalibAvg = FilterCalib.FastFilter(&FilterCalib,LaserSensor.SHG.PP_CalLight);
GasData.Gas_1.Cali_AD = LaserSensor.SHG.PP_CalibAvg;
/*Ũ<>ȼ<EFBFBD><C8BC><EFBFBD>*/
x = LaserSensor.SHG.PP_CalLight;
GasData.Gas_1.R_Value = Calib.FacCalibCoeff[3] * x * x * x + Calib.FacCalibCoeff[2] * x * x + Calib.FacCalibCoeff[1] * x + Calib.FacCalibCoeff[0];
x = LaserSensor.SHG.PP_MeasurAvg;
GasData.Gas_1.Fac_Value = Calib.FacCalibCoeff[3] * x * x * x + Calib.FacCalibCoeff[2] * x * x + Calib.FacCalibCoeff[1] * x + Calib.FacCalibCoeff[0];
x = GasData.Gas_1.Fac_Value;
GasData.Gas_1.Usr_Value = Calib.UsrCalibCoeff[0] * (x + Calib.UsrCalibCoeff[1]);
GasData.Task();
proto_Transform_Task();
memset(Laser_WaveSample,0,sizeof(Laser_WaveSample));
/*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɣ<EFBFBD><C9A3><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>*/
DriveWave.DriveCount = 0;
Laser_Sample_Start();
}
}
/*̽<><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>80k<30>ж<EFBFBD>*/
static void Laser_WaveIO_Int(void)
{
static u16 AD_index;
u16 AD;
DriveWave.DacOut(AD_index);
if(AD_index < DRIVEWAVE_VALID_NUM)
{
AD = ADS8864.ADRead();
Laser_WaveSample[AD_index] += AD;
}
if(DRIVEWAVE_NUM - 1 == AD_index)
{
AD_index = 0;
DriveWave.DriveCount++;
if(DriveWave.DriveCount >= LASER_SAMPLE_NUM)
{
/*ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD>*/
Laser_Sample_Stop();
}
}
else
{
AD_index++;
}
}

18
usr/app/laser.h Normal file
View File

@@ -0,0 +1,18 @@
#ifndef _LASER_H_
#define _LASER_H_
#include "main.h"
typedef struct
{
u8 SampleCompleteFlag;
u32 *pWaveSample;
void (*Init)(void);
void (*WaveIO_Int)(void);
void (*Task)(void);
}Laser_t;
extern Laser_t Laser;
#endif

121
usr/app/os_timer.c Normal file
View File

@@ -0,0 +1,121 @@
#include "os_timer.h"
unsigned short osTime_MSecTick = 0; /*<2A>δ<EFBFBD>ʱ<EFBFBD><CAB1>*/
unsigned short osTime_SecTick = 0;
unsigned short osTime_10SecTick = 0; /*10s<30><73>һ<EFBFBD><D2BB> <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>¼*/
static unsigned short osTimer_MSec1 = 0;
static unsigned short osTimer_MSec2 = 0;
unsigned short OsTimeTick_10ms;
unsigned short OsTimeTick_50ms;
unsigned short OsTimeTick_100ms;
unsigned short OsTimeTick_200ms;
unsigned short OsTimeTick_500ms;
unsigned short OsTimeTick_1s;
unsigned short OsTimeTick_2s;
/****************************************************************************
* NAME: OsTimer_Init
* CALLED BY: Application
* PRECONDITIONS:
* INPUT PARAMETERS: None
* RETURN VALUES: None
* DESCRIPTION: OsTimer initialization
*
****************************************************************************/
void OsTimer_Init(void)
{
osTimer_MSec1 = 0;
osTimer_MSec2 = 0;
osTime_SecTick = 0;
osTime_MSecTick = 0;
OsTimeTick_10ms = osTime_MSecTick;
OsTimeTick_50ms = osTime_MSecTick;
OsTimeTick_100ms = osTime_MSecTick;
OsTimeTick_200ms = osTime_MSecTick;
OsTimeTick_500ms = osTime_MSecTick;
OsTimeTick_1s = osTime_MSecTick;
}
/****************************************************************************
* NAME: OsTimer_Increment
* CALLED BY: ISR
* PRECONDITIONS:
* INPUT PARAMETERS: msec - millisecond to increase
* RETURN VALUES: None
* DESCRIPTION: Increase the Timer
*
****************************************************************************/
void OsTimer_Increment(unsigned short msec)
{
osTime_MSecTick += msec;
osTimer_MSec1 += msec;
osTimer_MSec2 += msec;
if (osTimer_MSec1 >= 1000U) /*1s*/
{
osTimer_MSec1 = 0U;
osTime_SecTick++;
}
if (osTimer_MSec2 >= 10000U) /*10s*/
{
osTimer_MSec2 = 0U;
osTime_10SecTick++;
}
}
/****************************************************************************
* NAME: OsTimer_CheckTimeOut
* CALLED BY: Application
* PRECONDITIONS:
* INPUT PARAMETERS: timeStart - start tick
* timeNow - current tick
* timeOut - expired tick
* RETURN VALUES: whether timer is expired
* DESCRIPTION: check if specified time is expired
*
****************************************************************************/
unsigned char OsTimer_CheckTimeOut(unsigned short timeStart, unsigned short timeNow, unsigned short timeOut)
{
unsigned short timerActivateVal;
timerActivateVal = timeOut + timeStart;
if (timerActivateVal > timeStart)
{
if ((timeNow >= timerActivateVal) || (timeNow < timeStart))
{
return TIME_TRUE;
}
}
else if ((timeNow >= timerActivateVal) && (timeNow < timeStart))
{
return TIME_TRUE;
}
return TIME_FALSE;
}
/*
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>OsTimer_CheckTimeOut<75><74><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
*/
unsigned short OsTimer_CheckRunTime(unsigned short timeStart, unsigned short timeNow, unsigned short timeOut)
{
unsigned short timerActivateVal;
timerActivateVal = timeOut + timeStart;
if (timerActivateVal > timeStart)
{
return (timerActivateVal - timeNow);
}
else
{
return (65535U - timeNow + timerActivateVal);
}
}
/*<2A><><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD>ʱ*/
void Delay_ms(unsigned short delay)
{
HAL_Delay(delay);
}

29
usr/app/os_timer.h Normal file
View File

@@ -0,0 +1,29 @@
#ifndef _OSTIMER_H_
#define _OSTIMER_H_
#include "main.h"
#define TIME_TRUE 1U
#define TIME_FALSE 0U
extern unsigned short osTime_MSecTick;
extern unsigned short osTime_SecTick;
extern unsigned short osTime_10SecTick; // 10s<30><73>һ<EFBFBD><D2BB> <20><><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>¼
extern unsigned short OsTimeTick_10ms;
extern unsigned short OsTimeTick_50ms;
extern unsigned short OsTimeTick_100ms;
extern unsigned short OsTimeTick_200ms;
extern unsigned short OsTimeTick_500ms;
extern unsigned short OsTimeTick_1s;
extern unsigned short OsTimeTick_2s;
void OsTimer_Init(void);
void OsTimer_Increment(unsigned short msec);
unsigned char OsTimer_CheckTimeOut(unsigned short timeStart, unsigned short timeNow, unsigned short timeOut);
unsigned short OsTimer_CheckRunTime(unsigned short timeStart, unsigned short timeNow, unsigned short timeOut);
void Delay_ms(unsigned short delay);
#endif

14
usr/app/usr_config.h Normal file
View File

@@ -0,0 +1,14 @@
#ifndef _USR_CONFIG_H_
#define _USR_CONFIG_H_
#define USR_TRUE (1U)
#define USR_FALSE (0U)
#define USR_ENABLE (1U)
#define USR_DISENABLE (0U)
#define U64_MAX (0xffffffffffffffff)
#define U32_MAX (0xffffffff)
#define U16_MAX (0xffff)
#endif