【ARM课】7-ADC

1.cubemx设置

参考文章

【STM32】HAL库——ADC

时钟设置

高速时钟配置
在这里插入图片描述

将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=2n1D×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)×(2n1)

例如,假设 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)×(2121)=0.5×40952047

这意味着输入电压 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(转换顺序)

设置多通道转换时的转换顺序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值