1.cubemx设置
参考文章
时钟设置
高速时钟配置
将HCLK设置为最大频率72MHz
ADC设置
ADCs_Common_Settings(ADC模式设置)
:ADC_Mode_Independent(独立模式)
Data Alignment (数据对齐方式)
: 右对齐
Scan Conversion Mode( 扫描模式 )
: 失能
Continuous Conversion Mode(连续转换模式)
: ENABLE
Discontinuous Conversion Mode(间断模式)
:ENABLE
Enable Regular Conversions (启用常规转换模式)
:ENABLE
Number OF Conversion(转换通道数)
: 1
Extenal Trigger Conversion Source (外部触发转换源)
:
Regular Conversion launched by software(规则的软件触发,调用函数触发即可)
Rank(转换顺序)
: 默认值
2. ADC基础知识
ADC——Analog to Digital Converter,即模数转换器,是将连续的模拟信号转换为离散的数字信号的器件。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。 它的一般工作过程为:采样——保持——量化——编码。
ADC的信号输入就是通过通道来实现的,信号通过通道输入到单片机中,单片机经过转换后,将模拟信号输出为数字信号。
ADC的信号输入就是通过通道来实现的,信号通过通道输入到单片机中,单片机经过转换后,将模拟信号输出为数字信号。STM32中的ADC有着18个通道,其中外部的有16个通道。
ADC 将通道采集到的电压转换为数字值
在 ADC 采集到模拟信号电压后,将其转换为数字值的过程可以用以下公式来表示:
V in = D 2 n − 1 × V ref V_{\text{in}} = \frac{D}{2^n - 1} \times V_{\text{ref}} Vin=2n−1D×Vref
其中:
- V i n V_{in} Vin 是输入的模拟电压。
- D 是 ADC 的数字输出值。
- n 是 ADC 的分辨率(如 12 位)。
- V ref V_{\text{ref}} Vref 是参考电压(如 3.3V)。
因此,数字输出值 D D D 可以表示为:
D = ( V in V ref ) × ( 2 n − 1 ) D = \left( \frac{V_{\text{in}}}{V_{\text{ref}}} \right) \times (2^n - 1) D=(VrefVin)×(2n−1)
例如,假设 STM32 的 ADC 分辨率为 12 位(即 n = 12 n = 12 n=12),参考电压 V ref = 3.3 V V_{\text{ref}} = 3.3V Vref=3.3V,输入电压 V in = 1.65 V V_{\text{in}} = 1.65V Vin=1.65V,则:
D = ( 1.65 V 3.3 V ) × ( 2 12 − 1 ) = 0.5 × 4095 ≈ 2047 D = \left( \frac{1.65V}{3.3V} \right) \times (2^{12} - 1) = 0.5 \times 4095 \approx 2047 D=(3.3V1.65V)×(212−1)=0.5×4095≈2047
这意味着输入电压 1.65V 会被转换为数字值 2047。
3.使用函数
ADC启动函数
HAL_ADC_Start
轮询等待ADC转换完成
HAL_ADC_PollForConversion
获取ADC转换结果值
HAL_ADC_GetValue
4.代码
main(while循环中)
HAL_ADC_Start(&hadc1); //启动ADC转换
HAL_ADC_PollForConversion(&hadc1, 50); //等待转换完成,时间为50ms
if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
{
ADC_Value = HAL_ADC_GetValue(&hadc1); //获取AD值
printf("ADC1: %d \r\n",ADC_Value);
printf("PA5 voltage: %.4f \r\n",ADC_Value*3.3f/4096);
}
HAL_Delay(500);
5.效果展示
由于本次实验读取的ADC值依托于串口,所以讲效果与下一篇文章合并。
6. 附
ADC设置的各种参数介绍
在 STM32 中,ADC 配置涉及多个参数,用于设置 ADC 的工作模式、数据对齐、扫描模式、连续转换模式、间断模式、转换通道数和触发源等。以下是你提到的设置及其各种参数的详细介绍:
① ADC_Mode_Independent(独立模式)
- ADC 工作在独立模式下,每个 ADC 独立工作,互不干扰。。
② Data Alignment(数据对齐方式)
- 右对齐:转换结果存储在数据寄存器的低位(右侧),高位填充 0。
- 左对齐:转换结果存储在数据寄存器的高位(左侧),低位填充 0。
③ Scan Conversion Mode(扫描模式)
- 失能:仅对一个通道进行转换。
- 使能:按顺序对多个通道进行转换。
④ Continuous Conversion Mode(连续转换模式)
- 使能:ADC 在转换完成后自动开始下一次转换,适用于连续数据采集。
- 失能:ADC 在每次转换完成后停止,适用于单次数据采集。
⑤ Discontinuous Conversion Mode(间断模式)
- 使能:每次触发仅进行指定数量的通道转换,然后等待下一个触发信号。
- 失能:在扫描模式下连续转换所有指定通道。
⑥ Enable Regular Conversions(启用常规转换模式)
- 使能:启动常规转换。
- 失能:停止常规转换。
⑦ Number of Conversion(转换通道数)
⑧ External Trigger Conversion Source(外部触发转换源)
-
Regular Conversion launched by software(规则的软件触发,调用函数触发即可)
-
Timer X Capture Compare X event (定时器捕获比较事件触发)
-
Timer X Trigger Out event (定时器触发输出事件触发)
-
软件触发:通过软件命令启动转换,适用于需要灵活控制转换时机的应用。
-
定时器捕获比较事件触发:通过定时器的捕获比较事件启动转换,适用于周期性采样。
-
定时器触发输出事件触发:通过定时器的触发输出事件启动转换,适用于复杂的同步采样需求。
⑨ Rank(转换顺序)
设置多通道转换时的转换顺序。