Nuru_Banmian
Nuru_Banmian
Published on 2025-07-20 / 47 Visits
0
0

ADC-STM32中的ADC

​ STM32F103系列提供了3个ADC,精度为12位,每个ADC最多有16个通道和2个内部信号源。

​ STM32F103的ADC是一种逐次逼近型模拟数字转换器。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阈值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。

中断

中断结束中断

​ 模拟转换结束后,可以产生中断。

​ 中断分三种:

  • 规则通道转换结束中断

  • 诸如转换通道转换结束中断

  • 模拟看门狗中断

​ 其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以更具中断类型写相应配套的中断服务程序。

模拟看门狗中断

​ 当被ADC转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由ADC_LTR和ADC_HTR设置。

​ 例如,我们设置的高阈值是2.5V,那么模拟电压超过2.5V的时候,就会产生模拟看门狗中断,反之低阈值也一样。

DMA请求

​ 规则和注入通道转换结束后,出了产生中断外,还可以产生DMA请求,把转换好的数据直接储存在内存里面。要注意的是只有ADC1和ADC3可以产生DMA请求。

数据对齐

​ 16位的寄存器只用到了其中12位。

​ 可以使用高12位,数据就是左对齐。

​ 也可以使用低12位,数据就是右对齐。

​ 右对齐:高4位补零,读取的值就是实际值。

ADC-STM32中的ADC-数据对齐-1

​ 左对齐:低4位补零,读取的值就是实际值的16倍。

ADC-STM32中的ADC-数据对齐-2

在实际使用中,最好使用低12位,这样得到的数据就可以直接使用。

转换时间

​ ADC使用若干个ADC_CLK周期对输入电压采样。

​ 总转换时间如下计算:

​ T~CONV~ = 采样时间 + 12.5个ADC周期。

​ 当ADCCLK = 14MHz,假设采样时间为1.5个周期。

​ T~CONV~ = 1.5 + 12.5 = 14周期 = 1μs。

电压转换

​ 模拟电压经过ADC转换后,是一个12位的数字值,如果通过串口以16进制打印出来的话,可读性比较差,那么有时候我们就需要把数字电压转换成模拟电压,也可以跟实际的模拟电压(万用表测)对比,看看转换是否准确。

​ 我们一般再设计原理图的时候会把ADC的输入电压范围设定在:0~3.3V,因为ADC是12位的,那么12位满量程对应就是3.3V,12位满量程(全部是1)对应的数字值是:2^12-1^。数值0对应的就是0V。

​ 如果转换后的数值为X,X对应的模拟电压为Y,那么会有一个等式成立:

​ 2^12-1^/3.3 = X/Y

​ Y =(3.3 * X )/ 2^12-1^ = 3.3 * X / 4095


Comment