Initial commit: my SECS2 project
This commit is contained in:
131
usr/app/laser.c
Normal file
131
usr/app/laser.c
Normal 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++;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user