YA-C21A型二氧化碳传感器
一、传感器简介
YA-C21A型二氧化碳传感器是一种通用智能小型传感器,利用非色散红外(NDIR)原理对空气中存在的二氧化碳进行探测,具有良好的选择性和无氧气依赖性,寿命长。内置温度补偿。该传感器同时具有数字输出、模拟输出以及PWM输出,方便使用。该传感器是将成熟的红外吸收气体检测技术与精密光路设计、精密电路设计紧密结合而制作出的高性能传感器。(这是官方说法,个人认为该传感器最吸引我的地方就是多种输出方式)
二、技术指标
传感器型号 | YA-C21A |
检测气体 | 二氧化碳 |
供电电压 | 4.5~5.5V DC |
平均电流 | <60mA (5V供电时) |
峰值电流 | 150mA (5V供电时) |
接口电平 | 3.3V(兼容5V) |
测量范围 |
0-5000ppm(可选) |
输出信号 | 串口输出、PWM输出、模拟输出 |
预热时间 | 3min |
响应时间 | T<120s |
工作温度 | 0-50摄氏度 |
工作湿度 | 0-95% |
重量 | 5g |
三、引脚定义图
四、以PWM输出为例编程
1.PWM输出图示
由图可以看出pwm波以2ms高电平为起始信号,ppm值与脉冲宽度呈线性关系,每个输出周期为1004ms
2.例程(均为自行编写且测试通过,以SCT89C52C搭载)
/*此头文件是二氧化碳浓度程序头文件*/
#ifndef __PWM_H
#define __PWM_H
void InitTimer0(void);
unsigned int Read_Pwm(void);
#endif
#include<reg51.h>
unsigned int r;
sbit pwm=P1^1;
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x00;
TL0 = 0x00;
EA = 1;
ET0 = 1;
TR0 = 0;//先关闭定时器0
}
void Timer0Interrupt(void) interrupt 1
{
TH0 = 0x00;
TL0 = 0x00;
r++;
}
unsigned int Read_Pwm()
{
float t;
unsigned int result;
r=0;//使用前清零
InitTimer0();//定时器0初始化
while(pwm);//度过高电平
while(!pwm);//度过低电平
TR0=1;//开启定时器0
while(pwm);//度过高电平
TR0=0;//关闭定时器0
t=r*65535*1.09;//循环所得
t+=(TH0*256+TL0);//最终us数
t/=1000;//最终ms数
result=t;
result-=2;//减去其实2ms
result*=2;//最终的浓度
return result;
}
代码很简单,只要准确找到周期开始的时刻,用定时器0对脉冲宽度进行准确计时即可。
左肩膀理想右肩担当,君子不怨永远不会停下脚步!