661 lines
20 KiB
C
661 lines
20 KiB
C
|
|
#include "includes.h"
|
|||
|
|
|
|||
|
|
// *** ÿ<><C3BF>ͨ<EFBFBD><CDA8><EFBFBD>ܹ<EFBFBD><DCB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Σ<EFBFBD><CEA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>ȥ<EFBFBD><C8A5><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD>м<EFBFBD><D0BC>ļ<EFBFBD><C4BC><EFBFBD>ֵ<EFBFBD><D6B5>ƽ<EFBFBD><C6BD>
|
|||
|
|
// ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ADC_SAMPLE_COUNT (24)
|
|||
|
|
// ADCƽ<43><C6BD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
|
|||
|
|
#define ADC_AVGVAL_COUNT (16)
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>
|
|||
|
|
#define SAMPLE_CHANNEL_COUNT 12
|
|||
|
|
|
|||
|
|
// ADC<44><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
#define ADC_COMPENSATE 0
|
|||
|
|
|
|||
|
|
// ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC>ı<EFBFBD>־
|
|||
|
|
volatile uint8_t Config_Sample_Request = 0;
|
|||
|
|
// <20><><EFBFBD>ݲɼ<DDB2>ʧ<EFBFBD>ܵı<DCB5>־
|
|||
|
|
volatile uint8_t Capa_Sample_failed = 0;
|
|||
|
|
// <20><><EFBFBD>ݲɼ<DDB2><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD>־
|
|||
|
|
volatile uint8_t Capa_Sample_finish = 0;
|
|||
|
|
|
|||
|
|
// <20>õ<EFBFBD><C3B5>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ݵ<EFBFBD>֪ͨ
|
|||
|
|
volatile uint8_t GPRS_semSampled = 0;
|
|||
|
|
|
|||
|
|
void PWM0_IRQHandler(void)
|
|||
|
|
{
|
|||
|
|
if(PWM_GetCaptureIntFlag(PWM0, 3) & PWM_RISING_LATCH_INT_FLAG) // <20><><EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD>忪ʼ
|
|||
|
|
{
|
|||
|
|
PWM_ClearPeriodIntFlag(PWM0, 3);
|
|||
|
|
PWM_ClearCaptureIntFlag(PWM0, 3, PWM_RISING_LATCH_INT_FLAG);
|
|||
|
|
}
|
|||
|
|
if(PWM_GetCaptureIntFlag(PWM0, 3) & PWM_FALLING_LATCH_INT_FLAG) // <20>½<EFBFBD><C2BD>أ<EFBFBD><D8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
{
|
|||
|
|
PWM_DisablePeriodInt(PWM0, 3); // ֹͣ<CDA3><D6B9>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
|
|||
|
|
PWM_ClearPeriodIntFlag(PWM0, 3);
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
Capa_Sample_finish = 1;
|
|||
|
|
|
|||
|
|
PWM_ClearCaptureIntFlag(PWM0, 3, PWM_FALLING_LATCH_INT_FLAG);
|
|||
|
|
}
|
|||
|
|
if(PWM_GetPeriodIntFlag(PWM0, 3)) // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
|
|||
|
|
{
|
|||
|
|
Capa_Sample_failed = 1; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><CAA7>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
|||
|
|
Capa_Sample_finish = 1;
|
|||
|
|
|
|||
|
|
PWM_DisablePeriodInt(PWM0, 3);
|
|||
|
|
PWM_ClearPeriodIntFlag(PWM0, 3);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Sample_Init()
|
|||
|
|
{
|
|||
|
|
/* ADC clock source is 12MHz, set divider to 6, ADC clock is 2 MHz */
|
|||
|
|
CLK_SetModuleClock(ADC_MODULE, CLK_CLKSEL1_ADC_S_HXT, CLK_ADC_CLK_DIVIDER(6));
|
|||
|
|
|
|||
|
|
/*---------------------------------------------------------------------------------------------------------*/
|
|||
|
|
/* Init I/O Multi-function */
|
|||
|
|
/*---------------------------------------------------------------------------------------------------------*/
|
|||
|
|
/* Configure the PA6<41><36>BAT_VAL), PA5(P), PA4(DP), PA3-2(T_2), PA1-0(T_1) analog input pins. */
|
|||
|
|
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA6_MFP_Msk | SYS_PA_L_MFP_PA5_MFP_Msk | SYS_PA_L_MFP_PA4_MFP_Msk);
|
|||
|
|
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA6_MFP_ADC_CH6 | SYS_PA_L_MFP_PA5_MFP_ADC_CH5 | SYS_PA_L_MFP_PA4_MFP_ADC_CH4);
|
|||
|
|
|
|||
|
|
SYS->PA_L_MFP &= ~(SYS_PA_L_MFP_PA3_MFP_Msk | SYS_PA_L_MFP_PA2_MFP_Msk
|
|||
|
|
| SYS_PA_L_MFP_PA1_MFP_Msk | SYS_PA_L_MFP_PA0_MFP_Msk);
|
|||
|
|
SYS->PA_L_MFP |= (SYS_PA_L_MFP_PA3_MFP_ADC_CH3 | SYS_PA_L_MFP_PA2_MFP_ADC_CH2
|
|||
|
|
| SYS_PA_L_MFP_PA1_MFP_ADC_CH1 | SYS_PA_L_MFP_PA0_MFP_ADC_CH0);
|
|||
|
|
|
|||
|
|
/* Disable the PA6~0 digital input path to avoid the leakage current. */
|
|||
|
|
GPIO_DISABLE_DIGITAL_PATH(PA, 0x007Ful);
|
|||
|
|
|
|||
|
|
/* Enable ADC module clock */
|
|||
|
|
CLK_EnableModuleClock(ADC_MODULE);
|
|||
|
|
|
|||
|
|
// // PA.15 as CAP_CAPTURE
|
|||
|
|
// SYS->PA_H_MFP &= ~SYS_PA_H_MFP_PA15_MFP_Msk;
|
|||
|
|
// SYS->PA_H_MFP |= SYS_PA_H_MFP_PA15_MFP_PWM0_CH3;
|
|||
|
|
|
|||
|
|
// // PB.8 as CAP_TRIGGER
|
|||
|
|
// SYS->PB_H_MFP &= ~SYS_PB_H_MFP_PB8_MFP_Msk;
|
|||
|
|
// SYS->PB_H_MFP |= SYS_PB_H_MFP_PB8_MFP_GPB8;
|
|||
|
|
// GPIO_SetMode(PB, BIT8, GPIO_PMD_OUTPUT);
|
|||
|
|
//
|
|||
|
|
// /* PWM clock frequency can be set equal or double to HCLK by choosing case 1 or case 2 */
|
|||
|
|
// /* case 1.PWM clock frequency is set equal to HCLK: select PWM module clock source as PCLK */
|
|||
|
|
// /* case 2.PWM clock frequency is set double to HCLK: select PWM module clock source as PLL */
|
|||
|
|
// CLK_SetModuleClock(PWM0_CH23_MODULE, CLK_CLKSEL1_PWM0_CH23_S_HCLK, NULL);
|
|||
|
|
|
|||
|
|
// /* Enable PWM module clock */
|
|||
|
|
// CLK_EnableModuleClock(PWM0_CH23_MODULE);
|
|||
|
|
|
|||
|
|
//Enable Timer1 clock and select Timer1 clock source
|
|||
|
|
CLK_EnableModuleClock(TMR1_MODULE);
|
|||
|
|
CLK_SetModuleClock(TMR1_MODULE, CLK_CLKSEL1_TMR1_S_HXT, 0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Sample_Open()
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>״̬
|
|||
|
|
dcBuff.sampleData.vacuum[0].staVacuum = VACUUM_STATUS_COMM_FAULT;
|
|||
|
|
dcBuff.sampleData.leak.staLeak = LEAK_STATUS_COMM_FAULT;
|
|||
|
|
|
|||
|
|
/* Set the ADC internal sampling time, input mode as single-end and enable the A/D converter */
|
|||
|
|
ADC_Open(ADC, ADC_INPUT_MODE_SINGLE_END, ADC_OPERATION_MODE_SINGLE, 0);
|
|||
|
|
// Set reference voltage to VREF
|
|||
|
|
ADC_SET_REF_VOLTAGE(ADC, ADC_REFSEL_VREF);
|
|||
|
|
ADC->CALCTL &= ~0x0001; // <20>ص<EFBFBD>У
|
|||
|
|
|
|||
|
|
// /* Reset PWM0 module */
|
|||
|
|
// SYS_ResetModule(PWM0_RST);
|
|||
|
|
|
|||
|
|
// /* set PWM0 channel 1 capture configuration<6F><6E>time unit is 166ns */
|
|||
|
|
// PWM_ConfigCaptureChannel(PWM0, 3, 166, 0);
|
|||
|
|
|
|||
|
|
// /* Enable rising capture reload */
|
|||
|
|
// PWM0->CAPCTL &= ~PWM_CAPCTL_CAPRELOADFEN3_Msk;
|
|||
|
|
// PWM0->CAPCTL |= PWM_CAPCTL_CAPRELOADREN3_Msk;
|
|||
|
|
|
|||
|
|
// /* Enable Timer for PWM0 channel 3 */
|
|||
|
|
// PWM_Start(PWM0, PWM_CH_3_MASK);
|
|||
|
|
|
|||
|
|
// /* Enable Capture Function for PWM0 channel 3 */
|
|||
|
|
// PWM_EnableCapture(PWM0, PWM_CH_3_MASK);
|
|||
|
|
|
|||
|
|
// NVIC_SetPriority (PWM0_IRQn, 1);
|
|||
|
|
// NVIC_EnableIRQ(PWM0_IRQn);
|
|||
|
|
|
|||
|
|
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC>ϸ<EFBFBD>
|
|||
|
|
NVIC_SetPriority (TMR1_IRQn, 2); /* set Priority for Sample Interrupt */
|
|||
|
|
NVIC_EnableIRQ(TMR1_IRQn);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// ADC<44>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
void Sample_Task(data_sample_t *sample)
|
|||
|
|
{
|
|||
|
|
uint8_t ch;
|
|||
|
|
uint32_t oriData[ADC_SAMPLE_COUNT]; // ԭʼ<D4AD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
uint32_t sampleData[SAMPLE_CHANNEL_COUNT][1];
|
|||
|
|
int16_t i, j;
|
|||
|
|
|
|||
|
|
Calculate_Theoretical_Params();
|
|||
|
|
if(dcBuff.configDisplay.op_USE_PT100_SENSOR)
|
|||
|
|
PT100_Calculate_Theoretical_Params(-200, 80);
|
|||
|
|
|
|||
|
|
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
memset(sampleData, 0, sizeof(sampleData));
|
|||
|
|
Capa_Sample_failed = 0; // Ĭ<>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>ݳɹ<DDB3>
|
|||
|
|
for(ch = 0; ch < SAMPLE_CHANNEL_COUNT; ch++)
|
|||
|
|
{
|
|||
|
|
// <20><EFBFBD>ѹ
|
|||
|
|
if(ch == 0)
|
|||
|
|
continue;
|
|||
|
|
// <20><>չѹ<D5B9><D1B9>23
|
|||
|
|
if(ch >= 3 && ch <= 4)
|
|||
|
|
continue;
|
|||
|
|
// <20><><EFBFBD><EFBFBD>չ<EFBFBD>¶<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
|
|||
|
|
if(ch >= 9 && ch <= 10)
|
|||
|
|
continue;
|
|||
|
|
|
|||
|
|
memset(oriData, 0, sizeof(oriData));
|
|||
|
|
|
|||
|
|
// ÿ<><C3BF>ͨ<EFBFBD><CDA8><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for(i = 0; i < ADC_SAMPLE_COUNT; i++)
|
|||
|
|
{
|
|||
|
|
// Ϊ<>˱<EFBFBD><CBB1><EFBFBD>ADCģ<43><C4A3><EFBFBD><EFBFBD>ʹ<EFBFBD>ó<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ִ<EFBFBD><D6B4>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ã<EFBFBD><C3A3>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><D1B9>adcֵ<63><D6B5><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
if(ch == 1)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ģ<EFBFBD>鵽ѹ<E9B5BD><D1B9>ͨ<EFBFBD><CDA8>
|
|||
|
|
ADC_SET_INPUT_CHANNEL(ADC, ADC_CH_5_MASK);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if(ch == 2)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ģ<EFBFBD>鵽<EFBFBD>ڶ<EFBFBD>·ѹ<C2B7><D1B9>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>ռ<EFBFBD>ò<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>ӣ<EFBFBD>
|
|||
|
|
ADC_SET_INPUT_CHANNEL(ADC, ADC_CH_4_MASK);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
else if(ch == 5)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ģ<EFBFBD>鵽<EFBFBD><E9B5BD>չ<EFBFBD>¶<EFBFBD>1<EFBFBD><31>ͨ<EFBFBD><CDA8>
|
|||
|
|
ADC_SET_INPUT_CHANNEL(ADC, ADC_CH_0_MASK);
|
|||
|
|
}
|
|||
|
|
else if(ch == 6)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ģ<EFBFBD>鵽<EFBFBD><E9B5BD>չ<EFBFBD>¶<EFBFBD>1<EFBFBD><31>ͨ<EFBFBD><CDA8>
|
|||
|
|
ADC_SET_INPUT_CHANNEL(ADC, ADC_CH_1_MASK);
|
|||
|
|
}
|
|||
|
|
else if(ch == 7)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ģ<EFBFBD>鵽<EFBFBD><E9B5BD>չ<EFBFBD>¶<EFBFBD>2<EFBFBD><32>ͨ<EFBFBD><CDA8>
|
|||
|
|
ADC_SET_INPUT_CHANNEL(ADC, ADC_CH_2_MASK);
|
|||
|
|
}
|
|||
|
|
else if(ch == 8)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ģ<EFBFBD>鵽<EFBFBD><E9B5BD>չ<EFBFBD>¶<EFBFBD>2<EFBFBD><32>ͨ<EFBFBD><CDA8>
|
|||
|
|
ADC_SET_INPUT_CHANNEL(ADC, ADC_CH_3_MASK);
|
|||
|
|
}
|
|||
|
|
else // ch == 11
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD>ģ<EFBFBD>鵽<EFBFBD><E9B5BD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8>
|
|||
|
|
ADC_SET_INPUT_CHANNEL(ADC, ADC_CH_6_MASK);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ADIF0
|
|||
|
|
ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ADIE0
|
|||
|
|
ADC_EnableInt(ADC, ADC_ADF_INT);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>,<2C><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
|
ADC_START_CONV(ADC);
|
|||
|
|
|
|||
|
|
while(!(ADC_GET_INT_FLAG(ADC, ADC_ADF_INT) & ADC_ADF_INT))
|
|||
|
|
__NOP();
|
|||
|
|
ADC_CLR_INT_FLAG(ADC, ADC_ADF_INT);
|
|||
|
|
|
|||
|
|
if(ch == 1)
|
|||
|
|
oriData[i] = ADC_GET_CONVERSION_DATA(ADC, 5);
|
|||
|
|
else if(ch == 2)
|
|||
|
|
oriData[i] = ADC_GET_CONVERSION_DATA(ADC, 4);
|
|||
|
|
else if(ch == 5)
|
|||
|
|
oriData[i] = ADC_GET_CONVERSION_DATA(ADC, 0);
|
|||
|
|
else if(ch == 6)
|
|||
|
|
oriData[i] = ADC_GET_CONVERSION_DATA(ADC, 1);
|
|||
|
|
else if(ch == 7)
|
|||
|
|
oriData[i] = ADC_GET_CONVERSION_DATA(ADC, 2);
|
|||
|
|
else if(ch == 8)
|
|||
|
|
oriData[i] = ADC_GET_CONVERSION_DATA(ADC, 3);
|
|||
|
|
else // ch == 11
|
|||
|
|
oriData[i] = ADC_GET_CONVERSION_DATA(ADC, 6);
|
|||
|
|
|
|||
|
|
if(oriData[i] + ADC_COMPENSATE > 4095)
|
|||
|
|
oriData[i] = 4095;
|
|||
|
|
else
|
|||
|
|
oriData[i] += ADC_COMPENSATE;
|
|||
|
|
// <20><>ֹADIE0
|
|||
|
|
ADC_DisableInt(ADC, ADC_ADF_INT);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>
|
|||
|
|
sort(oriData, ADC_SAMPLE_COUNT);
|
|||
|
|
|
|||
|
|
// if(ch == 1)
|
|||
|
|
// {
|
|||
|
|
// printf("\n");
|
|||
|
|
// for(i = 0; i < ADC_SAMPLE_COUNT; i++)
|
|||
|
|
// {
|
|||
|
|
// printf("oriData[%d]: %d\n", i, oriData[i]);
|
|||
|
|
// }
|
|||
|
|
// printf("\n");
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
// ȥ<><C8A5><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for(i = 0, j = (ADC_SAMPLE_COUNT - ADC_AVGVAL_COUNT) / 2; i < ADC_AVGVAL_COUNT; i++, j++)
|
|||
|
|
{
|
|||
|
|
if(oriData[j] != -1)
|
|||
|
|
sampleData[ch][0] += oriData[j];
|
|||
|
|
else
|
|||
|
|
sampleData[ch][0] = -1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ƽ<EFBFBD><C6BD>ֵ
|
|||
|
|
if(sampleData[ch][0] != -1)
|
|||
|
|
sampleData[ch][0] /= ADC_AVGVAL_COUNT;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
ADC_POWER_DOWN(ADC);
|
|||
|
|
|
|||
|
|
printf("\n");
|
|||
|
|
for(i = 0; i < SAMPLE_CHANNEL_COUNT; i++)
|
|||
|
|
{
|
|||
|
|
if(i == 0)
|
|||
|
|
continue;
|
|||
|
|
if(i >= 3 && i <= 4)
|
|||
|
|
continue;
|
|||
|
|
if(i >= 9 && i <= 10)
|
|||
|
|
continue;
|
|||
|
|
printf("sampleData[%d][0] = %d\n", i, sampleData[i][0]);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|
|||
|
|
// Һλ<D2BA><CEBB><EFBFBD><EFBFBD>֧<EFBFBD>֣<EFBFBD>
|
|||
|
|
#if 0
|
|||
|
|
// sampleData[0][0] = dcBuff.configSensor.sensorDPress.zeroValue
|
|||
|
|
// + (dcBuff.configSensor.sensorDPress.fullValue - dcBuff.configSensor.sensorDPress.zeroValue) / (1 + rand() % 10);
|
|||
|
|
sample->adDPress = sampleData[0][0];
|
|||
|
|
sample->staDPress.status = ADC_Validate(sampleData[0][0],
|
|||
|
|
dcBuff.configSensor.sensorDPress.zeroValue, dcBuff.configSensor.sensorDPress.fullValue);
|
|||
|
|
if(sample->staDPress.status == SENSOR_STATUS_NORMAL)
|
|||
|
|
{
|
|||
|
|
sample->diff = ADC_Calculate(sampleData[0][0],
|
|||
|
|
dcBuff.configSensor.sensorDPress.zeroValue, dcBuff.configSensor.sensorDPress.fullValue,
|
|||
|
|
dcBuff.configSensor.sensorDPress.lowRange, dcBuff.configSensor.sensorDPress.highRange);
|
|||
|
|
}
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
// ѹ<><D1B9>
|
|||
|
|
// sampleData[1][0] = dcBuff.configSensor.sensorPress.zeroValue
|
|||
|
|
// + (dcBuff.configSensor.sensorPress.fullValue - dcBuff.configSensor.sensorPress.zeroValue) / (1 + rand() % 10);
|
|||
|
|
sample->adPress = sampleData[1][0];
|
|||
|
|
sample->staPress.status = ADC_Validate(sampleData[1][0],
|
|||
|
|
dcBuff.configSensor.sensorPress.zeroValue, dcBuff.configSensor.sensorPress.fullValue);
|
|||
|
|
if(sample->staPress.status == SENSOR_STATUS_NORMAL)
|
|||
|
|
{
|
|||
|
|
sample->pressure = ADC_Calculate(sampleData[1][0],
|
|||
|
|
dcBuff.configSensor.sensorPress.zeroValue, dcBuff.configSensor.sensorPress.fullValue,
|
|||
|
|
dcBuff.configSensor.sensorPress.lowRange, dcBuff.configSensor.sensorPress.highRange);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>չѹ<D5B9><D1B9>1
|
|||
|
|
for(i = 0; i < 1; i++)
|
|||
|
|
{
|
|||
|
|
// sampleData[2 + i][0] = dcBuff.configSensor.sensorEPress[i].zeroValue
|
|||
|
|
// + (dcBuff.configSensor.sensorEPress[i].fullValue - dcBuff.configSensor.sensorEPress[i].zeroValue) / (1 + rand() % 10);
|
|||
|
|
sample->adExtPress[i] = sampleData[2 + i][0];
|
|||
|
|
sample->staExtPress[i].status = ADC_Validate(sampleData[2 + i][0],
|
|||
|
|
dcBuff.configSensor.sensorEPress[i].zeroValue, dcBuff.configSensor.sensorEPress[i].fullValue);
|
|||
|
|
if(sample->staExtPress[i].status == SENSOR_STATUS_NORMAL)
|
|||
|
|
{
|
|||
|
|
sample->extPressure[i] = ADC_Calculate(sampleData[2 + i][0],
|
|||
|
|
dcBuff.configSensor.sensorEPress[i].zeroValue, dcBuff.configSensor.sensorEPress[i].fullValue,
|
|||
|
|
dcBuff.configSensor.sensorEPress[i].lowRange, dcBuff.configSensor.sensorEPress[i].highRange);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(dcBuff.configDisplay.op_DIFF_RESIST)
|
|||
|
|
{
|
|||
|
|
// <20><>չ<EFBFBD>¶ȣ<C2B6>2·<32><C2B7>
|
|||
|
|
for(i = 0; i < 2; i++)
|
|||
|
|
{
|
|||
|
|
sample->adExtTempr[i] = PT100_CalResit(sampleData[5 + i * 2][0], sampleData[5 + i * 2 + 1][0]);
|
|||
|
|
sample->staExtTempr[i].status = ADC_Validate(sample->adExtTempr[i],
|
|||
|
|
PT100_Resis[0] * dcBuff.configDisplay.op_PT100_MULTI, PT100_Resis[sizeof(PT100_Resis) / sizeof(float) - 1] * dcBuff.configDisplay.op_PT100_MULTI);
|
|||
|
|
if(sample->staExtTempr[i].status == SENSOR_STATUS_NORMAL)
|
|||
|
|
{
|
|||
|
|
sample->extTempr[i] = PT100_CalTempr(sampleData[5 + i * 2][0], sampleData[5 + i * 2 + 1][0],
|
|||
|
|
dcBuff.configSensor.sensorPTempr[i].calibrateT, dcBuff.configSensor.sensorPTempr[i].calibrateR);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20><>չ<EFBFBD>¶ȣ<C2B6>2·<32><C2B7>
|
|||
|
|
for(i = 0; i < 2; i++)
|
|||
|
|
{
|
|||
|
|
// sampleData[5 + i * 2][0] = dcBuff.configSensor.sensorMTempr[i].zeroValue
|
|||
|
|
// + (dcBuff.configSensor.sensorMTempr[i].fullValue - dcBuff.configSensor.sensorMTempr[i].zeroValue) / (1 + rand() % 10);
|
|||
|
|
sample->adExtTempr[i] = sampleData[5 + i * 2][0];
|
|||
|
|
sample->staExtTempr[i].status = ADC_Validate(sampleData[5 + i * 2][0],
|
|||
|
|
dcBuff.configSensor.sensorMTempr[i].zeroValue, dcBuff.configSensor.sensorMTempr[i].fullValue);
|
|||
|
|
|
|||
|
|
if(sample->staExtTempr[i].status == SENSOR_STATUS_NORMAL)
|
|||
|
|
{
|
|||
|
|
if(!dcBuff.configDisplay.op_USE_PT100_SENSOR)
|
|||
|
|
sample->extTempr[i] = ADC_Calculate(sampleData[5 + i * 2][0],
|
|||
|
|
dcBuff.configSensor.sensorMTempr[i].zeroValue, dcBuff.configSensor.sensorMTempr[i].fullValue,
|
|||
|
|
dcBuff.configSensor.sensorMTempr[i].lowRange, dcBuff.configSensor.sensorMTempr[i].highRange);
|
|||
|
|
else
|
|||
|
|
sample->extTempr[i] = PT100_CalTempr(sampleData[5 + i * 2][0], 0,
|
|||
|
|
dcBuff.configSensor.sensorPTempr[i].calibrateT, dcBuff.configSensor.sensorPTempr[i].calibrateR);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// Ϊ<>˱<EFBFBD><CBB1><EFBFBD>ADCģ<43><C4A3><EFBFBD><EFBFBD>ʹ<EFBFBD>ó<EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ʹ<EFBFBD><CDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>ִ<EFBFBD><D6B4>
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD>δ<EFBFBD>ã<EFBFBD><C3A3>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>ص<EFBFBD>ѹ<EFBFBD><D1B9>adcֵ<63><D6B5><EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3>ش<EFBFBD><D8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
sample->adWeight = sampleData[SAMPLE_CHANNEL_COUNT - 1][0];
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD>ݻ<EFBFBD>
|
|||
|
|
sample->volumeTotal = Theoretical_Param.v;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>귽<EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(sample->staPress.status == SENSOR_STATUS_NORMAL && sample->staExtTempr[0].status == SENSOR_STATUS_NORMAL)
|
|||
|
|
sample->volume = Theoretical_Param.v * (sample->pressure / 101.325) * (273.15 / (sample->extTempr[0] + 273.15));
|
|||
|
|
else
|
|||
|
|
sample->volume = 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Sample_CheckWarning(data_sample_t *sample)
|
|||
|
|
{
|
|||
|
|
static uint16_t last_Press = 0;
|
|||
|
|
static int16_t last_Tempr = -300;
|
|||
|
|
static uint16_t last_Vacuum = 0;
|
|||
|
|
|
|||
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(sample->staPress.status == SENSOR_STATUS_NORMAL)
|
|||
|
|
{
|
|||
|
|
if(dcBuff.configBottle.warnPress > 0 && last_Press > dcBuff.configBottle.warnPress && sample->pressure <= dcBuff.configBottle.warnPress)
|
|||
|
|
sample->warnning = 1;
|
|||
|
|
if(dcBuff.configBottle.warnPressH > 0 && last_Press < dcBuff.configBottle.warnPressH && sample->pressure >= dcBuff.configBottle.warnPressH)
|
|||
|
|
sample->warnning = 1;
|
|||
|
|
|
|||
|
|
if(sample->warnning)
|
|||
|
|
printf("\n*** Pressure warnning ***\n");
|
|||
|
|
|
|||
|
|
// <20><>¼<EFBFBD>ɼ<EFBFBD>ֵ
|
|||
|
|
last_Press = sample->pressure;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7>¶ȱ<C2B6><C8B1><EFBFBD>
|
|||
|
|
if(dcBuff.configBottle.serverVer != 3 && !dcBuff.configDisplay.op_LEVEL_SENSOR_ONLY)
|
|||
|
|
{
|
|||
|
|
if(sample->staExtTempr[0].status == SENSOR_STATUS_NORMAL)
|
|||
|
|
{
|
|||
|
|
if(dcBuff.configBottle.warnTempr > -300 && last_Tempr > dcBuff.configBottle.warnTempr && sample->extTempr[0] <= dcBuff.configBottle.warnTempr)
|
|||
|
|
sample->warnning = 1;
|
|||
|
|
if(dcBuff.configBottle.warnTemprH > -300 && last_Tempr < dcBuff.configBottle.warnTemprH && sample->extTempr[0] >= dcBuff.configBottle.warnTemprH)
|
|||
|
|
sample->warnning = 1;
|
|||
|
|
|
|||
|
|
// <20><>¼<EFBFBD>ɼ<EFBFBD>ֵ
|
|||
|
|
last_Tempr = sample->extTempr[0];
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD>նȱ<D5B6><C8B1><EFBFBD>
|
|||
|
|
if(dcBuff.configBottle.serverVer != 3 && sample->vacuum[0].staVacuum == VACUUM_STATUS_OK)
|
|||
|
|
{
|
|||
|
|
if(dcBuff.configBottle.warnVacuumH > 0 && last_Vacuum < dcBuff.configBottle.warnVacuumH * 0.01 && sample->vacuum[0].vacuum >= dcBuff.configBottle.warnVacuumH * 0.01)
|
|||
|
|
sample->warnning = 1;
|
|||
|
|
|
|||
|
|
// <20><>¼<EFBFBD>ɼ<EFBFBD>ֵ
|
|||
|
|
last_Vacuum = sample->vacuum[0].vacuum;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Sample_Print(data_sample_t *sample)
|
|||
|
|
{
|
|||
|
|
int16_t i, j;
|
|||
|
|
|
|||
|
|
/* Get the conversion result */
|
|||
|
|
// printf("\nConversion result of diff: \t\t%02X, %.1f kPa", sample->staDPress.status, sample->diff);
|
|||
|
|
// printf("\nConversion result of press: \t\t%02X, %.2f MPa", sample->staPress.status, (float) sample->pressure / 1000);
|
|||
|
|
for(i = 0; i < 0; i++)
|
|||
|
|
printf("\nConversion result of extPress[%d]: \t%02X, %.2f MPa", i, sample->staExtPress[i].status, (float) sample->extPressure[i] / 1000);
|
|||
|
|
// for(i = 0; i < 2; i++)
|
|||
|
|
// printf("\nConversion result of extTempr[%d]: \t%02X, %d <20><>", i, sample->staExtTempr[i].status, sample->extTempr[i]);
|
|||
|
|
|
|||
|
|
// printf("\nConversion result of height: \t\t%.0f mm", sample->height);
|
|||
|
|
// printf("\nConversion result of volTol: \t\t%u L", sample->volumeTotal);
|
|||
|
|
// printf("\nConversion result of volume: \t\t%u L", sample->volume);
|
|||
|
|
// printf("\nConversion result of volPct: \t\t%.2f %%", (float) sample->volumePct / 100);
|
|||
|
|
// printf("\nConversion result of charging: \t\t%d", sample->charging);
|
|||
|
|
//
|
|||
|
|
// printf("\nConversion result of staVacuum: \t%u", sample->vacuum[0].staVacuum);
|
|||
|
|
// printf("\nConversion result of lifeVacuum: \t%u Months", sample->vacuum[0].lifeVacuum);
|
|||
|
|
// printf("\nConversion result of vacuum: \t\t%.2f Pa", sample->vacuum[0].vacuum);
|
|||
|
|
// printf("\nConversion result of rateVacuum: \t%.2f Pa.M3/s", sample->vacuum[0].rateVacuum);
|
|||
|
|
// printf("\nConversion result of typeLeak: \t\t%u", sample->leak.typeLeak);
|
|||
|
|
// printf("\nConversion result of staLeak: \t\t%u", sample->leak.staLeak);
|
|||
|
|
// printf("\nConversion result of concentrations: \t%u %%", sample->leak.concentrations);
|
|||
|
|
printf("\n");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>Ժ<EFBFBD><D4BA><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1>ʱ<EFBFBD><CAB1>
|
|||
|
|
// Ԥ<><D4A4>Ƶ<EFBFBD><C6B5>Ϊ8<CEAA><38>CMPΪ24λ
|
|||
|
|
// <20><>12M<32><4D>Ƶ<EFBFBD><C6B5><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ11<31><31>
|
|||
|
|
void TIMER_MyOpen(TIMER_T *timer, uint32_t u32Mode, uint32_t u32Ms)
|
|||
|
|
{
|
|||
|
|
uint32_t u32Clk = TIMER_GetModuleClock(timer);
|
|||
|
|
uint32_t u32Cmpr = 0, u32Prescale = 0;
|
|||
|
|
|
|||
|
|
// <20>ȶԶ<C8B6>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ
|
|||
|
|
timer->CTL = 2;
|
|||
|
|
|
|||
|
|
u32Prescale = 7; // real prescaler value is
|
|||
|
|
u32Clk >>= 3;
|
|||
|
|
|
|||
|
|
u32Cmpr = u32Clk / 1000 * u32Ms;
|
|||
|
|
|
|||
|
|
timer->CMPR = u32Cmpr;
|
|||
|
|
timer->PRECNT = u32Prescale;
|
|||
|
|
timer->CTL = u32Mode;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void Sample_StartTimer(TIMER_T *timer, uint16_t ms)
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
TIMER_MyOpen(timer, TIMER_ONESHOT_MODE, ms);
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
TIMER_EnableInt(timer);
|
|||
|
|
TIMER_Start(timer);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><>ǰ<EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>
|
|||
|
|
volatile uint8_t Sample_phase = 0;
|
|||
|
|
|
|||
|
|
// <20>ɼ<EFBFBD><C9BC>Ƿ<EFBFBD>æ
|
|||
|
|
uint32_t Sample_Busy()
|
|||
|
|
{
|
|||
|
|
return (Sample_phase != 0);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void TMR1_IRQHandler(void)
|
|||
|
|
{
|
|||
|
|
static data_sample_t sample;
|
|||
|
|
static data_dtu_t dtuSample;
|
|||
|
|
static uint8_t lastLeakWarning = 0;
|
|||
|
|
|
|||
|
|
// ÿ<><C3BF>8Сʱ<D0A1><CAB1>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>գ<EFBFBD><D5A3>ϵ<EFBFBD><CFB5><EFBFBD>һ<EFBFBD>β<EFBFBD><CEB2>⣩
|
|||
|
|
static uint32_t vacuum_seconds = 30;
|
|||
|
|
uint32_t sample_time;
|
|||
|
|
S_RTC_TIME_DATA_T sRTC;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>жϣ<D0B6><CFA3><EFBFBD>λ<EFBFBD><CEBB>ʱ<EFBFBD><CAB1>
|
|||
|
|
TIMER_Close(TIMER1);
|
|||
|
|
NVIC_ClearPendingIRQ(TMR1_IRQn);
|
|||
|
|
TIMER_ClearIntFlag(TIMER1);
|
|||
|
|
|
|||
|
|
if(Sample_phase == 0)
|
|||
|
|
{
|
|||
|
|
// <20><>һ<EFBFBD>Σ<D7B6><CEA3>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ݣ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD><F1A3ACBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>Σ<D7B6>
|
|||
|
|
Sample_phase = 1;
|
|||
|
|
|
|||
|
|
// <20><>ʼ<EFBFBD><CABC><EFBFBD><D7BC>
|
|||
|
|
memset(&sample, 0, sizeof(data_sample_t));
|
|||
|
|
|
|||
|
|
// Modbus<75><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
sample.vacuum[0] = dcBuff.sampleData.vacuum[0];
|
|||
|
|
sample.leak = dcBuff.sampleData.leak;
|
|||
|
|
sample.flow = dcBuff.sampleData.flow;
|
|||
|
|
|
|||
|
|
// TODO: <20><EFBFBD>Դ
|
|||
|
|
ADC_POWER_ON(ADC);
|
|||
|
|
VCC_SENSOR_5V_ON();
|
|||
|
|
|
|||
|
|
// <20><>ʱ600ms<6D>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD>
|
|||
|
|
Sample_StartTimer(TIMER1, 600);
|
|||
|
|
}
|
|||
|
|
else if(Sample_phase == 1)
|
|||
|
|
{
|
|||
|
|
// TODO: <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Sample_Task(&sample);
|
|||
|
|
|
|||
|
|
// Modbus<75>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ռ<EFBFBD>
|
|||
|
|
Sample_phase = 2;
|
|||
|
|
|
|||
|
|
// ֱ<>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
NVIC_SetPendingIRQ(TMR1_IRQn);
|
|||
|
|
}
|
|||
|
|
else if(Sample_phase == 2)
|
|||
|
|
{
|
|||
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰʱ<C7B0><CAB1>
|
|||
|
|
RTC_GetDateAndTime(&sRTC);
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>gps<70><73>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>
|
|||
|
|
sample_time = Calc_SecondsFromYear(INITIAL_YEAR, sRTC.u32Year, sRTC.u32Month, sRTC.u32Day,
|
|||
|
|
sRTC.u32Hour, sRTC.u32Minute, sRTC.u32Second);
|
|||
|
|
|
|||
|
|
// <20>Ƿɼ<F1B5BDB2>ʱ<EFBFBD>䣨3<E4A3A8><33><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(sample_time + 3 < vacuum_seconds)
|
|||
|
|
{
|
|||
|
|
// <20><>һ<EFBFBD>Σ<D7B6><CEA3>ɼ<EFBFBD>й¶<D0B9><C2B6>
|
|||
|
|
Sample_phase = 5;
|
|||
|
|
// ֱ<>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
NVIC_SetPendingIRQ(TMR1_IRQn);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20>´<EFBFBD><C2B4>ϴ<EFBFBD>ʱ<EFBFBD>ٲ<EFBFBD>
|
|||
|
|
vacuum_seconds = sample_time + dcBuff.configData.intervalTrans;
|
|||
|
|
// <20><>һ<EFBFBD>Σ<D7B6><CEA3>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ռƣ<D5BC><C6A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
|
Sample_phase = 3;
|
|||
|
|
// <20>ȴ<EFBFBD>8s<38>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
Sample_StartTimer(TIMER1, 10000);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else if(Sample_phase == 3)
|
|||
|
|
{
|
|||
|
|
// <20><>һ<EFBFBD>Σ<D7B6><CEA3>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ռƣ<D5BC><C6A3><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
|
Sample_phase = 4;
|
|||
|
|
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>Ҫ<EFBFBD>ϵ<EFBFBD>5<EFBFBD><35>
|
|||
|
|
Sample_StartTimer(TIMER1, 5000);
|
|||
|
|
}
|
|||
|
|
else if(Sample_phase == 4)
|
|||
|
|
{
|
|||
|
|
printf("\n*** Read vacuum ***\n");
|
|||
|
|
// TODO: Modbus<75>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD>ռ<EFBFBD>1
|
|||
|
|
Sensor_ReadVacuum(0, &sample);
|
|||
|
|
// <20><>һ<EFBFBD>Σ<D7B6><CEA3>ɼ<EFBFBD>й¶<D0B9><C2B6>
|
|||
|
|
Sample_phase = 5;
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>500ms<6D>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
Sample_StartTimer(TIMER1, 500);
|
|||
|
|
}
|
|||
|
|
else if(Sample_phase == 5)
|
|||
|
|
{
|
|||
|
|
// <20><>һ<EFBFBD>Σ<D7B6><CEA3><EFBFBD>ӡ<EFBFBD><D3A1>Ϣ
|
|||
|
|
Sample_phase = 6;
|
|||
|
|
|
|||
|
|
if(!VCC_POWER_STATUS())
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>Դ<EFBFBD><D4B4>ֱ<EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
NVIC_SetPendingIRQ(TMR1_IRQn);
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>Դ<EFBFBD><D4B4>Modbus<75>ɼ<EFBFBD>й¶<D0B9><C2B6>
|
|||
|
|
Sensor_ReadLeak(&sample);
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD>ȴ<EFBFBD>500ms<6D>Ժ<EFBFBD><D4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>
|
|||
|
|
Sample_StartTimer(TIMER1, 500);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
VCC_SENSOR_5V_OFF();
|
|||
|
|
|
|||
|
|
// TODO: <20><>ӡ<EFBFBD><D3A1>Ϣ
|
|||
|
|
Sample_Print(&sample);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>װ<EFBFBD><D7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Sample_CheckWarning(&sample);
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD>չ<EFBFBD>¶ȣ<C2B6><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>¶ȣ<C2B6><C8A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC>¶ȴ<C2B6><C8B4><EFBFBD><EFBFBD><EFBFBD>չ<EFBFBD>¶ȣ<C2B6><C8A3><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ϴ<EFBFBD><CFB4><EFBFBD>
|
|||
|
|
if(sample.staExtTempr[0].status == SENSOR_STATUS_NOCONNECT)
|
|||
|
|
{
|
|||
|
|
if(sample.vacuum[0].staVacuum != VACUUM_STATUS_COMM_FAULT && sample.vacuum[0].staVacuum != VACUUM_STATUS_FAULT)
|
|||
|
|
{
|
|||
|
|
sample.extTempr[0] = sample.vacuum[0].tempr;
|
|||
|
|
sample.staExtTempr[0].status = SENSOR_STATUS_NORMAL;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// д<><D0B4>ȫ<EFBFBD>ֻ<EFBFBD><D6BB>壨<EFBFBD><E5A3A8><EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><D6BE>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(dcBuff.sampleData.warnning)
|
|||
|
|
sample.warnning = 1;
|
|||
|
|
dcBuff.sampleData = sample;
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if(DS2788_ReadBattery(&dtuSample))
|
|||
|
|
{
|
|||
|
|
// д<><D0B4>ȫ<EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>
|
|||
|
|
dcBuff.dtuData.batLow = dtuSample.batLow;
|
|||
|
|
dcBuff.dtuData.batCurrent = dtuSample.batCurrent;
|
|||
|
|
dcBuff.dtuData.batPct = dtuSample.batPct;
|
|||
|
|
dcBuff.dtuData.batCapa = dtuSample.batCapa;
|
|||
|
|
dcBuff.dtuData.batMaxCapa = dtuSample.batMaxCapa;
|
|||
|
|
dcBuff.dtuData.batTempr = dtuSample.batTempr;
|
|||
|
|
dcBuff.dtuData.batVoltage = dtuSample.batVoltage;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20>״μ<D7B4><CEBC>й¶<D0B9><C2B6>ֹͣй¶<D0B9><C2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if((dcBuff.sampleData.leak.staLeak == LEAK_STATUS_A2_ALARM) != lastLeakWarning)
|
|||
|
|
{
|
|||
|
|
printf("\n*** Leak warnning: %d ***\n", (dcBuff.sampleData.leak.staLeak == LEAK_STATUS_A2_ALARM));
|
|||
|
|
dcBuff.sampleData.warnning = 1;
|
|||
|
|
DTU_semGPRS = 1;
|
|||
|
|
}
|
|||
|
|
lastLeakWarning = (dcBuff.sampleData.leak.staLeak == LEAK_STATUS_A2_ALARM);
|
|||
|
|
|
|||
|
|
// ֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
GPRS_semSampled = 1;
|
|||
|
|
// ֪ͨ<CDA8><D6AA>ʾ<EFBFBD><CABE><EFBFBD>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Config_Sample_Request = 0;
|
|||
|
|
// ֪ͨ<CDA8><D6AA>ʾ<EFBFBD><CABE>: ˢ<><CBA2>
|
|||
|
|
Form_Refresh();
|
|||
|
|
|
|||
|
|
// <20>ɼ<EFBFBD><C9BC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
Sample_phase = 0;
|
|||
|
|
}
|
|||
|
|
}
|