0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

YTM32B1x系列MCU中ADC的使用

CHANBAEK 来源:嵌入式修炼手册 作者: Major Lin 2023-07-24 10:01 次阅读

ADC全称Analog Digital Convertor,中文名称是模拟数字转换器ADC的主要功能是将外界的模拟形式的连续信号转换成易于数字处理的,数字形式的离散信号。目前ADC主要是将外界输入的模拟电压信号经过采样保持和内部量化形成数字信号

YTM32B1Lx系列芯片内置12bit采样率1MSPS的ADC,在YTM32B1Mx系列芯片,内置ADC采样频率最高可以到2MSPS,采样精度同样为12bit,可以满足汽车上大部分的模拟信号转换需求。L和M系列中的ADC主要是采样速率上有一定差异,在使用方式上基本是一致的,所以后续都统一介绍。

SAR ADC的基本原理

YTM MCU内部ADC采用逐次逼近结构的ADC, Successive-approximation register ADC(SAR ADC), 这种结构的ADC总体面积比较小,功耗比较低,非常适合MCU中的应用场合,典型的SAR ADC结构如下:

图片
ADC SAR框图 From White Flye

在图中:

  • DAC (digital-to-analog converter):数字模拟转换器
  • EOC (end of conversion):结束转换
  • SAR (successive approximation register):连续逼近寄存器,用于存放转换的中间结果和最终结果
  • S/H (sample and hold circuit):采样保持电路
  • Comparator :电压比较器,对数字模拟转换器输出的电压与输入电压进行比较
  • VIN :输入电压
  • VREF :参考电压

SAR ADC是通过内部DAC重建一个逐次逼近于采样保持电路的电压,经过比较器之后产生数字结果,由寄存器保存该结果,并生成下个周期需要的重建电压。经过多次比较之后,我们就得到了ADC的转换结果。

实际设计中,为了灵活适应各种应用,ADC的输入级一般会有一个MUX模块,用于实现多通道的时分复用。

ADC模块框图

YTM32 MCU ADC模块包含SAR ADC转换核心、ADC输入通道复用模块(Channel MUX)、转换控制数字逻辑几个部分。ADC模块的系统框图如下:

图片
ADC模块框图

ADC的模拟通道复用模块相当于一个多选一的开关,开关选通之后,对应的外部通道和内部ADC转换核心连接,这个时候就可以对该通道进行转换。ADC有一部分外部通道是直接连到一些内部模块的输入。比如说内部的一些参考电压,温度传感器的电压输出等等。ADC可以通过这些通道,实现对芯片内部模块的一些监测。

SAR ADC的结构特性使得ADC完成采样之后,外部信号的输入就可以和ADC断开。这对于ADC的时间计算是比较重要的。比如当使用ADC做电机控制电流采样的时候,我们只需要保证在ADC采样时间内信号是稳定的,而不用将转换时间考虑在内。实际上当ADC完成采样之后,即使外部信号出现波动或者出现噪声,对ADC的转换也是没有影响的。

ADC的数字控制逻辑,主要实现对ADC的转换控制和结果保存等相关操作。在ADC中我们内置了一个FIFO可以用于缓存ADC的转换结果。ADC转换结果的读取有中断、DMA和轮询等几种方式。ADC内部还有一个Watch Dog模块, 可以实现对某个或者所有通道电压的持续监测,当通道电压超出预定范围之后,ADC会产生一个特殊的中断上报系统。

另外这个ADC还支持通过降低转换精度提高采样率的方式。这个实际上也是SAR ADC的一个特性。YTM32 MCU中ADC支持12bit、10bit、8bit几种转换精度。

ADC转换时间计算

嵌入式应用中一般对ADC的转换时间比较敏感,因为涉及到软件的周期调度,如果ADC不能在给定的时间内转换结束,那么整个系统调度可能会出现问题。

决定ADC转换时间的主要因素有ADC的时钟选择、ADC的时钟分频以及ADC采样精度、采样时间等有关系。

从SAR ADC的结构框图可以看出,ADC需要依赖一个时钟基准,ADC模块支持通过IPC来选择转换的时钟和分频。而ADC内部还有额外的分频,所以ADC的实际工作频率为:

这里计算的时候分频均代表模块实际分频。

ADC每次转换所需要的时钟数量=ADC的转换精度+ADC采样时间+2,比如ADC转换精度为12,采样时间为2个时钟周期,那么总共需要的转换时间为 12 + 2 + 2 = 16 个时钟周期,假如ADC的实际工作频率为16MHz,那么一次转换所需要的时间就是1us,对应的采样速率就是1MSPS。

目前产品手册上标的都是在12bit模式下的最高转换速率,实际上针对应用对采样速率要求比较高,而采样精度要求不高的情况,可以通过降低采样精度方式提高采样率,比如采样精度降低为8,那么一次转换之需要12个时钟周期,这种情况下M系列ADC最高转换速率可以到2.67MSPS,L系列则为1.33MSPS。

注意,这里采样速率只适用于ADC连续转换模式,当ADC工作在单次转换或者单序列转换模式下,ADC的Trigger输入还需要3~5个时钟,ADC 开了auto off功能之后还需要一个Startup时间,所以这些情况下ADC的转换速率都是有一定的下降的。

ADC的工作模式

YTM32 MCU中ADC主要有三种工作模式和两种触发方式:

typedef enum
{
    ADC_CONV_STEP = 0x00U,   /*!< One channel convert per trigger. */
    ADC_CONV_LOOP = 0x01U,   /*!< One loop convert per trigger. */
    ADC_CONV_CONTINUOUS = 0x02U    /*!< Continuous convert per trigger. */
} adc_sequence_mode_t;
  • ADC_CONV_STEP: ADC每次触发转换一个通道,转换结果放在FIFO,并等待下次触发。转换的通道按照Sequence中设定的顺序依次转换。
  • ADC_CONV_LOOP:ADC每次触发转换一个Sequence(序列),序列的最高长度一般是8个通道,转换后将结果依次写入FIFO,并等待下一次触发。转换结果通过读取FIFO获得,数据的顺序和序列中配置好的顺序相同。这种模式是ADC最常用的一种工作方式,一般都是将需要采集的ADC通道配置到序列中,需要转换的时候通过硬件或者软件触发开始转换,转换结果通过中断或者DMA直接读取一个序列的结果。
  • ADC_CONV_CONTINUOUS:连续转换模式,ADC在触发之后,按照Sequence连续转换,Sequence转换结束之后会自动重新开始。当ADC连续转换时候要注意及时从FIFO中将结果读走,当开启WAIT模式之后,如果数据没有及时读走,ADC会等待结果读取再继续转换。

ADC的两种触发方式指的是硬件触发和软件触发:

  • 硬件触发:ADC在某些事件发生的时候开始ADC转换,事件来源可以是PTU和TMU,比如电机控制中,eTMR可以通过TMU模块触发ADC采样。PTU和TMU的触发选择位于CIM模块。
    • PTU触发,仅部分模块支持,PTU可以将一次触发事件分解成多个触发,一般配合ADC_CONV_STEP模式使用,可以精确控制ADC每个通道的转换点。
    • TMU触发,常用的硬件触发方式,每次出发可以转换一个STEP(单个通道)或者一个LOOP(一个序列)。
  • 软件触发:通过写入ADC的START位来开始ADC的转换

注意:配置ADC硬件触发模式的时候,需要先配置好ADC的工作模式并开启ADC之后再配置硬件触发(TMU或PTU)。

ADC的转换时只会按照Sequence中配置好的顺序进行转换,结果读取也必须按照sequence读取,不支持单独开启序列中的某一个通道,或者单独读取序列中某一个通道的转换结果。

ADC使用注意事项

为了更好的使用芯片内部的ADC模块,应用软件操作ADC时应该注意以下事项:

  1. ADC模块本身由VDDA供电,但是ADC的参考电压默认是VREFH/VREFL(可以软件改动为VDDA),所以ADC正常工作的必要条件是VDDA和VREFH/VREFL供电正常,VREFH和VREFL都要正确连接。
  2. ADC工作在连续转换模式时,ADC输出结果要及时通过中断或者DMA读走,否则会出现ADC等待数据读取或者ADC转换结果被覆盖的情况。
  3. ADC的两级分频后的时钟不要超频,也就是ADC转换速率不能高于DS中规定的速率,否则ADC虽然可以继续出转换结果,但是结果会有很大的误差。
  4. ADC模块本身支持在低功耗模式下工作,但是如果应用仅需要ADC在RUN模式工作,则进入低功耗模式之前要关闭ADC,或者打开ADC的auto off功能,并在ADC完成当前转换后再进入低功耗模式。ADC在低功耗模式开启情况下,VDDA上会增加1~2mA的电流
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 传感器
    +关注

    关注

    2548

    文章

    50664

    浏览量

    751893
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16984

    浏览量

    350284
  • 转换器
    +关注

    关注

    27

    文章

    8624

    浏览量

    146856
  • SAR
    SAR
    +关注

    关注

    3

    文章

    412

    浏览量

    45891
  • adc
    adc
    +关注

    关注

    98

    文章

    6430

    浏览量

    544067
收藏 人收藏

    评论

    相关推荐

    YTM32L系列MCU低功耗模式简介

    YTM32L系列MCU是苏州云途半导体针对车身控制领域推出的入门级32位产品,最高主频达48MHz,内嵌128KB Flash和16KB SRAM,MCU内嵌CAN-FD,LIN等丰富
    发表于 07-24 09:52 1419次阅读

    YTM32的模数转换器ADC外设模块详解

    YTM32的ADC转换器外设最多可以集成32个输入通道,最高12b转换精度,最快可以支持2M Sps的12b采样。
    的头像 发表于 10-09 16:35 1801次阅读
    <b class='flag-5'>YTM</b>32的模数转换器<b class='flag-5'>ADC</b>外设模块详解

    MSP430x09x系列 MCU在电动剃须刀的应用

    本文主要介绍了TI 新推出的0.9V 工作电压的MSP430x09x 系列MCU 在真正单电池供电系统的应用。MSP430x09x
    发表于 04-03 14:57 2747次阅读
    MSP430<b class='flag-5'>x09x</b><b class='flag-5'>系列</b> <b class='flag-5'>MCU</b>在电动剃须刀<b class='flag-5'>中</b>的应用

    MSP430x09x系列MCU在电动剃须刀的应用

    MSP430x09x系列MCU在电动剃须刀的应用
    发表于 01-12 22:39 26次下载

    如何在STM32Fx系列和 STM32L1 系列器件获得最好的ADC精度

    如何在STM32Fx系列和 STM32L1 系列器件获得最好的ADC精度(核达中远通电源技术股份有限公司)-如何在STM32Fx
    发表于 08-04 16:42 8次下载
    如何在STM32Fx<b class='flag-5'>系列</b>和 STM32L<b class='flag-5'>1</b> <b class='flag-5'>系列</b>器件<b class='flag-5'>中</b>获得最好的<b class='flag-5'>ADC</b>精度

    MPC82系列MCUADC(模数转换)采样代码

    MPC82系列MCUADC(模数转换)采样代码文件下载
    发表于 07-01 10:32 0次下载
    MPC82<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的<b class='flag-5'>ADC</b>(模数转换)采样代码

    AN4435_基于STM32系列MCU实现UL_CSA_IEC60730_1_60335-1_Class_B安全规范的设计指南

    AN4435_基于STM32系列MCU实现UL_CSA_IEC60730_1_60335-1_Class_B安全规范的设计指南
    发表于 11-21 17:07 1次下载
    AN4435_基于STM32<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>实现UL_CSA_IEC60730_<b class='flag-5'>1_60335-1_Class_B</b>安全规范的设计指南

    AN4435_基于STM32系列MCU实现UL_CSA_IEC60730-1_60335-1_Class_B安全规范的设计指南

    AN4435_基于STM32系列MCU实现UL_CSA_IEC60730-1_60335-1_Class_B安全规范的设计指南
    发表于 11-21 17:07 2次下载
    AN4435_基于STM32<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>实现UL_CSA_IEC60730-<b class='flag-5'>1_60335-1_Class_B</b>安全规范的设计指南

    DS13315_Arm® Cortex®-M7 32b 550 MHz MCU, 128 KB 闪存, 564 KB RAM, 以太网, USB, 3xFD-CAN, 显卡, 2x16b ADC, 加密/哈希

    DS13315_Arm® Cortex®-M7 32b 550 MHz MCU, 128 KB 闪存, 564 KB RAM, 以太网, USB, 3xFD-CAN, 显卡, 2x16b AD
    发表于 11-23 08:30 0次下载
    DS13315_Arm® Cortex®-M7 32<b class='flag-5'>b</b> 550 MHz <b class='flag-5'>MCU</b>, 128 KB 闪存, 564 KB RAM, 以太网, USB, 3xFD-CAN, 显卡, 2<b class='flag-5'>x16b</b> <b class='flag-5'>ADC</b>, 加密/哈希

    DS13312_Arm® Cortex®-M7 32 位 550 MHz MCU1 MB 闪存, 564 KB RAM, 以太网, USB, 3x FD-CAN, 显卡, 2x1 6 位 ADC, 加密/哈希

    DS13312_Arm® Cortex®-M7 32 位 550 MHz MCU1 MB 闪存, 564 KB RAM, 以太网, USB, 3x FD-CAN, 显卡, 2x1
    发表于 11-23 08:30 0次下载
    DS13312_Arm® Cortex®-M7 32 位 550 MHz <b class='flag-5'>MCU</b>, <b class='flag-5'>1</b> MB 闪存, 564 KB RAM, 以太网, USB, 3<b class='flag-5'>x</b> FD-CAN, 显卡, 2<b class='flag-5'>x1</b> 6 位 <b class='flag-5'>ADC</b>, 加密/哈希

    微CMS80F231x系列 增强型1T 8051 Flash MCU

    应用领域:   CMS80F231x系列MCU,增强型1T 8051 Flash MCU,最快支持48MHz外设运行,24MHz内核运行,被
    发表于 05-11 11:10 513次阅读

    云途正式发布量产版本AUTOSAR MCAL驱动软件和配置工具

    云途MCAL软件包RTM v1.1.0包含了YTM32B1ME05 和YTM32B1MD1两个系列车规MCU的片上外设模块的驱动程序代码和MCAL驱动模块所需的相应桩模块(stub m
    的头像 发表于 07-19 15:29 2544次阅读
    云途正式发布量产版本AUTOSAR MCAL驱动软件和配置工具

    YTM32B1ME0系列MCU时钟模块介绍

    YTM32 M系列芯片基于32位车规级ARM Cortex-M33内核,CPU全温域主频高达120MHz,提供1.25MB嵌入式闪存,符合ISO26262的ASIL-B等级要求,可靠性
    发表于 07-24 09:55 1900次阅读
    <b class='flag-5'>YTM32B1</b>ME0<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>时钟模块介绍

    HPM系列MCU 高精度ADC之误差分析和设计指南

    电子发烧友网站提供《HPM系列MCU 高精度ADC之误差分析和设计指南.pdf》资料免费下载
    发表于 09-19 15:45 10次下载
    HPM<b class='flag-5'>系列</b><b class='flag-5'>MCU</b> 高精度<b class='flag-5'>ADC</b>之误差分析和设计指南

    如何使用RA MCUADC窗口比较功能

    如何使用RA MCUADC窗口比较功能
    的头像 发表于 04-12 08:06 312次阅读
    如何使用RA <b class='flag-5'>MCU</b><b class='flag-5'>中</b><b class='flag-5'>ADC</b>窗口比较功能