本帖最后由 党国特派员 于 2016-2-5 00:23 编辑
1、电化学甲醛模组 ZE08-CH2O介绍 ZE 08 -CH 2 O型电化学甲醛模组是一个通用型、小型化模组。利用电化学原理对空气中存在的CH 2 O进行探测,具有良好的选择性,稳定性。内置温度传感器,可进行温度补偿;同时具有数字输出与模拟电压输出,方便使用。ZE 08 -CH 2 O是将成熟的电化学检测技术与精良的电路设计紧密结合,设计制造出的通用型气体模组。
传感器特点 1.高灵敏度、高分辨率、低功耗、使用寿命长
2.提供UART、模拟电压信号、PWM波形等多种输出方式
3.高稳定性、优秀的抗干扰能力、温度补偿、卓越的线性输出
2、通讯及管脚说明
3、接线
ZE08-CH20模块会每隔一秒钟通过Pin6(UART_TX)向外传送一次数据,所以我们使用小红板的USART2接口来接收数据。PA3接传感器Pin6,PA2接传感器的Pin5。在这里还有一个问题,因为小红板上的USART2使用PD5和PD6,本来我是想使用USART2的Remap到PD5和PD6上去,但是测试后不起作用。不知道是我程序有问题还是这个芯片的BUG,有待求证。
4、驱动代码:
ch2o.h
- /**
- ****************************************************************************************
- *
- * @file ch2o.h
- *
- * @brief ch2o甲醛传感器操作模块头文件
- *
- * Copyright (C) sunsjw 2015
- *
- * $Rev: 1.0 $
- *
- ****************************************************************************************
- */
- #ifndef __CH2O_H
- #define __CH2O_H
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- #include "gd32f20x.h"
- void CH2O_Init(void);
- #ifdef __cplusplus
- }
- #endif
- #endif
复制代码 ch2o.c- /**
- ****************************************************************************************
- *
- * @file ch2o.c
- *
- * @brief ch2o甲醛传感器操作模块头
- *
- * Copyright (C) sunsjw 2015
- *
- * $Rev: 1.0 $
- *
- ****************************************************************************************
- */
- #include "ch2o.h"
-
- /**
- * @brief h2o甲醛传感器初始化
- * @param[in] None
- * \retval None
- */
- void CH2O_Init()
- {
- GPIO_InitPara gpio_stru;
-
- //Config usart2 RX
- gpio_stru.GPIO_Mode = GPIO_MODE_IN_FLOATING;
- gpio_stru.GPIO_Pin = GPIO_PIN_3;
- gpio_stru.GPIO_Speed = GPIO_SPEED_10MHZ;
-
- GPIO_Init(GPIOA,&gpio_stru);
- //Config usart2 TX
- gpio_stru.GPIO_Mode = GPIO_MODE_AF_PP;
- gpio_stru.GPIO_Pin = GPIO_PIN_2;
- gpio_stru.GPIO_Speed = GPIO_SPEED_10MHZ;
-
- GPIO_Init(GPIOA,&gpio_stru);
- }
复制代码 主程序读ch2o代码:- void ShowCH2O(void)
- {
- uint8_t rx;
-
- rx = 0x00;
- for(int i=0;i<9;i++)
- showBuffer[i] = 0;
- // Call received API
- while(USART_GetBitState(USART2,USART_FLAG_RBNE) != SET);
- rx = USART_DataReceive(USART2);
- if(rx == 0xFF)
- {
- showBuffer[0] = rx;
- for(int i=1;i<9;i++)
- {
- // Call received API
- while(USART_GetBitState(USART2,USART_FLAG_RBNE) != SET);
- rx = USART_DataReceive(USART2);
- showBuffer[i] = rx;
- }
- }
- /*国家标准室内0.08mg/m3 = 833 * 0.08 = 66.64 ppb。*/
- int pm25Value = showBuffer[4]*256 + showBuffer[5];
- float result = pm25Value / 66.64 * 0.08;
- /*
- int v1 = (int)result;
- int v2 = (int)((result - v1)*1000);
- PRINTF("CH2O: %d.%03d(mg/m3)\r\n",v1,v2);
- */
- sprintf((char*)showBuffer,":%1.3f mg/",result);
- OLED_ShowCHinese(0,0,4);//显示汉字甲
- OLED_ShowCHinese(16,0,5);//显示汉字醛
- OLED_ShowString(32,0,showBuffer);
- OLED_ShowCHinese(112,0,10);//显示m³
- }
复制代码 USART配置代码:- void USART_config(void)
- {
- USART_InitPara usart_stru;
-
- usart_stru.USART_BRR = 9600;
- usart_stru.USART_HardwareFlowControl = USART_HARDWAREFLOWCONTROL_NONE;
- usart_stru.USART_Parity = USART_PARITY_RESET;
- usart_stru.USART_STBits = USART_STBITS_1;
- usart_stru.USART_RxorTx = USART_RXORTX_RX| USART_RXORTX_TX;
- usart_stru.USART_WL = USART_WL_8B;
-
- USART_Init(USART2,&usart_stru);
- USART_Enable(USART2,ENABLE);
- }
复制代码 实验效果:
|