【CC2530开发基础篇】读取MQ2烟雾的烟雾浓度值【ADC采集】

举报
DS小龙哥 发表于 2024/11/26 13:21:47 2024/11/26
【摘要】 本实验基于CC2530单片机和MQ-2气体传感器,通过模拟信号采集的方式实现烟雾浓度的检测与显示。CC2530作为一款强大的低功耗无线单片机,具有丰富的GPIO接口,可以方便地进行多种传感器的接入与数据处理。本实验的重点是通过ADC(模拟到数字转换器)接口读取MQ-2传感器的模拟输出信号,将其转化为数字信号,从而实现烟雾浓度的量化输出。

一、前言

1.1 开发背景

本实验基于CC2530单片机和MQ-2气体传感器,通过模拟信号采集的方式实现烟雾浓度的检测与显示。CC2530作为一款强大的低功耗无线单片机,具有丰富的GPIO接口,可以方便地进行多种传感器的接入与数据处理。本实验的重点是通过ADC(模拟到数字转换器)接口读取MQ-2传感器的模拟输出信号,将其转化为数字信号,从而实现烟雾浓度的量化输出。

MQ-2气体传感器能够检测多种气体的浓度,常用于烟雾、甲烷、液化气等气体的监测。在本实验中,传感器通过模拟电压信号反映气体浓度的变化。为了提高传感器的灵敏度,可以通过调节MQ-2上的蓝色电阻来优化响应性能。通过使用火机释放少量气体至传感器探头,可以观察到串口调试助手中数据的实时变化,反映出气体浓度的变化情况。

本实验的主要目的在于通过实际操作了解如何配置和使用CC2530的GPIO接口,如何使用MQ-2传感器进行气体检测,以及如何将传感器的数据通过串口输出显示。在实验过程中,调节气体浓度,观察串口助手中的数据变化,有助于加深对气体传感原理与传感器应用的理解。


这是当前实验使用的CC2530板子的实物图:

cke_5113.png


1.2 MQ-2气体传感器

MQ-2气体传感器是一种广泛应用于各种安全监测系统的元件,特别适合用于家庭和工业环境中检测可燃气体泄露以及烟雾浓度。该传感器的核心部分是一个气敏电阻,当周围空气中的特定气体浓度发生变化时,气敏电阻的阻值也会随之改变。MQ-2传感器可以检测多种气体,包括但不限于液化石油气(LPG)、异丁烷、甲烷(CH4)、酒精、氢气(H2)以及烟雾等,这使得它在多个领域内都有非常广泛的应用。

MQ-2传感器的设计采用了简单的加热丝结构,工作时需要一定的预热时间,通常建议预热时间为24小时以上,以便达到最佳的工作状态。传感器内部的加热丝在通电后会产生热量,促使气敏材料表面发生化学反应,进而改变其电阻值。通过测量这一变化,就可以间接地得知空气中目标气体的浓度。值得注意的是,MQ-2传感器上配备有一个可调的蓝色电位器,用户可以通过调节这个电位器来调整传感器的灵敏度,以适应不同应用场景的需求。

在实际应用中,MQ-2气体传感器通常会与微控制器配合使用,例如本实验中使用的CC2530单片机。通过将传感器输出的模拟信号转换为数字信号,再由微控制器进行处理和分析,最终实现对环境气体浓度的精确监测。此外,为了确保数据的准确性和可靠性,还需要对传感器进行适当的校准。校准过程通常涉及在已知气体浓度的环境下测量传感器的输出值,并据此调整算法中的参数,以提高检测精度。 MQ-2气体传感器以其成本低廉、使用方便、响应迅速等特点,成为了众多气体检测应用的理想选择。


1.3 项目硬件模块组成

(1) CC2530单片机 作为核心控制单元,CC2530单片机负责接收来自MQ-2气体传感器的模拟信号,通过ADC模块进行转换,并将处理后的浓度数据通过串口输出至串口调试助手。

(2) MQ-2气体传感器 MQ-2传感器用于检测空气中的烟雾、甲烷、液化气等气体的浓度。其模拟输出信号(AO)连接到CC2530的ADC输入引脚,CC2530将采集到的模拟电压值转换为数字量,进而计算出气体浓度。

(3) 电源模块 为整个系统提供稳定的电源。CC2530单片机和MQ-2传感器都需要通过VCC和GND接入适当的电源(通常为3.3V或5V)。

(4) 串口通信模块 用于实现CC2530单片机与PC之间的数据通信。通过串口0(UART)输出烟雾浓度数据,供串口调试助手显示和监控。

(5) 调节电阻(蓝色电阻) MQ-2传感器上有一个可调电阻,用于调节传感器的灵敏度。通过调整该电阻,可以改变传感器对气体浓度变化的响应能力,使其适应不同的检测环境。

(6) 火机(气体源) 用于向MQ-2传感器释放气体,模拟环境中气体浓度的变化,观察传感器输出和串口数据的响应。

(7) 串口调试助手 用于接收和显示来自CC2530单片机通过串口发送的烟雾浓度数据,帮助观察气体浓度变化与传感器响应的关系。


1.4 项目实现的功能

功能编号 功能描述
(1) 烟雾浓度检测:使用MQ-2气体传感器检测空气中的烟雾浓度,并输出模拟信号。
(2) 模拟信号转换:CC2530通过ADC模块将MQ-2传感器的模拟信号转换为数字信号。
(3) 浓度数据计算:CC2530单片机根据ADC采集到的数字信号计算烟雾浓度。
(4) 串口数据输出:将计算得出的烟雾浓度数据通过串口0输出,供串口调试助手显示。
(5) 灵敏度调节:通过调节MQ-2传感器上的蓝色电阻,调整传感器的灵敏度,以适应不同环境下的气体检测需求。
(6) 实时数据监控:通过串口调试助手监控并显示烟雾浓度数据的变化,响应环境中气体浓度的波动。
(7) 气体源模拟:使用火机释放气体至MQ-2传感器探头,模拟气体浓度的变化,验证系统对浓度变化的响应。



二、CC2530基础知识科普

2.1 CC2530 与 ZigBee 的含义

CC2530是什么

CC2530是一款由德州仪器(Texas Instruments,TI)推出的无线微控制器芯片,专为低功耗和无线通信应用设计。它基于8051内核,具有丰富的片上资源,包括128 KB的闪存、8 KB的RAM、多个UART和SPI接口、ADC模块等。此外,CC2530支持IEEE 802.15.4标准,这是ZigBee协议栈的基础。CC2530的低功耗特性和高集成度使其特别适用于智能家居、物联网(IoT)设备和工业自动化等应用场景。

ZigBee是什么

ZigBee是一种基于IEEE 802.15.4标准的无线通信协议,专为低功耗、低数据速率和短距离应用场景设计。它的主要特点是功耗低、组网灵活、支持大规模网络节点(如星型、网状和树形拓扑),并且具有较强的抗干扰能力。ZigBee常用于智能家居(如智能灯控、温湿度传感器)、工业物联网、医疗设备和农业监控等领域。与Wi-Fi和蓝牙相比,ZigBee适合需要低功耗、低数据速率和高网络节点容量的应用。

CC2530与ZigBee的联系

CC2530是支持ZigBee协议的硬件平台之一。CC2530的硬件架构和无线射频模块完全符合IEEE 802.15.4标准,而ZigBee协议栈则是运行在该标准之上的通信协议。通过在CC2530芯片上加载ZigBee协议栈(如TI提供的Z-Stack),用户可以构建完整的ZigBee无线通信系统。

CC2530作为ZigBee设备的实现平台,可以配置为不同类型的ZigBee节点,包括协调器(Coordinator)、路由器(Router)和终端设备(End Device)。协调器负责整个ZigBee网络的建立和管理,路由器用于中继信号扩展网络范围,终端设备通常是低功耗的传感器或执行器。

CC2530是支持ZigBee协议的硬件芯片,而ZigBee是运行在像CC2530这样的硬件平台上的通信协议。CC2530为ZigBee提供硬件支持,ZigBee则为CC2530提供实现复杂网络功能的能力。这种软硬结合使得CC2530成为ZigBee应用中的主流选择之一。


2.2 CC2530的开发环境

CC2530官方推荐的开发环境是 IAR Embedded Workbench(IAR EW8051)

CC2530的开发环境:IAR Embedded Workbench

IAR Embedded Workbench(简称IAR)是开发CC2530的主要集成开发环境(IDE)。它是一款专业的嵌入式软件开发工具,提供了编辑、编译、调试和优化等功能,广泛支持各种嵌入式微控制器平台,包括基于8051内核的CC2530。IAR针对低功耗和无线设备开发进行了深度优化,特别适合CC2530这类资源有限的嵌入式芯片。

IAR支持德州仪器的ZigBee协议栈(如Z-Stack),并提供了配套的调试工具和编译器,使开发者能够轻松集成ZigBee协议、编写应用代码和调试固件。此外,IAR具有良好的代码优化能力,能有效减少CC2530有限内存的占用,提高程序运行效率。


为什么使用IAR开发CC2530

使用IAR开发CC2530主要是由于以下原因:

  1. 官方支持 德州仪器推荐使用IAR开发CC2530,因为其ZigBee协议栈(如Z-Stack)是专门为IAR优化的,许多示例代码和参考项目直接在IAR环境中运行,减少了开发者的移植工作。

  2. 代码优化能力强 IAR的编译器提供了高效的代码优化功能,包括针对代码大小和运行速度的优化选项。对于资源受限的CC2530(如闪存128 KB和RAM 8 KB),IAR可以显著减小二进制文件大小,让更多复杂功能得以实现。

  3. 调试工具完善 IAR集成了强大的调试工具,支持CC2530的片上调试功能(On-Chip Debugging)。通过与TI的调试硬件(如CC Debugger)配合,开发者可以实时查看和控制程序运行状态,进行断点设置、变量监控和性能分析。

  4. 多功能集成 IAR提供了丰富的功能模块,如静态分析、运行时调试和内存分析工具。这些功能特别适合复杂协议栈(如ZigBee)的开发,帮助开发者迅速定位和解决问题。


IAR与Keil的区别

Keil也是一款非常流行的嵌入式开发工具,但在开发CC2530时,IAR相比Keil具有以下显著区别:

  1. 官方适配支持 TI官方的ZigBee协议栈和示例项目主要为IAR设计,Keil并没有直接支持这些协议栈。因此,使用Keil开发CC2530需要进行额外的移植工作,而IAR则可以开箱即用。

  2. 编译器优化效果 IAR的编译器在优化代码大小方面普遍优于Keil,这对于资源有限的CC2530尤为重要。在存储和性能受限的情况下,IAR可以更高效地利用芯片资源。

  3. 协议栈复杂度支持 ZigBee协议栈本身较为复杂,对编译器和开发环境的要求较高。IAR对复杂嵌入式协议的支持更为成熟,而Keil的侧重点更多在通用8051开发。

  4. 工具链兼容性 IAR与CC2530配套的调试工具(如CC Debugger)无缝集成,调试体验更流畅。Keil在支持TI调试硬件方面不够完善,可能需要第三方工具或插件进行适配。


IAR是CC2530开发的首选环境,其强大的优化能力、完善的调试功能和与ZigBee协议的高兼容性,使得开发者能够更加高效地完成项目。而Keil尽管也支持8051平台,但在CC2530开发中的表现和适配性稍逊一筹。



2.3 IAR新建工程的步骤

cke_7563.png

cke_9122.png

cke_11192.png

cke_13353.png

cke_15573.png

cke_17867.png

cke_20226.png

cke_22692.png

cke_25210.png

cke_27807.png

cke_30467.png

cke_33238.png

cke_36070.png


cke_38994.png


cke_41952.png


cke_45011.png


cke_48139.png

cke_51345.png


cke_54408.png

cke_57795.png



cke_61236.png

cke_64772.png

cke_68405.png



三、代码设计

代码的含义看中文注释,这里不再单独写文字介绍代码含义。

3.1 main.c

#include "ioCC2530.h" 
#include "string.h"
​
​
typedef unsigned char uchar;
typedef unsigned int  uint;
typedef signed short int16;
typedef unsigned short uint16;
​
char TxBuf[5];
uint16 GasData;
​
uint16 ReadGasData( void );
​
/****************************************************************************
* 名    称: InitUart()
* 功    能: 串口初始化函数
* 入口参数: 无
* 出口参数: 无
****************************************************************************/
void InitUart(void)
{ 
  PERCFG = 0x00;           //外设控制寄存器 USART 0的IO位置:0为P0口位置1 
  P0SEL = 0x0c;            //P0_2,P0_3用作串口(外设功能)
  P2DIR &= ~0XC0;          //P0优先作为UART0
  
  U0CSR |= 0x80;           //设置为UART方式
  U0GCR |= 8;                      
  U0BAUD |= 59;           //波特率设为9600
  UTX0IF = 0;              //UART0 TX中断标志初始置位0
}
​
/****************************************************************************
* 名    称: UartSendString()
* 功    能: 串口发送函数
* 入口参数: Data:发送缓冲区   len:发送长度
* 出口参数: 无
****************************************************************************/
void UartSendString(char *Data, int len)
{
  uint i;
  
  for(i=0; i<len; i++)
  {
    U0DBUF = *Data++;
    while(UTX0IF == 0);
    UTX0IF = 0;
  }
}
​
/****************************************************************************
* 名    称: DelayMS()
* 功    能: 以毫秒为单位延时 16M时约为535,32M时要调整,系统时钟不修改默认为16M
* 入口参数: msec 延时参数,值越大延时越久
* 出口参数: 无
****************************************************************************/
void DelayMS(uint msec)
{  
  uint i,j;
  
  for (i=0; i<msec; i++)
    for (j=0; j<1070; j++);
}
​
uint16 ReadGasData( void )
{
  uint16 reading = 0;
  
  /* Enable channel */
  ADCCFG |= 0x40;
  
  /* writing to this register starts the extra conversion */
  ADCCON3 = 0x86;// AVDD5 引脚  00: 64 抽取率(7 位ENOB)  0110: AIN6
  
  /* Wait for the conversion to be done */
  while (!(ADCCON1 & 0x80));
  
  /* Disable channel after done conversion */
  ADCCFG &= (0x40 ^ 0xFF); //按位异或。如1010^1111=0101(二进制)
  
  /* Read the result */
  reading = ADCL;
  reading |= (int16) (ADCH << 8); 
  
  reading >>= 8;
  
  return (reading);
}
​
void main(void)
{
  CLKCONCMD &= ~0x40;         //设置系统时钟源为32MHZ晶振
  while(CLKCONSTA & 0x40);    //等待晶振稳定为32M
  CLKCONCMD &= ~0x47;         //设置系统主时钟频率为32MHZ  
  
  InitUart();                   //调置串口相关寄存器
  
  while(1)
  {
    GasData = ReadGasData();  //读取烟雾传感器引脚上的ad转换值,并没有换算成能表示烟雾浓度的值
    //演示如何使用2530芯片的AD功能,更具体在组网中给出
    
    //读取到的数值转换成字符串,供串口函数输出
    TxBuf[0] = GasData / 100 + '0';
    TxBuf[1] = GasData / 10%10 + '0';
    TxBuf[2] = GasData % 10 + '0';
    TxBuf[3] = '\n';
    TxBuf[4] = 0;
    
    UartSendString(TxBuf, 4); //想串口助手送出数据,波特率是115200      
    DelayMS(2000);            //延时函数
  }
}
​



四、总结

通过本次实验,成功地将CC2530单片机与MQ-2气体传感器结合,实现了烟雾浓度的实时检测与显示。实验中,使用ADC模块将模拟信号转换为数字信号,从而得到烟雾浓度值,并通过串口输出至调试助手,展示了数据的变化和传感器的响应。整个实验过程不仅加深了对单片机硬件接口配置的理解,还实践了如何与传感器进行交互,采集模拟信号并将其转换为有用的数据。

在实验过程中,灵敏度的调节使得传感器对不同气体浓度的响应更加精确,通过调节MQ-2传感器上的蓝色电阻,可以在不同的实验环境中优化其性能。此外,使用火机释放气体测试了传感器的实际响应,验证了系统的功能和数据输出的准确性。

本次实验不仅实现了烟雾浓度的检测功能,还帮助掌握了如何通过硬件和软件的结合完成实际的传感器应用。通过串口调试助手实时显示数据,为后续的项目开发提供了良好的实践经验和技术基础,为类似的气体检测项目提供了可行的解决方案。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。