差异
This commit is contained in:
@@ -1,241 +0,0 @@
|
||||
#ifndef __D9V2FR_DP2006V1000_h__
|
||||
#define __D9V2FR_DP2006V1000_h__
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
#define SamplingTimer pTIM1
|
||||
#define StartSamplingTimerInterval(uploadCounter) StartTimer1_CC1(uploadCounter)
|
||||
#define ResetSamplingTimerInterval(uploadCounter) ResetTimer1_CC1(uploadCounter)
|
||||
#define StopSamplingTimerInterval() StopTimer1()
|
||||
|
||||
//ADCת<43><D7AA><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
#define ConversionTimer pTIM2
|
||||
#define StartConversionTimerInterval(uploadCounter) StartTimer2_UIE(uploadCounter)
|
||||
#define ResetConversionTimerInterval(uploadCounter) ResetTimer2_UIE(uploadCounter)
|
||||
#define StopConversionTimerInterval() StopTimer2()
|
||||
|
||||
// <20>ӱ<EFBFBD><EFBFBD><D7BC>λ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
#define ONE_PA_TO_MBAR 0.01f // 1 Pa = 0.01 mbar
|
||||
#define ONE_PA_TO_TORR (1.0f / 133.322f) // 1 Pa = 1 / 133.322 Torr
|
||||
#define ONE_PA_TO_MICRONS (1000.0f / 133.322f) // 1 Pa = 1000 / 133.322 Microns
|
||||
|
||||
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20><> <20><><EFBFBD><D7BC>λ
|
||||
#define ONE_MBAR_TO_PA 100.0f // 1 mbar = 100 Pa
|
||||
#define ONE_TORR_TO_PA 133.322f // 1 Torr = 133.322 Pa
|
||||
#define ONE_MICRONS_TO_PA (133.322f / 1000.0f) // 1 Microns = 133.322 / 1000 Pa
|
||||
|
||||
// ѹ<><D1B9><EFBFBD><EFBFBD>λö<CEBB><C3B6>
|
||||
typedef enum {
|
||||
PRESSURE_UNIT_PA, // <20><>˹<EFBFBD><CBB9>
|
||||
PRESSURE_UNIT_MICRONS, // <><EFBFBD><D7B9><EFBFBD> (<28><>mHg)
|
||||
PRESSURE_UNIT_TORR, // <20><>
|
||||
PRESSURE_UNIT_MBAR // <20><><EFBFBD><EFBFBD>
|
||||
} PressureUnitType;
|
||||
// ѹ<><D1B9>ֵ<EFBFBD><D6B5> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Pa Ϊ<><CEAA>λ<EFBFBD>洢)
|
||||
|
||||
#if(DP2006V1000)
|
||||
|
||||
//for GPIO START==============================================================================
|
||||
// for soft I2C
|
||||
#define I2C_SDA GPIO_PIN_4
|
||||
#define I2C_SDA_PINPOS GPIO_PinPos_4
|
||||
#define I2C_SDA_GPIO GPIO1
|
||||
#define I2C_SCL GPIO_PIN_0
|
||||
#define I2C_SCL_PINPOS GPIO_PinPos_0
|
||||
#define I2C_SCL_GPIO GPIO2
|
||||
|
||||
//for eeprom
|
||||
#define EEPROM_WP_PIN GPIO_PIN_5
|
||||
#define EEPROM_WP_PINPOS GPIO_PinPos_5
|
||||
#define EEPROM_WP_GPIO GPIO1
|
||||
#define PARA_EEPROM BIT1
|
||||
#define DATA_EEPROM BIT2
|
||||
#define FROCK_EEPROM BIT1+BIT2+BIT3
|
||||
//// for FRAM
|
||||
//#define FRAM_WP_PIN GPIO_PIN_6
|
||||
//#define FRAM_WP_PINPOS GPIO_PinPos_6
|
||||
//#define FRAM_WP_GPIO GPIO2
|
||||
//#define FRAM_CS_PIN GPIO_PIN_5
|
||||
//#define FRAM_CS_PINPOS GPIO_PINPos_5
|
||||
//#define FRAM_CS_GPIO GPIO2
|
||||
//// for SPI
|
||||
//#define SCLK_PIN GPIO_PIN_5
|
||||
//#define SCLK_PINPOS GPIO_PinPos_5
|
||||
//#define SCLK_PIN_SOURCE GPIO_PinSource5
|
||||
//#define SCLK_PIN_CONFIG GPIO1_5_AF_SCLK0
|
||||
//#define SCLK_GPIO GPIO1
|
||||
|
||||
//#define SOMI_PIN GPIO_PIN_4
|
||||
//#define SOMI_PINPOS GPIO_PinPos_4
|
||||
//#define SOMI_PIN_SOURCE GPIO_PinSource4
|
||||
//#define SOMI_PIN_CONFIG GPIO1_4_AF_MISO0
|
||||
//#define SOMI_GPIO GPIO1
|
||||
|
||||
//#define SIMO_PIN GPIO_PIN_6
|
||||
//#define SIMO_PINPOS GPIO_PinPos_6
|
||||
//#define SIMO_PIN_SOURCE GPIO_PinSource6
|
||||
//#define SIMO_PIN_CONFIG GPIO1_6_AF_MOSI0
|
||||
//#define SIMO_GPIO GPIO1
|
||||
|
||||
//// for IO
|
||||
//#define TDU_SET_PIN GPIO_PIN_5
|
||||
//#define TDU_SET_PINPOS GPIO_PinPos_5
|
||||
//#define TDU_SET_GPIO GPIO1
|
||||
//#define TDU_SET_PIN_OUT() EnableOutput(TDU_SET_GPIO, TDU_SET_PINPOS)
|
||||
//#define CLR_TDU_SET_PIN() CLR_PIN(TDU_SET_GPIO,TDU_SET_PIN)
|
||||
//#define SET_TDU_SET_PIN() SET_PIN(TDU_SET_GPIO,TDU_SET_PIN)
|
||||
|
||||
//#define HEATING_PIN GPIO_PIN_6
|
||||
//#define HEATING_PINPOS GPIO_PinPos_6
|
||||
//#define HEATING_GPIO GPIO1
|
||||
//#define HEATING_PIN_OUT() EnableOutput(HEATING_GPIO, HEATING_PINPOS)
|
||||
//#define CLR_HEATING_PIN() CLR_PIN(HEATING_GPIO,HEATING_PIN)
|
||||
//#define SET_HEATING_PIN() SET_PIN(HEATING_GPIO,HEATING_PIN)
|
||||
|
||||
//#define HP_CON_PIN GPIO_PIN_0
|
||||
//#define HP_CON_PINPOS GPIO_PinPos_0
|
||||
//#define HP_CON_GPIO GPIO0
|
||||
//#define HP_CON_PIN_OUT() EnableOutput(HP_CON_GPIO, HP_CON_PINPOS)
|
||||
//#define CLR_HP_CON_PIN() CLR_PIN(HP_CON_GPIO,HP_CON_PIN)
|
||||
//#define SET_HP_CON_PIN() SET_PIN(HP_CON_GPIO,HP_CON_PIN)
|
||||
|
||||
//#define TEST_PIN GPIO_PIN_5
|
||||
//#define TEST_PIN_PINPOS GPIO_PinPos_5
|
||||
//#define TEST_PIN_GPIO GPIO0
|
||||
//#define TEST_PIN_OUT() EnableOutput(TEST_PIN_GPIO, TEST_PIN_PINPOS)
|
||||
|
||||
#define LED_PIN GPIO_PIN_5
|
||||
#define LED_PIN_PINPOS GPIO_PinPos_5
|
||||
#define LED_PIN_GPIO GPIO0
|
||||
#define LED_PIN_OUT() EnableOutput(LED_PIN_GPIO, LED_PIN)
|
||||
#define SET_LED_PIN() SET_PIN(LED_PIN_GPIO,LED_PIN)
|
||||
#define CLR_LED_PIN() CLR_PIN(LED_PIN_GPIO,LED_PIN)
|
||||
//for GPIO END===============================================================================\
|
||||
//=============================================================================================================================================================================================
|
||||
//for ADC START==============================================================================/
|
||||
|
||||
#define SIGNAL0 0x00
|
||||
#define SIGNAL1 0x01
|
||||
#define SIGNAL2 0x02
|
||||
#define SIGNAL3 0x03
|
||||
#define SIGNAL4 0x04
|
||||
#define SIGNAL5 0x05
|
||||
#define SIGNAL6 0x06
|
||||
//......
|
||||
|
||||
typedef struct //__SAMPLE_STATUS_BIT_TypeDef
|
||||
{
|
||||
u16 DisplayZero : 1; // 1
|
||||
u16 Mode: 2; // 3
|
||||
u16 CType: 2; // 5
|
||||
u16 AType: 1; // 7
|
||||
u16 RType: 1; // 7
|
||||
u16 HType: 2; // 9
|
||||
u16 PreSampling: 1; // 10
|
||||
u16 AutoDetectOffset: 1; // 11
|
||||
u16 AutoDetectProcess: 2; // 13
|
||||
u16 EnableRHTest : 1; // 14
|
||||
u16 EnableRoughTest: 1; // 15
|
||||
} __SAMPLE_STATUS_BIT_TypeDef;
|
||||
|
||||
//for ADC END==============================================================================\
|
||||
//======================================================================================================================================================================================
|
||||
//for FLOWMETER START======================================================================/
|
||||
|
||||
// *****************************************************************************
|
||||
#define CURVE_1ST 0
|
||||
#define CURVE_2ND 1
|
||||
#define CURVE_3RD 2
|
||||
#define CTYPE_FR CURVE_1ST
|
||||
#define ATYPE_VH CURVE_2ND
|
||||
#define MICRO_FR CURVE_3RD
|
||||
#define FRIDX CTYPE_FR // 0
|
||||
#define RGIDX ATYPE_VH // 1
|
||||
#define GAINX MICRO_FR // 2
|
||||
|
||||
#define VDUX 3 // *From ADC CTcode
|
||||
#define VDUGX 4 // * CTcode
|
||||
#define RIDX 5 //
|
||||
#define NIDX 6 // NORMAL_VL - LOW_VL (TD INDEX) * VDUX
|
||||
#define TPCB 7 // PCB temperature *From eeprom
|
||||
#define TGAS 8 // GAS temperature *From IIC dev TPCB
|
||||
#define TRH 9 // RH temperature *From eeprom
|
||||
#define BATT 10 // Battery volatge
|
||||
#define IVHDX 11 // IRH CODE test VHH By TD Control *From ADC HTcode
|
||||
#define VRHX 12 // VRH CODE *From ADC ATcode
|
||||
#define IVHUX 13 // IRH CODE test VHH By TU Control
|
||||
#define VRRX 14 // VRR CODE *From ADC RTcode
|
||||
#define RHVOL 15 // RH VOLATAGE * VRHX
|
||||
#define RRVOL 16 // RR VOLATAGE * VRRX
|
||||
#define RHRES 17 // RH resistance * IVHDX
|
||||
#define RRRES 18 // RR resistance * VRRX
|
||||
#define PORH 19 // RH Power * IVHDX
|
||||
#define PDRH 20 // RH current Power
|
||||
#define CVHHX 21 //
|
||||
#define DVHHX 22 //
|
||||
#define VHPA 23 //
|
||||
#define RATO 24 // RR:RH NRH--RRRES--VRRX---ADC RTcode
|
||||
#define SDT 25 // ATYPE OFFSET
|
||||
#define DIVHX 26 // IVHH(TD) - IVHH(TU) *Ŀǰδʹ<CEB4><CAB9>
|
||||
#define TCOE 27 // * TGAS
|
||||
#define TVDUX 28 // * TGAS
|
||||
#define TVDUGX 29 // * TGAS
|
||||
|
||||
#define FR_H 30 //
|
||||
#define FR_L 31 //
|
||||
#define ANX 32 //
|
||||
#define ANX_MASK (ANX-1)
|
||||
|
||||
//*****************************************************************************
|
||||
#define CODE1 FR_H // 8300 FIDX
|
||||
#define CODE2 FR_L // 8301 FIDX
|
||||
#define CODE3 FRIDX // 8302 FIDX
|
||||
|
||||
#define CODE4 NIDX // 8303
|
||||
#define CODE5 VRHX // 8304
|
||||
#define CODE6 IVHDX // 8305
|
||||
#define CODE7 RHVOL // 8306
|
||||
#define CODE8 VDUGX // 8307
|
||||
#define CODE9 TPCB // 8308
|
||||
|
||||
#define CODE10 RHVOL // 8309
|
||||
#define CODE11 VDUX // 830A
|
||||
#define CODE12 VDUGX // 830B
|
||||
#define CODE13 NIDX // 830C
|
||||
#define CODE14 BATT // 830D
|
||||
#define CODE15 IVHDX // 830E
|
||||
#define CODE16 VRHX // 830F
|
||||
|
||||
//for FLOWMETER END==============================================================================\
|
||||
//===============================================================================================================================================================================================
|
||||
//for Device Start===============================================================================/
|
||||
|
||||
extern __SAMPLE_STATUS_BIT_TypeDef sampleState;
|
||||
extern u16 FRType;
|
||||
extern u32 voltageANX;
|
||||
extern u16 voltageDetected[], adcGain;
|
||||
extern u16 processNextTime, processIndex;
|
||||
|
||||
|
||||
//for Device END==============================================================================\
|
||||
//===============================================================================================================================================================================================
|
||||
//for func Start==============================================================================/
|
||||
void FlowRateDealAndOuputSub(void);
|
||||
void ComputeFlowRateIndexAndFlowRate(void);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u16 WordSubFunction(u16 minuend, u16 subtractor);
|
||||
void StartNormolFlowMeasurement(void);//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static void SetSystemForADCSample(u16 SampleSiagnl);//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
static void SetNextProcess(void);//<2F><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FlowProcessManagement(void);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>
|
||||
|
||||
double ConvertPressure(double value, PressureUnitType targetUnit, PressureUnitType originalUnit);
|
||||
void SwitchPressureUnit(void);
|
||||
static u8 GetDigitCount(u32 num);
|
||||
void Update_Pressure_Display(void);
|
||||
|
||||
void My_Timer2_Callback(void);//<2F><><EFBFBD>Կ<EFBFBD><D4BF>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD>輰<EFBFBD><E8BCB0>λ<EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>ɨ<EFBFBD><C9A8>
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -1,16 +1,19 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 低功耗定时器初始化函数
|
||||
* @note 需要定义与硬件相关的函数和IO
|
||||
*/
|
||||
|
||||
#if(DP2006V1000)
|
||||
|
||||
__SAMPLE_STATUS_BIT_TypeDef sampleState;
|
||||
u16 offsetRType, offsetGCFX;
|
||||
|
||||
//##############################################################################
|
||||
#if(DP2006_VM1000)
|
||||
//##############################################################################
|
||||
|
||||
//__SAMPLE_STATUS_BIT_TypeDef sampleState;
|
||||
TypeSample sampleProcess;
|
||||
u16 processNextTime, processIndex;
|
||||
|
||||
u16 voltageDetected[ANX], adcGain;
|
||||
|
||||
// 当前显示单位
|
||||
static PressureUnitType current_unit = PRESSURE_UNIT_PA; // 默认显示Pa
|
||||
float pressure_value;
|
||||
@@ -23,162 +26,258 @@ u8 typecflag=0;
|
||||
extern uint8_t g_auto_shutdown_flag;
|
||||
// 全局变量,用于标记蓝牙是否已经初始化
|
||||
static uint8_t g_ble_init_done = 0;
|
||||
|
||||
/******数据处理部分***************************************************************************************************************************************************************************************************************/
|
||||
static uint32_t led_timer = 0;
|
||||
static uint32_t shutdown_timer = 0;
|
||||
/******采集部分***************************************************************************************************************************************************************************************************************/
|
||||
void FlowRateDealAndOuputSub(void)
|
||||
{
|
||||
ComputeFlowRateIndexAndFlowRate();//计算内码 转换成流量
|
||||
}
|
||||
|
||||
void ComputeFlowRateIndexAndFlowRate(void)
|
||||
{
|
||||
voltageDetected[NIDX ]= (u16)sampleData.TCode[IRHCode]; // 强转,只保留低16位数据//IRH 0X8303
|
||||
voltageDetected[VRHX ]= (u16)sampleData.TCode[IRRCode]; // 强转,只保留低16位数据//IRR 0X8304
|
||||
voltageDetected[IVHDX]= (u16)sampleData.TCode[URUCode]; // 强转,只保留低16位数据//URU 0X8305
|
||||
voltageDetected[RHVOL]= (u16)sampleData.TCode[URHCode]; // 强转,只保留低16位数据//URH 0X8306
|
||||
voltageDetected[VDUGX]= (u16)sampleData.TCode[BASCode]; // 强转,只保留低16位数据//URU 0X8307 ADC基准电压/2
|
||||
voltageDetected[TPCB]= (u16)sampleData.TCode[BATCode]; // 强转,只保留低16位数据//URH 0X8308 电池电压/3
|
||||
voltageDetected[NIDX ]=(u16)sampleProcess.IRHResult; // 强转,只保留低16位数据//IRH 0X8303
|
||||
voltageDetected[VRHX ]= (u16)sampleProcess.RHypeResult; // 强转,只保留低16位数据//IRR 0X8304
|
||||
voltageDetected[IVHDX]=(u16) sampleProcess.RDResult; // 强转,只保留低16位数据//URU 0X8305
|
||||
voltageDetected[RHVOL]= (u16)sampleProcess.BLypeResult; // 强转,只保留低16位数据//URH 0X8306 电池电压/3
|
||||
|
||||
voltageDetected[RHVOL]=voltageDetected[RHVOL]-32768;
|
||||
pressure_value=GetFlowRate(voltageDetected[RHVOL],CURVE_1ST);
|
||||
voltageDetected[VRHX]=voltageDetected[VRHX]-32768;
|
||||
pressure_value=GetFlowRate(voltageDetected[VRHX],CURVE_1ST);
|
||||
display_update_flag = 1;
|
||||
if( voltageDetected[TPCB]>50000)
|
||||
if( voltageDetected[RHVOL]>50000)
|
||||
{
|
||||
typecflag=1;
|
||||
}
|
||||
}
|
||||
u16 WordSubFunction(u16 minuend, u16 subtractor)
|
||||
{
|
||||
u16 subResult;
|
||||
|
||||
subResult = minuend - subtractor;
|
||||
if(minuend >= subtractor)
|
||||
{
|
||||
if(subResult < 32768) subResult += 32768;
|
||||
else subResult = 65535;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(subResult < 32768) subResult = 0;
|
||||
else subResult -= 32768;
|
||||
}
|
||||
|
||||
return subResult;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******采集部分***************************************************************************************************************************************************************************************************************/
|
||||
void SamplingTimer_IRQ_Callback(void)
|
||||
{
|
||||
FlowProcessManagement();
|
||||
}
|
||||
|
||||
|
||||
void StartNormolFlowMeasurement(void)//每125ms调用一次
|
||||
{
|
||||
|
||||
}
|
||||
u16 GetAdcGain(u16 gianX)
|
||||
{
|
||||
switch(gianX)
|
||||
{
|
||||
case 1: return GAIN1;
|
||||
case 2: return GAIN2;
|
||||
case 4: return GAIN4;
|
||||
case 8: return GAIN8;
|
||||
case 16: return GAIN16;
|
||||
case 32: return GAIN32;
|
||||
case 64: return GAIN64;
|
||||
case 128: return GAIN128;
|
||||
default:
|
||||
return GetAdcGain(ADC_GAIN_DEFAULT);
|
||||
}
|
||||
}
|
||||
/******采集部分***************************************************************************************************************************************************************************************************************/
|
||||
void AnalogCircuitInit(void)
|
||||
{
|
||||
sampleProcess.CTypeGain = GetAdcGain(adcGain); //默认采样系数
|
||||
SampingADCInit();
|
||||
DisableSamplingInterrupt();
|
||||
}
|
||||
//void ProcessTimerInterruptCallBack(void)
|
||||
//{
|
||||
// FlowProcessManagement();
|
||||
//
|
||||
//}
|
||||
|
||||
//采样进程中断
|
||||
void ProcessTimerInterruptCallBack(void)
|
||||
{
|
||||
DisableProcessTimerInterrupt();
|
||||
HWState.ProcessTimerOut = 1;
|
||||
}
|
||||
//void StartNormolFlowMeasurement(void)//每125ms调用一次
|
||||
//{
|
||||
// AnalogCircuitInit();//初始化ADC
|
||||
// HWState.SampledOver = 0;//采样结束标志重置
|
||||
// StartProcessTimer(32768); //启动比较定时器,开始从0递增计数
|
||||
// Timer_register_irq_callback(ProcessTimer,ProcessTimerIT, ProcessTimerInterruptCallBack );//注册中断回调函数
|
||||
|
||||
// processIndex = 0; //
|
||||
// processNextTime = 0;
|
||||
// FlowProcessManagement();//每个周期运行,开启采样过程
|
||||
//}
|
||||
void StartNormolFlowMeasurement(void)//开始常规流量测量
|
||||
{
|
||||
AnalogCircuitInit();
|
||||
HWState.SampledOver = 0;//采样结束标志重置
|
||||
StartSamplingTimerInterval(32768); //启动比较定时器,开始从0递增计数
|
||||
Timer_register_irq_callback(SamplingTimer,SamplingTimer_IRQ_Callback );//注册中断回调函数
|
||||
StartProcessTimer(64000); // 启动比较定时器,开始从0递增计数
|
||||
Timer_register_irq_callback(ProcessTimer,ProcessTimerIT, ProcessTimerInterruptCallBack );//注册中断回调函数
|
||||
sampleProcess.NextRun = 0;
|
||||
sampleProcess.NextTime= 0;
|
||||
|
||||
processIndex = 0; //
|
||||
processNextTime = 0;
|
||||
FlowProcessManagement();//每个周期运行,开启采样过程
|
||||
FlowProcessManagement();//每个周期运行,开启采样过程
|
||||
}
|
||||
|
||||
//static void SetNextProcess(void)//设置采样定时器的下一个进程
|
||||
//{
|
||||
// if(processIndex == 0){
|
||||
// StopProcessTimer();//关闭采集时钟
|
||||
// return;
|
||||
// }
|
||||
// u32 currentTAR = pTIM1->CNT;//定时器当前计数值
|
||||
// if(currentTAR > processNextTime) processNextTime = currentTAR + 5;
|
||||
// ResetProcessTimer(processNextTime);
|
||||
//}
|
||||
|
||||
static void SetSystemForADCSample(u16 SampleSiagnl)//设置采样通道与采样次数
|
||||
void SetNextProcess(void)//设置采样定时器的下一个进程
|
||||
{
|
||||
switch(SampleSiagnl)
|
||||
{
|
||||
case SIGNAL0:{
|
||||
sampleData.adcConfig.Gain0 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AINP_AIN0;
|
||||
sampleData.adcConfig.NChan0 = ADC0_AINM_AVSS;//IRH
|
||||
sampleData.adcConfig.Gain1 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AINP_AIN2;
|
||||
sampleData.adcConfig.NChan1 = ADC1_AINM_AVSS;//URU
|
||||
sampleData.adcConfig.SPS=SPS_488;
|
||||
|
||||
}break;
|
||||
case SIGNAL1: {
|
||||
sampleData.adcConfig.Gain0 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AINP_AIN1;
|
||||
sampleData.adcConfig.NChan0 = ADC0_AINM_AVSS;//IRR
|
||||
sampleData.adcConfig.Gain1 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AINP_AIN3;
|
||||
sampleData.adcConfig.NChan1 = ADC1_AINM_AVSS;//URH
|
||||
sampleData.adcConfig.SPS=SPS_488;
|
||||
}break;
|
||||
case SIGNAL2: {
|
||||
sampleData.adcConfig.Gain0 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan0 = ADC0_AINP_AIN4;
|
||||
sampleData.adcConfig.NChan0 = ADC0_AINM_AVSS;
|
||||
sampleData.adcConfig.Gain1 = ADC_PGA_GAIN_1;
|
||||
sampleData.adcConfig.PChan1 = ADC1_AINP_AIN7;
|
||||
sampleData.adcConfig.NChan1 = ADC1_AINM_AVSS;//电池电压/3.2
|
||||
sampleData.adcConfig.SPS=SPS_488;
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
||||
static void SetNextProcess(void)//设置采样定时器的下一个进程
|
||||
{
|
||||
if(processIndex == 0){
|
||||
StopSamplingTimerInterval();//关闭采集时钟
|
||||
if(sampleProcess.NextRun == 0){
|
||||
StopProcessTimer();//关闭采集时钟
|
||||
return;
|
||||
}
|
||||
u32 currentTAR = pTIM1->CNT;//定时器当前计数值
|
||||
if(currentTAR > processNextTime) processNextTime = currentTAR + 5;
|
||||
ResetSamplingTimerInterval(processNextTime);
|
||||
|
||||
|
||||
// u32 currentTAR = ProcessTimer->CNT;//定时器当前计数值
|
||||
// if(currentTAR > sampleProcess.NextTime) sampleProcess.NextTime = currentTAR + 5;
|
||||
// ResetProcessTimer(sampleProcess.NextTime);
|
||||
|
||||
StartProcessTimer(sampleProcess.NextTime);
|
||||
}
|
||||
|
||||
|
||||
void SetSystemForADCSample(u16 sampleNum)
|
||||
{
|
||||
sampleProcess.Counter = 0;
|
||||
sampleProcess.CounterMax = sampleNum;
|
||||
|
||||
StartSamplingADC();
|
||||
}
|
||||
void ComputeSampleData(u16 sampleNum, u16 sampleShift)
|
||||
{
|
||||
u32 I;
|
||||
|
||||
sampleProcess.ADC0Result = 0;
|
||||
sampleProcess.ADC1Result = 0;
|
||||
for(I = 0; I<sampleNum; I++)
|
||||
{
|
||||
sampleProcess.ADC0Result += ((sampleProcess.ADC0Buffer[I] >> 8) + 32768) & 0xFFFF;
|
||||
sampleProcess.ADC1Result += ((sampleProcess.ADC1Buffer[I] >> 8) + 32768) & 0xFFFF;
|
||||
}
|
||||
|
||||
sampleProcess.ADC0Result >>= sampleShift;
|
||||
sampleProcess.ADC1Result >>= sampleShift;
|
||||
}
|
||||
/******************************************************************************/
|
||||
void TurnOffAnalogCircuit(void)
|
||||
{
|
||||
StopSamplingADC();
|
||||
DisableSamplingInterrupt();
|
||||
}
|
||||
|
||||
//void FlowProcessManagement(void)//采样过程管理状态机
|
||||
//{
|
||||
// switch(processIndex)
|
||||
// {
|
||||
// case 0:
|
||||
// {
|
||||
// HWState.SampledOver = 0;//采样开始
|
||||
// SetupRHChannle();
|
||||
// SetupIRHypeChannle();
|
||||
// SetSystemForADCSample(16); //开启ADC
|
||||
// processNextTime += 20 * COUNT_VALUE_PER_MS; //20ms 计数值=65535/4000*t =
|
||||
// processIndex=1;
|
||||
// }break;
|
||||
// case 1:
|
||||
// {
|
||||
// TurnOffAnalogCircuit();
|
||||
// ComputeSampleData(16, 4);//计算样本数据
|
||||
// sampleProcess.RHypeResult = sampleProcess.ADC0Result;//放入缓存
|
||||
// sampleProcess.IRHResult = sampleProcess.ADC1Result;//放入缓存
|
||||
// SetupBLChannle();//设置SIGNAL1
|
||||
// SetupRDChannle();
|
||||
// SetSystemForADCSample(16);
|
||||
// processNextTime += 20 * COUNT_VALUE_PER_MS;//20ms
|
||||
// processIndex=2;
|
||||
// }break;
|
||||
// case 2:
|
||||
// {
|
||||
// TurnOffAnalogCircuit();
|
||||
// ComputeSampleData(16, 4);//计算样本数据; //计算样本数据
|
||||
// sampleProcess.BLypeResult = sampleProcess.ADC0Result;//放入缓存
|
||||
// sampleProcess.RDResult = sampleProcess.ADC1Result;//放入缓存
|
||||
//
|
||||
// HWState.SampledOver = 1; //采样结束
|
||||
// StopProcessTimer();
|
||||
// processIndex=3;
|
||||
// }break;
|
||||
// default : processIndex = 0; break;
|
||||
// }
|
||||
// SetNextProcess();
|
||||
//}
|
||||
void FlowProcessManagement(void)//采样过程管理状态机
|
||||
{
|
||||
switch(processIndex)
|
||||
switch(sampleProcess.NextRun)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
HWState.SampledOver = 0;//采样开始
|
||||
SetSystemForADCSample(SIGNAL0);//设置SIGNAL0
|
||||
StartADCSyncSampingData();//开始采集
|
||||
processNextTime += 327; //20ms 计数值=65535/4000*t =
|
||||
processIndex=1;
|
||||
}break;
|
||||
SetupBLChannle();
|
||||
SetupRDChannle();
|
||||
SetSystemForADCSample(SAMPLING_TIMES_IN_DETECT_STAGE);//设置采样个数并开始采样
|
||||
sampleProcess.NextTime = 20*COUNT_VALUE_PER_MS;
|
||||
sampleProcess.NextRun = 1;
|
||||
}break;
|
||||
|
||||
case 1:
|
||||
{
|
||||
ComputeSampleData(); //计算样本数据
|
||||
sampleData.TCode[IRHCode] = sampleData.ADCBuffer[0];//放入缓存
|
||||
sampleData.TCode[URUCode] = sampleData.ADCBuffer[1];//放入缓存
|
||||
SetSystemForADCSample(SIGNAL1);//设置SIGNAL1
|
||||
StartADCSyncSampingData();//开始采集
|
||||
processNextTime += 327;//20ms
|
||||
processIndex=2;
|
||||
TurnOffAnalogCircuit();
|
||||
ComputeSampleData(SAMPLING_TIMES_IN_DETECT_STAGE, SHIFT_IN_DETECT_STAGE);
|
||||
|
||||
sampleProcess.BLypeResult = sampleProcess.ADC0Result;//放入缓存
|
||||
sampleProcess.RDResult = sampleProcess.ADC1Result;//放入缓存
|
||||
// SetupVRHChannle();//设置SIGNAL1
|
||||
// SetSystemForADCSample(PRESAMPLING_TIMES_IN_1ST_STAGE);//设置采样个数并开始采样
|
||||
// sampleProcess.NextTime = 20*COUNT_VALUE_PER_MS;//20ms
|
||||
sampleProcess.NextRun = 3;
|
||||
}break;
|
||||
case 2:
|
||||
|
||||
case 2:
|
||||
{
|
||||
ComputeSampleData(); //计算样本数据
|
||||
sampleData.TCode[IRRCode] = sampleData.ADCBuffer[0];//放入缓存
|
||||
sampleData.TCode[URHCode] = sampleData.ADCBuffer[1];//放入缓存
|
||||
SetSystemForADCSample(SIGNAL2);//设置SIGNAL1
|
||||
StartADCSyncSampingData();//开始采集
|
||||
processNextTime += 327;//20ms
|
||||
processIndex=3;
|
||||
TurnOffAnalogCircuit();
|
||||
ComputeSampleData(PRESAMPLING_TIMES_IN_1ST_STAGE, SHIFT_IN_PRESAMPLING_1ST_STAGE);
|
||||
|
||||
}break;
|
||||
case 3:
|
||||
{
|
||||
ComputeSampleData(); //计算样本数据
|
||||
sampleData.TCode[BASCode] = sampleData.ADCBuffer[0];//放入缓存
|
||||
sampleData.TCode[BATCode] = sampleData.ADCBuffer[1];//放入缓存
|
||||
HWState.SampledOver = 1; //采样结束
|
||||
StopSamplingTimerInterval();//关闭采集时钟
|
||||
processIndex=4;
|
||||
|
||||
}break;
|
||||
default : processIndex = 0; break;
|
||||
case 4:
|
||||
{
|
||||
|
||||
}break;
|
||||
|
||||
case 5:
|
||||
{
|
||||
|
||||
}break;
|
||||
|
||||
case 6:
|
||||
{
|
||||
|
||||
}break;
|
||||
default : sampleProcess.NextRun = 0; break;
|
||||
}
|
||||
SetNextProcess();
|
||||
}
|
||||
//******************************************************************************/
|
||||
void CoreInit(void)
|
||||
{
|
||||
SystemGPIOInit();
|
||||
// ExternCalibratinInput();
|
||||
TurnOffAnalogCircuit();
|
||||
|
||||
}
|
||||
|
||||
//主程序中断------------------------------------------------------------
|
||||
//void PrimaryTimer_IRQ_Callback()
|
||||
//{
|
||||
//// HWState.MainTimerOut = 1;
|
||||
// StartNormolFlowMeasurement();
|
||||
//}
|
||||
void PrimaryTimer_IRQ_Callback()
|
||||
{
|
||||
HWState.MainTimerOut = 1;
|
||||
// StartNormolFlowMeasurement();
|
||||
}
|
||||
/******显示部分***************************************************************************************************************************************************************************************************************/
|
||||
void SwitchPressureUnit(void)
|
||||
{
|
||||
@@ -337,7 +436,7 @@ void Update_Pressure_Display(void)
|
||||
}
|
||||
|
||||
// --- 5. 电量显示逻辑---
|
||||
battery_adc = voltageDetected[TPCB];
|
||||
battery_adc = voltageDetected[RHVOL];
|
||||
|
||||
if(battery_adc >= 44761) battery_level = 4;
|
||||
else if(battery_adc >= 43646) battery_level = 3;
|
||||
@@ -402,17 +501,16 @@ void OLED_DrawRect_Cache(u8 x, u8 y, u8 w, u8 h)
|
||||
OLED_DrawLine(x + w - 1, y, x + w - 1, y + h - 1, 1);
|
||||
}
|
||||
// 定义一个你自己的函数,比如用来给LED闪烁计时的
|
||||
static uint32_t led_timer = 0;
|
||||
static uint32_t shutdown_timer = 0;
|
||||
|
||||
void My_Timer2_Callback(void)
|
||||
|
||||
void My_Timer2_Callback(void)//每10ms进一次中断
|
||||
{
|
||||
// LED 逻辑
|
||||
led_timer++;
|
||||
if(led_timer >= 10) // 500ms
|
||||
if(led_timer >= 10)
|
||||
{
|
||||
led_timer = 0;
|
||||
LHL_GPIO_TogglePin(LED_PIN_GPIO, LED_PIN);
|
||||
TOGGLE_PIN(LED_PIN_GPIO, LED_PIN);
|
||||
}
|
||||
|
||||
// 关机逻辑 (独立计数)
|
||||
@@ -429,16 +527,14 @@ void My_Timer2_Callback(void)
|
||||
|
||||
void SystemPolling(void)
|
||||
{
|
||||
static uint8_t power_off_screen_cleared = 0;
|
||||
/* 1. 处理数据接收与存储 (优先级最高,与显示逻辑分离) */
|
||||
if(mucSaveParams == PARAMS_READY)
|
||||
{
|
||||
SaveSysParams(); // 参数保存通常涉及Flash擦写,耗时较长,确认这里不会阻塞太久
|
||||
}
|
||||
if(HWState.SampledOver)
|
||||
{
|
||||
FlowRateDealAndOuputSub(); // 计算流量
|
||||
}
|
||||
static uint8_t power_off_screen_cleared = 0;
|
||||
if(HWState.MainTimerOut == 1 ) {
|
||||
ManagePrimaryTimeInterval(); // 判断下阶段的工作模式
|
||||
ModeExitCount(); // 判断各种模式退出
|
||||
Clear_WDT();
|
||||
StartNormolFlowMeasurement();
|
||||
HWState.MainTimerOut = 0;
|
||||
}
|
||||
if(comState.state.ReceivedData)
|
||||
{
|
||||
ReceivedDataProcessing();
|
||||
@@ -481,4 +577,5 @@ void SystemPolling(void)
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
/****************************************************************************/
|
||||
477
user/Core/DP2006_VM1000.h
Normal file
477
user/Core/DP2006_VM1000.h
Normal file
@@ -0,0 +1,477 @@
|
||||
#ifndef __D9V2FR_DP2006V1000_h__
|
||||
#define __D9V2FR_DP2006V1000_h__
|
||||
|
||||
//File Start--------------------------------------------------------------------
|
||||
#if (DP2006_VM1000)
|
||||
//**************************************************************************
|
||||
|
||||
// for flow compute
|
||||
//==============================================================================
|
||||
#define LED_PIN GPIO_PIN_5
|
||||
#define LED_PIN_PINPOS GPIO_PinPos_5
|
||||
#define LED_PIN_GPIO GPIO0
|
||||
#define LED_PIN_OUT() EnableOutput(LED_PIN_GPIO, LED_PIN)
|
||||
#define SET_LED_PIN() SET_PIN(LED_PIN_GPIO,LED_PIN)
|
||||
#define CLR_LED_PIN() CLR_PIN(LED_PIN_GPIO,LED_PIN)
|
||||
//==============================================================================
|
||||
//// key_pin select pin
|
||||
// <20><><EFBFBD>Ŷ<EFBFBD><C5B6><EFBFBD>
|
||||
#define KEY1_PIN GPIO_PIN_1 // PA0<41><30>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define KEY1_PORT pGPIO1
|
||||
#define POWER_CTRL_PIN GPIO_PIN_0 // PA1<41><31><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>ƽ<EFBFBD>
|
||||
#define POWER_CTRL_PORT pGPIO1
|
||||
#define UnitKEY_PIN GPIO_PIN_0 // <20><>λ<EFBFBD>л<EFBFBD><D0BB><EFBFBD>
|
||||
#define UnitKEY_PORT pGPIO0
|
||||
//------------------------------------------------------------------------------
|
||||
// OLED I2C<32>ӿ<EFBFBD><D3BF><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
#define I2C_SDA GPIO_PIN_4
|
||||
#define I2C_SDA_PINPOS GPIO_PinPos_4
|
||||
#define I2C_SDA_GPIO GPIO1
|
||||
#define I2C_SCL GPIO_PIN_0
|
||||
#define I2C_SCL_PINPOS GPIO_PinPos_0
|
||||
#define I2C_SCL_GPIO GPIO2
|
||||
|
||||
#define I2C_RES GPIO_PIN_6
|
||||
#define I2C_RES_PINPOS GPIO_PinPos_1
|
||||
#define I2C_RES_GPIO GPIO1
|
||||
//------------------------------------------------------------------------------
|
||||
// for eeprom
|
||||
#define EEPROM_WP_PIN GPIO_PIN_5
|
||||
#define EEPROM_WP_PINPOS GPIO_PinPos_5
|
||||
#define EEPROM_WP_GPIO GPIO1
|
||||
#define PARA_EEPROM BIT1
|
||||
#define DATA_EEPROM BIT2
|
||||
#define FROCK_EEPROM BIT1+BIT2+BIT3
|
||||
//------------------------------------------------------------------------------
|
||||
// for BLE
|
||||
#define BLE_CTS_PIN GPIO_PIN_3
|
||||
#define BLE_CTS_GPIO pGPIO0
|
||||
#define BLE_RST_PIN GPIO_PIN_4
|
||||
#define BLE_RST_GPIO pGPIO0
|
||||
//------------------------------------------------------------------------------
|
||||
// for SPI
|
||||
//#define SCLK_PIN GPIO_PIN_5
|
||||
//#define SCLK_PINPOS GPIO_PinPos_5
|
||||
//#define SCLK_PIN_SOURCE GPIO_PinSource5
|
||||
//#define SCLK_PIN_CONFIG GPIO1_5_AF_SCLK
|
||||
//#define SCLK_GPIO GPIO1
|
||||
|
||||
//#define SOMI_PIN GPIO_PIN_4
|
||||
//#define SOMI_PINPOS GPIO_PinPos_4
|
||||
//#define SOMI_PIN_SOURCE GPIO_PinSource4
|
||||
//#define SOMI_PIN_CONFIG GPIO1_4_AF_MISO
|
||||
//#define SOMI_GPIO GPIO1
|
||||
|
||||
//#define SIMO_PIN GPIO_PIN_6
|
||||
//#define SIMO_PINPOS GPIO_PinPos_6
|
||||
//#define SIMO_PIN_SOURCE GPIO_PinSource6
|
||||
//#define SIMO_PIN_CONFIG GPIO1_6_AF_MOSI
|
||||
//#define SIMO_GPIO GPIO1
|
||||
////------------------------------------------------------------------------------
|
||||
//#define EXT_CALIB_PIN GPIO_PIN_7
|
||||
//#define EXT_CALIB_PINPOS GPIO_PinPos_7
|
||||
//#define EXT_CALIB_GPIO GPIO1
|
||||
|
||||
//#define RS485DE_PIN GPIO_PIN_1
|
||||
//#define RS485DE_PINPOS GPIO_PinPos_1
|
||||
//#define RS485DE_GPIO GPIO1
|
||||
//#define RS485DE_OUTPUT() EnableOutput(RS485DE_GPIO, RS485DE_PINPOS)
|
||||
//#define ENABLE_TXD() SET_PIN(RS485DE_GPIO, RS485DE_PIN)
|
||||
//#define ENABLE_RXD() CLR_PIN(RS485DE_GPIO, RS485DE_PIN)
|
||||
// *****************************************************************************
|
||||
// 'X' <20><><EFBFBD><D7BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// *****************************************************************************
|
||||
#define CTYPE_FR CURVE_1ST
|
||||
#define ATYPE_VH CURVE_2ND
|
||||
#define MICRO_FR CURVE_3RD
|
||||
|
||||
#define FRIDX CTYPE_FR // 0
|
||||
#define RGIDX ATYPE_VH // 1
|
||||
#define GAINX MICRO_FR // 2
|
||||
#define VDUX 3 //
|
||||
#define VDUGX 4 //
|
||||
#define RIDX 5 //
|
||||
#define NIDX 6 // NORMAL_VL - LOW_VL (TD INDEX)
|
||||
#define TPCB 7 // PCB temperature
|
||||
#define TGAS 8 // GAS temperature
|
||||
#define TRH 9 // RH temperature
|
||||
#define BATT 10 // Battery volatge
|
||||
#define IVHDX 11 // IRH CODE test VHH By TD Control
|
||||
#define VRHX 12 // VRH CODE
|
||||
#define IVHUX 13 // IRH CODE test VHH By TU Control
|
||||
#define VRRX 14 // VRR CODE
|
||||
#define RHVOL 15 // RH VOLATAGE
|
||||
#define RRVOL 16 // RR VOLATAGE
|
||||
#define RHRES 17 // RH resistance
|
||||
#define RRRES 18 // RR resistance
|
||||
#define PORH 19 // RH Power
|
||||
#define PDRH 20 // RH current Power
|
||||
#define CVHHX 21 //
|
||||
#define DVHHX 22 //
|
||||
#define VHPA 23 //
|
||||
#define RATO 24 // RR:RH
|
||||
#define SDT 25 // ATYPE OFFSET
|
||||
#define DIVHX 26 // IVHH(TD) - IVHH(TU)
|
||||
#define TCOE 27 //
|
||||
#define TVDUX 28 //
|
||||
#define TVDUGX 29 //
|
||||
#define FR_H 30 //
|
||||
#define FR_L 31 //
|
||||
#define ANX 32 //
|
||||
#define ANX_MASK (ANX-1)
|
||||
//------------------------------------------------------------------------------
|
||||
#define NRH RRRES
|
||||
#define NVHH IVHDX
|
||||
#define CVHH CVHHX //
|
||||
#define DVHH DVHHX //
|
||||
#define NVDU VDUX
|
||||
|
||||
#define LRH RHRES
|
||||
#define LVOL RHVOL
|
||||
#define LVHH IVHDX
|
||||
//------------------------------------------------------------------------------
|
||||
#define GCFX NVDU //
|
||||
#define GIDX LCDE //
|
||||
#define FIDX FRIDX
|
||||
#define RAOOM RATO
|
||||
|
||||
#define ATYPE_FR CURVE_2ND
|
||||
#define REG_INDEX RGIDX
|
||||
//------------------------------------------------------------------------------
|
||||
#define CODE1 FR_H // 8300 FIDX
|
||||
#define CODE2 FR_L // 8301 FIDX
|
||||
#define CODE3 FRIDX // 8302 FIDX
|
||||
|
||||
#define CODE4 NIDX // 8303
|
||||
#define CODE5 VRHX // 8304
|
||||
#define CODE6 IVHDX // 8305
|
||||
#define CODE7 RHVOL // 8306
|
||||
#define CODE8 VDUGX // 8307
|
||||
#define CODE9 TPCB // 8308
|
||||
|
||||
#define CODE10 RHVOL // 8309
|
||||
#define CODE11 VDUX // 830A
|
||||
#define CODE12 VDUGX // 830B
|
||||
#define CODE13 NIDX // 830C
|
||||
#define CODE14 BATT // 830D
|
||||
#define CODE15 IVHDX // 830E
|
||||
#define CODE16 VRHX // 830F
|
||||
// *****************************************************************************
|
||||
// 1S = 16384
|
||||
// Circuit preparation process
|
||||
#define START_SAMPLING_STAGE_0 0
|
||||
#define START_SAMPLING_STAGE_1 1
|
||||
#define START_SAMPLING_STAGE_2 2
|
||||
#define START_SAMPLING_STAGE_3 3
|
||||
//------------------------------------------------------------------------------
|
||||
#define FR_UPDATE 0x0A
|
||||
#define FR_UPDATE_PULSE_TIME 16 // 1ms
|
||||
//------------------------------------------------------------------------------
|
||||
#define CIRCUIT_SETUP_TIME 82 // 5ms
|
||||
//------------------------------------------------------------------------------
|
||||
#define SET_UP_TIME_FROM_DETECT_TO_1ST_STAGE 1638 // 100ms
|
||||
//------------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD>
|
||||
//------------------------------------------------------------------------------
|
||||
#define COUNT_VALUE_PER_MS 16 //10
|
||||
#define SET_UP_TIME_OF_DETECT_STAGE (20 * COUNT_VALUE_PER_MS) ///20ms
|
||||
#define SAMPLING_TIMES_IN_DETECT_STAGE 16 //
|
||||
#define SHIFT_IN_DETECT_STAGE 4 //
|
||||
//
|
||||
#define SET_UP_TIME_OF_1ST_STAGE (40 * COUNT_VALUE_PER_MS) //40ms <20><>Ӧ<EFBFBD><D3A6><EFBFBD><CEA2><EFBFBD><EFBFBD>ADC 977SRS DMA<4D><41><EFBFBD><EFBFBD>32<33><32>ʱ<EFBFBD><CAB1>
|
||||
#define PRESAMPLING_TIMES_IN_1ST_STAGE 32 //
|
||||
#define SHIFT_IN_PRESAMPLING_1ST_STAGE 5 //
|
||||
//
|
||||
#define SAMPLING_TIME_OF_1ST_STAGE (70 * COUNT_VALUE_PER_MS) //70ms <20><>Ӧ<EFBFBD><D3A6><EFBFBD><CEA2><EFBFBD><EFBFBD>ADC 977SRS DMA<4D><41><EFBFBD><EFBFBD>64<36><34>ʱ<EFBFBD><CAB1>
|
||||
#define SAMPLING_TIMES_IN_1ST_STAGE 64 //
|
||||
#define SHIFT_IN_1ST_STAGE 6 //
|
||||
|
||||
//******************************************************************************
|
||||
#define STATIC_HIGH_CODE 50
|
||||
#define STATIC_LOW_CODE 50
|
||||
// *****************************************************************************
|
||||
//#define VHH_GAIN GAIN16
|
||||
#define NIDX_GAIN GAIN32
|
||||
#define GIDX_GAIN GAIN128 //GAIN_64
|
||||
#define GIDX_SHIFT 4
|
||||
//#define VRR_GAIN GAIN16
|
||||
//#define VRH_GAIN GAIN1
|
||||
|
||||
#define SAMPLE_NORMOL_MODE 0
|
||||
#define SAMPLE_TRACK_ZERO_MODE 1
|
||||
#define SAMPLE_FAST_MODE 2
|
||||
#define SAMPLE_MODE_MAX SAMPLE_TRACK_ZERO_MODE //SAMPLE_VDU_VRH_MODE
|
||||
#define SAMPLE_DEFAULT_MODE SAMPLE_NORMOL_MODE //SAMPLE_VDU_VRR_MODE
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ÿ<><C3BF>4λ
|
||||
#define SAMPLE_VDU 0
|
||||
#define SAMPLE_GVDU 1
|
||||
|
||||
#define SAMPLE_VRH 0
|
||||
#define SAMPLE_IRH 1
|
||||
|
||||
#define SWITCH_GAIN_THRESHOLD 0x36768
|
||||
|
||||
#define CAL_VDUX CTYPE_FR
|
||||
#define CAL_ATYPE ATYPE_VH
|
||||
#define CAL_VDUGX MICRO_FR
|
||||
|
||||
// *****************************************************************************
|
||||
#if (DP2006_VM1000)
|
||||
//---------------------------------------------------------------------------------
|
||||
#define VCOM 0.0
|
||||
#define VREF_PER_CODE (ADC_VREF/32768)
|
||||
#define VRR_BRIDGE_VOL (ADC_VREF - VCOM)
|
||||
|
||||
#define VRR_RA 33000.0
|
||||
#define VRR_RB 2800.0
|
||||
#define VRR_RDC (VRR_RB/(VRR_RA + VRR_RB))
|
||||
#define VRR_VDC (VRR_BRIDGE_VOL*VRR_RDC)
|
||||
|
||||
#define VRR_ADC_GAIN 16.0
|
||||
#define VRR_VREF ( VREF_PER_CODE/VRR_ADC_GAIN )
|
||||
#define VRR_PER_CODE ( ADC_VREF/((ADC_VREF-VCOM)*GAIN*32768))
|
||||
|
||||
#define SampingADCInit() ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_1P25V)
|
||||
#define SetupRHChannle() ADC_Init(ADC_0, SPS_977, GAIN1,ADC0_AIN3,ADC0_AVSS) //VRH
|
||||
#define SetupIRHypeChannle() ADC_Init(ADC_1, SPS_977, GAIN1,ADC1_AIN0,ADC1_AVSS)//IRH
|
||||
#define SetupBLChannle() ADC_Init(ADC_0, SPS_977, GAIN1,ADC0_AIN7,ADC0_AVSS)//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>
|
||||
#define SetupRDChannle() ADC_Init(ADC_1, SPS_977, GAIN1,ADC1_AIN2,ADC1_AVSS)//VRU
|
||||
#endif
|
||||
//---------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------
|
||||
#define StartSamplingADC() { \
|
||||
ADC_SyncCmd(ENABLE); \
|
||||
DMA_ADC_Init(ADC_0, sampleProcess.ADC0Buffer, sampleProcess.CounterMax); \
|
||||
DMA_ADC_Init(ADC_1, sampleProcess.ADC1Buffer, sampleProcess.CounterMax); \
|
||||
DMA_StartADC(ADC_0); \
|
||||
DMA_StartADC(ADC_1); \
|
||||
}
|
||||
|
||||
#define StopSamplingADC() { \
|
||||
DMA_StopADC(ADC_0); \
|
||||
DMA_StopADC(ADC_1); \
|
||||
}
|
||||
//---------------------------------------------------------------------------------------
|
||||
#define sampleCTypeValue sampleProcess.ADC0Result
|
||||
#define sampleATypeValue sampleProcess.ADC1Result
|
||||
#define sampleRTypeValue sampleProcess.ADC1Result
|
||||
#define ReadADCData()
|
||||
//---------------------------------------------------------------------------------------
|
||||
// 125ms/250ms/500ms/1000ms/2000ms/4000ms <20><><EFBFBD>ڶ<EFBFBD>ʱ uploadCounter: <20><><EFBFBD><EFBFBD>ֵ(>32.768)<29><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ=(32768/1000)*t t(ms)Ϊ<><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//#define USE_LPTIMER0
|
||||
#define PrimaryTimer LPTIM1
|
||||
#define StartPrimaryTimer( uploadCounter ) StartLPTimer1( uploadCounter )
|
||||
#define ResetPrimaryTimer( uploadCounter ) ResetLPTimer1( uploadCounter )
|
||||
#define EnablePrimaryTimerInterrupt() EnableLPTimer1Interrupt()
|
||||
#define DisablePrimaryTimerInterrupt() DisableTimer1Interrupt()
|
||||
#define StopPrimaryTimer() StopLPTimer1()
|
||||
//#define PrimaryTimer_IRQ_Callback PrimaryTimer_IRQ_Callback// ManagePrimaryTimeInterval
|
||||
|
||||
//---------------------------------------------------------------------------------------
|
||||
// 1ms<6D><73><EFBFBD><D7BC>ʱ uploadCounter: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ:(1~4000)
|
||||
//#define USE_TIMER2
|
||||
#define ProcessTimer TIM1
|
||||
#define ProcessTimerIT TIM_IT_CC1
|
||||
#define StartProcessTimer(uploadCounter) StartTimer1_CC1(uploadCounter)
|
||||
#define ResetProcessTimer(uploadCounter) ResetTimer1_CC1(uploadCounter)
|
||||
#define StopProcessTimer() StopTimer1()
|
||||
#define EnableProcessTimerInterrupt() NVIC_EnableIRQ(TIM1_IRQn); // EnableTimer2Interrupt()
|
||||
#define DisableProcessTimerInterrupt() NVIC_DisableIRQ(TIM1_IRQn); // DisableTimer2Interrupt()
|
||||
//#define Timer2InterruptCallBack()
|
||||
//#define ProcessTimer_IRQ_Callback ProcessTimerInterruptCallBack
|
||||
|
||||
//---------------------------------------------------------------------------------------
|
||||
//<2F>Ƚ϶<C8BD>ʱ uploadCounter: <20><><EFBFBD><EFBFBD>ֵ(1~65535)<29><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ=(65535/4000)*t t(ms)Ϊ<><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//#define USE_TIMER1
|
||||
//#define SamplingTimer TIM1
|
||||
//#define StartSamplingTimer(uploadCounter) StartTimer1_CC1(uploadCounter)
|
||||
//#define ResetSamplingTimer(uploadCounter) ResetTimer1_CC1(uploadCounter)
|
||||
//#define StopSamplingTimer() StopTimer1()
|
||||
//#define EnableSamplingInterrupt() NVIC_EnableIRQ(TIM1_IRQn); // EnableTimer1Interrupt()
|
||||
//#define DisableSamplingInterrupt() NVIC_DisableIRQ(TIM1_IRQn); // DisableTimer1Interrupt()
|
||||
//#define SamplingTimer_IRQ_Callback ProcessTimerInterruptCallBack
|
||||
|
||||
#define TEMP_SENSOR_RESULT RESULT_0_25_BIT
|
||||
|
||||
// *****************************************************************************
|
||||
// <20>ӱ<EFBFBD><EFBFBD><D7BC>λ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
||||
#define ONE_PA_TO_MBAR 0.01f // 1 Pa = 0.01 mbar
|
||||
#define ONE_PA_TO_TORR (1.0f / 133.322f) // 1 Pa = 1 / 133.322 Torr
|
||||
#define ONE_PA_TO_MICRONS (1000.0f / 133.322f) // 1 Pa = 1000 / 133.322 Microns
|
||||
|
||||
// <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ <20><> <20><><EFBFBD><D7BC>λ
|
||||
#define ONE_MBAR_TO_PA 100.0f // 1 mbar = 100 Pa
|
||||
#define ONE_TORR_TO_PA 133.322f // 1 Torr = 133.322 Pa
|
||||
#define ONE_MICRONS_TO_PA (133.322f / 1000.0f) // 1 Microns = 133.322 / 1000 Pa
|
||||
|
||||
// ѹ<><D1B9><EFBFBD><EFBFBD>λö<CEBB><C3B6>
|
||||
typedef enum {
|
||||
PRESSURE_UNIT_PA, // <20><>˹<EFBFBD><CBB9>
|
||||
PRESSURE_UNIT_MICRONS, // <><EFBFBD><D7B9><EFBFBD> (<28><>mHg)
|
||||
PRESSURE_UNIT_TORR, // <20><>
|
||||
PRESSURE_UNIT_MBAR // <20><><EFBFBD><EFBFBD>
|
||||
} PressureUnitType;
|
||||
// ѹ<><D1B9>ֵ<EFBFBD><D6B5> (<28><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Pa Ϊ<><CEAA>λ<EFBFBD>洢)
|
||||
typedef struct
|
||||
{
|
||||
u16 DisplayZero : 1; // 1
|
||||
u16 Mode: 2; // 3
|
||||
u16 CType: 1; // 5
|
||||
u16 AType: 2; // 7
|
||||
u16 PreSampling: 1; // 10
|
||||
u16 AutoDetectOffset: 1; // 11
|
||||
u16 AutoDetectProcess: 2; // 13
|
||||
u16 EnableRHTest : 1; // 14
|
||||
u16 EnableRoughTest: 1; // 15
|
||||
} __SAMPLE_STATUS_BIT_TypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
__SAMPLE_STATUS_BIT_TypeDef State;
|
||||
u16 NextRun;
|
||||
u16 NextTime;
|
||||
u16 Counter;
|
||||
u16 CounterMax;
|
||||
u16 CTypeGain;
|
||||
u32 BLypeResult;//<2F><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>
|
||||
u32 RDResult;//VRD
|
||||
u32 RHypeResult;//VRH
|
||||
u32 IRHResult;//IRH
|
||||
u32 ADC0Result;
|
||||
u32 ADC1Result;
|
||||
u32 ADC0Buffer[70];
|
||||
u32 ADC1Buffer[70];
|
||||
} TypeSample;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned int CalTA;
|
||||
unsigned int Value[3];
|
||||
unsigned int DeltaVHH;
|
||||
unsigned int TUVHH;
|
||||
unsigned int TDVHH;
|
||||
unsigned int TUIndex;
|
||||
unsigned int TDIndex;
|
||||
} TypeCalibOffset;
|
||||
|
||||
// *****************************************************************************
|
||||
extern unsigned short int FRType;
|
||||
|
||||
//==========================================================
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̿<EFBFBD><CCBF><EFBFBD>
|
||||
//==========================================================
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӳ<EFBFBD><D3B3><EFBFBD>
|
||||
*/
|
||||
void FlowRateDealAndOuputSub(void);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>벢ת<EBB2A2><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||
*/
|
||||
void ComputeFlowRateIndexAndFlowRate(void);
|
||||
|
||||
/**
|
||||
* @brief <20>ּ<EFBFBD><D6BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
u16 WordSubFunction(u16 minuend, u16 subtractor);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϻص<CFBB>
|
||||
*/
|
||||
void SamplingTimer_IRQ_Callback(void);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (125ms<6D><73><EFBFBD><EFBFBD>)
|
||||
*/
|
||||
void StartNormolFlowMeasurement(void);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
static void SetNextProcess(void);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param sampleNum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
*/
|
||||
void SetSystemForADCSample(u16 sampleNum);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ
|
||||
* @param sampleNum <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
* @param sampleShift <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB> (<28><><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>ֵ<EFBFBD><D6B5>)
|
||||
*/
|
||||
void ComputeSampleData(u16 sampleNum, u16 sampleShift);
|
||||
|
||||
/**
|
||||
* @brief <20>ر<EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>·
|
||||
*/
|
||||
void TurnOffAnalogCircuit(void);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>״̬<D7B4><CCAC>
|
||||
*/
|
||||
void FlowProcessManagement(void);
|
||||
|
||||
//==========================================================
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - ϵͳ<CFB5><CDB3>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
//==========================================================
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
|
||||
*/
|
||||
void CoreInit(void);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>жϻص<CFBB>
|
||||
*/
|
||||
void PrimaryTimer_IRQ_Callback(void);
|
||||
|
||||
/**
|
||||
* @brief Timer2 <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>ص<EFBFBD> (<28>ػ<EFBFBD><D8BB><EFBFBD>/<2F><><EFBFBD><EFBFBD>)
|
||||
*/
|
||||
void My_Timer2_Callback(void);
|
||||
|
||||
//==========================================================
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ʾ<EFBFBD><CABE>UI
|
||||
//==========================================================
|
||||
|
||||
/**
|
||||
* @brief <20>л<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>λ
|
||||
*/
|
||||
void SwitchPressureUnit(void);
|
||||
|
||||
/**
|
||||
* @brief ѹ<><D1B9><EFBFBD><EFBFBD>λת<CEBB><D7AA>
|
||||
* @param value ԭʼֵ
|
||||
* @param targetUnit Ŀ<>굥λ
|
||||
* @param originalUnit ԭʼ<D4AD><CABC>λ
|
||||
* @return ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
*/
|
||||
double ConvertPressure(double value, PressureUnitType targetUnit, PressureUnitType originalUnit);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
*/
|
||||
void Update_Pressure_Display(void);
|
||||
|
||||
/**
|
||||
* @brief <20><><EFBFBD>ƾ<EFBFBD><C6BE>α߿<CEB1> (<28><><EFBFBD><EFBFBD>ģʽ)
|
||||
*/
|
||||
void OLED_DrawRect_Cache(u8 x, u8 y, u8 w, u8 h);
|
||||
|
||||
//==========================================================
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><>ѭ<EFBFBD><D1AD>
|
||||
//==========================================================
|
||||
/**
|
||||
* @brief ϵͳ<CFB5><CDB3>ѯ<EFBFBD><D1AF>ѭ<EFBFBD><D1AD>
|
||||
*/
|
||||
void SystemPolling(void);
|
||||
//File End------------------------------------------------------------------
|
||||
#endif
|
||||
//.h End--------------------------------------------------------------------
|
||||
#endif
|
||||
479
user/Core/DP2006_VM1000_Header.h
Normal file
479
user/Core/DP2006_VM1000_Header.h
Normal file
@@ -0,0 +1,479 @@
|
||||
/********************************************************************************************************
|
||||
** DP1902 MFXXGD FLANGE IO<49><4F><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD>
|
||||
**
|
||||
** Copyright (c) Siargo, Ltd. 2011
|
||||
** All Rights Reserved.
|
||||
**
|
||||
**-------------------------------------------------------------------------------------------------------
|
||||
********************************************************************************************************/
|
||||
#ifndef __DP2006_VM1000_Header_h__
|
||||
#define __DP2006_VM1000_Header_h__
|
||||
|
||||
//==============================================16================================
|
||||
#define PROGRAM_I2C_DEBUG 0
|
||||
//==============================================================================
|
||||
#define PRODUCT_MOD "TFS36200"
|
||||
#define VER_MV 5
|
||||
#define VER_SV 2
|
||||
#define VER_RV 0
|
||||
#define VER_BV 0
|
||||
#define BUILD_DATE "20260107" //build日期
|
||||
#define VERSION "2025.250901" //软件版本
|
||||
//#define SOFT_VERSION 2025 //软件版本
|
||||
/*******************************************************************************
|
||||
*******************************************************************************/
|
||||
// Microcontroller operating frequency
|
||||
#define FREQ 4000000//((8000000/32768))*32768 // system frequency definition
|
||||
#define TIMER_FREQ 32768
|
||||
#define ACLK_DIV DIVA__1
|
||||
#define SMCLK_DIV DIVS__2
|
||||
#define MCLK_DIV DIVM__1
|
||||
//******************************************************************************
|
||||
// Function selection
|
||||
//******************************************************************************
|
||||
|
||||
//******************************************************************************
|
||||
#define DP2006_VM1000 1
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_DCOEF 1 //?
|
||||
#define ENABLE_LOWPOWER_MODE 1
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_AUTO_CALIB_ATYPE_OFFSET 1 //?
|
||||
//------------------------------------------------------------------------------
|
||||
// for ACC Compute
|
||||
#define REC_ACC_PER 0 // Acc flowrate save enable bit
|
||||
#define ENABLE_ACCPULSE 0 // <20><><EFBFBD>岻<EFBFBD>ܺ<EFBFBD><DCBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㲥ͬʱʹ<CAB1><CAB9>
|
||||
#define ENABLE_PULSE_USE_CALIB_SETUP 0
|
||||
//------------------------------------------------------------------------------
|
||||
// For data storage
|
||||
#define REC_ALARM_DATA 0 // for alarm data save enable bit
|
||||
#define REC_DATE_DATA 0 // for date acc data save enable bit
|
||||
#define REC_HISTORY_DATA 0 // for history data save enable bit
|
||||
//------------------------------------------------------------------------------
|
||||
// For Display
|
||||
#define ENABLE_LCD_DISPLAY 0
|
||||
|
||||
// for GDT0136 LCD
|
||||
#define ENABLE_DISPLAY_FR_FLAG 0
|
||||
#define ENABLE_DISPLAY_ACC 0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// For KEY SETUP
|
||||
#define ENABLE_KEY 0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_EXT_RTC 0
|
||||
#define ENABLE_EXT_CRYSTAL 1
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// For User UART & I2C
|
||||
#define ENABLE_USER_I2C 0
|
||||
#define ENABLE_USER_UART 1
|
||||
|
||||
#define ENABLE_USE_TXD_EN 0
|
||||
#define ENABLE_TURN_OFF_RS485 0
|
||||
|
||||
#define ENABLE_DIGITAL_OUTPUT 0
|
||||
#define ENABLE_FACTORY_PROTOCOL 0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// for bluetooth beacon mode
|
||||
#define BLUETOOTH_MODE 0
|
||||
#define ENABLE_BLUETOOTH_BEACON (BLUETOOTH_MODE & (!ENABLE_ACCPULSE))
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_NBIOT 0
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_RF_UART (ENABLE_NBIOT | ENABLE_BLUETOOTH_BEACON) // RF Uart: NBIOT, Blue
|
||||
#define ENABLE_RF_RX 0
|
||||
#define ENABLE_AUTO_FOR_RF_TX 0 // for : INTER-NBIOT MOD
|
||||
#define ENABLE_AUTO_USER_UART_TX 0
|
||||
#define ENABLE_ERROR_USE_RF_TXDPIN 0
|
||||
#define ENABLE_ERROR_PIN_FOR_VALVE_CONTROL 0
|
||||
#define ENABLE_LEAK_DETECT 0
|
||||
#define ENABLE_AT_FOR_MASTER_UART (ENABLE_RF_UART)
|
||||
#define ENABLE_DENSITY_DETECT 0
|
||||
#define ENABLE_ACC_GAIN 0
|
||||
//------------------------------------------------------------------------------
|
||||
// For A-Type FlowRate Compute
|
||||
#define ENABLE_A_TYPE_FLOWRATE 0
|
||||
#define ENABLE_PLUG_IN_FLOWRATE 0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// For Temperature test
|
||||
#define ENABLE_USE_MCP9808 1
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// For Temperature correction
|
||||
#define ENABLE_OFFSET_TRACK 0 //track<63><6B><EFBFBD><EFBFBD>
|
||||
#define ENABLE_OFFSET_CORRECT 1 //ƫ<><C6AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define ENABLE_AUTO_ZERO_TRACK 0
|
||||
#define ENABLE_TD_TU_SWITCH_CONTROL 0
|
||||
#define ENABLE_MULTI_PONIT_TA_CORR 1
|
||||
// For D9V2 if TEMP_CORR_USE_TA = 0 & TEMP_CORR_USE_RR = 0, use TGAS
|
||||
#define TEMP_CORR_USE_TA 0 // TPCB
|
||||
#define TEMP_CORR_USE_RR 0
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_GAS_RECOGNITION 1
|
||||
#define ENABLE_GAS_RECOGNITION_TABLE 1
|
||||
#define ENABLE_RR_CALIBRATION ENABLE_GAS_RECOGNITION
|
||||
#define ENABLE_ONE_TABLE 0
|
||||
#define ENABLE_ONE_TABLE_NAME INTCMD_1ST_TABLE
|
||||
//------------------------------------------------------------------------------
|
||||
// for calibration data У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// 如果ENABLE_2ND_CURVE 和 ENABLE_3RD_CURVE 有1,则ENABLE_ONE_CURVE必须为0
|
||||
#define ENABLE_ONE_CURVE 0
|
||||
#define ENABLE_2ND_CURVE 0
|
||||
#define ENABLE_3RD_CURVE 1
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_HALT_IN_OPERATE_CURVE 1
|
||||
//------------------------------------------------------------------------------
|
||||
// For ADC Calibration
|
||||
#define ENABLE_CALIB_ATYPE_ADC 0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_EXTPOWER_DETECT 0
|
||||
#define DISABLE_BAT_ALARM_IN_EXPOWER 0
|
||||
#define DISABLE_BAT_ALARM 1
|
||||
#define ENABLE_DEBUG_PIN 0 // if Not<6F><74>use for RF Control pin
|
||||
#define ENABLE_ZERO_CALIB 1
|
||||
#define ENABLE_ZERO_CALIB_PIN 0 // if Not<6F><74>use for RF Control pin
|
||||
#define ENABLE_ZERO_CALIB_CMD 1
|
||||
#define ENABLE_CALPIN_FOR_UPDATE_FR 1
|
||||
//------------------------------------------------------------------------------
|
||||
// for internal modbus
|
||||
#define ENABLE_READ_CODE_INTO_CALIB 0
|
||||
//------------------------------------------------------------------------------
|
||||
// for SELECT BAT
|
||||
#define ENABLE_BAT_SEL_PIN 0 // use for RF Control pin
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FOR FLOWRATE UNIT
|
||||
#define ENABLE_SCCM_SL 0
|
||||
#define ENABLE_SLPM_NM3 1
|
||||
#define ENABLE_NCMH_NM3 1
|
||||
#define ENABLE_SCFM_SCF 0
|
||||
#define ENABLE_PPM_PPM 0
|
||||
#define ENABLE_KGH_KG 0
|
||||
#define ENABLE_SLPM_SL 0
|
||||
#define ENABLE_SCFH_SCF 1
|
||||
#define ENABLE_FIXED_UART_FR 0
|
||||
#define FLOW_UNIT_DEFAULT SLPM_NM3 // SCFH_SCF
|
||||
#define FR_STD_UNIT SLPM // NCMH
|
||||
//------------------------------------------------------------------------------
|
||||
#define ACC_INT_8BIT 1
|
||||
#define ACC_INT_7BIT 0
|
||||
#define ACC_INT_6BIT (ENABLE_USE_GDT0136 | ENABLE_EDC20021HDC1P8)
|
||||
#define ENABLE_ACC_DEC_COMPUTE 0
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_SAMPLE_GREATER_GAIN 1
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_FLOW_GAIN 1
|
||||
#define FLOW_GAIN_DEFAULT 100
|
||||
#define FLOW_GAIN_MAX 1000
|
||||
//------------------------------------------------------------------------------
|
||||
// for user protocol
|
||||
#define ENABLE_USER_WP 1 // Write protect
|
||||
#define ENABLE_USER_GCF 1
|
||||
#define ENABLE_USER_OFFSET 1
|
||||
#define ENABLE_USER_WRITE_ACC 1
|
||||
#define ENABLE_USER_RESET_CORR 1
|
||||
#define ENABLE_USER_SET_UNIT 1
|
||||
#define ENABLE_ALARM_ACC 0
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_ADJUST_ADC_GAIN 1
|
||||
//******************************************************************************
|
||||
#define TURN_OFF_SYSTEM 245 // 2.45V
|
||||
//******************************************************************************
|
||||
// Parameter default
|
||||
//******************************************************************************
|
||||
// FOR MODBUS Define
|
||||
// MODBUS Operation password
|
||||
#define COM_PASSWORD1 0x53495244 //0x53495244 "SIRD"
|
||||
#define COM_PASSWORD2 0x32303133
|
||||
#define COM_PASSWORD3 0x53494152
|
||||
|
||||
// for MODBUS Default
|
||||
#define MAP1_DEFAULT STD_PROTOCOL
|
||||
#define MAP2_DEFAULT STD_SLAVER_ADDR
|
||||
#define MAP3_DEFAULT STD_FLOWRATE
|
||||
#define MAP4_DEFAULT (STD_FLOWRATE+1)
|
||||
#define MAP5_DEFAULT STD_ACC_INT
|
||||
#define MAP6_DEFAULT (STD_ACC_INT+1)
|
||||
#define MAP7_DEFAULT STD_ACC_DOT
|
||||
#define MAP8_DEFAULT (STD_METER_SN)
|
||||
#define MAP9_DEFAULT (STD_METER_SN+1)
|
||||
#define MAP10_DEFAULT (STD_METER_SN+2)
|
||||
#define MAP11_DEFAULT (STD_METER_SN+3)
|
||||
#define MAP12_DEFAULT (STD_METER_SN+4)
|
||||
#define MAP13_DEFAULT (STD_METER_SN+5)
|
||||
#define MAP14_DEFAULT STD_ALARM_1
|
||||
#define MAP15_DEFAULT STD_BAT1_V
|
||||
#define MAP16_DEFAULT STD_OUT_MAX_FLOW
|
||||
#define MAP17_DEFAULT (STD_OUT_MAX_FLOW+1)
|
||||
#define MAP18_DEFAULT STD_OUT_MIN_FLOW
|
||||
#define MAP19_DEFAULT (STD_OUT_MIN_FLOW+1)
|
||||
#define MAP20_DEFAULT STD_GAS_OFFSET_C
|
||||
#define MAP21_DEFAULT STD_GAS_OFFSET_A
|
||||
#define MAP22_DEFAULT STD_TA
|
||||
#define MAP23_DEFAULT STD_TGAS
|
||||
#define MAP24_DEFAULT STD_GAS_FACTOR
|
||||
#define MAP25_DEFAULT STD_AIR_FACTOR
|
||||
#define MAP26_DEFAULT STD_FACTOR_VTH
|
||||
#define MAP27_DEFAULT 0
|
||||
#define MAP28_DEFAULT 0
|
||||
#define MAP29_DEFAULT 0
|
||||
#define MAP30_DEFAULT 0
|
||||
#define MAP31_DEFAULT 0
|
||||
#define MAP32_DEFAULT 0
|
||||
#define MAP33_DEFAULT 0
|
||||
#define MAP34_DEFAULT 0
|
||||
#define MAP35_DEFAULT 0
|
||||
#define MAP36_DEFAULT 0
|
||||
#define MAP37_DEFAULT 0
|
||||
#define MAP38_DEFAULT 0
|
||||
#define MAP39_DEFAULT 0
|
||||
#define MAP40_DEFAULT 0
|
||||
#define MAP41_DEFAULT 0
|
||||
#define MAP42_DEFAULT 0
|
||||
#define MAP43_DEFAULT 0
|
||||
#define MAP44_DEFAULT 0
|
||||
#define MAP45_DEFAULT 0
|
||||
#define MAP46_DEFAULT 0
|
||||
#define MAP47_DEFAULT 0
|
||||
#define MAP48_DEFAULT 0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// FOR AUTO TXD DATA
|
||||
#define TIMING_TXD_START_DEFAULT STD_METER_SN
|
||||
#define TIMING_TXD_LEN_DEFAULT (STD_BAT1_V - STD_METER_SN)+1
|
||||
#define TIMING_TXD_TIME_DEFAULT 0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define DIS_LANGUAGE_DEFAULT CHINESE
|
||||
//------------------------------------------------------------------------------
|
||||
#define KEY_PASSWORD_DEFAULT 11111
|
||||
//******************************************************************************
|
||||
//------------------------------------------------------------------------------
|
||||
#define MAX_ALRAM_FR_DEFAULT 160 // 1.25*128
|
||||
//------------------------------------------------------------------------------
|
||||
// INSTRUMENT_FACTOR = 1 ERROR_CORRECT = 0
|
||||
#define CORRECT_METHOD ERROR_CORRECT
|
||||
#define ENABLE_GCF_POWER_CORR 0
|
||||
//------------------------------------------------------------------------------
|
||||
#define METER_PARAMETER_STD 1000
|
||||
#define METER_PARAMETER_DEFAULT 1000
|
||||
#define METER_PARAMETER_MAX 6500
|
||||
#define METER_PARAMETER_MIN 112
|
||||
//------------------------------------------------------------------------------
|
||||
#define GCF_PARAMETER_STD 1000
|
||||
#define GCF_PARAMETER_MAX 5500
|
||||
#define GCF_PARAMETER_MIN 250
|
||||
#define GCF_ATYPE_DEFAULT 850
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#if(ENABLE_GCF_POWER_CORR)
|
||||
//------------------------------------------------------------------------------
|
||||
#define GCF_DEFAULT 889
|
||||
#define GCF_A_DEFAULT -46
|
||||
#define GCF_C_DEFAULT 226
|
||||
|
||||
#define GCF_A_DOT 1000
|
||||
#define GCF_B_DOT 1000
|
||||
#define GCF_C_DOT 1000000 // for mm2 No dot bit
|
||||
//------------------------------------------------------------------------------
|
||||
#else
|
||||
//------------------------------------------------------------------------------
|
||||
#if(DP1902COREV0134)
|
||||
#define GCF_DEFAULT 850
|
||||
#else
|
||||
#define GCF_DEFAULT 1030
|
||||
#endif
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
#define GCF_A_DEFAULT 0
|
||||
#define GCF_C_DEFAULT 0
|
||||
|
||||
#define GCF_A_DOT 10000000000
|
||||
#define GCF_B_DOT 1000
|
||||
#define GCF_C_DOT 10000
|
||||
//------------------------------------------------------------------------------
|
||||
#endif
|
||||
//------------------------------------------------------------------------------
|
||||
#define TIMING_TXD_START_MAX STD_WRITE_START
|
||||
#define TIMING_TXD_START_MIN STD_REG_START
|
||||
#define TIMING_TXD_LEN_MAX 40
|
||||
#define TIMING_TXD_LEN_MIN 1
|
||||
#define TIMING_TXD_TIME_MAX 45000 //
|
||||
//------------------------------------------------------------------------------
|
||||
#define SAMPLE_PERIOD_DEFAULT RESP_250MS // RESP_4000MS
|
||||
#define EXT_POWER_PERIOD_TIME RESP_250MS // RESP_500MS //<2F>ⲿ<EFBFBD><E2B2BF>Դ
|
||||
//------------------------------------------------------------------------------
|
||||
#define RESPONSE_TIME_DEFAULT RESP_2000MS // 125, 250, 500, 1000, 2000, 4000
|
||||
#define ENABLE_DISPLAY_FILTER 1
|
||||
#define DISPLAY_FILTER_DEFAULT RESP_1000MS // 1S
|
||||
#define FLOWRATE_UPDATE_SCALE 18 // 50/1024= 5%
|
||||
#define FRINDEX_UPDATE_SCALE 8 // 50/1024= 5%
|
||||
//------------------------------------------------------------------------------
|
||||
#define CALIB_PULSE_DEFAULT PULSE_1ML
|
||||
#define CALIB_PULSE_UNIT_MIN PULSE_1ML
|
||||
#define CALIB_PULSE_UNIT_MAX PULSE_1000L
|
||||
|
||||
#define PULSE_LEVEL_DEFAULT LOW
|
||||
#define PULSE_UNIT_DEFAULT PULSE_1000L
|
||||
#define PULSE_UNIT_MIN PULSE_100ML
|
||||
#define PULSE_UNIT_MAX PULSE_1000L
|
||||
|
||||
//for key setup
|
||||
#define PULSE_UNIT_INDEX_MIN PULSE_100ML_INDEX
|
||||
#define PULSE_UNIT_INDEX_MAX PULSE_1000L_INDEX
|
||||
//------------------------------------------------------------------------------
|
||||
#define COM_DECIMAL_POINT_DEFAULT 3
|
||||
//------------------------------------------------------------------------------
|
||||
#define MAX_FR_DEFAULT 600000
|
||||
#define MIN_FR_DEFAULT 0
|
||||
#define CLIAB_STD_FR_GIAN 1 // <20><>ԭ<EFBFBD><D4AD>1000<30>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//------------------------------------------------------------------------------
|
||||
#define ADC_GAIN_DEFAULT 32
|
||||
//------------------------------------------------------------------------------
|
||||
// for AType FlowRate Compute
|
||||
#define SDT_ZERO_OFFSET 20000
|
||||
#define OFFSET_A_MAX 30000
|
||||
#define OFFSET_A_MIN 10000
|
||||
|
||||
#define AUTO_OFFSET_NIDX 150
|
||||
#define AUTO_OFFSET_NVHH 5000
|
||||
|
||||
#define SWITCH_FR_DEFAULT 20000
|
||||
#define SWITCH_FR_INDEX_MAX 30000
|
||||
#define SWITCH_FR_INDEX_MIN 1000
|
||||
|
||||
#define ATYPE_INDEX_GAIN_DEFAULT 30
|
||||
#define ATYPE_INDEX_GAIN_MAX 100
|
||||
#define ATYPE_INDEX_GAIN_MIN 10
|
||||
//------------------------------------------------------------------------------
|
||||
#define TEMPRETURE_OFFSET 10000 // 2bit
|
||||
#define FR_TEMPERATURE_DEAULT 2000
|
||||
|
||||
#define TEMPERATURE_K_STD 27315
|
||||
#define FR_TEMPERATURE_STD 29315 // 273.15 + 20.00
|
||||
//------------------------------------------------------------------------------
|
||||
#define ENABLE_WRITE_TA_HIGH (TEMPRETURE_OFFSET+4750)
|
||||
#define ENABLE_WRITE_TA_LOW (TEMPRETURE_OFFSET+150)
|
||||
#define ENABLE_WRITE_TA_SCALE 150 // 1.5<EFBFBD><EFBFBD>C
|
||||
|
||||
#define TEMP_FACTOR_MAX 50 // 0.005
|
||||
#define TEMP_FACTOR_MIN 0 //-0.005
|
||||
#define TEMP_FACTOR_DEFAULT 25 //-0.0025
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define STATIC_LOW_TA_MAX 11000 // 10<31><30>C
|
||||
#define STATIC_LOW_TA_MIN 8000 // -20<32><30>C
|
||||
#define STATIC_HIGH_TA_MAX 17000 // 70<37><30>C
|
||||
#define STATIC_HIGH_TA_MIN 14000 // 40<34><30>C
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define TGAS_ALARM_MAX 17000 // 70<37><30>C
|
||||
#define TGAS_ALARM_MIN 5000 // -50<35><30>C
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define CALIB_TEMPRETURE_MAX 13500
|
||||
#define CALIB_TEMPRETURE_MIN 11500
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define ZERO_SUPPRESSION_DEFAULT 150
|
||||
#define ZERO_SUPPRESSION_MAX 2000
|
||||
#define ZERO_SUPPRESSION_MIN 0
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define OFFSET_MAX 36768
|
||||
#define OFFSET_MIN 28768
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#define REVERSE_SCALE_DEFAULT 3000
|
||||
#define REVERSE_SCALE_MAX 16000
|
||||
#define REVERSE_SCALE_MIN 300
|
||||
//------------------------------------------------------------------------------
|
||||
#define CURVE_DATA_MAX 36
|
||||
|
||||
#define TACURVE_NUM_DEFAULT 0
|
||||
#define CURVE_NUM_MAX CURVE_DATA_MAX
|
||||
#define CURVE_NUM_MIN 0
|
||||
|
||||
#define ATYPECURVE_NUM_DEFAULT 0
|
||||
#define ATYPECURVE_NUM_MAX CURVE_DATA_MAX
|
||||
#define ATYPECURVE_NUM_MIN 0
|
||||
//------------------------------------------------------------------------------
|
||||
#define RR_GAINRES_DEFAULT 7500
|
||||
#define RR_GAINRES_MAX 62000
|
||||
#define RR_GAINRES_MIN 10000
|
||||
#define RR_OPGAIN_RES 33000.0
|
||||
//------------------------------------------------------------------------------
|
||||
#define AIR_FACTOR_DEFAULT 32768
|
||||
#define AIR_FACTOR_MAX 50768
|
||||
#define AIR_FACTOR_MIN 14768
|
||||
|
||||
#define FACTOR_VTH_DEFAULT 1000
|
||||
#define FACTOR_VT_MAX 10000
|
||||
#define FACTOR_VT_MIN 100
|
||||
//------------------------------------------------------------------------------
|
||||
#define SLAVER_ADDR_DEFAULT 1
|
||||
//------------------------------------------------------------------------------
|
||||
#define RECORD_TIME_DEFAULT 60 // HISTORY_PERIOD
|
||||
//------------------------------------------------------------------------------
|
||||
#define BATTEST_PERIOD_DEFAULT 120
|
||||
//------------------------------------------------------------------------------
|
||||
#define RH_GAINRES_DEFAULT 25
|
||||
//------------------------------------------------------------------------------
|
||||
#define DAC8760 0
|
||||
#define AD5420 1
|
||||
#define SYS_LOOP_CHIP_DEFAULT DAC8760
|
||||
#define SYS_LOOP_CHIP_MIN DAC8760
|
||||
#define SYS_LOOP_CHIP_MAX AD5420
|
||||
//------------------------------------------------------------------------------
|
||||
#define EDM779106D 0
|
||||
#define EDM779103D 1
|
||||
#define SYS_LCD_DEFAULT EDM779106D
|
||||
#define SYS_LCD_MIN EDM779106D
|
||||
#define SYS_LCD_MAX EDM779103D
|
||||
|
||||
//******************************************************************************
|
||||
#define CALIB_WIDTH 100 //帧宽 Flash的话4096的余数 (通讯用)
|
||||
#define MEMORY_BLOCK_WIDTH 128
|
||||
|
||||
#define CALIB_COMP_FAC 3 //压缩比
|
||||
#define CALIB_MAX_INDEX 24000 //最大内码
|
||||
#define CALIB_DEPTH ((CALIB_MAX_INDEX / CALIB_WIDTH) * 3) // 必须为整数,(Index * 3)/CALIB_WIDTH 校准数据帧数(通讯用)
|
||||
#define CALIB_MAX_SIZE ((CALIB_MAX_INDEX / CALIB_COMP_FAC)* 3) // 必须为整数
|
||||
#define CALIB_REAL_SIZE (((CALIB_MAX_SIZE / MEMORY_BLOCK_WIDTH)+1)*MEMORY_BLOCK_WIDTH)
|
||||
#define MAX_OPERATE_DEPTH (CALIB_DEPTH / CALIB_COMP_FAC)
|
||||
|
||||
//for calibration VHH
|
||||
#define CALIB_COMP_FAC2 3 //压缩比
|
||||
#define CALIB_MAX_INDEX2 0 //最大内码
|
||||
#define CALIB_DEPTH2 ((CALIB_MAX_INDEX2 / CALIB_WIDTH) * 3) // 必须为整数,(Index * 3)/CALIB_WIDTH 校准数据帧数(通讯用)
|
||||
#define CALIB_MAX_SIZE2 ((CALIB_MAX_INDEX2 / CALIB_COMP_FAC2)* 3) // 必须为整数
|
||||
#define CALIB_REAL_SIZE2 (((CALIB_MAX_SIZE2 / MEMORY_BLOCK_WIDTH)+1)*MEMORY_BLOCK_WIDTH)
|
||||
#define MAX_OPERATE_DEPTH2 (CALIB_DEPTH2 / CALIB_COMP_FAC2)
|
||||
|
||||
// for calibration A Type FlowRate
|
||||
#define CALIB_COMP_FAC3 8 //压缩比
|
||||
#define CALIB_MAX_INDEX3 24000 //最大内码
|
||||
#define CALIB_DEPTH3 ((CALIB_MAX_INDEX3 / CALIB_WIDTH) * 3) // 必须为整数,(Index * 3)/CALIB_WIDTH 校准数据帧数(通讯用)
|
||||
#define CALIB_MAX_SIZE3 ((CALIB_MAX_INDEX3 / CALIB_COMP_FAC3)* 3) // 必须为整数
|
||||
#define CALIB_REAL_SIZE3 (((CALIB_MAX_SIZE3 / MEMORY_BLOCK_WIDTH)+1)*MEMORY_BLOCK_WIDTH)
|
||||
#define MAX_OPERATE_DEPTH3 (CALIB_DEPTH3/CALIB_COMP_FAC3)
|
||||
|
||||
#define CALI_DATA1_ADDR CALI_DATA_ADDR
|
||||
#define CALI_DATA2_ADDR CALI_DATA_ADDR + CALIB_REAL_SIZE //曲线1的地址 + 曲线1存储大小
|
||||
#define CALI_DATA3_ADDR CALI_DATA2_ADDR + CALIB_REAL_SIZE2 //曲线2的地址 + 曲线2存储大小
|
||||
|
||||
//******************************************************************************
|
||||
#define CTYPE_FR CURVE_1ST
|
||||
#define ATYPE_VH CURVE_2ND
|
||||
#define CTYPE_GAINX CURVE_3RD
|
||||
|
||||
#define INT_2ND_CURVE_CMD INTCMD_ATYPE_CURVE
|
||||
#define INT_3RD_CURVE_CMD INTCMD_MICROFR_CURVE
|
||||
//==============================================================================
|
||||
//******************************************************************************
|
||||
#endif
|
||||
168
user/Core/DP2006_VM1000_Parameter.h
Normal file
168
user/Core/DP2006_VM1000_Parameter.h
Normal file
@@ -0,0 +1,168 @@
|
||||
#ifndef __DP2006_VM1000_PARAMETER_h__
|
||||
#define __DP2006_VM1000_PARAMETER_h__
|
||||
|
||||
//##############################################################################
|
||||
#if DP2006_VM1000
|
||||
|
||||
// <20><>Ҫ<EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//#define INT_PROTOCOL 0x8210 // MODBUS Slaver Addr
|
||||
//#define INT_SLAVER_ADDR 0x8211 // MODBUS Slaver Addr
|
||||
#define MeterFactor WordReg[REG_0X8212]
|
||||
#undef REG_0X8212_VALUE
|
||||
#define REG_0X8212_VALUE {10000,0,1000}
|
||||
|
||||
//#define INT_GDCF 0x8213
|
||||
//#define INT_MAX_FLOW 0x8214
|
||||
//#define INT_OFFSET_GAS 0x8216
|
||||
#define offsetAir WordReg[REG_0X8217]
|
||||
#define factoryInterval WordReg[REG_0X8218]
|
||||
#undef REG_0X8218_VALUE
|
||||
#define REG_0X8218_VALUE { RESP_4000MS, RESP_125MS, SAMPLE_PERIOD_DEFAULT }
|
||||
//#define INT_HISTORY_PERIOD 0x8219
|
||||
//#define INT_PULSE_UNIT 0x821A
|
||||
//#define INT_MAX_LOOP_FR 0x821B
|
||||
#define SensorSN0 WordReg[REG_0X821D]
|
||||
#define SensorSN1 WordReg[REG_0X821E]
|
||||
#define SensorSN2 WordReg[REG_0X821F]
|
||||
//#define INT_TOTAL_ACC 0x8220 // 0x8220-0x8225
|
||||
#define calibTemperature WordReg[REG_0X8226]
|
||||
#undef REG_0X8226_VALUE
|
||||
#define REG_0X8226_VALUE {13500 ,10500, 12500} // 0x8226
|
||||
//#define INT_OFFSET_A_GAS 0x8227
|
||||
//#define INT_OFFSET_A_AIR 0x8228
|
||||
//#define INT_ATYPE_INDEX_GAIN 0x8229
|
||||
//#define INT_GDCF_ATYPE 0x822A
|
||||
//#define INT_GDCF_CTYPE 0x822B
|
||||
//#define INT_CALIB_PIPE 0x822C
|
||||
//#define INT_WORK_PIPE 0x822D
|
||||
//#define INT_WORK_UNIT 0x822E
|
||||
#define language WordReg[REG_0X822F]
|
||||
#undef REG_0X822F_VALUE
|
||||
#define REG_0X822F_VALUE {LANGUAGE_MAX, LANGUAGE_MIN, DIS_LANGUAGE_DEFAULT}
|
||||
//#define INT_ACC_OUT_BIT 0x8230
|
||||
#define reverseScale WordReg[REG_0X8231]
|
||||
#undef REG_0X8231_VALUE
|
||||
#define REG_0X8231_VALUE {16000,100, 3000}
|
||||
|
||||
#define VHHHigh WordReg[REG_0X8232]
|
||||
#define VHHRoom WordReg[REG_0X8233]
|
||||
#define VHHLow WordReg[REG_0X8234]
|
||||
|
||||
#define RHHighTa WordReg[REG_0X8235]
|
||||
//#define RHHighTa WordReg[REG_0X8236]
|
||||
#define RHLowTa WordReg[REG_0X8237]
|
||||
|
||||
#define RRHigh WordReg[REG_0X8238]
|
||||
#define RRRoom WordReg[REG_0X8239]
|
||||
#define RRLow WordReg[REG_0X823A]
|
||||
|
||||
//#define INT_GCF_A 0x823B
|
||||
//#define INT_GCF_B 0x823D
|
||||
//#define INT_GCF_C 0x823E
|
||||
//#define INT_RH_GAINRES 0x8240
|
||||
//#define INT_RR_GAINRES 0x8241
|
||||
|
||||
#define zeroSuppression WordReg[REG_0X8244]
|
||||
#undef REG_0X8244_VALUE
|
||||
#define REG_0X8244_VALUE { 2000, 10, 100}
|
||||
|
||||
#define staticLowTemperature WordReg[REG_0X8245]
|
||||
#undef REG_0X8245_VALUE
|
||||
#define REG_0X8245_VALUE {11000, 7500,10000}
|
||||
|
||||
#define staticHighTemperature WordReg[REG_0X8246]
|
||||
#undef REG_0X8246_VALUE
|
||||
#define REG_0X8246_VALUE {17000,14500,15000}
|
||||
//#define INT_PULSE_COUNTER 0x8247 // byte = 4
|
||||
//#define INT_ATYPE_RC 0x8249 //
|
||||
//#define INT_ATYPE_WIPER 0x824A //
|
||||
//#define INT_CTYPE_WIPER 0x824B //
|
||||
//#define INT_CTYPE_ADC 0x824C /
|
||||
#define OffsetHigh WordReg[REG_0X824D]
|
||||
#undef REG_0X824D_VALUE
|
||||
#define REG_0X824D_VALUE {60000, 5000,32768}
|
||||
|
||||
#define OffsetLow WordReg[REG_0X824E]
|
||||
#undef REG_0X824E_VALUE
|
||||
#define REG_0X824E_VALUE {60000, 5000,32768}
|
||||
//
|
||||
//#define INT_TRH_HIGH 0x824F //
|
||||
//#define INT_TRH_LOW 0x8250 //
|
||||
//#define INT_MEMS_RATIO 0x8251 //
|
||||
//#define INT_SYS_LCD 0x8252 //
|
||||
//#define INT_SYS_CHIP 0x8253
|
||||
#define temperatureFactor WordReg[REG_0X8254]
|
||||
#undef REG_0X8254_VALUE
|
||||
#define REG_0X8254_VALUE { 100, 0, 25}
|
||||
//
|
||||
#define offsetGasGainx WordReg[REG_0X8255]
|
||||
#define offsetAirGainx WordReg[REG_0X8256]
|
||||
//#define INT_OFFSET_RGINX 0x8257
|
||||
#define P0RhHigh WordReg[REG_0X8258]
|
||||
#define P0RhLow WordReg[REG_0X8259]
|
||||
|
||||
#define adcGain WordReg[REG_0X825A]
|
||||
#undef REG_0X825A_VALUE
|
||||
#define REG_0X825A_VALUE { 128, 1, 32}
|
||||
|
||||
#define resFactor WordReg[REG_0X825B]
|
||||
#undef REG_0X825B_VALUE
|
||||
#define REG_0X825B_VALUE { 100, 0, 30}
|
||||
|
||||
//#define INT_BATTEST_PERIOD 0x825C
|
||||
//#define INT_FR_SWITCH_POINT 0x825D
|
||||
|
||||
#define calibFlowGain WordReg[REG_0X825F]
|
||||
#undef REG_0X825F_VALUE
|
||||
#define REG_0X825F_VALUE { 1000, 1, 1} // У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//#define INT_AUTO_CALIB_ATYPE 0x8260
|
||||
//#define INT_USER_INIT_INDEX 0x8261
|
||||
//#define INT_DIVHX_HIGH 0x8262
|
||||
//#define INT_DIVHX_ROOM 0x8263
|
||||
//#define INT_DIVHX_LOW 0x8264
|
||||
#define VDUGXHigh WordReg[REG_0X8265]
|
||||
//#define INT_VDUGX_ROOM 0x8266
|
||||
#define VDUGXLow WordReg[REG_0X8267]
|
||||
#define sampleSwitchThreshold WordReg[REG_0X8268]
|
||||
#undef REG_0X8268_VALUE
|
||||
#define REG_0X8268_VALUE { 4000, 0, 2500}
|
||||
|
||||
/*******************************************************************************/
|
||||
#define keyPassWord DWordReg[REG_0X8280]
|
||||
#undef REG_0X8280_VALUE
|
||||
#define REG_0X8280_VALUE {0xFFFFFFFF, 0, 11111}
|
||||
|
||||
|
||||
/*******************************************************************************/
|
||||
#define ReadShortParameterFromMemory(parameterAdr, parameterDefault) ReadShortParameterFromEEPROM(parameterAdr, parameterDefault)
|
||||
#define ReadLongParameterFromMemory(parameterAdr, parameterDefault) ReadLongParameterFromEEPROM(parameterAdr, parameterDefault)
|
||||
|
||||
#define WriteShortParameterToMemory(WRAddr) WriteShortParameterToEEPROM(WRAddr)
|
||||
#define WriteLongParameterToMemory(WRAddr) WriteLongParameterToEEPROM(WRAddr)
|
||||
|
||||
#define ReadMultiByteFromMemory(address, wrtData, dataLenth) ReadMultiByteFromEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
#define WriteMultiByteToMemory(address, wrtData, dataLenth) WriteMultiByteToEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
|
||||
#define ReadCalbrationDataFromMemory(address, wrtData, dataLenth) ReadMultiByteFromEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
#define WriteCalbrationDataToMemory(address, wrtData, dataLenth) WriteMultiByteToEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
|
||||
#define ReadMultiByteFromFRAM(address, wrtData, dataLenth) ReadMultiByteFromEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
#define WriteMultiByteToFRAM(address, wrtData, dataLenth) WriteMultiByteToEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
|
||||
/*******************************************************************************/
|
||||
|
||||
//#define ReadShortParameterFromMemory(parameterAdr, parameterDefault) ReadShortParameterFromFlash(parameterAdr, parameterDefault)
|
||||
//#define ReadLongParameterFromMemory(parameterAdr, parameterDefault) ReadLongParameterFromFlash(parameterAdr, parameterDefault)
|
||||
|
||||
//#define WriteShortParameterToMemory(WRAddr) WriteShortParameterToFlash(WRAddr)
|
||||
//#define WriteLongParameterToMemory(WRAddr) WriteLongParameterToFlash(WRAddr)
|
||||
|
||||
//#define ReadMultiByteFromMemory(address, wrtData, dataLenth, flashAdr) ReadMultiByteFromFlash(address, wrtData, dataLenth, flashAdr)
|
||||
//#define WriteMultiByteToMemory(address, wrtData, dataLenth, flashAdr) WriteMultiByteToFlash(address, wrtData, dataLenth, flashAdr)
|
||||
|
||||
#define DisableSamplingInterrupt();
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -12,6 +12,17 @@ u16 offsetRType, offsetGCFX;
|
||||
u16 voltageDetected[ANX], adcGain;
|
||||
|
||||
|
||||
void SystemPolling(void) //<2F><>ѯ
|
||||
{
|
||||
// if(mcuModeSleeping) LowPowerModeProcess();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB9><EFBFBD>ģʽ
|
||||
|
||||
if(mucSaveParams==PARAMS_READY) SaveSysParams();//<2F><><EFBFBD><EFBFBD><EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Flash
|
||||
|
||||
if(HWState.SampledOver) FlowRateDealAndOuputSub(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
if(comState.state.ReceivedData) ReceivedDataProcessing(); //һ֡<D2BB><D6A1><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
}
|
||||
|
||||
/*==========================================================================================
|
||||
//<2F>ⲿ<EFBFBD><E2B2BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸
|
||||
@@ -55,12 +66,34 @@ void TestTemperature(void)//
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>
|
||||
/*********************************************************************/
|
||||
|
||||
uint32_t data_array[64];
|
||||
uint32_t sum = 0;
|
||||
uint32_t average = 0;
|
||||
void FlowRateDealAndOuputSub(void)
|
||||
{
|
||||
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD>
|
||||
|
||||
ComputeFlowRateIndexAndFlowRate();//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
TestTemperature();//<2F><><EFBFBD><EFBFBD>PCB<43>¶<EFBFBD>
|
||||
|
||||
|
||||
|
||||
// for (int i = 0; i < 64; i++) {
|
||||
// data_array[i] = rand();
|
||||
// }
|
||||
// u32 *p=data_array;
|
||||
// TEST_PIN_TOGGLE();
|
||||
// for (int i = 0; i < 64; i++) {
|
||||
// sum += *p++;
|
||||
// }
|
||||
// average = sum >> 6;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
/*sampleData.TCode[CTCode]//VDU
|
||||
sampleData.TCode[RTCode]//VRR
|
||||
@@ -68,6 +101,8 @@ void FlowRateDealAndOuputSub(void)
|
||||
sampleData.TCode[ATCode]//IRH*/
|
||||
void ComputeFlowRateIndexAndFlowRate(void)
|
||||
{
|
||||
|
||||
|
||||
voltageDetected[NIDX ]= (u16)sampleData.TCode[CTCode]; //8303 VDU1
|
||||
voltageDetected[VRHX ]= (u16)sampleData.TCode[RTCode]; //8304 VRR
|
||||
voltageDetected[IVHDX]= (u16)sampleData.TCode[HTCode]; //8305 VRH
|
||||
@@ -92,7 +127,8 @@ void ComputeFlowRateIndexAndFlowRate(void)
|
||||
voltageDetected[FR_L] = currentFlowRate&0xFFFF;
|
||||
// voltageDetected[VDUGX]= AirflowSensor_Read();
|
||||
// voltageDetected[TPCB]= (u16)(Get_AirflowSensor_SCCM());
|
||||
|
||||
|
||||
|
||||
}
|
||||
u16 WordSubFunction(u16 minuend, u16 subtractor)
|
||||
{
|
||||
@@ -154,8 +190,226 @@ void SetNextProcess(void)//
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*-----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
__Samp_Buf_TypeDef sampleData;
|
||||
static void ADC0_Conversion_Init(ADC_BaseConfig_TypeDef* adc_config)
|
||||
{
|
||||
ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Դ */
|
||||
ADC_Init(ADC_0, adc_config->SPS, adc_config->Gain, adc_config->PChan, adc_config->NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
|
||||
}
|
||||
//ADC1<43><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
|
||||
static void ADC1_Conversion_Init(ADC_BaseConfig_TypeDef* adc_config)
|
||||
{
|
||||
ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Դ */
|
||||
ADC_Init(ADC_1, adc_config->SPS, adc_config->Gain, adc_config->PChan, adc_config->NChan); /* 2. <20><>ʼ<EFBFBD><CABC>ADC1 */
|
||||
}
|
||||
void SetSampleSiagnlForSingleADC(const ADC_BaseConfig_TypeDef* adc_cfg)
|
||||
{
|
||||
sampleData.adcBaseCfg.Gain = adc_cfg->Gain;
|
||||
sampleData.adcBaseCfg.PChan = adc_cfg->PChan;
|
||||
sampleData.adcBaseCfg.NChan = adc_cfg->NChan;
|
||||
sampleData.adcBaseCfg.SPS = adc_cfg->SPS;
|
||||
}
|
||||
|
||||
//ADCͬ<43><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>----------------------------------------------------------
|
||||
static void ADC0_1_SyncConversion_Init(ADC_SyncConfig_TypeDef* adc_config)
|
||||
{
|
||||
// ADC_REF_Init(REF_INTERNAL_2P5V,REF_INTERNAL_2P5V);/* 1. <20><>ʼ<EFBFBD><CABC><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD>Դ */
|
||||
REF_InitTypeDef REF_InitStructure;
|
||||
REF_InitStructure.VREF = REF_INTERNAL_2P5V; // <20>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><D7BC>ѹ
|
||||
REF_InitStructure.VDRIVE = REF_INTERNAL_2P5V; // VDrive<76><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ
|
||||
REF_InitStructure.VREF_Boost = DISABLE;
|
||||
LHL_REF_Init(&REF_InitStructure);
|
||||
|
||||
// LHL_ADC_SetVREF(REF_INTERNAL_2P5V, ENABLE);
|
||||
// LHL_ADC_SetVDRIVE(REF_INTERNAL_2P5V, ENABLE);
|
||||
|
||||
|
||||
ADC_Init(ADC_0, adc_config->SPS, adc_config->Gain0, adc_config->PChan0, adc_config->NChan0); /* 2. <20><>ʼ<EFBFBD><CABC>ADC0 */
|
||||
ADC_Init(ADC_1, adc_config->SPS, adc_config->Gain1, adc_config->PChan1, adc_config->NChan1); /* 3. <20><>ʼ<EFBFBD><CABC>ADC1 */
|
||||
ADC_SyncCmd(ENABLE);/* 4. ADCͬ<43><CDAC>ʹ<EFBFBD><CAB9> */
|
||||
}
|
||||
|
||||
void SetSampleSiagnlForSyncADC(const ADC_SyncConfig_TypeDef* adc_cfg)
|
||||
{
|
||||
sampleData.adcSyncCfg.Gain0 = adc_cfg->Gain0;
|
||||
sampleData.adcSyncCfg.PChan0 = adc_cfg->PChan0;
|
||||
sampleData.adcSyncCfg.NChan0 = adc_cfg->NChan0;
|
||||
sampleData.adcSyncCfg.Gain1 = adc_cfg->Gain1;
|
||||
sampleData.adcSyncCfg.PChan1 = adc_cfg->PChan1;
|
||||
sampleData.adcSyncCfg.NChan1 = adc_cfg->NChan1;
|
||||
sampleData.adcSyncCfg.SPS = adc_cfg->SPS;
|
||||
}
|
||||
/* ======================================================================================================
|
||||
adc<64>жϲ<D0B6><CFB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>
|
||||
1.<2E><><EFBFBD>ã<EFBFBD>SetSampleSiagnlForSingleADC SetSampleSiagnlForSyncADC
|
||||
2.<2E><>ʼ<EFBFBD><CABC>StartADC0SampingData StartADC1SampingData StartADCSyncSampingData
|
||||
3.<2E><>ȡ<EFBFBD><C8A1>IRQ ReadSamplingData
|
||||
4.<2E><><EFBFBD>㣺ComputeSampleData
|
||||
======================================================================================================*/
|
||||
//ת<><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
|
||||
void ConversionIRQ_Callback(void)
|
||||
{
|
||||
if(sampleData.SkipSampNum) {sampleData.SkipSampNum -- ; return; }
|
||||
ReadSamplingData(); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
//<2F><>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
|
||||
void StartADC0SampingData(void)
|
||||
{
|
||||
sampleData.ADCBuffer[0]=0;
|
||||
sampleData.Counter=0;
|
||||
sampleData.SkipSampNum = 3 ;
|
||||
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
|
||||
ADC_register_irq_callback(ADC_0,ConversionIRQ_Callback);
|
||||
StartADC(ADC_0);
|
||||
}
|
||||
void StartADC1SampingData(void)
|
||||
{
|
||||
sampleData.ADCBuffer[1]=0;
|
||||
sampleData.Counter=0;
|
||||
sampleData.SkipSampNum = 3 ;
|
||||
ADC1_Conversion_Init(&sampleData.adcBaseCfg);
|
||||
ADC_register_irq_callback(ADC_1,ConversionIRQ_Callback);
|
||||
StartADC(ADC_1);
|
||||
}
|
||||
|
||||
void StartADCSyncSampingData(void)
|
||||
{
|
||||
sampleData.ADCBuffer[0]=0;
|
||||
sampleData.ADCBuffer[1]=0;
|
||||
sampleData.Counter=0;
|
||||
sampleData.SkipSampNum = 3 ;
|
||||
#if 1
|
||||
ADC0_1_SyncConversion_Init(&sampleData.adcSyncCfg);
|
||||
ADC_register_irq_callback(ADC_0,ConversionIRQ_Callback);
|
||||
StartADC(ADC_0);//ֻ<>迪<EFBFBD><E8BFAA>ADC_0
|
||||
#else
|
||||
NVIC_DisableIRQ(ADC0_IRQn);
|
||||
StartConversionTimerInterval(1);//1ms <20><>ʱ<EFBFBD><CAB1><EFBFBD>ж϶<D0B6>ȡadcת<63><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
Timer_register_irq_callback(ConversionTimer,ConversionIRQ_Callback );//ע<><D7A2>timer2<72>жϻص<CFBB><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
void ReadSamplingData(void)//ADC<44>ж϶<D0B6>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BPS
|
||||
{
|
||||
sampleData.ADCBuffer[0] += ADC_ReadData(ADC_0); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
||||
sampleData.ADCBuffer[1] += ADC_ReadData(ADC_1); //<2F><><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD>ۼ<EFBFBD>
|
||||
sampleData.Counter++; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
|
||||
void ComputeSampleData(void) //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
StopADC(ADC_0);
|
||||
StopADC(ADC_1);
|
||||
if(sampleData.Counter != 0)//<2F>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD>
|
||||
{
|
||||
sampleData.ADCBuffer[0] /= (u32)sampleData.Counter;
|
||||
sampleData.ADCBuffer[1] /= (u32)sampleData.Counter;
|
||||
}
|
||||
}
|
||||
|
||||
/* ======================================================================================================
|
||||
adc dma<6D><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD>
|
||||
1.<2E><><EFBFBD>ã<EFBFBD> SetSampleSiagnlForSingleADC SetSampleSiagnlForSyncADC
|
||||
2.<2E><>ʼ<EFBFBD><CABC> StartDMAForADC0SampingData StartDMAForADC1SampingData StartDMAForADCSyncSampingData
|
||||
3.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: IRQ <20><>־λ
|
||||
4.<2E><><EFBFBD>㣺 DMA_ComputeSampleData_ADC0 DMA_ComputeSampleData_ADC1
|
||||
======================================================================================================*/
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
|
||||
void DMAForADC0_Callback()
|
||||
{
|
||||
sampleData.DMA_ADC_adcflag[0] = 1;
|
||||
}
|
||||
void DMAForADC1_Callback()
|
||||
{
|
||||
sampleData.DMA_ADC_adcflag[1] = 1;
|
||||
}
|
||||
|
||||
//<2F><>ʼת<CABC><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>---------------------------------------------------------------
|
||||
void StartDMAForADC0SampingData(void)
|
||||
{
|
||||
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
|
||||
DMA_ADC_Init(ADC_0,sampleData.DMA_ADC_Buffer[0],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
|
||||
DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForADC0_Callback);
|
||||
DMA_StartADC(ADC_0);
|
||||
}
|
||||
void StartDMAForADC1SampingData(void)
|
||||
{
|
||||
ADC0_Conversion_Init(&sampleData.adcBaseCfg);
|
||||
DMA_ADC_Init(ADC_1, sampleData.DMA_ADC_Buffer[1],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
|
||||
DMA_register_irq_callback(DMA_CHANNEL_ADC_1,NULL,DMAForADC1_Callback);
|
||||
DMA_StartADC(ADC_1);
|
||||
}
|
||||
|
||||
/*<2A>û<EFBFBD><C3BB>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
void StartDMAForADCSyncSampingData(void)
|
||||
{
|
||||
ADC0_1_SyncConversion_Init(&sampleData.adcSyncCfg);
|
||||
DMA_ADC_Init(ADC_0,sampleData.DMA_ADC_Buffer[0],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
|
||||
DMA_ADC_Init(ADC_1,sampleData.DMA_ADC_Buffer[1],sampleData.DMA_ADC_SampLen+sampleData.SkipSampNum);
|
||||
DMA_register_irq_callback(DMA_CHANNEL_ADC_0,NULL,DMAForADC0_Callback);
|
||||
DMA_register_irq_callback(DMA_CHANNEL_ADC_1,NULL,DMAForADC1_Callback);
|
||||
DMA_StartADC(ADC_0);
|
||||
DMA_StartADC(ADC_1);
|
||||
}
|
||||
|
||||
u16 DMA_ComputeSampleData_ADC0(void)
|
||||
{
|
||||
u16 adcCode;
|
||||
u32 adcCount;
|
||||
u8 i ;
|
||||
for(i = sampleData.SkipSampNum ; i < sampleData.DMA_ADC_SampLen ;i++)
|
||||
{
|
||||
adcCode = ((((sampleData.DMA_ADC_Buffer[0][i] & 0xFFFFFF) | ((sampleData.DMA_ADC_Buffer[0][i] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>
|
||||
adcCount += adcCode ;
|
||||
}
|
||||
adcCode = adcCount>>sampleData.DMA_ADC_Exponent;
|
||||
return adcCode;
|
||||
}
|
||||
u16 DMA_ComputeSampleData_ADC1(void)
|
||||
{
|
||||
u16 adcCode;
|
||||
u32 adcCount;
|
||||
u8 i ;
|
||||
for(u8 i = sampleData.SkipSampNum ; i < sampleData.DMA_ADC_SampLen ;i++)
|
||||
{
|
||||
adcCode = ((((sampleData.DMA_ADC_Buffer[1][i] & 0xFFFFFF) | ((sampleData.DMA_ADC_Buffer[1][i] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>16λ<36><CEBB><EFBFBD><EFBFBD>
|
||||
adcCount += adcCode ;
|
||||
}
|
||||
|
||||
adcCode = adcCount>>sampleData.DMA_ADC_Exponent;
|
||||
return adcCode;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*<2A>û<EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD><C5BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
typedef enum {
|
||||
Signal_VDU_VRR,
|
||||
Signal_VDU1_VRH,
|
||||
@@ -165,18 +419,21 @@ typedef enum {
|
||||
//......
|
||||
Signals_Count,
|
||||
}ADC_CFG_Index_TypeDef;
|
||||
static const ADC_Config_TypeDef signal_cfgs[Signals_Count] = {
|
||||
static const ADC_SyncConfig_TypeDef signal_cfgs[Signals_Count] = {
|
||||
[Signal_VDU_VRR] = { GAIN64, ADC0_AIN0, ADC0_AIN1, GAIN1, ADC1_AIN3, ADC1_AIN4 ,SPS_977 },
|
||||
[Signal_VDU1_VRH] = { GAIN64, ADC0_AIN0, ADC0_AIN1, GAIN1, ADC1_AIN2, ADC1_AVSS ,SPS_977 },
|
||||
[Signal_VDU2_VRH] = { GAIN128, ADC0_AIN0, ADC0_AIN1, GAIN1, ADC1_AIN2, ADC1_AVSS ,SPS_977 },
|
||||
[Signal_VDU1_IRH] = { GAIN64, ADC0_AIN0, ADC0_AIN1, GAIN1, ADC1_AIN5, ADC1_AIN4 ,SPS_977 },
|
||||
[Signal_VDU2_IRH] = { GAIN128, ADC0_AIN0, ADC0_AIN1, GAIN1, ADC1_AIN5, ADC1_AIN4 ,SPS_977 },
|
||||
[Signal_VDU1_IRH] = { GAIN64, ADC0_AIN0, ADC0_AIN1, GAIN8, ADC1_AIN5, ADC1_AIN4 ,SPS_977 },
|
||||
[Signal_VDU2_IRH] = { GAIN128, ADC0_AIN0, ADC0_AIN1, GAIN8, ADC1_AIN5, ADC1_AIN4 ,SPS_977 },
|
||||
//......
|
||||
};
|
||||
|
||||
/*sampleData.TCode[CTCode]//VDU
|
||||
sampleData.TCode[RTCode]//VRR
|
||||
sampleData.TCode[HTCode]//VRH
|
||||
sampleData.TCode[ATCode]//IRH*/
|
||||
|
||||
#define CLIBMODE 1
|
||||
void FlowProcessManagement(void)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>״̬<D7B4><CCAC>
|
||||
{
|
||||
switch(flowProcess.Index)
|
||||
@@ -185,7 +442,7 @@ void FlowProcessManagement(void)//
|
||||
{
|
||||
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
|
||||
|
||||
SetSampleSiagnlForADC(signal_cfgs[Signal_VDU_VRR]);
|
||||
SetSampleSiagnlForSyncADC(&signal_cfgs[Signal_VDU_VRR]);
|
||||
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
flowProcess.NextTime += 653; //40ms <20><><EFBFBD><EFBFBD>ֵ= 65535/4000*t<><74>t=40<34><30> = 653
|
||||
@@ -196,19 +453,32 @@ void FlowProcessManagement(void)//
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[RTCode] = sampleData.ADCBuffer[1];//VRR <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
|
||||
#if CLIBMODE
|
||||
if(flowProcess.State == 0) //<2F><>һ<EFBFBD><D2BB>ȥPart2 VDU_VRH
|
||||
{
|
||||
SetSampleSiagnlForSyncADC(&signal_cfgs[Signal_VDU1_VRH]);//ʹ<><CAB9>VDU1<55><31><EFBFBD>вɼ<D0B2>
|
||||
}
|
||||
else //<2F><>һ<EFBFBD><D2BB>ȥPart4 VDU_IRH
|
||||
{
|
||||
SetSampleSiagnlForSyncADC(&signal_cfgs[Signal_VDU2_IRH]);//ʹ<><CAB9>VDU2<55><32><EFBFBD>вɼ<D0B2>
|
||||
}
|
||||
#else
|
||||
u16 currt_vdu = sampleData.ADCBuffer[0];//Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
if(flowProcess.State == 0) //<2F><>һ<EFBFBD><D2BB>ȥPart2 VDU_VRH
|
||||
{
|
||||
if(currt_vdu)SetSampleSiagnlForADC(&signal_cfgs[Signal_VDU1_VRH]);//<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else SetSampleSiagnlForADC(&signal_cfgs[Signal_VDU2_VRH]);
|
||||
}
|
||||
else //<2F><>һ<EFBFBD><D2BB>ȥPart4 VDU_IRH
|
||||
{
|
||||
if(currt_vdu)SetSampleSiagnlForADC(&signal_cfgs[Signal_VDU1_IRH]);//<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else SetSampleSiagnlForADC(&signal_cfgs[Signal_VDU2_IRH]);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
u16 currt_vdu = sampleData.ADCBuffer[0];//Ԥ<><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
if(flowProcess.State == 0) //<2F><>һ<EFBFBD><D2BB>ȥPart2 VDU_VRH
|
||||
{
|
||||
if(currt_vdu)SetSampleSiagnlForADC(signal_cfgs[Signal_VDU1_VRH]);//<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else SetSampleSiagnlForADC(signal_cfgs[Signal_VDU2_VRH]);
|
||||
}
|
||||
else //<2F><>һ<EFBFBD><D2BB>ȥPart4 VDU_IRH
|
||||
{
|
||||
if(currt_vdu)SetSampleSiagnlForADC(signal_cfgs[Signal_VDU1_IRH]);//<2F><><EFBFBD>ݲ<EFBFBD><DDB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
else SetSampleSiagnlForADC(signal_cfgs[Signal_VDU2_IRH]);
|
||||
}
|
||||
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
flowProcess.NextTime += 1048;//64ms
|
||||
@@ -218,77 +488,24 @@ void FlowProcessManagement(void)//
|
||||
case 2: //Part3
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[CTCode] = sampleData.ADCBuffer[0];//VDU <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
//Part2 Part4<74><34>֧
|
||||
if(flowProcess.State == 0)sampleData.TCode[HTCode] = sampleData.ADCBuffer[1];//VRH <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
else sampleData.TCode[ATCode] = sampleData.ADCBuffer[1];//IRH <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
|
||||
HWState.SampledOver = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
StopSamplingTimerInterval();//<2F>رղɼ<D5B2>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>Part3
|
||||
if(flowProcess.State) flowProcess.State = 0 ;//<2F>л<EFBFBD>Part2 Part4
|
||||
else flowProcess.State = 1 ;
|
||||
|
||||
flowProcess.Index = 0;
|
||||
}break;
|
||||
|
||||
default : flowProcess.Index = 0; break;
|
||||
}
|
||||
SetNextProcess();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Уģʽ<C4A3><CABD>״̬<D7B4><CCAC>
|
||||
void FlowProcessManagement_Calib(void)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>״̬<D7B4><CCAC>
|
||||
{
|
||||
switch(flowProcess.Index)
|
||||
{
|
||||
case 0: //Part1<74><31><EFBFBD><EFBFBD> VDU<44><55>VRR<52><52><EFBFBD><EFBFBD>
|
||||
{
|
||||
HWState.SampledOver = 0;//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
|
||||
|
||||
SetSampleSiagnlForADC(signal_cfgs[Signal_VDU_VRR]);
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
flowProcess.NextTime += 653; //40ms <20><><EFBFBD><EFBFBD>ֵ= 65535/4000*t<><74>t=40<34><30> = 653
|
||||
flowProcess.Index = 1;
|
||||
}break;
|
||||
|
||||
case 1: //Part2 Part4<74><34>֧
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
sampleData.TCode[RTCode] = sampleData.ADCBuffer[1];//VRR <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
|
||||
if(flowProcess.State == 0) //<2F><>һ<EFBFBD><D2BB>ȥPart2 VDU_VRH
|
||||
{
|
||||
SetSampleSiagnlForADC(signal_cfgs[Signal_VDU1_VRH]);//ʹ<><CAB9>VDU1<55><31><EFBFBD>вɼ<D0B2>
|
||||
}
|
||||
else //<2F><>һ<EFBFBD><D2BB>ȥPart4 VDU_IRH
|
||||
{
|
||||
SetSampleSiagnlForADC(signal_cfgs[Signal_VDU2_IRH]);//ʹ<><CAB9>VDU2<55><32><EFBFBD>вɼ<D0B2>
|
||||
}
|
||||
StartADCSyncSampingData();//<2F><>ʼ<EFBFBD>ɼ<EFBFBD>
|
||||
flowProcess.NextTime += 1048;//64ms
|
||||
flowProcess.Index = 2;
|
||||
}break;
|
||||
|
||||
case 2: //Part3
|
||||
{
|
||||
ComputeSampleData(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//Part2 Part4<74><34>֧
|
||||
if(flowProcess.State == 0)
|
||||
#if CLIBMODE
|
||||
if(flowProcess.State == 0)//Part2
|
||||
{
|
||||
sampleData.TCode[CTCode] = sampleData.ADCBuffer[0];//VDU1 <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[HTCode] = sampleData.ADCBuffer[1];//VRH <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
}
|
||||
else
|
||||
else //Part4
|
||||
{
|
||||
sampleData.TCode[BTCode] = sampleData.ADCBuffer[0];//VDU2 <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
sampleData.TCode[ATCode] = sampleData.ADCBuffer[1];//IRH <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
}
|
||||
#else
|
||||
sampleData.TCode[CTCode] = sampleData.ADCBuffer[0];//VDU <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
if(flowProcess.State == 0)sampleData.TCode[HTCode] = sampleData.ADCBuffer[1];//VRH <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
else sampleData.TCode[ATCode] = sampleData.ADCBuffer[1];//IRH <20><><EFBFBD>뻺<EFBFBD><EBBBBA>
|
||||
#endif
|
||||
|
||||
|
||||
HWState.SampledOver = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
StopSamplingTimerInterval();//<2F>رղɼ<D5B2>ʱ<EFBFBD><CAB1> <20><><EFBFBD><EFBFBD>Part3
|
||||
@@ -296,15 +513,84 @@ void FlowProcessManagement_Calib(void)//
|
||||
else flowProcess.State = 1 ;
|
||||
|
||||
flowProcess.Index = 0;
|
||||
}break;
|
||||
}break;
|
||||
|
||||
default : flowProcess.Index = 0; break;
|
||||
}
|
||||
SetNextProcess();
|
||||
}
|
||||
|
||||
//mcuModeSleeping = 1 ; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><CDB9><EFBFBD>ģʽ
|
||||
//
|
||||
|
||||
|
||||
|
||||
void DMA_sampleMainProcess(void)//DMA<4D><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>״̬<D7B4><CCAC>
|
||||
{
|
||||
volatile u8 DMA_State_Index;
|
||||
|
||||
switch(DMA_State_Index)
|
||||
{
|
||||
case 0 : //67.68ms sps=977
|
||||
if(HWState.SampledOver) return;
|
||||
|
||||
HWState.SampledOver = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ
|
||||
sampleData.SkipSampNum = 0 ;
|
||||
sampleData.DMA_ADC_SampLen = 16 ;
|
||||
sampleData.DMA_ADC_Exponent= 4;
|
||||
SetSampleSiagnlForSyncADC(&signal_cfgs[Signal_VDU_VRR]);// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
StartDMAForADCSyncSampingData(); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
DMA_State_Index++;
|
||||
//TEST_PIN_TOGGLE();
|
||||
break;
|
||||
case 1 :
|
||||
if(!sampleData.DMA_ADC_adcflag[0]) return;
|
||||
if(!sampleData.DMA_ADC_adcflag[1]) return;
|
||||
sampleData.DMA_ADC_adcflag[0]= 0;
|
||||
sampleData.DMA_ADC_adcflag[1]= 0;
|
||||
|
||||
//TEST_PIN_TOGGLE();
|
||||
sampleData.TCode[CTCode] = DMA_ComputeSampleData_ADC0();
|
||||
sampleData.TCode[RTCode] = DMA_ComputeSampleData_ADC1();
|
||||
|
||||
sampleData.SkipSampNum = 0 ;
|
||||
sampleData.DMA_ADC_SampLen = 32 ;
|
||||
sampleData.DMA_ADC_Exponent= 5;
|
||||
|
||||
SetSampleSiagnlForSyncADC(&signal_cfgs[Signal_VDU2_VRH]);// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
StartDMAForADCSyncSampingData(); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
DMA_State_Index++;
|
||||
break;
|
||||
case 2 :
|
||||
if(!sampleData.DMA_ADC_adcflag[0]) return;
|
||||
if(!sampleData.DMA_ADC_adcflag[1]) return;
|
||||
sampleData.DMA_ADC_adcflag[0]= 0;
|
||||
sampleData.DMA_ADC_adcflag[1]= 0;
|
||||
|
||||
sampleData.TCode[BTCode] = DMA_ComputeSampleData_ADC0();
|
||||
sampleData.TCode[HTCode] = DMA_ComputeSampleData_ADC1();
|
||||
|
||||
|
||||
sampleData.SkipSampNum = 0 ;
|
||||
sampleData.DMA_ADC_SampLen = 32 ;
|
||||
sampleData.DMA_ADC_Exponent= 5;
|
||||
SetSampleSiagnlForSyncADC(&signal_cfgs[Signal_VDU2_IRH]);// <20><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD><EFBFBD>ź<EFBFBD>
|
||||
StartDMAForADCSyncSampingData(); // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
||||
DMA_State_Index++;
|
||||
break;
|
||||
case 3 :
|
||||
if(!sampleData.DMA_ADC_adcflag[0]) return;
|
||||
if(!sampleData.DMA_ADC_adcflag[1]) return;
|
||||
sampleData.DMA_ADC_adcflag[0]= 0;
|
||||
sampleData.DMA_ADC_adcflag[1]= 0;
|
||||
sampleData.TCode[ATCode] = DMA_ComputeSampleData_ADC1();
|
||||
|
||||
HWState.SampledOver = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
DMA_State_Index = 0 ;
|
||||
break;
|
||||
default : DMA_State_Index = 0 ;
|
||||
}
|
||||
}
|
||||
/*================================================================================*/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -13,11 +13,6 @@
|
||||
#define ResetSamplingTimerInterval(uploadCounter) ResetTimer1_CC1(uploadCounter)
|
||||
#define StopSamplingTimerInterval() StopTimer1()
|
||||
|
||||
//ADCת<43><D7AA><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
#define ConversionTimer TIM2
|
||||
#define StartConversionTimerInterval(uploadCounter) StartTimer2_UIE(uploadCounter)
|
||||
#define ResetConversionTimerInterval(uploadCounter) ResetTimer2_UIE(uploadCounter)
|
||||
#define StopConversionTimerInterval() StopTimer2()
|
||||
|
||||
//for GPIO START==============================================================================
|
||||
// for soft I2C
|
||||
@@ -98,7 +93,7 @@
|
||||
|
||||
|
||||
|
||||
//
|
||||
// ReadParameterFromEEPROM
|
||||
|
||||
//for GPIO END===============================================================================\
|
||||
//=============================================================================================================================================================================================
|
||||
@@ -131,6 +126,99 @@ void FlowProcessManagement(void);//
|
||||
void StartNormolFlowMeasurement(void);//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void ComputeFlowRateIndexAndFlowRate(void);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void FlowRateDealAndOuputSub(void);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//======================================================================================================================================================================================
|
||||
|
||||
typedef struct {
|
||||
u8 Gain; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
u8 PChan; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
u8 NChan; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
u8 SPS; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
} ADC_BaseConfig_TypeDef;
|
||||
|
||||
typedef struct {
|
||||
u8 Gain0; //ADC_0<5F><30><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
u8 PChan0; //ADC_0<5F><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
u8 NChan0; //ADC_0<5F><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
u8 Gain1; //ADC_1<5F><31><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD>ϵ<EFBFBD><CFB5>
|
||||
u8 PChan1; //ADC_1<5F><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
u8 NChan1; //ADC_1<5F><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
||||
u8 SPS; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
} ADC_SyncConfig_TypeDef;
|
||||
|
||||
enum
|
||||
{
|
||||
CTCode,
|
||||
RTCode,
|
||||
HTCode,
|
||||
ATCode,
|
||||
BTCode,
|
||||
DTCode,
|
||||
ETCode,
|
||||
FTCode,
|
||||
TCode_Count
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ADC_BaseConfig_TypeDef adcBaseCfg;
|
||||
ADC_SyncConfig_TypeDef adcSyncCfg; //ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 TCode[TCode_Count]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>洢<EFBFBD><E6B4A2>
|
||||
u8 SkipSampNum ; //<2F><><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
/*<2A>жϷ<D0B6>ʽ<EFBFBD><CABD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>*/
|
||||
// u8 CounterMax; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u8 Counter; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
u32 ADCBuffer[2]; //<2F><><EFBFBD><EFBFBD>ֵ
|
||||
|
||||
/*DMA<4D><41>ʽ<EFBFBD><CABD><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD>*/
|
||||
u32 DMA_ADC_Buffer[2][64];
|
||||
u8 DMA_ADC_adcflag[2];
|
||||
u8 DMA_ADC_SampLen;
|
||||
u8 DMA_ADC_Exponent;
|
||||
}__Samp_Buf_TypeDef;//<2F><><EFBFBD><EFBFBD>
|
||||
|
||||
extern __Samp_Buf_TypeDef sampleData;
|
||||
|
||||
/*ADC<44><43><EFBFBD>ó<EFBFBD>ʼ<EFBFBD><CABC>*/
|
||||
void SetSampleSiagnlForSingleADC(const ADC_BaseConfig_TypeDef* adc_cfg);
|
||||
void SetSampleSiagnlForSyncADC(const ADC_SyncConfig_TypeDef* adc_cfg);
|
||||
|
||||
/*<2A>жϷ<D0B6>ʽ*/
|
||||
void StartADC0SampingData(void);
|
||||
void StartADC1SampingData(void);
|
||||
void StartADCSyncSampingData(void);
|
||||
void ReadSamplingData(void);//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
void ComputeSampleData(void);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
/*DMA<4D><41>ʽ*/
|
||||
void StartDMAForADC0SampingData(void);
|
||||
void StartDMAForADC1SampingData(void);
|
||||
void StartDMAForADCSyncSampingData(void);
|
||||
u16 DMA_ComputeSampleData_ADC0(void);
|
||||
u16 DMA_ComputeSampleData_ADC1(void);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void DMA_sampleMainProcess(void);
|
||||
|
||||
//for ADC END==============================================================================\
|
||||
//======================================================================================================================================================================================
|
||||
//for FLOWMETER START======================================================================/
|
||||
|
||||
804
user/Core/DP2201_D9V2_V5000.c
Normal file
804
user/Core/DP2201_D9V2_V5000.c
Normal file
@@ -0,0 +1,804 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 低功耗定时器初始化函数
|
||||
* @note 需要定义与硬件相关的函数和IO
|
||||
* // 数据采样定时器,以ms位单位,1ms采样一次数据
|
||||
* StartSamplingTimer(): 1ms 定时为基值
|
||||
* StopSamplingTimer()
|
||||
* EnableSamplingInterrupt()、 DisableSamplingInterrupt()
|
||||
* SamplingInterruptCallBack()
|
||||
*
|
||||
* // 加热流程控制定时器,以ms位单位
|
||||
* StartProcessTimer()、 StopProcessTimer()、
|
||||
* ProcessTimerInterruptCallBack();
|
||||
* EnableProcessTimerInterrupt();
|
||||
*/
|
||||
|
||||
//##############################################################################
|
||||
#if(DP2201_CORE_V5000)
|
||||
//##############################################################################
|
||||
|
||||
//__SAMPLE_STATUS_BIT_TypeDef sampleState;
|
||||
TypeSample sampleProcess;
|
||||
TypeCalibOffset calibOffset;
|
||||
u16 FRType;
|
||||
u16 dynamicOffset,rapidOffsetGas;
|
||||
u32 roughTestCounter, MEMSErrorCounter;
|
||||
|
||||
//ADC放大倍数值与索引转换--------------------------------------------------
|
||||
u16 GetAdcGain(u16 gianX)
|
||||
{
|
||||
switch(gianX)
|
||||
{
|
||||
case 1: return GAIN1;
|
||||
case 2: return GAIN2;
|
||||
case 4: return GAIN4;
|
||||
case 8: return GAIN8;
|
||||
case 16: return GAIN16;
|
||||
case 32: return GAIN32;
|
||||
case 64: return GAIN64;
|
||||
case 128: return GAIN128;
|
||||
default:
|
||||
return GetAdcGain(ADC_GAIN_DEFAULT);
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void SetNextProcess(void)
|
||||
{
|
||||
if(sampleProcess.NextRun == 0) {
|
||||
StopProcessTimer(); //关闭采集时钟
|
||||
return;
|
||||
}
|
||||
|
||||
// u32 currentTAR = ProcessTimer->CNT; //定时器当前计数值
|
||||
// if(currentTAR >= sampleProcess.NextTime) {
|
||||
// sampleProcess.NextTime = currentTAR;
|
||||
// FlowProcessManagement();
|
||||
// }
|
||||
//else ResetProcessTimer(sampleProcess.NextTime);
|
||||
|
||||
StartProcessTimer(sampleProcess.NextTime);
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void AnalogCircuitInit(void)
|
||||
{
|
||||
RH_CON_OUTPUT();
|
||||
TURN_ON_RH_POWER();
|
||||
|
||||
sampleProcess.CTypeGain = GetAdcGain(adcGain); //默认采样系数
|
||||
SampingADCInit();
|
||||
DisableSamplingInterrupt();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void EnableRHControlByTD(void)
|
||||
{
|
||||
RH_CON_OUTPUT();
|
||||
TURN_ON_RH_POWER();
|
||||
|
||||
SELECT_TD_CON();
|
||||
|
||||
HEATING_OUTPUT();
|
||||
TURN_OFF_HEATING();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void EnableRHControlByTU(void)
|
||||
{
|
||||
RH_CON_OUTPUT();
|
||||
TURN_ON_RH_POWER();
|
||||
|
||||
// SELECT_TU_CON();
|
||||
|
||||
HEATING_OUTPUT();
|
||||
TURN_OFF_HEATING();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void TurnOffAnalogCircuit(void)
|
||||
{
|
||||
TURN_OFF_HEATING();
|
||||
TURN_OFF_RH_POWER();
|
||||
|
||||
CLR_HEATING();
|
||||
|
||||
StopSamplingADC();
|
||||
DisableSamplingInterrupt();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void RapidHeating(void)
|
||||
{
|
||||
DisableSamplingInterrupt();
|
||||
|
||||
RH_CON_OUTPUT();
|
||||
TURN_ON_RH_POWER();
|
||||
|
||||
SELECT_TD_CON();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
SELECT_VREF_CON();
|
||||
// TURN_ON_LOW_HEAT();
|
||||
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void FirstStageHeating(void)
|
||||
{
|
||||
// RH controled by TD
|
||||
HWState.EnableTempTest = 1;
|
||||
HWState.EnableTempInit = 1;
|
||||
systemProcessing.Bit.TempHandle = 1;
|
||||
|
||||
EnableRHControlByTD();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void StartNormolFlowMeasurement(void)
|
||||
{
|
||||
//--------------------------------------------------------------------------
|
||||
// 校准引脚控制(通过宏开关控制)
|
||||
// 如果定义了 ENABLE_CALPIN_FOR_UPDATE_FR,则拉低校准引脚
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_CALPIN_FOR_UPDATE_FR
|
||||
#pragma message("[undefined] ENABLE_CALPIN_FOR_UPDATE_FR")
|
||||
#elif(ENABLE_CALPIN_FOR_UPDATE_FR)
|
||||
EXT_CALIB_OUTPUT(); // 配置引脚为输出模式
|
||||
CLR_CALIB_PIN(); // 拉低引脚
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
HWState.SampledOver = 0; // 清除“采样完成”标志,表示测量开始,数据尚未就绪
|
||||
AnalogCircuitInit();// 初始化模拟电路(如运放偏置、ADC配置等)
|
||||
// 根据全局状态决定起始状态
|
||||
// EnableRoughTest 为真:进入“粗检模式”(低功耗检测是否有流量)
|
||||
// EnableRoughTest 为假:直接进入“正常测量模式”(第一级加热)
|
||||
if(sampleProcess.State.EnableRoughTest) sampleProcess.NextRun = START_DETECT_STAGE_HEATING;
|
||||
else sampleProcess.NextRun = START_1ST_STAGE_HEATING;
|
||||
sampleProcess.NextTime = 0; // 定时器计数基准清零
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
StartProcessTimer(64000); // 启动比较定时器,开始从0递增计数
|
||||
Timer_register_irq_callback(ProcessTimer,ProcessTimerIT, ProcessTimerInterruptCallBack );//注册中断回调函数
|
||||
// 立即执行一次流程管理,处理初始状态(如进入加热阶段)
|
||||
FlowProcessManagement();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
s16 ComputeOffsetCorrectValue(unsigned int offsetHigh, unsigned int offsetLow)
|
||||
{
|
||||
tmpSLA = (u32)voltageDetected[TGAS];
|
||||
tmpSLA -= (u32)calibTemperature;
|
||||
|
||||
tmpSLB = (u32)offsetHigh;
|
||||
tmpSLB -= (u32)offsetLow;
|
||||
tmpSLA *= tmpSLB;
|
||||
|
||||
tmpSLB = (u32)staticHighTemperature;
|
||||
tmpSLB -= (u32)staticLowTemperature;
|
||||
tmpSLA /= tmpSLB;
|
||||
|
||||
return (s16)tmpSLA;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
bool JudgmentFlowRate(void)
|
||||
{
|
||||
u16 tempIndex;
|
||||
|
||||
sampleProcess.NextRun = 0;
|
||||
sampleProcess.State.EnableRoughTest = 0;
|
||||
if(currentMode.Bit.CalibMode) return 0;
|
||||
|
||||
tempIndex = abs(voltageDetected[RIDX] - rapidOffsetGas);
|
||||
rapidOffsetGas = voltageDetected[RIDX];
|
||||
if(tempIndex > STATIC_HIGH_CODE) return 0;
|
||||
|
||||
systemProcessing.Bit.FRHandle = 1;
|
||||
samplingInterval = factoryInterval;
|
||||
flowRate = 0;
|
||||
|
||||
roughTestCounter++;
|
||||
if(roughTestCounter >= 150)
|
||||
{
|
||||
roughTestCounter = 0;
|
||||
sampleProcess.State.EnableRoughTest = 0;
|
||||
}
|
||||
else sampleProcess.State.EnableRoughTest = 1;
|
||||
|
||||
Clear_WDT();
|
||||
return 1;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void CheckATypeSensor(void)
|
||||
{
|
||||
if((voltageDetected[RHVOL] < 500) || (voltageDetected[RHVOL] > 2600)) MEMSErrorCounter += 0x10;
|
||||
else MEMSErrorCounter &= 0x0f;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
// Check sensor error
|
||||
bool CheckSensor(u16 voltageIndex)
|
||||
{
|
||||
u16 I=0;
|
||||
|
||||
if((voltageIndex < 2000) || (voltageIndex > 65000)) MEMSErrorCounter += 0x01;
|
||||
else MEMSErrorCounter &= 0xf0;
|
||||
|
||||
I = MEMSErrorCounter & 0x0f;
|
||||
I += MEMSErrorCounter >> 4;
|
||||
if(I > 4) {
|
||||
MEMSErrorCounter = 0x55;
|
||||
systemAlarm.Bit.SensorErr = 1;
|
||||
return 1;
|
||||
}
|
||||
else {
|
||||
systemAlarm.Bit.SensorErr = 0;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
u16 ComputeCTypeIndex(u16 detectIndex, u16 indexOffset)
|
||||
{
|
||||
if(detectIndex > indexOffset) {
|
||||
detectIndex -= indexOffset;
|
||||
}
|
||||
else {
|
||||
detectIndex = indexOffset - detectIndex;
|
||||
if(detectIndex > reverseScale) {
|
||||
systemAlarm.Bit.Pollution = 1;
|
||||
}
|
||||
detectIndex = 0;
|
||||
}
|
||||
|
||||
return detectIndex;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void ComputeFlowRateIndexAndFlowRate(void)
|
||||
{
|
||||
disable_interrupts();
|
||||
|
||||
//===========================================================================
|
||||
currentFlowRate = 0;
|
||||
displayUpdate = 0;
|
||||
FRType = CTYPE_FR;
|
||||
GetFilterDepth(responseTimeIndex);
|
||||
|
||||
//============================================================================
|
||||
rapidOffsetGas = voltageDetected[RIDX];
|
||||
systemAlarm.Bit.Pollution = 0;
|
||||
systemAlarm.Bit.FRAlarm = 0;
|
||||
// Compute offset
|
||||
//============================================================================
|
||||
if(currentMode.Bit.CalibMode) {
|
||||
calibOffset.Value[CAL_VDUX] = offsetAir;
|
||||
calibOffset.Value[CAL_VDUGX] = offsetAirGainx;
|
||||
}
|
||||
//----------------------------------------------------------------------------
|
||||
#ifndef ENABLE_GAS_RECOGNITION
|
||||
#pragma message("[undefined] ENABLE_GAS_RECOGNITION")
|
||||
#elif(ENABLE_GAS_RECOGNITION)
|
||||
else if(systemAlarm.Bit.GasChange = 1) {
|
||||
calibOffset.Value[CAL_VDUX] = offsetGas;
|
||||
calibOffset.Value[CAL_VDUGX] = offsetGasGainx;
|
||||
}
|
||||
#endif
|
||||
//----------------------------------------------------------------------------
|
||||
else {
|
||||
calibOffset.Value[CAL_VDUX] = offsetGas;
|
||||
calibOffset.Value[CAL_VDUGX] = offsetGasGainx;
|
||||
}
|
||||
|
||||
calibOffset.CalTA = calibTemperature;
|
||||
//----------------------------------------------------------------------------
|
||||
//Compute RR Parameter
|
||||
voltageDetected[VRRX] = sampleProcess.RTypeResult;
|
||||
ComputeRRParameter();
|
||||
voltageDetected[RRRES] = MovingAverage(voltageDetected[RRRES], 10, RRRES);
|
||||
StaticTGasCompute();
|
||||
if(sampleProcess.State.AType == SAMPLE_VRH) {
|
||||
voltageDetected[VRHX] = sampleProcess.ATypeResult;
|
||||
ComputeRHParameter();
|
||||
CheckATypeSensor();
|
||||
}
|
||||
else {
|
||||
voltageDetected[IVHDX] = sampleProcess.ATypeResult;
|
||||
voltageDetected[IVHDX] = MovingAverage(voltageDetected[IVHDX], 10, IVHDX);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Compute TD-TU parameter
|
||||
if(sampleProcess.State.CType == SAMPLE_GVDU) {
|
||||
voltageDetected[VDUGX] = sampleProcess.CTypeResult;
|
||||
voltageDetected[VDUGX] = MovingAverage(voltageDetected[VDUGX], 10, VDUGX);
|
||||
//-------------------------------------------------------------------------
|
||||
CheckSensor(voltageDetected[VDUGX]);
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
#ifndef ENABLE_OFFSET_CORRECT
|
||||
#pragma message("[undefined] ENABLE_OFFSET_CORRECT")
|
||||
#elif(ENABLE_OFFSET_CORRECT)
|
||||
tmpSLA = (s32)ComputeOffsetCorrectValue(VDUGXHigh, VDUGXLow);
|
||||
voltageDetected[TVDUGX] = tmpSLA;
|
||||
tmpSLA += (u32)voltageDetected[VDUGX];
|
||||
voltageDetected[MICRO_FR] = (u16)tmpSLA;
|
||||
#else
|
||||
voltageDetected[MICRO_FR] = voltageDetected[VDUGX];
|
||||
#endif
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// 转换成气体识别所用的内码
|
||||
voltageDetected[MICRO_FR] = ComputeCTypeIndex(voltageDetected[MICRO_FR], calibOffset.Value[CAL_VDUGX]);
|
||||
voltageDetected[REG_INDEX] = 128/adcGain;
|
||||
voltageDetected[REG_INDEX] = voltageDetected[MICRO_FR] / voltageDetected[REG_INDEX];
|
||||
if(voltageDetected[MICRO_FR] > CALIB_MAX_INDEX) voltageDetected[MICRO_FR] = CALIB_MAX_INDEX;
|
||||
FRType = MICRO_FR;
|
||||
}
|
||||
else {
|
||||
voltageDetected[VDUX] = sampleProcess.CTypeResult;
|
||||
voltageDetected[VDUX] = MovingAverage(voltageDetected[VDUX], 10, VDUX);
|
||||
//-------------------------------------------------------------------------
|
||||
CheckSensor(voltageDetected[VDUX]);
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
#ifndef ENABLE_OFFSET_CORRECT
|
||||
#pragma message("[undefined] ENABLE_OFFSET_CORRECT")
|
||||
#elif(ENABLE_OFFSET_CORRECT)
|
||||
tmpSLA = (signed long int)ComputeOffsetCorrectValue(OffsetHigh, OffsetLow);
|
||||
voltageDetected[TVDUX] = tmpSLA;
|
||||
tmpSLA += (u32)voltageDetected[VDUX];
|
||||
voltageDetected[CTYPE_FR] = (u16)tmpSLA;
|
||||
#else
|
||||
voltageDetected[CTYPE_FR] = voltageDetected[VDUX];
|
||||
#endif
|
||||
//-------------------------------------------------------------------------
|
||||
voltageDetected[CTYPE_FR] = ComputeCTypeIndex(voltageDetected[CTYPE_FR], calibOffset.Value[CAL_VDUX]);
|
||||
voltageDetected[REG_INDEX] = voltageDetected[CTYPE_FR];
|
||||
FRType = CTYPE_FR;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
voltageDetected[NIDX] = voltageDetected[VDUX];
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//气体识别
|
||||
GasAnasisCompute();
|
||||
SaveVHHAndNRHInTempretureMode();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//当前流量计算
|
||||
currentFlowRate = GetFlowRate(voltageDetected[FRType], FRType);
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
PCBTemperature = TestTemperature(); // 测试环境温度
|
||||
TemperatureLowPower(); // 温度传感器低功耗
|
||||
voltageDetected[TPCB] = MovingAverage((u16)(TEMPRETURE_OFFSET + PCBTemperature), 100, TPCB);
|
||||
PCBTemperature = (u16)voltageDetected[TPCB];
|
||||
PCBTemperature -= (u16)TEMPRETURE_OFFSET;
|
||||
TemperatureCorrection();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
GCFCorrection();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
if( systemAlarm.Bit.SensorErr | systemAlarm.Bit.Pollution ) currentFlowRate = 0;
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// JudgeflowUnit, for com and compute ACC
|
||||
currentFlowRate = ConvertFlowrate(currentFlowRate, flowComUnit, FR_STD_UNIT);
|
||||
FlowRateSecondaryCorrection();
|
||||
FlowRateAlarmJudgment();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
disable_interrupts();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
flowRate = currentFlowRate;
|
||||
FlowRateMoving();
|
||||
tempL.DWord = flowRate;
|
||||
voltageDetected[FR_H] = tempL.Word[1];
|
||||
voltageDetected[FR_L] = tempL.Word[0];
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//¼ÆËã×ÜÁ÷Á¿
|
||||
#ifndef REC_ACC_PER
|
||||
#pragma message("[undefined] REC_ACC_PER")
|
||||
#elif(REC_ACC_PER)
|
||||
ComputeFlowRateToTotal();
|
||||
ReleaseTotalToDisArray();
|
||||
#endif
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//Êä³öÓû§Á÷Á¿
|
||||
#ifndef ENABLE_FLOW_GAIN
|
||||
#pragma message("[undefined] ENABLE_FLOW_GAIN")
|
||||
#elif(ENABLE_FLOW_GAIN)
|
||||
flowRate /= calibFlowGain;
|
||||
#endif
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
enable_interrupts();
|
||||
//---------------------------------------------------------------------------
|
||||
if(flowRate > 0) {
|
||||
roughTestCounter = 0;
|
||||
return;
|
||||
}
|
||||
else if(samplingInterval <= RESP_2000MS) return; // Èç¹ûÁ÷Á¿Îª0£¬½øÈë×Ô¶¯Áãµã¸ú×Ù
|
||||
else if(MEMSErrorCounter > 0) return;
|
||||
|
||||
roughTestCounter++;
|
||||
if(roughTestCounter >= 4) {
|
||||
roughTestCounter = 0;
|
||||
sampleProcess.State.EnableRoughTest = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void FlowRateDealAndOuputSub(void)
|
||||
{
|
||||
// disable_interrupts();
|
||||
|
||||
//===========================================================================
|
||||
ComputeFlowRateIndexAndFlowRate();
|
||||
ReleaseToIntAndDecimalBufForUart();
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
flowRateL = (u16)flowRate;
|
||||
flowRateH = flowRate >> 16;
|
||||
|
||||
HWState.SampledOver = 0;
|
||||
systemProcessing.Bit.FRHandle = 0;
|
||||
sampleProcess.NextRun = 0;
|
||||
|
||||
Clear_WDT();
|
||||
|
||||
enable_interrupts();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Update 2024/01/29
|
||||
#ifndef ENABLE_CALPIN_FOR_UPDATE_FR
|
||||
#pragma message("[undefined] ENABLE_CALPIN_FOR_UPDATE_FR")
|
||||
#elif(ENABLE_CALPIN_FOR_UPDATE_FR)
|
||||
// EXT_CALIB_OUTPUT();
|
||||
// SET_CALIB_PIN();
|
||||
|
||||
// sampleProcess.NextRun = FR_UPDATE;
|
||||
// sampleProcess.NextTime = MAINTAR;
|
||||
// sampleProcess.NextTime += FR_UPDATE_PULSE_TIME;
|
||||
// SetNextProcess();
|
||||
#endif
|
||||
}
|
||||
|
||||
///******************************************************************************/
|
||||
void ComputeSampleData(u16 sampleNum, u16 sampleShift)
|
||||
{
|
||||
u32 I;
|
||||
|
||||
sampleProcess.ADC0Result = 0;
|
||||
sampleProcess.ADC1Result = 0;
|
||||
// if(sampleProcess.CounterMax < sampleNum) return;
|
||||
// disable_interrupts();
|
||||
// for(I = sampleProcess.CounterMax - sampleNum; I<sampleProcess.CounterMax; I++)
|
||||
for(I = 0; I<sampleNum; I++)
|
||||
{
|
||||
sampleProcess.ADC0Result += ((sampleProcess.ADC0Buffer[I] >> 8) + 32768) & 0xFFFF;
|
||||
sampleProcess.ADC1Result += ((sampleProcess.ADC1Buffer[I] >> 8) + 32768) & 0xFFFF;
|
||||
|
||||
//sampleProcess.ADC0Result += ((((sampleProcess.ADC0Buffer[I] & 0xFFFFFF) | ((sampleProcess.ADC0Buffer[I] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//处理成16位数据 //sampleProcess.ADC0Buffer[I];
|
||||
//sampleProcess.ADC1Result += ((((sampleProcess.ADC1Buffer[I] & 0xFFFFFF) | ((sampleProcess.ADC1Buffer[I] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//处理成16位数据 //sampleProcess.ADC1Buffer[I];
|
||||
}
|
||||
|
||||
sampleProcess.ADC0Result >>= sampleShift;
|
||||
sampleProcess.ADC1Result >>= sampleShift;
|
||||
|
||||
// enable_interrupts();
|
||||
}
|
||||
|
||||
///******************************************************************************/
|
||||
void ComputeSampleDataForSingle(u16 sampleNum, u16 sampleShift)
|
||||
{
|
||||
u32 I;
|
||||
|
||||
sampleProcess.ADC0Result = 0;
|
||||
for(I = 0; I<sampleNum; I++)
|
||||
{
|
||||
sampleProcess.ADC0Result += ((sampleProcess.ADC0Buffer[I] >> 8) + 32768) & 0xFFFF;
|
||||
//sampleProcess.ADC0Result += ((((sampleProcess.ADC0Buffer[I] & 0xFFFFFF) | ((sampleProcess.ADC0Buffer[I] & 0x800000) ? 0xFF000000 : 0)) >> 8) + 32768) & 0xFFFF;//处理成16位数据 //sampleProcess.ADC0Buffer[I];
|
||||
}
|
||||
sampleProcess.ADC0Result >>= sampleShift;
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void SetSystemForADCSample(u16 sampleNum)
|
||||
{
|
||||
sampleProcess.Counter = 0;
|
||||
sampleProcess.CounterMax = sampleNum;
|
||||
|
||||
StartSamplingADC();
|
||||
}
|
||||
|
||||
/******************************************************************************/
|
||||
void FlowProcessManagement(void)
|
||||
{
|
||||
// 进入流程
|
||||
switch(sampleProcess.NextRun)
|
||||
{
|
||||
//-------
|
||||
//-------------------------------------------------------------------------
|
||||
// 状态 1: 粗检阶段 - 加热
|
||||
// 场景:低功耗模式,快速判断管道内是否有流体流动
|
||||
//-------------------------------------------------------------------------------------------------------------------------------------------
|
||||
// In low power consumption mode, judge whether there is flow?
|
||||
case START_DETECT_STAGE_HEATING:
|
||||
RapidHeating(); // 快速加热传感器
|
||||
SetupCTypeChannle(sampleProcess.CTypeGain); // 配置测量通道
|
||||
SetSystemForADCSample(SAMPLING_TIMES_IN_DETECT_STAGE);// 配置ADC采样次数
|
||||
// 状态流转:设定下一步要做什么,以及多久后做
|
||||
sampleProcess.NextRun = START_DETECT_STAGE_PROCESSING; // 下一状态:处理粗检数据
|
||||
sampleProcess.NextTime += SET_UP_TIME_OF_DETECT_STAGE;// 累加时间:加热稳定时间
|
||||
break;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// 状态 2: 粗检阶段 - 数据处理与判断
|
||||
// 场景:读取ADC值,判断是否有流量
|
||||
//-------------------------------------------------------------------------
|
||||
case START_DETECT_STAGE_PROCESSING:
|
||||
TurnOffAnalogCircuit(); // 省电:关闭模拟电路电源
|
||||
// 计算粗检阶段的采样数据
|
||||
ComputeSampleData(SAMPLING_TIMES_IN_DETECT_STAGE, SHIFT_IN_DETECT_STAGE);
|
||||
voltageDetected[RIDX] = sampleCTypeValue;// 保存检测值
|
||||
// 核心逻辑:判断是否有流量
|
||||
// JudgmentFlowRate() 返回 1 表示检测到有流量,直接 break,等待后续正常测量
|
||||
if(JudgmentFlowRate()) break;
|
||||
// 若无流量,则需要进入正常测量流程(或是误触发)
|
||||
AnalogCircuitInit();
|
||||
HWState.SampledOver = 0;
|
||||
sampleProcess.NextTime = 1638; // TimeVaule[0];
|
||||
sampleProcess.NextRun = START_1ST_STAGE_HEATING;
|
||||
FlowProcessManagement();
|
||||
return;
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
// normal check flowrate
|
||||
// start First stage heating
|
||||
case START_1ST_STAGE_HEATING:
|
||||
FirstStageHeating();
|
||||
|
||||
// 如果不是检定模式,则启动预采样
|
||||
if(currentMode.Bit.IntCalibMode) sampleProcess.State.PreSampling = 0;
|
||||
else sampleProcess.State.PreSampling = 1;
|
||||
|
||||
SetupCTypeChannle(sampleProcess.CTypeGain); //设置VDU
|
||||
SetupRTypeChannle(); //设置VRR
|
||||
SetSystemForADCSample(PRESAMPLING_TIMES_IN_1ST_STAGE); //(PRESAMPLING_TIMES_MAX_IN_1ST_STAGE);
|
||||
|
||||
TestTemperatureInit(TEMP_SENSOR_RESULT); // 温度传感器初始化
|
||||
|
||||
// sampleProcess.NextTime += SET_UP_TIME_OF_1ST_STAGE;
|
||||
sampleProcess.NextTime = SET_UP_TIME_OF_1ST_STAGE;
|
||||
sampleProcess.NextRun = START_1ST_STAGE_SAMPLING;
|
||||
break;
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// 1ST: normal SAMPLING
|
||||
// start sampling data
|
||||
case START_1ST_STAGE_SAMPLING:
|
||||
ComputeSampleData(PRESAMPLING_TIMES_IN_1ST_STAGE, SHIFT_IN_PRESAMPLING_1ST_STAGE);
|
||||
sampleProcess.RTypeResult = sampleRTypeValue; //VRR 8304 sampleProcess.ADC1Result
|
||||
|
||||
// 通过预采样,确定CTYPE放大倍数
|
||||
// Setup CType Channel -----------------------------------------------------
|
||||
if(sampleProcess.State.PreSampling) {
|
||||
tmpIA = ComputeCTypeIndex((u16)sampleCTypeValue, calibOffset.Value[CAL_VDUX]); // |采样内码-零点内码| 预采样内码值结果
|
||||
if(sampleSwitchThreshold < 500) sampleProcess.State.CType = SAMPLE_VDU; // 小于500,禁止使用变增益功能
|
||||
else if(tmpIA > sampleSwitchThreshold + 500) sampleProcess.State.CType = SAMPLE_VDU; //
|
||||
else if(tmpIA < sampleSwitchThreshold) sampleProcess.State.CType = SAMPLE_GVDU;
|
||||
}
|
||||
else sampleProcess.State.CType++; // 该值为一个 1 位宽的无符号位域,++操作会在0 1之间切换
|
||||
if(sampleProcess.State.CType == SAMPLE_VDU) SetupCTypeChannle(sampleProcess.CTypeGain); // Gain=32 128
|
||||
else SetupCTypeChannle( GIDX_GAIN ); // GAIN = 128
|
||||
|
||||
// Setup AType Channel --------------------------------------------------------
|
||||
if(sampleProcess.State.AType == SAMPLE_VRH) {
|
||||
sampleProcess.State.AType = SAMPLE_IRH;
|
||||
SetupIRHChannle();
|
||||
}
|
||||
else {
|
||||
sampleProcess.State.AType = SAMPLE_VRH;
|
||||
SetupVRHChannle();
|
||||
}
|
||||
|
||||
// Start ADC --------------------------------------------------------
|
||||
SetSystemForADCSample(SAMPLING_TIMES_IN_1ST_STAGE);
|
||||
// sampleProcess.NextTime += SAMPLING_TIME_OF_1ST_STAGE;
|
||||
sampleProcess.NextTime = SAMPLING_TIME_OF_1ST_STAGE;
|
||||
sampleProcess.NextRun = START_1ST_STAGE_PROCESSING;
|
||||
//CLR_TEST_PIN();
|
||||
break;
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
case START_1ST_STAGE_PROCESSING:
|
||||
CLR_TEST_PIN();
|
||||
if(samplingInterval > RESP_125MS) TurnOffAnalogCircuit();
|
||||
|
||||
ComputeSampleData(SAMPLING_TIMES_IN_1ST_STAGE, SHIFT_IN_1ST_STAGE);
|
||||
sampleProcess.CTypeResult = sampleCTypeValue;
|
||||
sampleProcess.ATypeResult = sampleATypeValue;
|
||||
|
||||
//End Sampling
|
||||
sampleProcess.NextRun = 0;
|
||||
HWState.SampledOver = 1;
|
||||
systemProcessing.Bit.FRHandle = 1;
|
||||
break;
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// Update 2024/01/29
|
||||
case FR_UPDATE:
|
||||
EXT_CALIB_OUTPUT();
|
||||
CLR_CALIB_PIN();
|
||||
sampleProcess.NextRun = 0;
|
||||
break;
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
default:
|
||||
TurnOffAnalogCircuit(); // into lowpower mode
|
||||
sampleProcess.NextRun = 0;
|
||||
systemProcessing.Bit.FRHandle = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
// 设置下一个流程定时
|
||||
SetNextProcess();
|
||||
|
||||
// if(sampleProcess.NextRun == 0) {
|
||||
// StopProcessTimer();//关闭采集时钟
|
||||
// return;
|
||||
// }
|
||||
// else {
|
||||
// u32 currentTAR = SamplingTimer->CNT; //定时器当前计数值
|
||||
// if(currentTAR >= sampleProcess.NextTime) {
|
||||
// sampleProcess.NextTime = currentTAR;
|
||||
// FlowProcessManagement();
|
||||
// }
|
||||
// else ResetSamplingTimer(sampleProcess.NextTime);
|
||||
//}
|
||||
}
|
||||
|
||||
//******************************************************************************/
|
||||
void CoreInit(void)
|
||||
{
|
||||
SystemGPIOInit();
|
||||
// ExternCalibratinInput();
|
||||
TurnOffAnalogCircuit();
|
||||
}
|
||||
|
||||
//******************************************************************************/
|
||||
void CoreColdStartProcessing(void)
|
||||
{
|
||||
//----------------------------------------------------------------------------
|
||||
// check cold start
|
||||
if(systmeState != 0xAA55)
|
||||
{
|
||||
// if(CodeCRC == 0) alarmState &= ~BL_CRC_ERROR;
|
||||
// else alarmState |= BL_CRC_ERROR;
|
||||
|
||||
//// CodeCheckCRC();
|
||||
// if(CodeCRC == 0) alarmState &= ~AP_CRC_ERROR;
|
||||
// else alarmState |= AP_CRC_ERROR;
|
||||
|
||||
SystemHardWareAutoCheck();
|
||||
|
||||
#ifndef ENABLE_ZERO_CALIB_CMD
|
||||
#pragma message("[undefined] ENABLE_ZERO_CALIB_CMD")
|
||||
#elif(ENABLE_ZERO_CALIB_CMD)
|
||||
tempL.Word[0] = ReadShortParameterFromMemory(SYS_COMMAND, 0);
|
||||
currentMode.Word = tempL.Word[0];
|
||||
if(currentMode.Bit.ZeroCalib) EnterZeroCalibMode();
|
||||
else EnterUserMode();
|
||||
#else
|
||||
EnterUserMode();
|
||||
#endif
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
Clear_WDT();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Interface Init
|
||||
SystemInterfaceInit();
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
enable_interrupts();
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
void ProcessTimerInterruptCallBack(void)
|
||||
{
|
||||
DisableProcessTimerInterrupt();
|
||||
HWState.ProcessTimerOut = 1;
|
||||
//FlowProcessManagement();
|
||||
//enable_interrupts();
|
||||
}
|
||||
|
||||
//采样中断--------------------------------------------------------------------
|
||||
//void SamplingTimer_IRQ_Callback(void)
|
||||
//{
|
||||
// FlowProcessManagement();
|
||||
//// LHL_GPIO_TogglePin(pGPIO1, GPIO_PIN_7); MEMSErrorCounter
|
||||
//}
|
||||
|
||||
//主程序中断------------------------------------------------------------
|
||||
void PrimaryTimer_IRQ_Callback()
|
||||
{
|
||||
SET_TEST_PIN();
|
||||
//TEST_PIN_TOGGLE();
|
||||
HWState.MainTimerOut = 1;
|
||||
}
|
||||
|
||||
//系统轮询----------------------------------------------------------------------
|
||||
void SystemPolling(void)
|
||||
{
|
||||
while(1) {
|
||||
//--------------------------------------------------------------------------
|
||||
//test flowrate
|
||||
if(HWState.MainTimerOut == 1 ) {
|
||||
ManagePrimaryTimeInterval(); // 判断下阶段的工作模式
|
||||
ModeExitCount(); // 判断各种模式退出
|
||||
Clear_WDT();
|
||||
StartNormolFlowMeasurement();
|
||||
HWState.MainTimerOut = 0;
|
||||
}
|
||||
else if(HWState.ProcessTimerOut == 1 ) {
|
||||
FlowProcessManagement();
|
||||
HWState.ProcessTimerOut = 0;
|
||||
}
|
||||
|
||||
if(HWState.SampledOver) {
|
||||
FlowRateDealAndOuputSub();
|
||||
//------------------------------------------------------------------------
|
||||
#if ENABLE_USE_AVANT_PROTOCOL
|
||||
if(urrentMode.Bit.DigitOutput) AvantGardeAutoUploadData();
|
||||
#endif
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
#ifndef ENABLE_USER_UART
|
||||
#pragma message("[undefined] ENABLE_USER_UART")
|
||||
#elif(ENABLE_USER_UART)
|
||||
if(comState.state.ReceivedData ) {
|
||||
ReceivedDataProcessing();
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
#ifndef ENABLE_USER_I2C
|
||||
#pragma message("[undefined] ENABLE_USER_I2C")
|
||||
#elif(ENABLE_USER_I2C)
|
||||
if(comState.I2CReceivedData) {
|
||||
DoneI2CComm();
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
if(HWState.EnableSaveData) DataStorageManagement();
|
||||
|
||||
alarmState = systemAlarm.Word;
|
||||
//--------------------------------------------------------------------------
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* File end *****************************************************************/
|
||||
#endif
|
||||
/****************************************************************************/
|
||||
406
user/Core/DP2201_D9V2_V5000_Compute.c
Normal file
406
user/Core/DP2201_D9V2_V5000_Compute.c
Normal file
@@ -0,0 +1,406 @@
|
||||
#include "../main/SystemInclude.h"
|
||||
|
||||
//##############################################################################
|
||||
#if(DP2201_CORE_V5000)
|
||||
//##############################################################################
|
||||
// for compute buffer
|
||||
u32 compareBaseCounter;
|
||||
u16 compareBaseValue;
|
||||
|
||||
//u16 VDUGXHigh, VDUGXRoom, VDUGXLow, sampleSwitchThreshold;
|
||||
float RhExtGain, RRExtGain;
|
||||
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 电路计算参数初始化
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void RHCircuitParameterInit(void)
|
||||
{
|
||||
// A type external gain res
|
||||
// RhExtGainRes = ReadShortParameterFromEEPROM(RH_GAINRES, RH_GAINRES_WIDTH, RH_GAINRES_DEFAULT);
|
||||
// RhExtGain = 1.0/(float)RhExtGainRes;
|
||||
|
||||
//RRExtGainRes = ReadShortParameterFromEEPROM(RR_GAINRES, RR_GAINRES_WIDTH, RR_GAINRES_DEFAULT);
|
||||
// RRExtGain = (float)RRExtGainRes;
|
||||
// RRExtGain *= (float)VREF_VDC;
|
||||
|
||||
//sampleSwitchThreshold = ReadShortParameterFromEEPROM(SAMPLE_THRESHOLD, SAMPLE_THRESHOLD_WIDTH, SAMPLE_THRESHOLD_DEFAULT);
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 校准零点
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void CalibrateOffset(void)
|
||||
{
|
||||
tempL.Word[0] = voltageDetected[NIDX];
|
||||
offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
|
||||
//tempL.Word[0] += 30;
|
||||
offsetGas = WriteShortParameterToMemory(GET_MBWORD_ADDR(offsetGas));
|
||||
|
||||
tempL.Word[0] = voltageDetected[VDUGX];
|
||||
offsetAirGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAirGainx));
|
||||
offsetGasGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetGasGainx));
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 校准曲线前需要进行的操作:如校零及必要的参数保存等
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void PreCalibrationParameterWriting(void)
|
||||
{
|
||||
//===========================================================================
|
||||
tempL.Word[0] = voltageDetected[NIDX];
|
||||
offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
|
||||
//tempL.Word[0] += 30;
|
||||
offsetGas = WriteShortParameterToMemory(GAS_OFFSET);
|
||||
|
||||
tempL.Word[0] = voltageDetected[VDUGX];
|
||||
offsetAirGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAirGainx));
|
||||
offsetGasGainx = WriteShortParameterToMemory(GET_WORD_ADDR(offsetGasGainx));
|
||||
//---------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[RRRES];
|
||||
RRRoom = WriteShortParameterToMemory(GET_WORD_ADDR(RRRoom));
|
||||
|
||||
tempL.Word[0] = voltageDetected[IVHDX];
|
||||
VHHRoom = WriteShortParameterToMemory(GET_WORD_ADDR(VHHRoom));
|
||||
//---------------------------------------------------------------------------
|
||||
#ifndef TEMP_CORR_USE_TA
|
||||
#pragma message("[undefined] TEMP_CORR_USE_TA")
|
||||
#elif(TEMP_CORR_USE_TA)
|
||||
tempL.Word[0] = voltageDetected[TPCB];
|
||||
#else
|
||||
#ifndef ENABLE_GAS_RECOGNITION
|
||||
#pragma message("[undefined] ENABLE_GAS_RECOGNITION")
|
||||
#elif(ENABLE_GAS_RECOGNITION)
|
||||
tempL.Word[0] = voltageDetected[TGAS];
|
||||
#else
|
||||
tempL.Word[0] = voltageDetected[TPCB];
|
||||
#endif
|
||||
#endif
|
||||
//---------------------------------------------------------------------------
|
||||
calibTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(calibTemperature));
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
currentMode.Bit.PreCalibEnd = 1;
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 高低温标定程序:低温参数保存功能
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void LowTemperatureParameterWriting(void)
|
||||
{
|
||||
if(voltageDetected[TPCB] >= ENABLE_WRITE_TA_LOW)
|
||||
{
|
||||
// calibType = ('E'<<8)+'R';
|
||||
return;
|
||||
}
|
||||
|
||||
tempL.Word[0] = voltageDetected[TPCB];
|
||||
staticLowTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(staticLowTemperature));
|
||||
|
||||
tempL.Word[0] = voltageDetected[RRRES];
|
||||
RRLow = WriteShortParameterToMemory(GET_WORD_ADDR(RRLow));
|
||||
|
||||
tempL.Word[0] = voltageDetected[IVHDX];
|
||||
VHHLow = WriteShortParameterToMemory(GET_WORD_ADDR(VHHLow));
|
||||
|
||||
// for AType FlowRate Compute
|
||||
//tempL.Word[0] = ReadDataFromMovingAverage(PDRH);
|
||||
//---------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[PORH];
|
||||
P0RhLow = WriteShortParameterToMemory(GET_WORD_ADDR(P0RhLow));
|
||||
|
||||
tempL.Word[0] = voltageDetected[RHRES];
|
||||
RHLowTa = WriteShortParameterToMemory(GET_WORD_ADDR(RHLowTa));
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[NIDX];
|
||||
OffsetLow = WriteShortParameterToMemory(GET_WORD_ADDR(OffsetLow));
|
||||
|
||||
tempL.Word[0] = voltageDetected[VDUGX];
|
||||
VDUGXLow = WriteShortParameterToMemory(GET_WORD_ADDR(VDUGXLow));
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
// tempL.Word[0] = ReadShortParameterFromMemory(ZEROCAL_STATE, 0);
|
||||
// tempL.Word[0] &= 0xff00;
|
||||
// tempL.Word[0] |= 'L';
|
||||
// WriteShortParameterToMemory(ZEROCAL_STATE);
|
||||
// currentMode.Bit.LowCalibEnd = 1;
|
||||
// if(tempL.Word[0] == INTCMD_CALIB_TEMP_END) EnterUserMode();
|
||||
|
||||
// tempL.Word[0] = ReadShortParameterFromMemory(SYS_COMMAND, SYS_COMMAND_WIDTH, 0);
|
||||
// if(tempL.Word[0] == INTCMD_ZERO_CALIB_MODE) EnterZeroCalibMode();
|
||||
// else EnterUserMode();
|
||||
|
||||
currentMode.Bit.LowCalibEnd = 1;
|
||||
if( currentMode.Bit.HighCalibEnd && currentMode.Bit.LowCalibEnd ) EnterUserMode();
|
||||
tempL.Word[0] = currentMode.Word;
|
||||
WriteShortParameterToMemory(SYS_COMMAND);
|
||||
|
||||
//calibType = ('L'<<8)+'D';
|
||||
// calibType &= 0xff00;
|
||||
// calibType |= 'L';
|
||||
//
|
||||
// zeroCalibType &= 0xff00;
|
||||
// zeroCalibType |= 'L';
|
||||
// currentMode.Bit.LowCalibEnd = 1;
|
||||
// if(zeroCalibType == (('H'<<8)+'L'))
|
||||
// {
|
||||
// tempL.Word[0] = 0;
|
||||
// // tempL.Word[0] = WriteShortParameterToMemory(GET_WORD_ADDR());
|
||||
// EnterUserMode();
|
||||
// }
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 高低温标定程序:高温参数保存功能
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void HighTemperatureParameterWriting(void)
|
||||
{
|
||||
if(voltageDetected[TPCB] <= ENABLE_WRITE_TA_HIGH)
|
||||
{
|
||||
// calibType = ('E'<<8)+'R';
|
||||
return;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[TPCB];
|
||||
staticHighTemperature = WriteShortParameterToMemory(GET_WORD_ADDR(staticHighTemperature));
|
||||
|
||||
tempL.Word[0] = voltageDetected[RRRES];
|
||||
RRHigh = WriteShortParameterToMemory(GET_WORD_ADDR(RRHigh));
|
||||
|
||||
tempL.Word[0] = voltageDetected[IVHDX];
|
||||
VHHHigh = WriteShortParameterToMemory(GET_WORD_ADDR(VHHHigh));
|
||||
|
||||
// for AType FlowRate Compute
|
||||
tempL.Word[0] = voltageDetected[PORH];
|
||||
P0RhHigh = WriteShortParameterToMemory(GET_WORD_ADDR(P0RhHigh));
|
||||
|
||||
tempL.Word[0] = voltageDetected[RHRES];
|
||||
RHHighTa = WriteShortParameterToMemory(GET_WORD_ADDR(RHHighTa));
|
||||
|
||||
//------------------------------------------------------------------------------------------------------
|
||||
tempL.Word[0] = voltageDetected[NIDX];
|
||||
OffsetHigh = WriteShortParameterToMemory(GET_WORD_ADDR(OffsetHigh));
|
||||
|
||||
tempL.Word[0] = voltageDetected[VDUGX];
|
||||
VDUGXHigh = WriteShortParameterToMemory(GET_WORD_ADDR(VDUGXHigh));
|
||||
//calibType = ('H'<<8)+'D';
|
||||
// calibType &= 0x00ff;
|
||||
// calibType |= ('H'<<8);
|
||||
// zeroCalibType &= 0x00ff;
|
||||
// zeroCalibType |= 'H'<<8;
|
||||
|
||||
//------------------------------------------------------------------------------------------------------
|
||||
// tempL.Word[0] = ReadShortParameterFromMemory(ZEROCAL_STATE, 0);
|
||||
// tempL.Word[0] &= 0x00ff;
|
||||
// tempL.Word[0] |= ('H'<<8);
|
||||
// WriteShortParameterToMemory(ZEROCAL_STATE);
|
||||
|
||||
currentMode.Bit.HighCalibEnd = 1;
|
||||
if( currentMode.Bit.HighCalibEnd && currentMode.Bit.LowCalibEnd ) EnterUserMode();
|
||||
tempL.Word[0] = currentMode.Word;
|
||||
WriteShortParameterToMemory(SYS_COMMAND);
|
||||
|
||||
// if(tempL.Word[0] == INTCMD_CALIB_TEMP_END) EnterUserMode();
|
||||
//currentMode.Bit.ZeroCalib
|
||||
// if(zeroCalibType == (('H'<<8)+'L'))
|
||||
// {
|
||||
// tempL.Word[0] = 0;
|
||||
// tempL.Word[0] = WriteShortParameterToMemory(GET_WORD_ADDR());
|
||||
// EnterUserMode();
|
||||
// }
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief 高低温标定程序,判断温度是否稳定,是否可以进行参数保存
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void SaveVHHAndNRHInTempretureMode(void)
|
||||
{
|
||||
if(!currentMode.Bit.ZeroCalib) return;
|
||||
if(samplingInterval > EXT_POWER_PERIOD_TIME) return;
|
||||
|
||||
if((voltageDetected[TPCB] > ENABLE_WRITE_TA_LOW) && (voltageDetected[TPCB] < ENABLE_WRITE_TA_HIGH))
|
||||
{
|
||||
compareBaseCounter = 0;
|
||||
compareBaseValue = voltageDetected[TPCB];
|
||||
return;
|
||||
}
|
||||
|
||||
compareBaseCounter += (u32)timePeriod;
|
||||
if((voltageDetected[TPCB] > compareBaseValue + ENABLE_WRITE_TA_SCALE) || (voltageDetected[TPCB] < compareBaseValue - ENABLE_WRITE_TA_SCALE))
|
||||
{
|
||||
compareBaseCounter = 0;
|
||||
compareBaseValue = voltageDetected[TPCB];
|
||||
}
|
||||
else
|
||||
{
|
||||
//compareBaseCounter += (unsigned long int)timePeriod;
|
||||
if(compareBaseCounter < (unsigned long int)EXIT_5400S) return; // 1hours // 1hours
|
||||
if(voltageDetected[TPCB] >= ENABLE_WRITE_TA_HIGH) HighTemperatureParameterWriting();
|
||||
else if(voltageDetected[TPCB] <= ENABLE_WRITE_TA_LOW) LowTemperatureParameterWriting();
|
||||
compareBaseCounter=0;
|
||||
}
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief RH参数计算函数
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void ComputeRHParameter(void)
|
||||
{
|
||||
float tmpIH, tmpRH;
|
||||
s32 tempCode;
|
||||
|
||||
// comput normal RH
|
||||
//==============================================================================
|
||||
// compute RH Voltage
|
||||
tempCode = (s32)voltageDetected[VRHX];
|
||||
tempCode -= 32768;
|
||||
tmpRH = (float)tempCode;
|
||||
tmpRH *= (float)VRH_VREF;
|
||||
voltageDetected[RHVOL] = (u16)tmpRH;
|
||||
|
||||
// compute IRH
|
||||
//===========================================================================
|
||||
tempCode = (s32)voltageDetected[IVHDX];
|
||||
tempCode -= 32768;
|
||||
tmpIH = (float)tempCode;
|
||||
tmpIH = tmpIH * (float)IRH_VREF + (float)IRH_VDC;
|
||||
tmpIH /= (float)IRH_RC;
|
||||
tmpRH = tmpRH /tmpIH - (float)IRH_RC;
|
||||
tmpRH *= 10;
|
||||
voltageDetected[RHRES] = (u16)tmpRH;
|
||||
|
||||
// compute RH power
|
||||
//===========================================================================
|
||||
tmpIH *= tmpIH;
|
||||
tmpIH *= tmpRH;
|
||||
voltageDetected[PORH] = (u16)tmpIH;
|
||||
|
||||
//==============================================================================
|
||||
//voltageDetected[PORH] = MovingAverage(computePower, 5, PORH);
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief RR参数计算函数
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void ComputeRRParameter(void)
|
||||
{
|
||||
float tmpVol;
|
||||
s32 tempCode;
|
||||
disable_interrupts();
|
||||
// comput normal (VRR)
|
||||
//==============================================================================
|
||||
tempCode = (s32)voltageDetected[VRRX];
|
||||
tempCode -= 32768;
|
||||
tmpVol = (float)tempCode;
|
||||
tmpVol *= (float)VRR_VREF;
|
||||
tmpVol += (float)VRR_VDC;
|
||||
voltageDetected[RRVOL] = (u16)(tmpVol + VCOM);
|
||||
|
||||
// comput normal RR resistance
|
||||
//==============================================================================
|
||||
tmpVol = VRR_BRIDGE_VOL/tmpVol - 1.0;
|
||||
tmpVol = VRR_RA/tmpVol;
|
||||
|
||||
voltageDetected[RRRES] = (u16)tmpVol;
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief InterCurveProcess
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void InterCurveProcess(void)
|
||||
{
|
||||
calibType = 0;
|
||||
if(tempL.Word[0] == INTCMD_PRESET_OFFSET) PreCalibrationParameterWriting();
|
||||
else if(tempL.Word[0] == INTCMD_CALIB_HTEMP) HighTemperatureParameterWriting();
|
||||
else if(tempL.Word[0] == INTCMD_CALIB_LTEMP) LowTemperatureParameterWriting();
|
||||
else if(tempL.Word[0] == INTCMD_CTYPE_CURVE) calibType = INTCMD_CTYPE_CURVE;
|
||||
else if(tempL.Word[0] == INT_2ND_CURVE_CMD) calibType = INT_2ND_CURVE_CMD;
|
||||
else if(tempL.Word[0] == INT_3RD_CURVE_CMD) calibType = INT_3RD_CURVE_CMD;
|
||||
else if(tempL.Word[0] == INTCMD_1ST_TABLE) calibType = INTCMD_1ST_TABLE;
|
||||
else if(tempL.Word[0] == INTCMD_2ND_TABLE) calibType = INTCMD_2ND_TABLE;
|
||||
else MBBuf.BusError = SLAVE_DEVICE_FAILURE;
|
||||
}
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief InterControlProcess
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void InterControlProcess(void)
|
||||
{
|
||||
if(tempL.Word[0] == INTCMD_USER_MODE) EnterUserMode();
|
||||
//else if(tempL.Word[0] == INTCMD_EXCALIB_MODE) EnterExtCalibMode(); // calibration mode
|
||||
else if(tempL.Word[0] == INTCMD_CALIB_MODE) EnterCalibMode(); // calibration mode
|
||||
else if(tempL.Word[0] == INTCMD_ZERO_CALIB_MODE) {
|
||||
EnterZeroCalibMode(); // calibration mode
|
||||
tempL.Word[0] = currentMode.Word;
|
||||
WriteShortParameterToMemory(SYS_COMMAND);
|
||||
tempL.Word[0] = INTCMD_ZERO_CALIB_MODE;
|
||||
}
|
||||
//------------------------------------------------------------------------
|
||||
else if(tempL.Word[0] == INTCMD_DEBUG_MODE) EnterDebugMode(); // debug mode
|
||||
else if(tempL.Word[0] == INTCMD_BATTERY_MODE) EnterBatteryMode(); // battery mode
|
||||
else if(tempL.Word[0] == INTCMD_GCF_TEST_MODE) EnterGcfTestMode(); // GCF 测试 mode
|
||||
//else if(tempL.Word[0] == INTCMD_SAVE_SETUP) SaveFactorySetting(); // Save the factory setting
|
||||
//else if(tempL.Word[0] == INTCMD_RESTORE) RestoreFactorySetting(); // Restore factory settings
|
||||
else if(tempL.Word[0] == INTCMD_RESET_CORR) DefaultDevCoef(); // Restore
|
||||
else MBBuf.BusError = SLAVE_DEVICE_FAILURE;
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief InterControlProcess
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void InterClearProcess(void)
|
||||
{
|
||||
if(tempL.Word[0] == ('B'<<8)+'J') ClearAlarmRecord();
|
||||
else if(tempL.Word[0] == ('L'<<8)+'S') ClearHistoryRecord();
|
||||
else if(tempL.Word[0] == ('R'<<8)+'Z') ClearDateRecord();
|
||||
}
|
||||
|
||||
/**************************************************************************************/
|
||||
/**
|
||||
* @brief InterControlProcess
|
||||
* @note
|
||||
* @warning
|
||||
*/
|
||||
void CalibSystemOffset(void )
|
||||
{
|
||||
tempL.Word[0] = voltageDetected[NIDX]; // ReadDataFromMovingAverage(NIDX);
|
||||
if(CMDComPassword == ('K'<<8)+'Q') offsetAir = WriteShortParameterToMemory(GET_WORD_ADDR(offsetAir));
|
||||
else if(CMDComPassword == ('J'<<8)+'Z') offsetGas = WriteShortParameterToMemory(GAS_OFFSET);
|
||||
}
|
||||
//##############################################################################
|
||||
#endif
|
||||
//##############################################################################
|
||||
60
user/Core/DP2201_V5000_Compute.h
Normal file
60
user/Core/DP2201_V5000_Compute.h
Normal file
@@ -0,0 +1,60 @@
|
||||
#ifndef __D9V2FR_DP2201V5000_h__
|
||||
#define __D9V2FR_DP2201V5000_h__
|
||||
|
||||
//##############################################################################
|
||||
#if DP2201_CORE_V5000
|
||||
//##############################################################################
|
||||
|
||||
// CODE = [(VREF-VREFN)*RR/(RA+RR) - (VREF-VREFN)*RB/(RA+RB)]*Gain / VREF*32768 + 32768
|
||||
// CODE -32768 = (VREF-VREFN)/VREF*[ RR/(RA+RR) - RB/(RA+RB)]*GAIN / VREF*32768
|
||||
// (CODE -32768) * VREF/32768 = (VREF-VREFN)*[ RR/(RA+RR) - RB/(RA+RB)]*GAIN
|
||||
// VREF_PER_CODE: VREF/32768
|
||||
// (CODE -32768) * VREF_PER_CODE / GAIN = (VREF-VREFN)*[ RR/(RA+RR) - RB/(RA+RB)]
|
||||
// VRR_VREF: VREF_PER_CODE/GAIN
|
||||
// VRR_VDC:(VREF-VREFN)*RB/(RA+RB)
|
||||
// (CODE -32768) * VRR_VREF = (VREF-VREFN)*[ RR/(RA+RR) - RB/(RA+RB)]
|
||||
// (CODE -32768) * VRR_VREF + VRR_VDC = (VREF-VREFN)*RR/(RA+RR) // VRR
|
||||
|
||||
// CODE = [(VREF-VREFN)*RR/(RA+RR) - (VREF-VREFN)*RB/(RA+RB)]*Gain / VREF*32768 + 32768
|
||||
// (CODE-32768) = (VREF-VREFN)*[RR/(RA+RR) - RB/(RA+RB)]*GAIN*32768/VREF
|
||||
// (CODE-32768)*VREF/[(VREF-VREFN)*GAIN*32768] = RR/(RA+RR) - RB/(RA+RB)
|
||||
// VRR_PER_CODE: VREF/[(VREF-VREFN)*GAIN*32768]
|
||||
// VRR_RDC: RB/(RA+RB)
|
||||
// 1) (CODE-32768)*VRR_PER_CODE
|
||||
// 2) 1)+VRR_RDC
|
||||
// 3) 1/2)
|
||||
// 4) 3)-1
|
||||
// 5) RA/4)
|
||||
|
||||
#define ADC_VREF 2500.0
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
#define IRH_RA 33000.0
|
||||
#define IRH_RB 2800.0
|
||||
#define IRH_VDC (ADC_VREF*IRH_RB/(IRH_RA + IRH_RB))
|
||||
#define IRH_ADC_GAIN 16.0
|
||||
#define IRH_VREF (VREF_PER_CODE/IRH_ADC_GAIN)
|
||||
#define IRH_RC 56.0
|
||||
|
||||
#define VRH_VREF VREF_PER_CODE
|
||||
|
||||
void RHCircuitParameterInit(void);
|
||||
void CalibrateOffset(void);
|
||||
void PreCalibrationParameterWriting(void);
|
||||
void LowTemperatureParameterWriting(void);
|
||||
void HighTemperatureParameterWriting(void);
|
||||
void SaveVHHAndNRHInTempretureMode(void);
|
||||
void ComputeRHParameter(void);
|
||||
void ComputeRRParameter(void);
|
||||
|
||||
// for internal modbus
|
||||
void InterCurveProcess(void);
|
||||
void InterControlProcess(void);
|
||||
void InterClearProcess(void);
|
||||
|
||||
//##############################################################################
|
||||
#endif
|
||||
//##############################################################################
|
||||
|
||||
#endif
|
||||
|
||||
437
user/Core/DP2201_V5000_IO.h
Normal file
437
user/Core/DP2201_V5000_IO.h
Normal file
@@ -0,0 +1,437 @@
|
||||
#ifndef __DP2201_V5000_IO_h__
|
||||
#define __DP2201_V5000_IO_h__
|
||||
//.h Start--------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
#if ((DP2201_CORE_V5020) || (DP2201_CORE_V5002))
|
||||
#define DP2201_CORE_V5000 1
|
||||
#endif
|
||||
|
||||
//File Start--------------------------------------------------------------------
|
||||
#if (DP2201_CORE_V5000)
|
||||
//**************************************************************************
|
||||
|
||||
// for flow compute
|
||||
//==============================================================================
|
||||
#define TEST_PIN GPIO_PIN_5
|
||||
#define TEST_PIN_PINPOS GPIO_PinPos_5
|
||||
#define TEST_PIN_GPIO GPIO0
|
||||
#define TEST_PIN_OUT() EnableOutput(TEST_PIN_GPIO, TEST_PIN_PINPOS)
|
||||
#define TEST_PIN_TOGGLE() TOGGLE_PIN(TEST_PIN_GPIO, TEST_PIN)
|
||||
#define CLR_TEST_PIN() CLR_PIN(TEST_PIN_GPIO,TEST_PIN)
|
||||
#define SET_TEST_PIN() SET_PIN(TEST_PIN_GPIO,TEST_PIN)
|
||||
//------------------------------------------------------------------------------
|
||||
// RH power control pin
|
||||
#define RH_CON_PIN GPIO_PIN_0
|
||||
#define RH_CON_PINPOS GPIO_PinPos_0
|
||||
#define RH_GPIO GPIO0
|
||||
#define RH_CON_OUTPUT() EnableOutput(RH_GPIO, RH_CON_PINPOS)
|
||||
#define TURN_OFF_RH_POWER() SET_PIN(RH_GPIO,RH_CON_PIN)
|
||||
#define TURN_ON_RH_POWER() CLR_PIN(RH_GPIO,RH_CON_PIN)
|
||||
//------------------------------------------------------------------------------
|
||||
// Heating control pin
|
||||
#define HEATING_PIN GPIO_PIN_6
|
||||
#define HEATING_PINPOS GPIO_PinPos_6
|
||||
#define HEATING_GPIO GPIO1
|
||||
#define HEATING_OUTPUT() EnableOutput(HEATING_GPIO, HEATING_PINPOS)
|
||||
#define CLR_HEATING() CLR_PIN(HEATING_GPIO,HEATING_PIN)
|
||||
#define SET_HEATING() SET_PIN(HEATING_GPIO,HEATING_PIN)
|
||||
#define TURN_ON_HEATING() SET_HEATING()
|
||||
#define TURN_OFF_HEATING() CLR_HEATING() // CLR_HEATING()
|
||||
#define SELECT_VREF_CON() SET_HEATING()
|
||||
#define SELECT_MEMS_CON() CLR_HEATING()
|
||||
//------------------------------------------------------------------------------
|
||||
// RH Heating control select pin
|
||||
#define TD_CON_PIN GPIO_PIN_5
|
||||
#define TD_CON_PINPOS GPIO_PinPos_5
|
||||
#define TD_CON_GPIO GPIO1
|
||||
#define TD_CON_OUTPUT() EnableOutput(TD_CON_GPIO, TD_CON_PINPOS)
|
||||
#define CLR_TD_CON() CLR_PIN(TD_CON_GPIO,TD_CON_PIN)
|
||||
#define SET_TD_CON() SET_PIN(TD_CON_GPIO,TD_CON_PIN)
|
||||
#define SELECT_TD_CON() CLR_TD_CON()
|
||||
#define SELECT_TU_CON() SET_TD_CON()
|
||||
|
||||
#define CALIB_PIN GPIO_PIN_7
|
||||
#define CALIB_PINPOS GPIO_PinPos_7
|
||||
#define CALIB_GPIO GPIO1
|
||||
#define EXT_CALIB_OUTPUT() EnableOutput(CALIB_GPIO, CALIB_PINPOS)
|
||||
#define CLR_CALIB_PIN() CLR_PIN(CALIB_GPIO,CALIB_PIN)
|
||||
//------------------------------------------------------------------------------
|
||||
// for soft I2C
|
||||
#define I2C_SDA GPIO_PIN_0
|
||||
#define I2C_SDA_PINPOS GPIO_PinPos_0
|
||||
#define I2C_SDA_GPIO GPIO1
|
||||
#define I2C_SCL GPIO_PIN_1
|
||||
#define I2C_SCL_PINPOS GPIO_PinPos_1
|
||||
#define I2C_SCL_GPIO GPIO1
|
||||
//------------------------------------------------------------------------------
|
||||
// for eeprom
|
||||
#define EEPROM_WP_PIN GPIO_PIN_4
|
||||
#define EEPROM_WP_PINPOS GPIO_PinPos_4
|
||||
#define EEPROM_WP_GPIO GPIO1
|
||||
#define PARA_EEPROM BIT1
|
||||
#define DATA_EEPROM BIT2
|
||||
#define FROCK_EEPROM BIT1+BIT2+BIT3
|
||||
//------------------------------------------------------------------------------
|
||||
// for FRAM
|
||||
#define FRAM_WP_PIN GPIO_PIN_4
|
||||
#define FRAM_WP_PINPOS GPIO_PinPos_4
|
||||
#define FRAM_WP_GPIO GPIO1
|
||||
#define FRAM_CS_PIN GPIO_PIN_5
|
||||
#define FRAM_CS_PINPOS GPIO_PinPos_5
|
||||
#define FRAM_CS_GPIO GPIO0
|
||||
//------------------------------------------------------------------------------
|
||||
// for SPI
|
||||
#define SCLK_PIN GPIO_PIN_5
|
||||
#define SCLK_PINPOS GPIO_PinPos_5
|
||||
#define SCLK_PIN_SOURCE GPIO_PinSource5
|
||||
#define SCLK_PIN_CONFIG GPIO1_5_AF_SCLK
|
||||
#define SCLK_GPIO GPIO1
|
||||
|
||||
#define SOMI_PIN GPIO_PIN_4
|
||||
#define SOMI_PINPOS GPIO_PinPos_4
|
||||
#define SOMI_PIN_SOURCE GPIO_PinSource4
|
||||
#define SOMI_PIN_CONFIG GPIO1_4_AF_MISO
|
||||
#define SOMI_GPIO GPIO1
|
||||
|
||||
#define SIMO_PIN GPIO_PIN_6
|
||||
#define SIMO_PINPOS GPIO_PinPos_6
|
||||
#define SIMO_PIN_SOURCE GPIO_PinSource6
|
||||
#define SIMO_PIN_CONFIG GPIO1_6_AF_MOSI
|
||||
#define SIMO_GPIO GPIO1
|
||||
//------------------------------------------------------------------------------
|
||||
#define EXT_CALIB_PIN GPIO_PIN_7
|
||||
#define EXT_CALIB_PINPOS GPIO_PinPos_7
|
||||
#define EXT_CALIB_GPIO GPIO1
|
||||
|
||||
#define RS485DE_PIN GPIO_PIN_1
|
||||
#define RS485DE_PINPOS GPIO_PinPos_1
|
||||
#define RS485DE_GPIO GPIO1
|
||||
#define RS485DE_OUTPUT() EnableOutput(RS485DE_GPIO, RS485DE_PINPOS)
|
||||
#define ENABLE_TXD() SET_PIN(RS485DE_GPIO, RS485DE_PIN)
|
||||
#define ENABLE_RXD() CLR_PIN(RS485DE_GPIO, RS485DE_PIN)
|
||||
// *****************************************************************************
|
||||
// 'X' <20><><EFBFBD><D7BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
// *****************************************************************************
|
||||
#define CTYPE_FR CURVE_1ST
|
||||
#define ATYPE_VH CURVE_2ND
|
||||
#define MICRO_FR CURVE_3RD
|
||||
|
||||
#define FRIDX CTYPE_FR // 0
|
||||
#define RGIDX ATYPE_VH // 1
|
||||
#define GAINX MICRO_FR // 2
|
||||
#define VDUX 3 //
|
||||
#define VDUGX 4 //
|
||||
#define RIDX 5 //
|
||||
#define NIDX 6 // NORMAL_VL - LOW_VL (TD INDEX)
|
||||
#define TPCB 7 // PCB temperature
|
||||
#define TGAS 8 // GAS temperature
|
||||
#define TRH 9 // RH temperature
|
||||
#define BATT 10 // Battery volatge
|
||||
#define IVHDX 11 // IRH CODE test VHH By TD Control
|
||||
#define VRHX 12 // VRH CODE
|
||||
#define IVHUX 13 // IRH CODE test VHH By TU Control
|
||||
#define VRRX 14 // VRR CODE
|
||||
#define RHVOL 15 // RH VOLATAGE
|
||||
#define RRVOL 16 // RR VOLATAGE
|
||||
#define RHRES 17 // RH resistance
|
||||
#define RRRES 18 // RR resistance
|
||||
#define PORH 19 // RH Power
|
||||
#define PDRH 20 // RH current Power
|
||||
#define CVHHX 21 //
|
||||
#define DVHHX 22 //
|
||||
#define VHPA 23 //
|
||||
#define RATO 24 // RR:RH
|
||||
#define SDT 25 // ATYPE OFFSET
|
||||
#define DIVHX 26 // IVHH(TD) - IVHH(TU)
|
||||
#define TCOE 27 //
|
||||
#define TVDUX 28 //
|
||||
#define TVDUGX 29 //
|
||||
#define FR_H 30 //
|
||||
#define FR_L 31 //
|
||||
#define ANX 32 //
|
||||
#define ANX_MASK (ANX-1)
|
||||
//------------------------------------------------------------------------------
|
||||
#define NRH RRRES
|
||||
#define NVHH IVHDX
|
||||
#define CVHH CVHHX //
|
||||
#define DVHH DVHHX //
|
||||
#define NVDU VDUX
|
||||
|
||||
#define LRH RHRES
|
||||
#define LVOL RHVOL
|
||||
#define LVHH IVHDX
|
||||
//------------------------------------------------------------------------------
|
||||
#define GCFX NVDU //
|
||||
#define GIDX LCDE //
|
||||
#define FIDX FRIDX
|
||||
#define RAOOM RATO
|
||||
|
||||
#define ATYPE_FR CURVE_2ND
|
||||
#define REG_INDEX RGIDX
|
||||
//------------------------------------------------------------------------------
|
||||
#define CODE1 FR_H // 8300 FIDX
|
||||
#define CODE2 FR_L // 8301 FIDX
|
||||
#define CODE3 FRIDX // 8302 FIDX
|
||||
#if(TEMP_CORR_USE_RR)
|
||||
#define CODE4 RRRES // MICRO_FR // 8303 TEMP
|
||||
#else
|
||||
#define CODE4 TGAS // MICRO_FR // 8303
|
||||
#endif
|
||||
#define CODE5 MICRO_FR // 8304 С<><D0A1><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> С<><D0A1><EFBFBD><EFBFBD>
|
||||
#define CODE6 DVHHX // 8305 С<><D0A1><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> DVHH
|
||||
#define CODE7 RHVOL // 8306 С<><D0A1><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> LVOL // VRH
|
||||
#define CODE8 RRVOL // 8307 С<><D0A1><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> NVOL // VRR
|
||||
#define CODE9 VHPA // 8308 С<><D0A1><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9> VHPA
|
||||
#define CODE10 TPCB // 8309 С<><D0A1><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>
|
||||
#define CODE11 VDUX // 830A
|
||||
#define CODE12 IVHDX // 830B
|
||||
#define CODE13 DIVHX // 830C
|
||||
#define CODE14 VRHX // 830D
|
||||
#define CODE15 VDUGX // 830E
|
||||
#define CODE16 RHRES // 830F
|
||||
// *****************************************************************************
|
||||
// 1S = 16384
|
||||
// Circuit preparation process
|
||||
#define START_CIRCUIT_SETUP 0
|
||||
#define START_DETECT_STAGE_HEATING 1
|
||||
#define START_DETECT_STAGE_PROCESSING 2
|
||||
#define START_1ST_STAGE_HEATING 3
|
||||
#define START_1ST_STAGE_SAMPLING 4
|
||||
#define START_1ST_STAGE_PROCESSING 5
|
||||
//------------------------------------------------------------------------------
|
||||
#define FR_UPDATE 0x0A
|
||||
#define FR_UPDATE_PULSE_TIME 16 // 1ms
|
||||
//------------------------------------------------------------------------------
|
||||
#define CIRCUIT_SETUP_TIME 82 // 5ms
|
||||
//------------------------------------------------------------------------------
|
||||
#define SET_UP_TIME_FROM_DETECT_TO_1ST_STAGE 1638 // 100ms
|
||||
//------------------------------------------------------------------------------
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̣<EFBFBD>
|
||||
//------------------------------------------------------------------------------
|
||||
#define COUNT_VALUE_PER_MS 16 //10
|
||||
#define SET_UP_TIME_OF_DETECT_STAGE (20 * COUNT_VALUE_PER_MS) ///20ms
|
||||
#define SAMPLING_TIMES_IN_DETECT_STAGE 16 //
|
||||
#define SHIFT_IN_DETECT_STAGE 4 //
|
||||
//
|
||||
#define SET_UP_TIME_OF_1ST_STAGE (40 * COUNT_VALUE_PER_MS) //40ms <20><>Ӧ<EFBFBD><D3A6><EFBFBD><CEA2><EFBFBD><EFBFBD>ADC 977SRS DMA<4D><41><EFBFBD><EFBFBD>32<33><32>ʱ<EFBFBD><CAB1>
|
||||
#define PRESAMPLING_TIMES_IN_1ST_STAGE 32 //
|
||||
#define SHIFT_IN_PRESAMPLING_1ST_STAGE 5 //
|
||||
//
|
||||
#define SAMPLING_TIME_OF_1ST_STAGE (70 * COUNT_VALUE_PER_MS) //70ms <20><>Ӧ<EFBFBD><D3A6><EFBFBD><CEA2><EFBFBD><EFBFBD>ADC 977SRS DMA<4D><41><EFBFBD><EFBFBD>64<36><34>ʱ<EFBFBD><CAB1>
|
||||
#define SAMPLING_TIMES_IN_1ST_STAGE 64 //
|
||||
#define SHIFT_IN_1ST_STAGE 6 //
|
||||
|
||||
//******************************************************************************
|
||||
#define STATIC_HIGH_CODE 50
|
||||
#define STATIC_LOW_CODE 50
|
||||
// *****************************************************************************
|
||||
//#define VHH_GAIN GAIN16
|
||||
#define NIDX_GAIN GAIN32
|
||||
#define GIDX_GAIN GAIN128 //GAIN_64
|
||||
#define GIDX_SHIFT 4
|
||||
//#define VRR_GAIN GAIN16
|
||||
//#define VRH_GAIN GAIN1
|
||||
|
||||
#define SAMPLE_NORMOL_MODE 0
|
||||
#define SAMPLE_TRACK_ZERO_MODE 1
|
||||
#define SAMPLE_FAST_MODE 2
|
||||
#define SAMPLE_MODE_MAX SAMPLE_TRACK_ZERO_MODE //SAMPLE_VDU_VRH_MODE
|
||||
#define SAMPLE_DEFAULT_MODE SAMPLE_NORMOL_MODE //SAMPLE_VDU_VRR_MODE
|
||||
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ÿ<><C3BF>4λ
|
||||
#define SAMPLE_VDU 0
|
||||
#define SAMPLE_GVDU 1
|
||||
|
||||
#define SAMPLE_VRH 0
|
||||
#define SAMPLE_IRH 1
|
||||
|
||||
#define SWITCH_GAIN_THRESHOLD 0x36768
|
||||
|
||||
#define CAL_VDUX CTYPE_FR
|
||||
#define CAL_ATYPE ATYPE_VH
|
||||
#define CAL_VDUGX MICRO_FR
|
||||
|
||||
|
||||
// *****************************************************************************
|
||||
#if (DP2201_CORE_V5002)
|
||||
//---------------------------------------------------------------------------------
|
||||
#define VCOM 0.0
|
||||
#define VREF_PER_CODE (ADC_VREF/32768)
|
||||
#define VRR_BRIDGE_VOL (ADC_VREF - VCOM)
|
||||
|
||||
#define VRR_RA 33000.0
|
||||
#define VRR_RB 2800.0
|
||||
#define VRR_RDC (VRR_RB/(VRR_RA + VRR_RB))
|
||||
#define VRR_VDC (VRR_BRIDGE_VOL*VRR_RDC)
|
||||
|
||||
#define VRR_ADC_GAIN 16.0
|
||||
#define VRR_VREF ( VREF_PER_CODE/VRR_ADC_GAIN )
|
||||
#define VRR_PER_CODE ( ADC_VREF/((ADC_VREF-VCOM)*GAIN*32768))
|
||||
|
||||
#define SampingADCInit() ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_1P25V)
|
||||
#define SetupCTypeChannle(gain) ADC_Init(ADC_0, SPS_977, gain, ADC0_AIN0, ADC0_AIN1)
|
||||
#define SetupRTypeChannle() ADC_Init(ADC_1, SPS_977, GAIN32, ADC0_AIN3,ADC1_AIN4)
|
||||
#define SetupATypeChannle() ADC_Init(ADC_1, SPS_977, GAIN16, ADC1_AIN3,ADC1_AIN4)
|
||||
#define SetupVRHChannle() ADC_Init(ADC_1, SPS_977, GAIN1, ADC0_AIN2,ADC1_AVSS)
|
||||
#define SetupIRHChannle() ADC_Init(ADC_1, SPS_977, GAIN16, ADC0_AIN5,ADC1_AIN4)
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
#else if (DP2201_CORE_V5020)
|
||||
//---------------------------------------------------------------------------------
|
||||
#define VCOM 1261.0
|
||||
#define VREF_PER_CODE (ADC_VREF/32768)
|
||||
#define VRR_BRIDGE_VOL (ADC_VREF - VCOM)
|
||||
|
||||
#define VRR_RA 33000.0
|
||||
#define VRR_RB 7500.0
|
||||
#define VRR_RDC (VRR_RB/(VRR_RA + VRR_RB))
|
||||
#define VRR_VDC (VRR_BRIDGE_VOL*VRR_RDC)
|
||||
|
||||
#define VRR_ADC_GAIN 32.0
|
||||
#define VRR_VREF ( VREF_PER_CODE/VRR_ADC_GAIN )
|
||||
#define VRR_PER_CODE ( ADC_VREF/((ADC_VREF-VCOM)*GAIN*32768))
|
||||
|
||||
#define SampingADCInit() ADC_REF_Init(REF_INTERNAL_2P5V, REF_INTERNAL_1P25V)
|
||||
#define SetupCTypeChannle(gain) ADC_Init(ADC_0, SPS_977, gain, ADC0_AIN0, ADC0_AIN1)
|
||||
#define SetupRTypeChannle() ADC_Init(ADC_1, SPS_977, GAIN32, ADC1_AIN3,ADC1_AIN5)
|
||||
#define SetupVRHChannle() ADC_Init(ADC_1, SPS_977, GAIN1, ADC1_AIN2,ADC1_AVSS)
|
||||
#define SetupIRHChannle() ADC_Init(ADC_1, SPS_977, GAIN16, ADC1_AIN7,ADC1_AIN4)
|
||||
#define SetupRTypeVDCChannle() ADC_Init(ADC_1, SPS_977, GAIN1, ADC1_REFP,ADC1_AIN5)
|
||||
#define SetupRTypeVREFChannle() ADC_Init(ADC_0, SPS_977, GAIN1, ADC0_REFP,ADC0_AIN5)
|
||||
//---------------------------------------------------------------------------------
|
||||
#endif
|
||||
//---------------------------------------------------------------------------------
|
||||
|
||||
//---------------------------------------------------------------------------------------
|
||||
#define StartSamplingADC() { \
|
||||
ADC_SyncCmd(ENABLE); \
|
||||
DMA_ADC_Init(ADC_0, sampleProcess.ADC0Buffer, sampleProcess.CounterMax); \
|
||||
DMA_ADC_Init(ADC_1, sampleProcess.ADC1Buffer, sampleProcess.CounterMax); \
|
||||
DMA_StartADC(ADC_0); \
|
||||
DMA_StartADC(ADC_1); \
|
||||
}
|
||||
|
||||
#define StopSamplingADC() { \
|
||||
DMA_StopADC(ADC_0); \
|
||||
DMA_StopADC(ADC_1); \
|
||||
}
|
||||
//---------------------------------------------------------------------------------------
|
||||
#define sampleCTypeValue sampleProcess.ADC0Result
|
||||
#define sampleATypeValue sampleProcess.ADC1Result
|
||||
#define sampleRTypeValue sampleProcess.ADC1Result
|
||||
#define ReadADCData()
|
||||
//---------------------------------------------------------------------------------------
|
||||
// 125ms/250ms/500ms/1000ms/2000ms/4000ms <20><><EFBFBD>ڶ<EFBFBD>ʱ uploadCounter: <20><><EFBFBD><EFBFBD>ֵ(>32.768)<29><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ=(32768/1000)*t t(ms)Ϊ<><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//#define USE_LPTIMER0
|
||||
#define PrimaryTimer LPTIM1
|
||||
#define StartPrimaryTimer( uploadCounter ) StartLPTimer1( uploadCounter )
|
||||
#define ResetPrimaryTimer( uploadCounter ) ResetLPTimer1( uploadCounter )
|
||||
#define EnablePrimaryTimerInterrupt() EnableLPTimer1Interrupt()
|
||||
#define DisablePrimaryTimerInterrupt() DisableTimer1Interrupt()
|
||||
#define StopPrimaryTimer() StopLPTimer1()
|
||||
//#define PrimaryTimer_IRQ_Callback PrimaryTimer_IRQ_Callback// ManagePrimaryTimeInterval
|
||||
|
||||
//---------------------------------------------------------------------------------------
|
||||
// 1ms<6D><73><EFBFBD><D7BC>ʱ uploadCounter: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>Χ:(1~4000)
|
||||
//#define USE_TIMER2
|
||||
#define ProcessTimer TIM1
|
||||
#define ProcessTimerIT TIM_IT_CC1
|
||||
#define StartProcessTimer(uploadCounter) StartTimer1_CC1(uploadCounter)
|
||||
#define ResetProcessTimer(uploadCounter) ResetTimer1_CC1(uploadCounter)
|
||||
#define StopProcessTimer() StopTimer1()
|
||||
#define EnableProcessTimerInterrupt() NVIC_EnableIRQ(TIM1_IRQn); // EnableTimer2Interrupt()
|
||||
#define DisableProcessTimerInterrupt() NVIC_DisableIRQ(TIM1_IRQn); // DisableTimer2Interrupt()
|
||||
//#define Timer2InterruptCallBack()
|
||||
//#define ProcessTimer_IRQ_Callback ProcessTimerInterruptCallBack
|
||||
|
||||
//---------------------------------------------------------------------------------------
|
||||
//<2F>Ƚ϶<C8BD>ʱ uploadCounter: <20><><EFBFBD><EFBFBD>ֵ(1~65535)<29><><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>ֵ=(65535/4000)*t t(ms)Ϊ<><CEAA><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
||||
//#define USE_TIMER1
|
||||
//#define SamplingTimer TIM1
|
||||
//#define StartSamplingTimer(uploadCounter) StartTimer1_CC1(uploadCounter)
|
||||
//#define ResetSamplingTimer(uploadCounter) ResetTimer1_CC1(uploadCounter)
|
||||
//#define StopSamplingTimer() StopTimer1()
|
||||
//#define EnableSamplingInterrupt() NVIC_EnableIRQ(TIM1_IRQn); // EnableTimer1Interrupt()
|
||||
//#define DisableSamplingInterrupt() NVIC_DisableIRQ(TIM1_IRQn); // DisableTimer1Interrupt()
|
||||
//#define SamplingTimer_IRQ_Callback ProcessTimerInterruptCallBack
|
||||
|
||||
#define TEMP_SENSOR_RESULT RESULT_0_25_BIT
|
||||
|
||||
// *****************************************************************************
|
||||
typedef struct
|
||||
{
|
||||
u16 DisplayZero : 1; // 1
|
||||
u16 Mode: 2; // 3
|
||||
u16 CType: 1; // 5
|
||||
u16 AType: 2; // 7
|
||||
u16 PreSampling: 1; // 10
|
||||
u16 AutoDetectOffset: 1; // 11
|
||||
u16 AutoDetectProcess: 2; // 13
|
||||
u16 EnableRHTest : 1; // 14
|
||||
u16 EnableRoughTest: 1; // 15
|
||||
} __SAMPLE_STATUS_BIT_TypeDef;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
__SAMPLE_STATUS_BIT_TypeDef State;
|
||||
u16 NextRun;
|
||||
u16 NextTime;
|
||||
u16 Counter;
|
||||
u16 CounterMax;
|
||||
u16 CTypeGain;
|
||||
u16 CTypeResult;
|
||||
u16 ATypeResult;
|
||||
u16 RTypeResult;
|
||||
u32 ADC0Result;
|
||||
u32 ADC1Result;
|
||||
u32 ADC0Buffer[70];
|
||||
u32 ADC1Buffer[70];
|
||||
} TypeSample;
|
||||
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned int CalTA;
|
||||
unsigned int Value[3];
|
||||
unsigned int DeltaVHH;
|
||||
unsigned int TUVHH;
|
||||
unsigned int TDVHH;
|
||||
unsigned int TUIndex;
|
||||
unsigned int TDIndex;
|
||||
} TypeCalibOffset;
|
||||
|
||||
// *****************************************************************************
|
||||
extern unsigned short int FRType;
|
||||
// *****************************************************************************
|
||||
void SetNextProcess(void);
|
||||
void AnalogCircuitInit(void);
|
||||
void EnableRHControlByTD(void);
|
||||
void EnableRHControlByTU(void);
|
||||
void TurnOffAnalogCircuit(void);
|
||||
void RapidHeating(void);
|
||||
void FirstStageHeating(void);
|
||||
void StartNormolFlowMeasurement(void);
|
||||
bool JudgmentFlowRate(void);
|
||||
void CheckATypeSensor(void);
|
||||
bool CheckSensor(u16 voltageIndex);
|
||||
//void TemperatureCorrection(void)
|
||||
u16 ComputeCTypeIndex(u16 detectIndex, u16 indexOffset);;
|
||||
void ComputeFlowRateIndexAndFlowRate(void);
|
||||
void FlowRateDealAndOuputSub(void);
|
||||
void ComputeSampleData(u16 sampleNum, u16 sampleShift);
|
||||
void SetSystemForADCSample(u16 sampleNum);
|
||||
void ProcessTimerInterruptCallBack(void);
|
||||
void FlowProcessManagement(void);
|
||||
void CoreInit(void);
|
||||
void CoreColdStartProcessing(void);
|
||||
//void SamplingTimer_IRQ_Callback(void)
|
||||
void PrimaryTimer_IRQ_Callback();
|
||||
void SystemPolling(void);
|
||||
|
||||
//**************************************************************************
|
||||
//File End------------------------------------------------------------------
|
||||
#endif
|
||||
//.h End--------------------------------------------------------------------
|
||||
#endif
|
||||
|
||||
168
user/Core/DP2201_V5000_Parameter.h
Normal file
168
user/Core/DP2201_V5000_Parameter.h
Normal file
@@ -0,0 +1,168 @@
|
||||
#ifndef __DP2201_V5000_PARAMETER_h__
|
||||
#define __DP2201_V5000_PARAMETER_h__
|
||||
|
||||
//##############################################################################
|
||||
#if DP2201_CORE_V5000
|
||||
|
||||
// <20><>Ҫ<EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
//#define INT_PROTOCOL 0x8210 // MODBUS Slaver Addr
|
||||
//#define INT_SLAVER_ADDR 0x8211 // MODBUS Slaver Addr
|
||||
#define MeterFactor WordReg[REG_0X8212]
|
||||
#undef REG_0X8212_VALUE
|
||||
#define REG_0X8212_VALUE {10000,0,1000}
|
||||
|
||||
//#define INT_GDCF 0x8213
|
||||
//#define INT_MAX_FLOW 0x8214
|
||||
//#define INT_OFFSET_GAS 0x8216
|
||||
#define offsetAir WordReg[REG_0X8217]
|
||||
#define factoryInterval WordReg[REG_0X8218]
|
||||
#undef REG_0X8218_VALUE
|
||||
#define REG_0X8218_VALUE { RESP_4000MS, RESP_125MS, SAMPLE_PERIOD_DEFAULT }
|
||||
//#define INT_HISTORY_PERIOD 0x8219
|
||||
//#define INT_PULSE_UNIT 0x821A
|
||||
//#define INT_MAX_LOOP_FR 0x821B
|
||||
#define SensorSN0 WordReg[REG_0X821D]
|
||||
#define SensorSN1 WordReg[REG_0X821E]
|
||||
#define SensorSN2 WordReg[REG_0X821F]
|
||||
//#define INT_TOTAL_ACC 0x8220 // 0x8220-0x8225
|
||||
#define calibTemperature WordReg[REG_0X8226]
|
||||
#undef REG_0X8226_VALUE
|
||||
#define REG_0X8226_VALUE {13500 ,10500, 12500} // 0x8226
|
||||
//#define INT_OFFSET_A_GAS 0x8227
|
||||
//#define INT_OFFSET_A_AIR 0x8228
|
||||
//#define INT_ATYPE_INDEX_GAIN 0x8229
|
||||
//#define INT_GDCF_ATYPE 0x822A
|
||||
//#define INT_GDCF_CTYPE 0x822B
|
||||
//#define INT_CALIB_PIPE 0x822C
|
||||
//#define INT_WORK_PIPE 0x822D
|
||||
//#define INT_WORK_UNIT 0x822E
|
||||
#define language WordReg[REG_0X822F]
|
||||
#undef REG_0X822F_VALUE
|
||||
#define REG_0X822F_VALUE {LANGUAGE_MAX, LANGUAGE_MIN, DIS_LANGUAGE_DEFAULT}
|
||||
//#define INT_ACC_OUT_BIT 0x8230
|
||||
#define reverseScale WordReg[REG_0X8231]
|
||||
#undef REG_0X8231_VALUE
|
||||
#define REG_0X8231_VALUE {16000,100, 3000}
|
||||
|
||||
#define VHHHigh WordReg[REG_0X8232]
|
||||
#define VHHRoom WordReg[REG_0X8233]
|
||||
#define VHHLow WordReg[REG_0X8234]
|
||||
|
||||
#define RHHighTa WordReg[REG_0X8235]
|
||||
//#define RHHighTa WordReg[REG_0X8236]
|
||||
#define RHLowTa WordReg[REG_0X8237]
|
||||
|
||||
#define RRHigh WordReg[REG_0X8238]
|
||||
#define RRRoom WordReg[REG_0X8239]
|
||||
#define RRLow WordReg[REG_0X823A]
|
||||
|
||||
//#define INT_GCF_A 0x823B
|
||||
//#define INT_GCF_B 0x823D
|
||||
//#define INT_GCF_C 0x823E
|
||||
//#define INT_RH_GAINRES 0x8240
|
||||
//#define INT_RR_GAINRES 0x8241
|
||||
|
||||
#define zeroSuppression WordReg[REG_0X8244]
|
||||
#undef REG_0X8244_VALUE
|
||||
#define REG_0X8244_VALUE { 2000, 10, 100}
|
||||
|
||||
#define staticLowTemperature WordReg[REG_0X8245]
|
||||
#undef REG_0X8245_VALUE
|
||||
#define REG_0X8245_VALUE {11000, 7500,10000}
|
||||
|
||||
#define staticHighTemperature WordReg[REG_0X8246]
|
||||
#undef REG_0X8246_VALUE
|
||||
#define REG_0X8246_VALUE {17000,14500,15000}
|
||||
//#define INT_PULSE_COUNTER 0x8247 // byte = 4
|
||||
//#define INT_ATYPE_RC 0x8249 //
|
||||
//#define INT_ATYPE_WIPER 0x824A //
|
||||
//#define INT_CTYPE_WIPER 0x824B //
|
||||
//#define INT_CTYPE_ADC 0x824C /
|
||||
#define OffsetHigh WordReg[REG_0X824D]
|
||||
#undef REG_0X824D_VALUE
|
||||
#define REG_0X824D_VALUE {60000, 5000,32768}
|
||||
|
||||
#define OffsetLow WordReg[REG_0X824E]
|
||||
#undef REG_0X824E_VALUE
|
||||
#define REG_0X824E_VALUE {60000, 5000,32768}
|
||||
//
|
||||
//#define INT_TRH_HIGH 0x824F //
|
||||
//#define INT_TRH_LOW 0x8250 //
|
||||
//#define INT_MEMS_RATIO 0x8251 //
|
||||
//#define INT_SYS_LCD 0x8252 //
|
||||
//#define INT_SYS_CHIP 0x8253
|
||||
#define temperatureFactor WordReg[REG_0X8254]
|
||||
#undef REG_0X8254_VALUE
|
||||
#define REG_0X8254_VALUE { 100, 0, 25}
|
||||
//
|
||||
#define offsetGasGainx WordReg[REG_0X8255]
|
||||
#define offsetAirGainx WordReg[REG_0X8256]
|
||||
//#define INT_OFFSET_RGINX 0x8257
|
||||
#define P0RhHigh WordReg[REG_0X8258]
|
||||
#define P0RhLow WordReg[REG_0X8259]
|
||||
|
||||
#define adcGain WordReg[REG_0X825A]
|
||||
#undef REG_0X825A_VALUE
|
||||
#define REG_0X825A_VALUE { 128, 1, 32}
|
||||
|
||||
#define resFactor WordReg[REG_0X825B]
|
||||
#undef REG_0X825B_VALUE
|
||||
#define REG_0X825B_VALUE { 100, 0, 30}
|
||||
|
||||
//#define INT_BATTEST_PERIOD 0x825C
|
||||
//#define INT_FR_SWITCH_POINT 0x825D
|
||||
|
||||
#define calibFlowGain WordReg[REG_0X825F]
|
||||
#undef REG_0X825F_VALUE
|
||||
#define REG_0X825F_VALUE { 1000, 1, 1} // У<D0A3><D7BC><EFBFBD><EFBFBD><EFBFBD>Ŵ<EFBFBD><C5B4><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
//#define INT_AUTO_CALIB_ATYPE 0x8260
|
||||
//#define INT_USER_INIT_INDEX 0x8261
|
||||
//#define INT_DIVHX_HIGH 0x8262
|
||||
//#define INT_DIVHX_ROOM 0x8263
|
||||
//#define INT_DIVHX_LOW 0x8264
|
||||
#define VDUGXHigh WordReg[REG_0X8265]
|
||||
//#define INT_VDUGX_ROOM 0x8266
|
||||
#define VDUGXLow WordReg[REG_0X8267]
|
||||
#define sampleSwitchThreshold WordReg[REG_0X8268]
|
||||
#undef REG_0X8268_VALUE
|
||||
#define REG_0X8268_VALUE { 4000, 0, 2500}
|
||||
|
||||
/*******************************************************************************/
|
||||
#define keyPassWord DWordReg[REG_0X8280]
|
||||
#undef REG_0X8280_VALUE
|
||||
#define REG_0X8280_VALUE {0xFFFFFFFF, 0, 11111}
|
||||
|
||||
|
||||
/*******************************************************************************/
|
||||
#define ReadShortParameterFromMemory(parameterAdr, parameterDefault) ReadShortParameterFromEEPROM(parameterAdr, parameterDefault)
|
||||
#define ReadLongParameterFromMemory(parameterAdr, parameterDefault) ReadLongParameterFromEEPROM(parameterAdr, parameterDefault)
|
||||
|
||||
#define WriteShortParameterToMemory(WRAddr) WriteShortParameterToEEPROM(WRAddr)
|
||||
#define WriteLongParameterToMemory(WRAddr) WriteLongParameterToEEPROM(WRAddr)
|
||||
|
||||
#define ReadMultiByteFromMemory(address, wrtData, dataLenth) ReadMultiByteFromEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
#define WriteMultiByteToMemory(address, wrtData, dataLenth) WriteMultiByteToEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
|
||||
#define ReadCalbrationDataFromMemory(address, wrtData, dataLenth) ReadMultiByteFromEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
#define WriteCalbrationDataToMemory(address, wrtData, dataLenth) WriteMultiByteToEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
|
||||
#define ReadMultiByteFromFRAM(address, wrtData, dataLenth) ReadMultiByteFromEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
#define WriteMultiByteToFRAM(address, wrtData, dataLenth) WriteMultiByteToEEPROM(address, wrtData, dataLenth, PARA_EEPROM)
|
||||
|
||||
/*******************************************************************************/
|
||||
|
||||
//#define ReadShortParameterFromMemory(parameterAdr, parameterDefault) ReadShortParameterFromFlash(parameterAdr, parameterDefault)
|
||||
//#define ReadLongParameterFromMemory(parameterAdr, parameterDefault) ReadLongParameterFromFlash(parameterAdr, parameterDefault)
|
||||
|
||||
//#define WriteShortParameterToMemory(WRAddr) WriteShortParameterToFlash(WRAddr)
|
||||
//#define WriteLongParameterToMemory(WRAddr) WriteLongParameterToFlash(WRAddr)
|
||||
|
||||
//#define ReadMultiByteFromMemory(address, wrtData, dataLenth, flashAdr) ReadMultiByteFromFlash(address, wrtData, dataLenth, flashAdr)
|
||||
//#define WriteMultiByteToMemory(address, wrtData, dataLenth, flashAdr) WriteMultiByteToFlash(address, wrtData, dataLenth, flashAdr)
|
||||
|
||||
#define DisableSamplingInterrupt();
|
||||
|
||||
|
||||
#endif
|
||||
#endif
|
||||
Reference in New Issue
Block a user