MQ-2 氣體傳感器所使用的氣敏材料是在清潔空氣中電導(dǎo)率較低的二氧化錫(SnO2) 。當(dāng)傳感器所處環(huán)境中存在可燃?xì)怏w時(shí),傳感器的電導(dǎo)率隨空氣中可燃?xì)怏w濃度的增加而增大。 使用簡(jiǎn)單的電路即可將電導(dǎo)率的變化轉(zhuǎn)換為與該氣體濃度相對(duì)應(yīng)的輸出信號(hào)。將模擬量轉(zhuǎn)換為數(shù)字量的技術(shù)我們稱之為ADC。
本示例采用開發(fā)板硬件ADC功能進(jìn)行煙霧數(shù)據(jù)采集,STM32F103 擁有 1~3 個(gè) ADC(STM32F101/102 系列只有 1 個(gè) ADC),這些 ADC 可以獨(dú)立使用,也可以使用雙重模式(提高采樣率)。 STM32 的 ADC 是 12 位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器。它有 18 個(gè)通道,可測(cè)量 16 個(gè)外部和 2 個(gè)內(nèi)部信號(hào)源。各通道的 A/D 轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。 ADC 的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在 16 位數(shù)據(jù)寄存器中。
1.硬件設(shè)計(jì)

采用PA0(ADC1_CH0)接口完成煙霧濃度采集。
軟件設(shè)計(jì)
ADC工作頻率配置
??根據(jù)STM32中文參考手冊(cè)ADC章節(jié)(第155頁),ADC的工作時(shí)鐘不能超過14MHZ。

ADC模式
??STM32F103開發(fā)板有兩種轉(zhuǎn)換方式:規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換。規(guī)則轉(zhuǎn)換有可同時(shí)轉(zhuǎn)換16路通道,但只有一個(gè)數(shù)據(jù)寄存器,所以想完成16路通道同時(shí)轉(zhuǎn)換就需要DMA配合使用;注入通道有4個(gè)數(shù)據(jù)寄存器,可同時(shí)轉(zhuǎn)換4路通道。

ADC模式配置


代碼生成

PA0引腳配置和ADC校準(zhǔn)

完成一次規(guī)則通道轉(zhuǎn)換
u16 Get_Regular_Channelx(u16 ch)
{
ADC_ChannelConfTypeDef sConfig = {0};
sConfig.Channel=ch;//通道號(hào)
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);//等待規(guī)則通道轉(zhuǎn)換完成
return HAL_ADC_GetValue(&hadc1);
}
500ms采集一次數(shù)據(jù)
Delay_Ms(1);
time++;
if(time>=500)
{
time=0;
temp_ad =Get_Regular_Channelx(0);
printf("AD:%d\r\n",temp_ad);
}
ADC常用函數(shù)介紹
/**********************在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方式開啟
//等待轉(zhuǎn)換完成
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc);//獲取數(shù)據(jù)
//ADC通道配置
HAL_StatusTypeDef HAL_ADC_ConfigChannel(ADC_HandleTypeDef* hadc,ADC_ChannelConfTypeDef* sConfig);
uint32_t HAL_ADC_GetState(ADC_HandleTypeDef* hadc);//獲取狀態(tài)
/***************************************在stm32f1xx_hal_adc_ex.h中*****************************/
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc);//ADC校準(zhǔn)
HAL_StatusTypeDef HAL_ADCEx_InjectedStart(ADC_HandleTypeDef* hadc);//使能ADC,開始注入轉(zhuǎn)換
-
adc
+關(guān)注
關(guān)注
99文章
6611瀏覽量
547731 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5389瀏覽量
100891 -
STM32F103
+關(guān)注
關(guān)注
33文章
481瀏覽量
64844
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論