目錄
1.ADC簡(jiǎn)介
2.項(xiàng)目簡(jiǎn)介
3.CubeMX設(shè)置
4.函數(shù)代碼
1.ADC簡(jiǎn)介
作用:用于讀取電壓值,然后轉(zhuǎn)換為數(shù)字量傳給單片機(jī),單片機(jī)再通過(guò)計(jì)算,可以得到電壓值。
?ADC的性能指標(biāo)
- 量程:能測(cè)量的電壓范圍
- 分辨率:ADC能辨別的最小模擬量,通常以輸出二進(jìn)制數(shù)的位數(shù)表示,比如:8、10、12、16位等;位數(shù)越多,分辨率越高,一般來(lái)說(shuō)分辨率越高,轉(zhuǎn)化時(shí)間越長(zhǎng)
- 轉(zhuǎn)化時(shí)間:從轉(zhuǎn)換開(kāi)始到獲得穩(wěn)定的數(shù)字量輸出所需要的時(shí)間稱為轉(zhuǎn)換時(shí)間
ADC特性
- 12位精度下轉(zhuǎn)換速度可高達(dá)1MHZ
- 供電電壓:V SSA :0V,V DDA :2.4V~3.6V
- ADC輸入范圍:VREF- ≤ VIN ≤ VREF+
- 采樣時(shí)間可配置,采樣時(shí)間越長(zhǎng), 轉(zhuǎn)換結(jié)果相對(duì)越準(zhǔn)確, 但是轉(zhuǎn)換速度就越慢
- ADC 的結(jié)果可以左對(duì)齊或右對(duì)齊方式存儲(chǔ)在 16 位數(shù)據(jù)寄存器中
ADC通道
總共2個(gè)ADC(ADC1,ADC2),每個(gè)ADC有18個(gè)轉(zhuǎn)換通道: 16個(gè)外部通道、 2個(gè)內(nèi)部通道(溫度
傳感器、內(nèi)部參考電壓)。
外部的16個(gè)通道在轉(zhuǎn)換時(shí)又分為規(guī)則通道和注入通道,其中規(guī)則通道最多有16路,注入通道最多有4路。
規(guī)則組:正常排隊(duì)的人;? ? ? ? ?注入組:有特權(quán)的人(軍人、孕婦)
ADC轉(zhuǎn)換順序
每個(gè)ADC只有一個(gè)數(shù)據(jù)寄存器,16個(gè)通道一起共用這個(gè)寄存器,所以需要指定規(guī)則轉(zhuǎn)換通道的轉(zhuǎn)換順序。
規(guī)則通道中的轉(zhuǎn)換順序由三個(gè)寄存器控制:SQR1、SQR2、SQR3,它們都是32位寄存器。SQR寄存器控制著轉(zhuǎn)換通道的數(shù)目和轉(zhuǎn)換順序,只要在對(duì)應(yīng)的寄存器位SQx中寫入相應(yīng)的通道,這個(gè)通
道就是第x個(gè)轉(zhuǎn)換。
ADC觸發(fā)方式
1. 通過(guò)向控制寄存器ADC-CR2的ADON位寫1來(lái)開(kāi)啟轉(zhuǎn)換,寫0停止轉(zhuǎn)換。
2. 也可以通過(guò)外部事件(如定時(shí)器)進(jìn)行轉(zhuǎn)換。
ADC轉(zhuǎn)化時(shí)間
ADC是掛載在APB2總線(PCLK2)上的,經(jīng)過(guò)分頻器得到ADC時(shí)鐘(ADCCLK),最高 14MHz。
轉(zhuǎn)換時(shí)間=采樣時(shí)間+12.5個(gè)周期
12.5個(gè)周期是固定的,一般我們?cè)O(shè)置 PCLK2=72M,經(jīng)過(guò) ADC 預(yù)分頻器能分頻到最大的時(shí)鐘只能
是 12M,采樣周期設(shè)置為 1.5 個(gè)周期,算出最短的轉(zhuǎn)換時(shí)間為 1.17us。
ADC轉(zhuǎn)化模式
掃描模式
關(guān)閉掃描模式:只轉(zhuǎn)換ADC_SQRx或ADC_JSQR選中的第一個(gè)通道
打開(kāi)掃描模式:掃描所有被ADC_SQRx或ADC_JSQR選中的所有通道
單次轉(zhuǎn)換/連續(xù)轉(zhuǎn)換
單次轉(zhuǎn)換:只轉(zhuǎn)換一次
連續(xù)轉(zhuǎn)換:轉(zhuǎn)換一次之后,立馬進(jìn)行下一次轉(zhuǎn)換
2.項(xiàng)目簡(jiǎn)介
使用ADC讀取煙霧傳感器的值
3.CubeMX設(shè)置
1.ADC模塊
?2.ADC時(shí)鐘設(shè)置為12MHz
4.函數(shù)代碼
fputc
#include "stdio.h" //記得勾選use micro——lib
int fputc(int ch1,FILE *f)
{
uint8_t temp[1]={ch1}; //必須要用uint8_t承接,將int char變?yōu)閡int8_t
HAL_UART_Transmit(&huart1, temp, 1, 0xffff);
return ch1;
}
main中
uint32_t smok_valve=0;
while中
HAL_ADC_Start(&hadc1); //開(kāi)啟ADC
HAL_ADC_PollForConversion(&hadc1,100); //等待ADC接收完成
smok_valve=HAL_ADC_GetValue(&hadc1);
printf("現(xiàn)在的煙霧傳感器電壓是:%f",smok_valve*3.3/4096);
HAL_Delay(500);
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-491450.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-491450.html
到了這里,關(guān)于STM32開(kāi)發(fā)——ADC(煙霧傳感器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!