From 9631dfefc30b2dff25a6ef3ed0280352c7c39b7f Mon Sep 17 00:00:00 2001 From: stark1898y <1658608470@qq.com> Date: Fri, 20 Jun 2025 20:35:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=A8=E5=B1=80=E4=BF=AE=E6=94=B9=E4=BA=86?= =?UTF-8?q?=E7=94=B5=E5=8E=8B=E6=8D=A2=E7=AE=97=E5=8D=95=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- applications/main.c | 15 ++++++++------- bsp/inc/bsp_adc.h | 2 +- bsp/inc/bsp_mq.h | 4 ++-- bsp/src/bsp_adc.c | 6 +++--- bsp/src/bsp_ml307.c | 2 +- bsp/src/bsp_mq.c | 5 +++-- 6 files changed, 18 insertions(+), 16 deletions(-) diff --git a/applications/main.c b/applications/main.c index 0a80464..52cc865 100644 --- a/applications/main.c +++ b/applications/main.c @@ -168,13 +168,13 @@ void Preheat_Timer_Callback(void *parameter) uint16_t Get_Stable_Reading(uint8_t cnt, uint32_t timeout_ms) { uint32_t start = rt_tick_get(); - uint16_t last = Get_Gas_VoltageAdcInt1000x(); + uint16_t last = Get_Gas_VoltageInt1000x(); uint16_t current; uint8_t stable_count = 0; while ((rt_tick_get() - start) < timeout_ms) { - current = Get_Gas_VoltageAdcInt1000x(); + current = Get_Gas_VoltageInt1000x(); uint16_t diff = fabs(current - last); // 差值 if (diff < STABLE_THRESHOLD) @@ -199,7 +199,7 @@ int APP_Calibration_Handle(void) { uint16_t gas_calibration_voltage = 0; uint8_t calibration_buf[2] = {0}; - // if (Get_Gas_VoltageAdcInt1000x() > 400 && Get_Gas_VoltageAdcInt1000x() < 900) + // if (Get_Gas_VoltageInt1000x() > 400 && Get_Gas_VoltageInt1000x() < 900) // { // LED_OFF(r); // LED_OFF(g); @@ -207,7 +207,7 @@ int APP_Calibration_Handle(void) // LOG_D("传感器故障"); // return 0; // } - if (Get_Gas_VoltageAdcInt1000x() > (MQ_VOLTAGE_ALARM_DEFAULT - 1500) && Get_Gas_VoltageAdcInt1000x() < (MQ_VOLTAGE_ALARM_DEFAULT + 1000)) + if (Get_Gas_VoltageInt1000x() > (MQ_VOLTAGE_ALARM_DEFAULT - 1000) && Get_Gas_VoltageInt1000x() < (MQ_VOLTAGE_ALARM_DEFAULT + 1000)) { LOG_D("标定开始"); LED_OFF(g); @@ -227,13 +227,14 @@ int APP_Calibration_Handle(void) #if 1 uint8_t i = 0; uint16_t gas_buf[20] = {0}; - + rt_memset(gas_buf, 0, sizeof(gas_buf)); // 采集10s的ADC值 for (i = 0; i < 10; i++) { gas_buf[i] = Get_Gas_VoltageInt1000x(); - if ((gas_buf[i] == 0) || (gas_buf[i] >= 0xfff)) + if ((gas_buf[i] == 0) || (gas_buf[i] >= 5000)) // (3.3*1.784*1000) { + Send_Laser_Alarm_Event(kNotCalibratedEvent); return 0; } rt_thread_mdelay(500); @@ -454,7 +455,7 @@ int main(void) { SysControl.last_status = SysControl.status; SysControl.status = kNormalDetectionEvents; - rt_uint16_t voltage = Get_Gas_VoltageAdcInt1000x(); + rt_uint16_t voltage = Get_Gas_VoltageInt1000x(); if (Sensor_device.detection_flag == kSensorAlarm) { if ((voltage > Sensor_device.alarm_value) && (voltage < MQ_VOLTAGE_HIGH_LIMIT)) diff --git a/bsp/inc/bsp_adc.h b/bsp/inc/bsp_adc.h index 02bde07..2bca6f1 100644 --- a/bsp/inc/bsp_adc.h +++ b/bsp/inc/bsp_adc.h @@ -57,7 +57,7 @@ extern uint16_t adc_buffer[ADC_BUFFER_SIZE]; int BSP_ADC_Init(void); -float Get_ADC_Average(TeAdcIndex index); +uint16_t Get_ADC_Average(TeAdcIndex index); float Get_ADC_Voltage(TeAdcIndex index); diff --git a/bsp/inc/bsp_mq.h b/bsp/inc/bsp_mq.h index a7184cd..54ec4b9 100644 --- a/bsp/inc/bsp_mq.h +++ b/bsp/inc/bsp_mq.h @@ -43,10 +43,10 @@ #define MQ_VOLTAGE_RATIO (1.74F) // adc voltage 1000x -#define MQ_VOLTAGE_HIGH_LIMIT (4095U) +#define MQ_VOLTAGE_HIGH_LIMIT (4500U) #define MQ_VOLTAGE_LOW_LIMIT (100U) -#define MQ_VOLTAGE_ALARM_DEFAULT (uint16_t)(2500U) +#define MQ_VOLTAGE_ALARM_DEFAULT (uint16_t)(3650U) // 甲烷 5 VOL% = 50,000 ppm = 100 LEL; 1 LEL = 500 ppm // 丙烷 2.2 VOL% = 22,000 ppm = 100 %LEL; 1 LEL = 220 ppm; 8 LEL = 1760 ppm; 10 LEL = 2200 ppm; diff --git a/bsp/src/bsp_adc.c b/bsp/src/bsp_adc.c index 414f787..82bc7ca 100644 --- a/bsp/src/bsp_adc.c +++ b/bsp/src/bsp_adc.c @@ -154,16 +154,16 @@ INIT_PREV_EXPORT(BSP_ADC_Init); * @param {TeAdcIndex} index * @return {*} */ -float Get_ADC_Average(TeAdcIndex index) +uint16_t Get_ADC_Average(TeAdcIndex index) { uint32_t sum = 0; - float average = 0; + uint16_t average = 0; for (uint8_t i = index; i < ADC_BUFFER_SIZE; i += NUM_OF_CHANNEL) { sum += _Get_ConversionVal(adc_buffer[i]); } - average = sum / ADC_TIMES; + average = (uint16_t)(sum / ADC_TIMES); return average; } diff --git a/bsp/src/bsp_ml307.c b/bsp/src/bsp_ml307.c index 44ebd63..9470acc 100644 --- a/bsp/src/bsp_ml307.c +++ b/bsp/src/bsp_ml307.c @@ -351,7 +351,7 @@ int BSP_Ml307_Update (struct Ml307_Ops *ops, rt_uint8_t device_type, rt_uint8_t ops->body->hw = (rt_uint8_t)Flash_Get_SysCfg (kHwVerId); ops->body->sw = (rt_uint8_t)Flash_Get_SysCfg (kSwVerId); rt_memcpy (ops->body->imei, &ml307, sizeof (ml307_sys_info)); // 直接赋值结构体数据 - ops->body->gas_voltage = Get_Gas_VoltageAdcInt1000x(); + ops->body->gas_voltage = Get_Gas_VoltageInt1000x(); ops->body->product_work_temperature = 0x32; ops->body->work_duration = work_duration; ops->body->device_status = device_state_flag; diff --git a/bsp/src/bsp_mq.c b/bsp/src/bsp_mq.c index e7c3551..2bbb437 100644 --- a/bsp/src/bsp_mq.c +++ b/bsp/src/bsp_mq.c @@ -39,7 +39,8 @@ TsSensor_t Sensor_device; uint16_t Get_Gas_VoltageInt1000x(void) { - uint16_t voltage = (Get_ADC_Average(kGasAdc) * 3.3 / 4096) * MQ_VOLTAGE_RATIO * 1000; + + uint16_t voltage = Get_ADC_Voltage(kGasAdc) * MQ_VOLTAGE_RATIO * 1000; LOG_D("Get_Gas_VoltageInt1000x = %04d", voltage); return voltage; } @@ -189,7 +190,7 @@ static void Sensor_detection_thread_entry(void *param) if(calibration_flag == 1) break; rt_thread_mdelay(1000); - Get_Gas_VoltageAdcInt1000x(); + Get_Gas_VoltageInt1000x(); } rt_uint16_t alarm_value = Flash_Get_SysCfg(kAlarmLValueId); // 获取系统报警阈值;