التنقيط فوق مستشعرات الغاز من سلسلة MQ - فهم عميق لورقة البيانات والضبط


بعد شراء كاشف تسرب غاز بنس ، كانت هناك رغبة في تفكيك كل شيء على الرفوف ومعرفة ما يحدث في الداخل. هناك الكثير من المعلومات والمقالات حول أجهزة الاستشعار ، ولكن يقتصر معظمها على تحديد الوحدة النمطية الصينية القياسية ، وأحيانًا مبادئ التشغيل. حول تحديد دقيق نسبياً للقيم المطلقة للمعلومات هناك. بالنظر إلى المستقبل ، سأقول أننا سنحاول إخراج كل شيء من ورقة البيانات ، بما في ذلك: الوظائف الدقيقة لتحديد "الببغاوات" ، وتصحيح درجة الحرارة والرطوبة ، وبعض إمكانيات الاختيار.

على سبيل المثال ، جهاز استشعار غاز قابل للاشتعال (الميثان في المقام الأول) MQ-4. باختصار ، يقوم عنصر المستشعر ، بسبب خصائصه الكيميائية ، بتغيير المقاومة بتركيزات غاز مختلفة ، ويعمل كمقاوم لمقسم الجهد الذي نحصل منه على قيمة الجهد من خلال ADC. تتجلى هذه الخصائص في درجة حرارة معينة للعنصر الذي يجب تسخين المستشعر من أجله.


أعلاه هو تمثيل تخطيطي لمستشعر ودائرة مقسم ، حيث H عبارة عن ملف تسخين (33 أوم - حوالي 150 مللي أمبير ، التيارات كبيرة جدًا للحرف اليدوية مع وحدات التحكم ، يجب أن تؤخذ في الاعتبار عند تصميم دائرة الطاقة) ، AV هي مخرجات عنصر حساس مع مقاومة قابلة للتبديل اعتمادًا على تركيز الغاز ، RL هو المقاوم المقسم الثاني الذي أوصت به ورقة البيانات - 20 كيلو أوم.

التعليق على اختيار الجهد المرجعي ADC (Vref)
Hanwei Vc = 5 , Winsen – Vc < 24 . , 3.3 , , . 5 .

تحويل ADC إلى ppm


في مخرجات مقسم ADC ، نأخذ قيمة الجهد (Uadc) بناءً على ذلك يمكننا حساب مقاومة المستشعر Rs (مع معرفة قيمة المقاوم الثاني للمقسم RL) ، أي تحديد ما يرسله لنا المستشعر بالضبط:

Rs=(Vref×RL)/UadcRL


باستخدام قيمة Rs ، يمكننا بالفعل تحديد تركيز الغاز وفقًا للرسم البياني من ورقة البيانات. يتم استخدام نسبة Rs / Ro بسيطة لتحديد التركيز. Ro في هذه الحالة هي مقاومة عنصر الاستشعار عند تركيز غاز الكشف 1000 جزء في المليون.

التعليق على نقاط البداية في الحسابات
,
«Ro: sensor resistance at 1000ppm of CH4 in the clean air»
, 1000 ppm. «» . , « » , , 1800 ppb ( 1.8 ppm, 1000 ppm). , 4.4 Rs/Ro.


في هذه المرحلة ، وبفضل ADC والصيغة ، نعرف فقط قيمة المقاومة الحالية (Rs) التي سنرد منها. نفترض أننا قمنا بقياسه في هواء نظيف (من الغازات المكتشفة) ، عند درجة حرارة ورطوبة معايرة (بواسطة ورقة بيانات 20 درجة مئوية ، 65٪). بعد ذلك بقليل ، سيكون هناك تعليق مثير للاهتمام حول الرطوبة التي تتم عندها المعايرة.

وبالتالي ، فإن القيمة المرجعية Ro لمستشعر MQ-4 هي:

Ro=Rs/4.4



التعليق على اختيار الدخان
, , Rs/Ro – 1.8…0.43, – 3.8…2.6. . , , «» . . RsRo 2.8, «» :



إن حساب تركيز الغاز الفعلي معقد قليلاً بسبب انحناء الرسم البياني ، وعدم وجود نقاط تحكم مميزة يمكن من خلالها تعديل هذا الرسم البياني. أيضا ، تكمن المشكلة في التمدد المنخفض للصورة ، ولهذا السبب من الضروري تحديد نقاط التحكم بكسل بكسل.

لتوضيح الحسابات ، يتم تباعد القيم الأكثر وضوحًا على شبكة من الإحداثيات. حددت نقاط التحكم وظيفة اعتماد ppm على Rs / Ro:

التعليق على حدود القياس
400…10000 ppm. (Winsen/Hanwei) 200 400 ppm, 400. ppm Rs/Ro, x = ppm/1000; y= (Rs/Ro)*10:


يتوافق الرسم البياني الذي تم إنشاؤه مع الوظيفة:



وبالتالي ، يتم التعرف على عدد "الببغاوات" من الصيغة:

قليلا عن تعويض درجة الحرارة


استنادًا إلى الرسم البياني التالي لورقة البيانات ، من المعروف أنه ، اعتمادًا على البيئة التي يتم فيها استخدام المستشعر ، تنحرف القراءات عن القراءات الفعلية:



تعليق على الرطوبة النموذجية لبيئة القياس
, = 65%. RsRo/ppm ( ppm) RsRo/Temp ( ). Rs/Ro = 1 ppm=1000 20, : 33% 65%. . , , 33%. .

لتحديد مدى اعتماد المؤشرات على البيئة بشكل أكثر دقة ، تم أيضًا إنشاء رسم بياني للوظائف ، يقتصر المستشعر على نطاق درجة حرارة -10 درجة مئوية ... +50 درجة مئوية (x = TEMP / 10 ؛ y = RsRo (خطأ) * 100):


يتوافق الرسم البياني مع الوظيفة:

f(x)=0.83x29.2x+25(0.3×HUM)



الأساس هو رسم بياني مع رطوبة 33 ٪ (إذا حكمنا من خلال التقاطع 1 ، فهو معايرة). إذا انتبهت للرطوبة ، فإن الرطوبة 1٪ تزيح الرسم البياني بمقدار 0.3 ص (في القيم الحقيقية للضبط RsRo سيتم قسمةها على 100 - يتم استخدام المعامل في الرسم البياني للوضوح). يغير "+25" موضع الرسم البياني في Y للرطوبة "صفر" ، ويعيد "0.3 x HUM" الموضع Y للرطوبة الفعلية. بعض التغيير في "وزن" الرطوبة بنسبة 1٪ عند درجات الحرارة القصوى ليس له أهمية تذكر ولا يؤخذ في الاعتبار.

ملحوظة هامة: كل هذا ينطبق إذا أجريت المعايرة في الهواء النظيف عند رطوبة 33٪ ودرجة حرارة 20 درجة.

يمكن حساب قيمة التصحيح RsRo (خطأ) ، والتي يجب إضافتها إلى قيم RsRo للتعويض عن التأثير البيئي ، من خلال الصيغة:


تتمثل المهمة "بعلامة النجمة" في توضيح التعويض أثناء المعايرة في بيئة غير قياسية
, (20/33%), RsRo(error) :


Y – . X: . , , .

, , , .

, — .

لحساب قيمة تم تعويضها بالفعل:


ننقل النظرية إلى متحكم


لاختبار المستشعر ، تم استخدام متحكم STM32F407VET ومكتبة HAL ، وتم استلام قيم التصحيح من مستشعر BME280. في ملف الرأس ، نحدد بعض القيم الثابتة لإعدادنا.

mq4.h


#ifndef MQ4_H_
#define MQ4_H_

int mq4_default_work (void); //   
int mq4_advanced_work (float temp, float hum); //   
int mq4_full_work (float temp, float hum, float temp_cal, float hum_cal); //      
int mq4_calib_Ro(void); // 
int mq4_get_adc (void); //   ,   

#define MQ4_ADC hadc1 //    
#define MQ4_ADC_PRECISION 4096 //     (4096 = 12 bit)
#define MQ4_REFERENCE_VOLTAGE 3.3f //  
#define MQ4_STATIC_RESISTOR 20000 //RL -     
#define MQ4_RO_DEF 13600 //Ro -   1000 ppm (RsRo=1),   
#define MQ4_HUM_WEIGHT 0.3f //     (  ) 
#define MQ4_AIR_RSRO 4.4f // RsRo    (   )
#endif /* MQ4_H_ */

mq4.c


mq4.c
#include "mq4.h"
#include "adc.h"
#include "math.h"

int mq4_Rs; //  
int mq4_adc_value; // 
float mq4_volts; // 
float mq4_RsRo; //  .  . 1000 ppm
float mq4_calib_value;  //   RsRo
float mq4_calib_value2; //   RsRo (    )

extern int mq4_Ro; //   1000ppm 
extern int mq4_temp_cal; //     
extern int mq4_hum_cal; //     

دالة حساب Ppm (بدون تصحيحات)
int mq4_default_work (void)
{
int ppm; 
int mq4_adc;
float volts;
int Rs;
float RsRo;
//  : 
mq4_adc = mq4_get_adc(); 
//   :
volts = mq4_adc/(MQ4_ADC_PRECISION/MQ4_REFERENCE_VOLTAGE); 
//    :
Rs = ((MQ4_REFERENCE_VOLTAGE * MQ4_STATIC_RESISTOR)/volts)- MQ4_STATIC_RESISTOR; 
//    :
RsRo = (float)Rs / (float)mq4_Ro; 

//   ( ,  ):
mq4_RsRo = RsRo; 
mq4_adc_value = mq4_adc; 
mq4_volts = volts; 
 
if (RsRo>0.437) //    (  )
 //     :
 {ppm = (pow((10/(RsRo*10)),(1/0.36152689)))*1000;} 
 //     -  9999 :
 else {ppm=9999;} 
 
 return (int)ppm;
}


وظيفة حساب Ppm مع تعويض درجة الحرارة والرطوبة الحالية
int mq4_advanced_work (float temp, float hum)
{
int ppm; 
int mq4_adc;
float volts;
int Rs;
float RsRo;
float K; // 

//   :
mq4_adc = mq4_get_adc(); 
//    :
volts = mq4_adc/(MQ4_ADC_PRECISION/MQ4_REFERENCE_VOLTAGE); 

//    
Rs = ((MQ4_REFERENCE_VOLTAGE * MQ4_STATIC_RESISTOR)/volts)- MQ4_STATIC_RESISTOR; 
//    :
RsRo = (float)Rs / (float)mq4_Ro;  
// :
K = ((0.83*(pow((temp/10),2)))-(9.2*(temp/10))+ 25 - (hum*MQ4_HUM_WEIGHT))/100; 
//  
RsRo = RsRo - K; 

//    (  )
if (RsRo>0.437) 
//     :
{ppm = (pow((10/(RsRo*10)),(1/0.36152689)))*1000;} 
//     -  9999ppm:
else {ppm=9999;}
 
//    ( ,  ):
mq4_RsRo = RsRo; 
mq4_calib_value = K; 
mq4_adc_value = mq4_adc; 
mq4_Rs = Rs; 

    return ppm;
 }


وظيفة حساب Ppm (مع تعويض درجة الحرارة / الرطوبة وتصحيح وسط المعايرة)
int mq4_full_work (float temp, float hum, float temp_cal, float hum_cal) 
//:    ,       
{
int ppm; 
int mq4_adc;
float volts;
int Rs;
float RsRo;
float K;
//  :
temp = temp + (20 - temp_cal);  

//   : 
mq4_adc = mq4_get_adc(); 
//    :
volts = mq4_adc/(MQ4_ADC_PRECISION/MQ4_REFERENCE_VOLTAGE); 

//     :
Rs = ((MQ4_REFERENCE_VOLTAGE * MQ4_STATIC_RESISTOR)/volts)- MQ4_STATIC_RESISTOR; 
//  :
RsRo = (float)Rs / (float)mq4_Ro;  
//  (   - MQ4_HUM_WEIGHT*(hum_cal-33)          ): 
K = ((0.83*(pow((temp/10),2)))-(9.2*(temp/10))+ 25 - (hum*MQ4_HUM_WEIGHT)+(MQ4_HUM_WEIGHT*(hum_cal-33)))/100; //
//   RsRo:
RsRo = RsRo - K; 

if (RsRo>0.437) ppm = (pow((10/(RsRo*10)),(1/0.36152689)))*1000; 
else {ppm=9999;}

//    ( ,  ) 
mq4_RsRo = RsRo; 
mq4_calib_value2 = K; 
mq4_adc_value = mq4_adc; 
mq4_Rs = Rs; 

   return ppm;
 }


قيمة ADC
int mq4_get_adc (void)
 {
 int mq4_adc_bits; 
 HAL_ADC_Start(&MQ4_ADC);
 HAL_ADC_PollForConversion(&MQ4_ADC,100);
 mq4_adc_bits = HAL_ADC_GetValue(&MQ4_ADC);
 HAL_ADC_Stop(&MQ4_ADC);
    return mq4_adc_bits;
 }


معايرة
int mq4_calib_Ro(void)
{
float mq4_adc_volts;
int Rs;
int Ro;
int mq4_adc;
mq4_adc = mq4_get_adc(); 
mq4_adc_volts = (float)mq4_adc/((float)MQ4_ADC_PRECISION/MQ4_REFERENCE_VOLTAGE); 
//     
Rs = (((float)MQ4_REFERENCE_VOLTAGE * (float)MQ4_STATIC_RESISTOR)/mq4_adc_volts)- (float)MQ4_STATIC_RESISTOR;
//    1000 ppm (      RsRo 4.4  MQ-4):
Ro = Rs/MQ4_AIR_RSRO;
   return Ro;
 }


ج الرئيسية


#include "main.h"
#include "adc.h"
#include "gpio.h"
#include "mq4.h"

int ppm_def;  //ppm  
int ppm_adv;  //ppm     
int ppm_full;  //ppm        

float mq4_temp_cal = 20; //    
float mq4_hum_cal = 33; //    
extern float mq4_calib_value; //   RsRo
extern float mq4_calib_value2; //   RsRo c   

int mq4_Ro = MQ4_RO_DEF; //   1000ppm   
extern int mq4_Rs;   //    
extern int mq4_adc_value; // 
extern float mq4_volts; //   
extern float  mq4_RsRo; //   .  . 1000 ppm

//  :
float tf = 0.0f, hf = 0.0f; //     

int main(void)
{
 HAL_Init();
 MX_GPIO_Init();
 MX_ADC1_Init();
}

while (1)
{
 //    :
 ppm_def = mq4_default_work();              
 ppm_adv = mq4_advanced_work(tf,hf);
 ppm_full= mq4_full_work(tf,hf,mq4_temp_cal,mq4_hum_cal);
 //   : 
  if(HAL_GPIO_ReadPin(KEY_1_GPIO_Port, KEY_1_Pin)==GPIO_PIN_RESET) 
   {
   mq4_Ro = mq4_calib_Ro(); // 
   mq4_temp_cal = tf;   //     
   mq4_hum_cal = hf;   //     
   }
}

أمثلة على الاستخدام


تحديد قيمة جزء في المليون:


وظيفة حساب تعويض درجة الحرارة (في هذه الحالة ، بنفس الرطوبة):


تصحيح القيم أثناء المعايرة في الظروف غير القياسية:


استنتاج


  1. , , . TGS2611 ( 15-20 MQ-4). header- ppm ( Graph 4.4.2).
  2. 1$ , .
  3. , , RsRo 0,5…0,8, ( ). ( 1000 ppm), .. , . , , – 4…5 RsRo .
  4. . , «» header- ( Y).
  5. , , . (20 , 33% ( 65% )).
  6. 3.8 RsRo. — 2.6, 1.2…1.5.
  7. , RL ( 20 , 10…47 ). High Precision Resistor.



All Articles