STM32学习笔记(HAL库)(7)

前 言

本文仅供个人参考记录复习,如有错误或者模糊的地方欢迎指教.

ADC模数转换器是一种电子器件,用于将模拟信号转换为数字信号。在嵌入式系统中,ADC模数转换器主要用于将传感器等模拟信号转化为数字信号,便于在数字处理器中进行分析和处理。
 

ADC模数转换器

在STM32中,ADC通常包含多个通道,每个通道可以读取并转换一个引脚上连续变化的模拟信号成数字变量并存储在内存中。通过配置寄存器,可以设置转换精度、采样时间等参数。ADC模块还支持DMA传输,可以将转换结果直接传输到内存中。且ADC的输入通道分为规则组和注入组,可以根据需求配置。

逐次逼近型ADC

逐次逼近ADC是一种常见的模数转换器。

其包括一个8通道选择开关,由地址锁存和译码来控制通道的选择,这样只需控制开关选择即可实现处理多路信号,而不需要配置多个ADC。通道中接收到的信号会进入电压比较器,电压比较器可以判断两个输入信号电压的大小关系,逐次逼近逻辑将DAC的输出与待转换信号进行比较。根据比较结果,逼近逻辑会将DAC输出调整为更接近待转换信号的值,通过对DAC输入的增减,逐步逼近待转换信号的值。当逼近完成后,逐次逼近逻辑将最终的DAC输出值作为转换结果,并存储到AD数据寄存器中,同时定时和控制模块输出结束信号(EOC)。

DAC电压范围即为ADC电压范围。

ADC基本结构

上图中蓝色代表规则通道,红色代表注入通道。其中规则组最多可以转换16个通道,但是规则寄存器只有一个,即一次只能存一个结果,导致数据覆盖丢失:而虽然注入组只能转换4个通道,不过有4个注入寄存器,所以不会出现数据覆盖问题。

在左下的触发转换部分中,蓝色框起的是规则组的触发源,红色框起的是注入组的触发源。触发源主要是定时器,不过也有外部中断的引脚可以选择配置触发。

 ADC的工作流程

电压信号经16个GPIO口以及两个内部通道进入AD转换器,在收到触发控制后,AD转换器通过逐次逼近的方法将模拟信号转换为对应的数字信号,数据会发送到AD数据寄存器中。这时AD数据寄存器会通过中断输出控制向NVIC申请中断;或是配置看门狗监测结果范围,如果超出阈值便向NVIC申请中断。

AD转换器分为规则组和注入组,在AD数据寄存器中规则组寄存器只有一个而注入组寄存器有4个。AD转换器逐次逼近逻辑由RCC时钟推动。

AD转换步骤

采样

ADC首先对输入的模拟信号进行采样。采样是指在一定的时间间隔内获取并保持模拟信号的值,通常使用采样保持电路来实现。采样的目的是将连续变化的模拟信号转换为离散的采样点,以便进行后续的转换处理。

量化

量化是将采样得到的模拟信号值映射为离散的数字码。ADC通过将连续的模拟信号值映射到一个离散的数值集合中来实现量化。常见的量化方法是使用比特位数进行分级量化,将模拟信号的幅度分成若干个区间,并将每个区间映射为一个数字码。

编码

编码是将量化后的模拟信号值转换为相应的数字编码形式。根据ADC的不同类型,编码可以是直接二进制编码或其他编码形式。编码的目的是将量化后的数值表示为一种特定的数字形式,以便于存储和处理。

转换模式

 单次非扫描转换模式

在单次非扫描转换模式下,ADC只进行一次转换,并且仅转换一个指定的通道。转换开始后,ADC按照设定的通道顺序对一个信号进行采样和转换,然后输出相应的数字结果。这种模式适用于只需要转换一个特定通道的场景,例如单个传感器的数据采集。

 连续非扫描转换模式

连续非扫描转换模式下,ADC进行连续的转换操作,但仅转换一个指定的通道。一旦启动转换命令后,ADC会持续对同一个通道进行采样和转换,然后输出数字结果。这种模式适用于需要连续监测某个信号变化的场景,例如实时监测系统。

单次扫描转换模式

单次扫描转换模式下,ADC进行一次转换,同时转换多个预先设定的通道。转换开始后,ADC按照设定的通道顺序依次对多个信号进行采样和转换,并将每个通道的转换结果存储到相应的寄存器中。这种模式适用于需要同时转换多个通道的场景,例如多路传感器数据采集。

连续扫描转换模式

连续扫描转换模式是连续转换模式的一种扩展,它可以持续地转换多个预先设定的通道。一旦启动转换命令后,ADC会持续按照设定的通道顺序循环执行采样和转换操作,并将每个通道的转换结果存储到相应的寄存器中。这种模式适用于需要连续监测多个信号变化的场景,例如多通道数据采集系统。

触发控制

触发控制分为软件触发和硬件触发:软件触发是通过编程控制ADC模块的开始转换寄存器来启动ADC的转换过程。在这种情况下,ADC模块只有在程序中明确要求才会开始采样和转换;硬件触发是通过外部引脚或外部中断来触发ADC的转换过程。ADC模块可以配置为等待外部触发信号并在接收到触发信号时开始转换。

数据对齐

左对齐

在左对齐方式下,ADC的最高有效位对应于数据字中的最高位,而最低有效位则对应于数据字中的最低位。这意味着转换后的数字数据在数据字中的存储是从高位到低位的顺序。例如,一个12位的ADC转换结果为0x123,则在左对齐方式下,数据字为0x1230。

 右对齐

在右对齐方式下,ADC的最高有效位对应于数据字中的最低位,而最低有效位则对应于数据字中的最高位。这意味着转换后的数字数据在数据字中的存储是从低位到高位的顺序。例如,一个12位的ADC转换结果为0x123,则在右对齐方式下,数据字为0x0123。

数据校准

为了确保其输出准确性和精度,通过对ADC进行修正或调整来消除误差。

寄存器

 ADC状态寄存器(ADC_SR) 

用于存储和读取ADC的状态信息的寄存器。它包含了多个状态位,每个状态位表示了不同的ADC状态。

EOC

表示转换完成的标志位。当一个转换周期完成后,该位将被置位。

AWD

模拟看门狗的触发标志位。当转换结果超过或低于预设的阈值时,该位将被置位。

 OVR

溢出标志位。当转换结果未能及时读取而导致新的转换结果被覆盖时,该位将被置位。

 JEOC

注入通道转换完成的标志位。当注入通道的转换周期完成后,该位将被置位。

JEOC

表示注入通道转换开始的标志位。当注入通道的转换周期开始时,该位将被置位。

ADC控制寄存器(ADC_CR)

用于配置和控制ADC的工作模式和参数。

ADEN:使能ADC模块。

ADDIS:禁用ADC模块。

 ADSTART:启动ADC转换。

JADSTART:启动注入通道的转换。

ADIE:使能ADC中断。

ADC采样时间寄存器(ADC_SMPR)

用于设置ADC的采样时间。采样时间决定了ADC对模拟输入信号进行采样的时长,以保证足够的准确性。该寄存器通常包含多个位字段,每个位字段对应一个通道或组通道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!关于STM32F407HAL库的教学,我可以为您提供一些基本信息和指导。 首先,STM32F407HAL库是针对STMicroelectronics的STM32F407系列微控制器而开发的高级抽象层(HAL)库。它提供了一套易于使用的API,用于配置和控制STM32F407微控制器的各种外设功能。 要开始使用STM32F407HAL库,您需要准备以下工具和资源: 1. STM32F407微控制器开发板:您可以选择使用官方的Discovery开发板或其他兼容的开发板。 2. STM32CubeMX:这是STMicroelectronics提供的一个图形化配置工具,用于生成基本的项目框架和初始化代码。 3. STM32Cube HAL库:这是STM32F407HAL库的核心部分,可以从STMicroelectronics的官方网站上下载。确保选择与您的微控制器型号相对应的版本。 4. 集成开发环境(IDE):您可以选择使用Keil MDK、IAR Embedded Workbench或者STM32CubeIDE等IDE来编写、编译和调试代码。 一旦您准备好了上述工具和资源,您可以按照以下步骤开始使用STM32F407HAL库: 1. 使用STM32CubeMX创建一个新的工程,并选择适当的微控制器型号(例如STM32F407VG)。 2. 在配置选项中选择您需要的外设功能(如GPIO、UART、SPI等)并进行相应的配置。 3. 生成代码并导出到您选择的IDE中。 4. 打开IDE,编写您的应用程序代码,包括初始化和配置外设、处理中断、控制和读取外设等。 5. 编译代码并下载到STM32F407开发板上进行调试和测试。 除了上述步骤,您还可以参考官方的文档、示例代码和教程来学习更多关于STM32F407HAL库的使用方法。STMicroelectronics的官方网站上提供了丰富的资源,包括参考手册、应用笔记和视频教程。 希望这些信息能够帮助您入门STM32F407HAL库学习和使用。如有任何进一步的问题,请随时向我提问!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值