1.可燃性气体传感器(MQ-5)介绍特点>对液化气,天然气,城市煤气有较好的灵敏度>对乙醇,烟雾几乎不响应>快速的响应恢复特性>长期的使用寿命和可靠的稳定性>简单的测试电路应用>适用于家庭或工业上对液化气,天然气,煤气的监测装置优良的抗乙醇,烟 雾干扰能力以上知识点,可参阅<MQ-5. pdf>通过本实验了解可燃性气体传感器的硬件电路和工作原理实验内容1. 编写一个读取可燃性气体传感器信号的程序2. 将状态做简单的处理显示实验设备1. 硬件部分1)采集节点一个2)J-Link 仿真器一个3)显示终端一台4)可燃性气体传感器一个2. 软件部分Keil uVision4开发环境,J-Link驱动程序实验原理1. 可燃性气体传感器工作原理 电路中用到,可燃性气体传感器电路、信号放大电路、单片机系统、状态显示系统构 成其基本工作原理:经过信号放大电路,可燃性气体传感器电路将感受到的酒精浓度以 模拟量形式输出至单片机系统,经AD转换由状态显示系统进行显示可燃性气体传感器工作框图如图5-1:图5-1 电路工作框图1. 可燃性气体传感器的硬件电路图 电路中,可燃性气体传感器电路如图5-2E凹阍OUT«pcaC19miF图5-2可燃性气体传感器原理图实验步骤实验基本步骤如下:1. 启动Keil uVision4,新建一个项目工程Bank,添加常用组,并添加相应库函 数;2. 在 user 文件中建立 main.c,Systemlnit.c,PublicFuc.c 文件;3. 新建一个组sensor,在sensor中编写读取可燃性气体传感器状态的代码;4. 编译链接工程,并生成hex文件,所有文件如下图6-1所示:園 F. . . D. . . | t ) F. . . | (]+T...图6-1文件示意图5. 将可燃性气体传感器接到传感器接口1;图6-2可燃性气体传感器6. 将J-Link仿真器、ZigBee路由器接入传感器采集节点,仿真器USB接口连入PC 机,插好电源,并打开开发实验箱上的电源开关,如图6-3:电指源示灯电源开天关线传感红外器发接射口1ZigBee复位ZigBee按键拨码开关节点按键复位ZigBee_DEBUG I J-LINK 接口传感器接口 3传感器接口 2图6-3硬件连接示意图7. 将ZigBee协调器接入智能网关,插好电源,并打开电源启动智能网关系统,运 行传感器实验显示程序;图6-4传感器实验显示程序图6-5智能网关连接示意图8. 选择【Debug】->【Start/Stop Debug Session],启动J-Link 进行仿真调试;9. 选择【Debug]->【run】或者按快捷键“F5”,运行程序;10. 验证:改变可燃性气体的浓度,观察显示屏上状态的变化;11. 验证完毕后,退出J-Link仿真界面,关闭Keil uVision4软件;关闭硬件电 源,整理桌面;12. 实验完毕。
实验部分参考程序(完整程序见源程序文件)7.1 10 口初始化void SensorADInit(void){ADC_InitTypeDef ADC_InitStructure;GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);/* PC0*/GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入 GPIO_Init(GPIOC, &GPIO_InitStructure);/* ADC1 */ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; //独立模式ADC_InitStructure.ADC_ScanConvMode = DISABLE;//连续多通道模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; // 连续转换ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 转换 不受外界决定ADC_InitStructure.ADC_DataAlign 右对齐ADC_InitStructure.ADC_NbrOfChannel 扫描通道数ADC_Init(ADC1, &ADC_InitStructure);= ADC_DataAlign_Right;= 1;////// 配置通道10 的采样速度,配置为最慢ADC_RegularChannelConfig(ADC1, ADC_SampleTime_239Cycles5);ADC_Channel_10, 1,/* 允许 ADC1*/ADC_Cmd(ADC1, ENABLE);/*重置校准寄存器 */ADC_ResetCalibration(ADC1);while(ADC_GetResetCalibrationStatus(ADC1));/*开始校准状态*/ADC_StartCalibration(ADC1); while(ADC_GetCalibrationStatus(ADC1));/* 人工打开 ADC 转换.*/ ADC_SoftwareStartConvCmd(ADC1, ENABLE);}解释:ADC通道10使用PCO引脚,所以该引脚要设置为模拟量输入。
然后调用ADC_Init()函 数设置AD转换的配置,调用ADC_RegularChannelConfig ()函数设置AD转换通道的采样时 间,然后调用ADC_Cmd()函数给AD转换模块上电,调用ADC_ResetCalibration()函数复位 校准寄存器准备校准,然后调用ADC_StartCalibration()函数启动校准功能,就这样,最 后只要调用ADC_SoftwareStartConvCmd()函数就可以启动AD转换7.2 AD转换代码程序代码:uint16_t ADC_GetConversionValue(ADC_TypeDef* ADCx){/* Check the parameters */ assert_param(IS_ADC_ALL_PERIPH(ADCx));/* Return the selected ADC conversion value */ return (uint16_t) ADCx->DR;}代码解析:通过读取ADCx_DR寄存器的值获取AD转换的结果u16 Sample_Combustible_gas(void){u16 adc;adc=ADC_GetConversionValue(ADC1);return adc;}代码解释:调用ADC_GetConversionValue()函数获取AD转换的结果。
7.2 采集数据函数void GetSensorAD_data(u8* data){u16 adc;adc = ADC_GetConversionValue(ADC1); //读取模数转换值data[0] = 0;data[1] = (adc>>8)&OxOOff;data[2] = adc&OxOOff;data[3] = O;data[4] = O;}解释:调用ADC_GetConversionValue(ADC1)函数实现AD数值转换,并将值赋予ADC, 再进行必要的转换,实现智能网关的数据显示实验验证1. 程序是否能运行和编译成功2. 用改变可燃性气体的浓度,观察显示屏上显示的数值是否发生变化名称:可燃气体测量传感器 浓度:1741 .Oppm图8-1传感器状态显示1.修改程序,实现一定浓度的报警。