【复旦微FM33 MCU 开发指南】ADC

前言

本系列基于复旦微FM33LC0系列单片机的DataSheet编写,旨在提供手册解析和开发指南。
本文章及本系列其他文章将持续更新,本系列其它文章请跳转【复旦微FM33 MCU 外设开发指南】总集篇

本文章最后更新日期:2024/11/09
全文字数:≈7000;阅读时间≈5min

如有问题、或有想看的其他内容,可以在评论区提出,看到会回复、优先编写想看的内容。

文章目录

  • 前言
  • 1 概述
  • 2 输入通道
    • 2.1 外部通道
    • 2.2 内部通道
      • 2.2.1 PTAT(芯片温度测量)
      • 2.2.2 VREFINT(内部基准源测量)
      • 2.2.3 OPA(运算放大器)
    • 2.3 采样通道的寄存器配置
  • 3 转换模式及数据读取
    • 3.1 转换模式
      • 3.1.1 单次转换
      • 3.1.2 连续转换
      • 3.1.3 外部信号触发
    • 3.2 数据读取
      • 3.2.1 通过寄存器直接读取
      • 3.2.2 通过DMA搬运数据
  • 4 转换时间
    • 4.1 采样保持时间
      • 4.1.1 ADC采样原理
      • 4.1.2 什么是采样保持时间
      • 4.1.3 怎么确定采样保持时间
      • 4.1.4 采样保持时间计算示例
      • 4.1.5 采样保持时间寄存器配置
    • 3.2 ADC转换时间
    • 3.3 通道切换时间
    • 3.4 DMA搬运时间
  • 5 采样率
    • 5.1 计算方法
    • 5.2 过采样
  • 6 采样值和真实值的转换

1 概述

SAR ADC

VREF引脚接入的电源

2 输入通道

FM33LC0支持16个采样通道,其中12个外部通道和4个内部通道。

2.1 外部通道

在这里插入图片描述
12个外部通道分8个快速通道和4个慢速通道,测量外部引脚输入的模拟信号。
快速通道和慢速通道在使用上没有区别,但慢速通道会更影响采样率的计算,具体在下一节讲解。

2.2 内部通道

在这里插入图片描述
4个内部通道不需要占用引脚,而且都为慢速通道。

2.2.1 PTAT(芯片温度测量)

用于测量芯片温度。内部温度传感器实测精度并不太高,可能有5℃的偏差。

众所周知,模拟器件的特性基本都是温度的曲线,因此内部温度传感器一般用于对一些模拟器件进行温度补偿,在该应用场景下对温度传感器的精度要求并不高。像RTC的温补,时钟源RCHF和RCMF的温补都可以用内部温度传感器完成。

有关温度传感器的进一步说明可以在芯片手册32.4.2 温度传感器章节中进一步了解。

下图列出了温度传感器出厂定标值的Flash地址、模拟参数。
使用内部通道采集PTAT时得到的是个电压值,用这个电压值和出厂时的定标值进行比较和换算,就可以转换为芯片温度。

在这里插入图片描述

在这里插入图片描述

2.2.2 VREFINT(内部基准源测量)

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/158d0afb51254482a7ee83ff23af97aa.png
在这里插入图片描述
内部基准源的ADC采集主要用于采样值和真实电压值的转换,进一步说明请见本文第四章。

2.2.3 OPA(运算放大器)

FM33LC0内置两个运算放大器,ADC可以通过内部通道采集运算放大器的输出。

2.3 采样通道的寄存器配置

通过配置ADC->CHER寄存器,可以使能需要的ADC通道。
在这里插入图片描述在这里插入图片描述

3 转换模式及数据读取

3.1 转换模式

3.1.1 单次转换

在这里插入图片描述
全自动触发模式:
触发一次采集所有通道,每采集完一个通道会产生一个EOC中断;等所有通道都采集完成会产生一个EOS中断。
半自动触发模式:
触发一次只采集一个通道,采集完成后产生一个EOC中断;当所有通道都被采集完成后,产生EOS中断。

可通过ADC->CR寄存器开始单次转换。
在这里插入图片描述

3.1.2 连续转换

在这里插入图片描述

采样顺序可以在ADC->CFGR寄存器选择。
在这里插入图片描述

3.1.3 外部信号触发

FM33LC0支持使用外部信号触发连续采样,不支持外部信号触发单次采样
(也就是说,一旦触发就无法停止,除非手动关闭ADC)

触发源可以在ADC->CFGR寄存器选择。
在这里插入图片描述

3.2 数据读取

3.2.1 通过寄存器直接读取

可以直接通过ADC->DR寄存器读取转换数据。
在这里插入图片描述

3.2.2 通过DMA搬运数据

在这里插入图片描述
在ADC使用DMA时,通过ADC->CFGR寄存器配置开启DMA。
在这里插入图片描述
在ADC使用DMA时,必须开启等待模式,即在ADC->CFGR寄存器中配置WAIT=1。
在这里插入图片描述
在ADC使用DMA时,在打开ADC后,应该写ADC->CR寄存器的START位开始第一次触发。

4 转换时间

这里的转换时间指的是:ADC外设的一个通道,从其开始采样,到得到ADC数据的时间。

如果使用时钟数来表示转换时间:
单通道ADC转换时钟数 = 采样保持时钟数 + ADC转换时钟数+通道切换时钟数 + DMA搬运时钟数
可以将时钟数换算为时间(us):
单通道ADC转换时间(us)= 单通道ADC转换时钟数 / ADC工作时钟(MHz)

可以由用户决定的只有采样保持时间,因此对该部分展开讲解。

4.1 采样保持时间

4.1.1 ADC采样原理

在继续下面的内容前,需要大概了解一下ADC采样原理。
(我硬件不是很专业,可能表述有误,主要是为了理解概念)
在这里插入图片描述
**这张图只了解以下三个部分就可以了:**左边红框是信号源,即ADC要采集的信号;右边绿色是ADC内部的采样电容;蓝色是一个开关(在ADC内部,为了理解我自己画上去的)

首先要知道,我们要采集的信号是一个连续的模拟信号,但ADC的转换结果是一个采样的过程,即在时间上是不连续的。

对一个通道的一次转换过程可以简化为以下步骤:

  1. 蓝色开关闭合,外面的信号为采样电容充电。
  2. 充电会持续由软件设定的采样保持时间的时长。
  3. 蓝色开关断开,由ADC采集采样电容的电压,并得到转换结果。

每经过上面三个步骤,ADC就会得到一个转换值。
重复这个过程,就能得到若干个采样值,从而还原信号源真实波形(如果采样率足够的话)

4.1.2 什么是采样保持时间

采样保持时间其实就是给ADC内部电容充电的时间。既然是充电,那么其电压值就是由小变大的。
如果采样保持时间足够长:采样电容充满电(即其电压和外部信号此刻的电压相同)后断开蓝色开关,并开始ADC转换,其转换得到的数据就是相对准确的。
如果采样保持时间不够:采样电容还没有充满电(即其电压低于和外部信号此刻的电压)就断开蓝色开关,并开始ADC转换,其转换得到的数据是偏低的。

4.1.3 怎么确定采样保持时间

DataSheet上写明:ADC输入信号采样时间最小值由被采样的模拟信号源内阻、信号输入通道阻抗、引脚寄生电容、采样电容共同决定。(其实变量只有被采样的模拟信号源内阻,就是上图的 R A I N R_{AIN} RAIN

模拟信号源内阻我觉得可以理解为信号源的驱动能力:信号源的驱动能力强,可以在特别短的时间就将电容充满电(和此刻信号的电压值相同),因此需要的采样保持时间就短。反之,信号源驱动能力弱,需要更长的时间将电容充到希望的电压值,就需要更长的采样保持时间。

采样信号的保持时间DataSheet给出了计算公式:
在这里插入图片描述

变量名名称
n n n有效位数 n = 12 n=12 n=12
S A SA SA表示采样电容上的电压建立到被采样信号电平的误差(LSB) S A = 0.25 SA=0.25 SA=0.25
R A I N R_{AIN} RAIN被采样信号源内阻(kΩ)非常量
R A D C R_{ADC} RADCADC输入通道阻抗(kΩ)查表
R I O R_{IO} RIO引脚输入阻抗(kΩ) R I O = 0.1 R_{IO}=0.1 RIO=0.1
C A D C C_{ADC} CADCADC采样电容容值(pF) C A D C = 12.8 C_{ADC}=12.8 CADC=12.8

其中, R A D C R_{ADC} RADC的值可以通过下表查得:
在这里插入图片描述

4.1.4 采样保持时间计算示例

DataSheet上有采样保持时间的计算示例:
在这里插入图片描述
虽然他写了,但第一次算的话也不知道他用哪个数据算的,因此我用第一个例子算一下:

  1. 首先要确定 R A D C R_{ADC} RADC,提到25℃、3.3V的VDDA、使用的快速通道,对应上面的表,其实是下图红框里这俩阻值,要得到他的结果,要用右边的值(即最大值),转换单位为kΩ, R A D C = 0.72 k Ω R_{ADC}=0.72kΩ RADC=0.72kΩ
    2. 在这里插入图片描述
  2. 信号源内阻 R A I N R_{AIN} RAIN已给出, R A I N = 1 k Ω R_{AIN}=1kΩ RAIN=1kΩ
  3. 代入公式 T s a m p = l n ( 2 12 / 0.25 ) ∗ ( 1 + 0.72 + 0.1 ) ∗ 12.8 = 226.065 n s T_{samp} = ln(2^{12}/0.25)*(1+0.72+0.1)*12.8=226.065ns Tsamp=ln(212/0.25)(1+0.72+0.1)12.8=226.065ns
  4. 如果ADC的工作时钟是16Mhz,那1个时钟对应62.5ns。因此,将采样保持时间设置为4个时钟,实际为241ns,超过226.065ns,是满足要求的。

4.1.5 采样保持时间寄存器配置

通过ADC->SMCR寄存器配置SMTS1SMTS2
在这里插入图片描述在这里插入图片描述

3.2 ADC转换时间

固定为12clk。

3.3 通道切换时间

至于ADC->SMCR寄存器中的CHCG,即采样通道切换等待时间,实测对通道切换时间没有影响。
(可能是测试方法问题,如有需要可以自行测试一下看看)

3.4 DMA搬运时间

手册上未写,但实测当使用DMA将ADC外设的数据搬运到RAM中时,每个通道需要额外一个时钟。
(可能是测试方法问题,如有需要可以自行测试一下看看)

5 采样率

5.1 计算方法

在前面的章节中,已经得到了单个通道在进行AD转换时所需要的时钟数。
所有快速通道需要的时钟数是一样的,所有慢速通道AD转换需要的时钟数也是一样的
(每个通道不能分别配置采样保持时间)
并且,因为所有通道是连续转换的,因此无论是快速通道还是慢速通道,他们的采样率是一样的。

目前已知:单个快速通道在一次AD转换中需要的时钟数、单个慢速通道在一次AD转换中需要的时钟数、ADC的工作时钟
则所有通道的采样率可以用下式来计算:

采样率 = A D C 工作时钟 / (快速通道转换时钟数 ∗ 快速通道数量 + 慢速通道转换时钟数 ∗ 快速通道数量) 采样率=ADC工作时钟/(快速通道转换时钟数 * 快速通道数量+慢速通道转换时钟数 * 快速通道数量) 采样率=ADC工作时钟/(快速通道转换时钟数快速通道数量+慢速通道转换时钟数快速通道数量)

5.2 过采样

在这里插入图片描述
过采样可通过ADC->CFGR寄存器配置。
在这里插入图片描述在这里插入图片描述
当使能过采样后,ADC的采样率将会按照设置的过采样率分频。

6 采样值和真实值的转换

在这里插入图片描述
上图的意思其实就是ADC的转换值取决于VDDA的电压值。
当没有使能过采样或硬件平均时,ADC的转换结果为12bit,最大值为4096。当采集一个大于或等于VDDA的电压时,得到的转换值为4096;当采集一个0V或低于0V的电压时,得到的转换值为0。

在一般情况下,VDDA是已知且稳定准确的,那么根据上述比例关系,可以根据采样值得到真实电压值。

但如果VDDA是波动的,或在一些对采样精度要求很严格的应用场合下,我们应该知道当前的VDDA是多少,以得到准确的比例关系。这种时候就要同时采集内部VREFINT通道,换算出当前VDDA的真实电压值,进而得知被采集信号的真实电压值。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/9407.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习—是否有路通向AGI(通用人工智能)

AI包含两个非常不同的东西,一个是ANI,代表人工狭义智能,这是一个人工智能系统,只做一件事,狭隘的任务,可能非常有价值,比如智能音箱或者网络搜索或AI应用于特定应用。例如,过去几年的…

2.4w字 —TS入门教程

目录 1. 什么是TS 2. TS基本使用 3 TS基础语法 3.1 基础类型约束 3.11 string,number,boolean, null和undefined 3.12 any 3.13 unknown 3.14 void 3.15 数组 3.16 对象 3.2 函数的约束 3.21 普通写法 3.22 函数表达式 3.22 可选…

深度学习注意力机制类型总结pytorch实现代码

一、注意力机制的基本原理 在深度学习中,注意力机制(Attention Mechanism)已经成为一种重要的技术。意力机制通过动态调整模型的注意力权重,来突出重要信息,忽略不重要的信息,大大提高了模型的效果 注意力…

数据库SQLite的使用

SQLite是一个C语言库,实现了一个小型、快速、独立、高可靠性、功能齐全的SQL数据库引擎。SQLite文件格式稳定、跨平台且向后兼容。SQLite源代码属于公共领域(public-domain),任何人都可以免费将其用于任何目的。源码地址:https://github.com/…

基于java宠物医院管理系统的设计与实现

一、环境信息 开发语言:JAVA JDK版本:JDK8及以上 数据库:MySql5.6及以上 Maven版本:任意版本 操作系统:Windows、macOS 开发工具:Idea、Eclipse、MyEclipse 开发框架:SpringbootHtmljQueryMysql…

米家护眼灯和孩视宝哪个好?书客、米家、孩视宝巨头测评大PK!

米家护眼灯和孩视宝哪个好?从护眼照明市场发展趋势可以知道,如今热度越来越高,品牌越来越丰富,增加了用户的选择难度。而且有些劣质产品由于生产过程中没有任何技术参数调校,选料和做工方面低劣,照明过程中…

L1G2000作业

1、MindSearch 2、书生浦语 3、书生万象

海思3559 网口 delay值配置

问题 我们研发了一个自动配置 phy delay的脚本,里面采用了shell 数组,以及ethtool等工具。 但是海思SDK默认的文件系统没有这些工具,并且sh 不支持shell 数组,只有bash支持。 因而我们需要编译相关工具,此处记录编译…

如何去除图片水印?快来试试这4种图片去水印方法!

去除图片水印是一项普遍存在的图像处理需求,它旨在消除水印对图片视觉效果的干扰,让我们能够更自由、更美观、更专业地使用图片资源。接下来,我们将介绍四种有效的去除图片水印的方法和工具,它们各自具有独特的优势和适用场景。 方…

2024双十一有什么是宝妈们值得入手的?双十一母婴必买清单

随着双十一购物狂欢节的临近,宝妈们纷纷开始筹备为家庭增添新的宝贝。作为一年一度的大型促销活动,双十一不仅提供了各种优惠,更是宝妈们囤货的好时机。2024双十一有什么是宝妈们值得入手的?在这个特殊的日子里,母婴产…

快速上手Cellranger

Cell Ranger Cell Ranger是用于10x单细胞转录组数据处理一套Linux工具集,包含数据比对,生成表达矩阵,聚类分析和图形可视化等多个功能。一般用cell ranger进行上游分析。 官网:https://www.10xgenomics.com/support/software/cel…

VMware Fusion和centos 8的安装

资源 本文用到的文件:centos8镜像 , VMware 软件包 , Termius 文件链接: https://pan.baidu.com/s/1kOES_ZJ8NGN-BnJl6NC7Sg?pwd63ct 安装虚拟机 先 安装 vmware ,然后打开,将下载的 iso 镜像拖入 拖入镜像文件iso Continue, 然后随便选…

PL端:LED闪烁

实验环境 vivado2024.1 实验任务 LED闪烁 引脚关系 硬件配置 新建一个vivado实验 创建 Verilog HDL 文件点亮 LED 点击 Project Manager 下的 Add Sources 图标(或者使用快捷键 AltA) 编辑led.v module led(input sys_clk,input rst_n,outp…

Pytorch学习--神经网络--损失函数与反向传播

一、对于损失函数的理解 计算实际输出和目标之间的差距为我们更新输出提供一定的依据 二、头文件 nn.L1Loss 大概含义: 代码: import torch from torch.nn import L1Lossoutput torch.tensor([1,2,3],dtypefloat) target torch.tensor([1,2,5],dt…

多功能声学气膜馆:打造移动歌剧院新体验—轻空间

在广场、公园,甚至是郊野之间,多功能声学气膜馆为歌剧表演带来了全新的移动体验。作为高品质演出场馆,它不仅具备卓越的声学效果,还拥有灵活的搭建与拆卸能力,使艺术表演不再受限于固定的场地,让更多人得以…

构建智能防线 灵途科技光电感知助力轨交全向安全防护

10月27日,在南京南站至紫金山东站间的高铁联络线上,一头野猪侵入轨道,与D5515次列车相撞,导致设备故障停车。 事故不仅造成南京南站部分列车晚点,还在故障排查过程中导致随车机械师因被邻线限速通过的列车碰撞而不幸身…

DMX配置文件生成工具使用举例

最新软件版本: MaintainTool-v0.0.1-20241107. 如所用软件低于该版本,本文档描述可能有所差异,请索取最新版本软件再阅读本文档. (软件右上角处查看软件版本) 一、基础知识 这里结合一个示例工程来进行说明. 所用灯带: 使用两种型号的线条灯, XT1(一米八段,即8个…

kafka安装部署--详细教程

2.1 安装部署 每次进入 linux 都会自动进入 base 环境,如何关闭 base conda deactivate 手动关闭 conda config --set auto_activate_base false 关闭自动进入 2.1.1 集群规划 bigdata01 bigdata02 bigdata03 zk zk zk kafka kafka kafka 2.1.2 集群部…

工具进阶:如何利用 MAT 找到问题发生的根本原因

深入浅出 Java 虚拟机 作者: 李国 我们知道,在存储用户输入的密码时,会使用一些 hash 算法对密码进行加工,比如 SHA-1。这些信息同样不允许在日志输出里出现,必须做脱敏处理,但是对于一个拥有系统权限的攻击…

当AI遇上时尚:未来的衣橱会由机器人来打理吗?

内容概要 在当今这个快速发展的时代,人工智能与时尚的结合正在逐渐改写我们对衣橱管理的认知。传统的衣橱管理常常面临着空间不足、穿搭单调及库存过多等挑战,许多人在挑选服饰时难以做出决策。然而,随着技术的进步,智能推荐和自…