采用开发板硬件ADC功能进行烟雾数据采集

描述

      MQ-2 气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2) 。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。 使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。将模拟量转换为数字量的技术我们称之为ADC。
      本示例采用开发板硬件ADC功能进行烟雾数据采集,STM32F103 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC),这些 ADC 可以独立使用,也可以使用双重模式(提高采样率)。 STM32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有 18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A/D 转换可以单次、连续、扫描或间断模式执行。 ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。

    1.硬件设计

STM32F103

      采用PA0(ADC1_CH0)接口完成烟雾浓度采集。

软件设计

  ADC工作频率配置
  根据STM32中文参考手册ADC章节(第155页),ADC的工作时钟不能超过14MHZ。

STM32F103

 ADC模式
  STM32F103开发板有两种转换方式:规则转换和注入转换。规则转换有可同时转换16路通道,但只有一个数据寄存器,所以想完成16路通道同时转换就需要DMA配合使用;注入通道有4个数据寄存器,可同时转换4路通道。

STM32F103

ADC模式配置

STM32F103STM32F103

代码生成

STM32F103

PA0引脚配置和ADC校准

STM32F103

完成一次规则通道转换

u16 Get_Regular_Channelx(u16 ch)
{
	ADC_ChannelConfTypeDef sConfig = {0};
	sConfig.Channel=ch;//通道号

	sConfig.SamplingTime=ADC_SAMPLETIME_239CYCLES_5;//采样周期
	if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)//ADC通道初始化
   {
     Error_Handler();
   }	
	HAL_ADC_Start(&hadc1);//开启ADC
	HAL_ADC_PollForConversion(&hadc1,20);//等待规则通道转换完成
	return HAL_ADC_GetValue(&hadc1);
}

500ms采集一次数据

	Delay_Ms(1);
	time++;
	if(time>=500)
	{
		time=0;
		temp_ad =Get_Regular_Channelx(0);
		printf("AD:%d\r\n",temp_ad);				
	}

ADC常用函数介绍

/**********************在stm32f1xx_hal_adc.c中*********************************************/
HAL_ADC_Start(ADC_HandleTypeDef* hadc); //开启ADC
HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);  //中断方式开启ADC
HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length); //DMA方式开启
//等待转换完成
HAL_StatusTypeDef  HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
uint32_t  HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);//获取数据
//ADC通道配置
HAL_StatusTypeDef  HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc,ADC_ChannelConfTypeDef* sConfig);
uint32_t HAL_ADC_GetState(ADC_HandleTypeDef* hadc);//获取状态
/***************************************在stm32f1xx_hal_adc_ex.h中*****************************/
HAL_StatusTypeDef  HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc);//ADC校准
HAL_StatusTypeDef  HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc);//使能ADC,开始注入转换

 

 

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分