首先明确一个概念,嵌入式或者说单片机里进行ADC(数模)转化,所采集的数据一般是电流或电压,但绝大多数我们采集的只是电压值。
其实电子电路的取样电路存在电流取样和电压取样,如果想要直接采集电流,需要在采集端串联电阻,然后采集电阻两端电压,而且电流传感器采样范围也就几十毫安,一般需要放大器。
STM32F103电压采集范围0~3.3V,最终是需要计算转化得到实际值。
电路电压经过ADC转换后为一个12Bit的数字,要想看到实际的采集电压值,需要这么计算:
(1)ADC是12bit,采集范围0~3.3V,也就是2^12(4096)对应3.3
(2)(2^12)/3.3=X/Y X为12bit转换后数值,Y为实际电压。
以氧气传感器举个例子:
// 读取氧气浓度和流量
void ReadAdc()
{
if (flowTick >= 10)
{
flowTick = 0;
u16 in10 = Get_Adc_Average(ADC_Channel_10, 20);
concentration = in10 * 100 / 3080;
u16 in11 = Get_Adc_Average(ADC_Channel_11, 20);
float voatage=in11*3.3/4096-0.15;
flow = voatage*2000 /3;
}
}