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
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
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; /*气体组分相关信息*/
float Slope; /*斜率*/
u8 FastFlag; /*快速响应标志位*/
u16 Left,Mid; /*找峰*/
u16 Light_AD; /*光功率*/
u16 TempAD; /*温度AD*/
s16 Temp; /*温度*/
u16 TECAD; /*TEC AD*/
s16 TECTemp; /*TEC 温度*/
u16 R_AD; /*原始AD值*/
u16 R_AD_Cal; /*原始AD值*/
u16 Cali_AD; /*校准时的滤波AD值*/
u16 Measur_AD; /*正常测量时的滤波AD值*/
s16 R_Value; /*滤波前拟合浓度*/
s16 Fac_Value; /*厂家拟合的浓度*/
s16 Usr_Value; /*用户校准后的浓度*/
}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
View File
@@ -0,0 +1,62 @@
#include "app.h"
#include "os_timer.h"
#include "stdio.h"
#include "bsp_Uart.h"
#include "bsp_iap.h"
/*协议转换程序*/
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);
/******************************************
* 函数: AppInit
* 功能: 初始化
* 参数: 无
* 返回: 无
* 描述: 无
******************************************/
void App_Init(void)
{
OsTimer_Init(); /*分时复用*/
// COM_Uart1.Init(&COM_Uart1);
COM_Uart2.Init(&COM_Uart2);
iap.init();
}
/******************************************
* 函数: App_Task
* 功能: 分时复用
* 参数: 无
* 返回: 无
* 描述: 主循环中调用
******************************************/
void App_Task(void)
{
if (TIME_TRUE == OsTimer_CheckTimeOut(OsTimeTick_10ms, osTime_MSecTick, 10))
{
OsTimeTick_10ms = osTime_MSecTick;
Task_10ms();
}
TASK_Idle();
}
/*空闲执行的函数*/
void TASK_Idle(void)
{
COM_Uart1.Rx_Task(&COM_Uart1);
COM_Uart2.Rx_Task(&COM_Uart2);
iap.task();
}
void Task_10ms(void)
{
}
+9
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
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"
/*采集次数 为2的指数倍,方便求平均*/
#define LASER_SAMPLE_LSH (3U)
#define LASER_SAMPLE_NUM (8)
/*采集到的波形*/
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,
};
/*开始采样*/
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();
}
/*停止采样*/
void Laser_Sample_Stop(void)
{
tmr_counter_enable(TMR1,FALSE);
tmr_interrupt_enable(TMR1,TMR_OVF_INT,FALSE);
}
static void Laser_Task(void)
{
/*采集完成*/
if(DriveWave.DriveCount >= LASER_SAMPLE_NUM)
{
u16 i;
float x;
/*数据滤波*/
for(i=0;i<DRIVEWAVE_VALID_NUM;i++)
{
Laser_WaveSample[i] >>= LASER_SAMPLE_LSH;
Demod.inWave[i] = Laser_WaveSample[i];
}
/*信号解调处理*/
Demod.Task();
/*二次谐波相关参数计算*/
LaserSensor.Calculate();
/*数据滤波*/
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;
/*浓度计算*/
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));
/*数据解调完成,开始采样*/
DriveWave.DriveCount = 0;
Laser_Sample_Start();
}
}
/*探测器采样、驱动波形输出、放入80k中断*/
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)
{
/*停止采样*/
Laser_Sample_Stop();
}
}
else
{
AD_index++;
}
}
+18
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
View File
@@ -0,0 +1,121 @@
#include "os_timer.h"
unsigned short osTime_MSecTick = 0; /*滴答时钟*/
unsigned short osTime_SecTick = 0;
unsigned short osTime_10SecTick = 0; /*10s记一次 用于自动调零周期时间记录*/
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;
}
/*
离结束运行还有多少时间 配合OsTimer_CheckTimeOut函数使用
*/
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);
}
}
/*阻塞式延时*/
void Delay_ms(unsigned short delay)
{
HAL_Delay(delay);
}
+29
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记一次 用于自动调零周期时间记录
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
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