MSPM0GXX单片机内部比较器深度解析

目录

  • 0 前言
  • 1 简介
    • 1.1单片机简介
    • 1.2 比较器简介
  • 2 比较器运行原理
    • 2.1 比较器配置
    • 2.2 比较器通道选择
    • 2.3 比较器输出
    • 2.4 输出滤波器
    • 2.5 采样输出模式
    • 2.6 消隐模式
    • 2.7 基准电压发生器
    • 2.8 窗口比较器模式
    • 2.9 比较器滞后
  • 3 比较器的优势

0 前言

本文仅以TI公司生产的MSPM0GXX单片机为例,对其内部比较器的作用,使用场景,原理进行分析和讲解,更多细节请参考数据手册 MSPM0 G 系列 80MHz 微控制器。

1 简介

1.1单片机简介

MSPM0 G 系列 MCU (MSPM0Gxx) 将 32 位计算性能与精密模拟相结合, 可支持各种传感、接口、控制和辅助控制应用。 该器件架构通过一个灵活且易于配置的电源管理和时钟系统支持高性能应用和低功耗应用。
MSPM0 G 系列器件还通过受 ECC 保护的闪存、奇偶校验保护的 SRAM、可用的双窗口看门狗计时器提供增强的稳健性, 并支持 125°C 环境温度和 AEC-Q100 1级认证。

1.2 比较器简介

比较器模块 (COMP) 是具有通用比较器功能的模拟电压比较器。
比较器模块可用于电源电压监控外部模拟信号监控

比较器的特性包括:
快速和超低功耗工作模式
• 反向和非反向引脚输入复用器
• 反相和同相端子短路和交换功能
• 用于比较器输出并可通过软件选择的模拟滤波器
可编程迟滞
来自内部电压基准 VDD 或来自外部基准引脚的基准电压
可配置基准电压发生器, 来自具有两个输入代码的集成式 8 位 DAC
• 输出连接到事件系统
窗口比较器模式
• 支持低功耗运行的中断驱动测量系统

下面是比较器的块图
在这里插入图片描述
稍微懂点模电或者数电知识,这个图应该不难看懂。简单来说,就是一个可通过软件来配置的比较器电路,需要比较的两个电压信号(通常为模拟信号)都是可以通过两个多路选择器进行选择的,比较器的输出会触发中断,或者直接输出。

2 比较器运行原理

2.1 比较器配置

可以使用 COMPx.CTL1 寄存器中的 MODE 位将比较器配置为快速或超低功耗模式。 MODE 位的默认值为 0, 可将比较器配置为快速模式。当 MODE 位设置为 1 时, 比较器配置为超低功耗模式。在快速模式下, 比较器消耗的电流较高, 但响应时间较短。在超低功耗模式下, 比较器消耗非常低的电流, 但响应时间较慢。

比较器的时钟控制由系统控制器 (SYSCTL) 管理, SYSCTL 知道比较器模块是否被启用,还知道它是处于超低功耗模式还是快速模式。用户需要确保为不同的比较器工作模式选择正确的总线时钟:
• 对于超低功耗模式比较器, 总线时钟可以是 LFCLK任何高速时钟
• 对于快速模式比较器, 总线时钟不能是 LFCLK, 如果在快速模式下使能比较器并且总线时钟是 LFCLK, 系统
将在 SYSCTL 中产生时钟错误中断。

补充:LFCLK是单片机内部的一种慢速时钟,该系列单片机的系统时钟分成以下几种:

MCLK: PD1 外设和 PD1 总线的主系统时钟
CPUCLK: CPU 时钟, 源自 MCLK
ULPCLK: PD0 外设和 PD0 总线的主系统时钟, 源自 MCLK
MFCLK: 固定 4MHz 时钟, 与 MCLK/ULPCLK 同步
MFPCLK: 4MHz 固定时钟
LFCLK: 固定 32kHz 时钟, 与 MCLK/ULPCLK 同步
HFCLK: 高频外部时钟
HSCLK: 供 MCLK 使用的高速可配置时钟, 来自 SYSPLL 或 HFCLK

2.2 比较器通道选择

相对而言,该系列的比较器可供选择的通道还是非常丰富的。
在这里插入图片描述
上图是内部比较器整体块图的局部,可以看到,比较器的输入选择还是丰富多样的,包括:

  1. 外部输出通道(最常用)
  2. 内部独立DAC
  3. 内部运算放大器
  4. 单片机内部的其他比较器(可以通过这种方式将两个比较器组合,构成窗口比较器)
  5. 模块专用的DAC(常用,后面会专门介绍)

相对来说,窗口比较器是稍微复杂的,下文会有专门的章节进行介绍。

2.3 比较器输出

在这里插入图片描述

从上图可以看出,比较器的输出共有3个去向:

  1. 输出到事件Fabric(这个不好翻译😆),可以触发相应的中断
  2. 到采样输出(后面会有专门章节进行介绍)
  3. 到外部引脚
  4. 到其他比较器的输入(图中的3号输出)

2.4 输出滤波器

输出滤波器应该在这个地方:
在这里插入图片描述
这个也很容易看懂,可以通过软件配置FLTEN,来选择用或者不用滤波器。可以使用 COMPx.CTL1 寄存器中的 FLTDLY 位通过四个不同的数值调整滤波器的延迟。如下表所示:
在这里插入图片描述
当然,具体采用什么滤波器不好说,有可能是简单的RC滤波器,也有可能是其他类型的滤波器。
另外,输出滤波只能在比较器处于快速模式时采用。
如果输入端子上的电压差很小, 则比较器输出会振荡( 请参阅下图) 。内部和外部的寄生效应以及信号线、电源线和系统其他器件之上及之间产生的交叉耦合会导致这种行为。比较器输出振荡会降低比较结果的精度和分辨率。选择输出滤波器可以减少与比较器振荡相关的误差。
在这里插入图片描述

2.5 采样输出模式

采样模式是比较器的一种操作方法, 它比较离散时间间隔或样本的输入信号, 生成仅在采样点处变化的输出信
号。 CTL2 寄存器中的 SAMPMODE 位启用或禁用采样模式。

为了定义采样窗口, 计时器会生成 EVT0 和 EVT1 两个事件。通过使用这些事件, 采样窗口可以与噪声较小的相
位对齐。 EVT0 设置采样窗口, 而 EVT1 将其清除。

在采样模式下, 比较器的输出仅在采样窗口为高电平时被捕获, 其他时间不捕获输出。捕获的输出用于中断和事件生成。

通过使用采样模式, 比较器可以降低输入信号中噪声的影响, 从而实现更加准确可靠的比较。使用 EVT0 和 EVT1定义采样窗口可以更灵活地将窗口与输入信号噪声最小的相位对齐, 从而进一步提高比较的准确性。

2.6 消隐模式

由于噪声或其他干扰, 输入信号可能会在阈值电压附近波动, 从而导致输出快速且不稳定地切换。这可能导致误触发。比较器消隐模式在输入信号超过阈值电压的时间和输出改变状态的时间之间引入了短暂的延迟。寄存器 CTL2 中的控制位 BLANKSRC 可用于配置禁用或者哪个源应该在消隐模式下工作。可参阅器件的数据表, 了解支持的特定消隐源。

在参考的技术手册中并未查到具体的消隐源,应该可以在其他文档中查到。

个人以为,消隐模式也是为了减小抖动,或许输出滤波器也可以达到同样目的。

2.7 基准电压发生器

比较器基准电压发生器包含一个 8 位 DAC 以及一些配置选项。COMPx.CTL2 寄存器中的 REFSRC 位用于选择比较器的基准源。
在这里插入图片描述
• 当 REFSRC = 0 时,将禁用基准电压发生器,不能将基准电压发生器用于运行比较器。
• 当 REFSRC = 1 时,将选择模拟电源 VDDA 作为 DAC 的基准输入,而 DAC 输出将用作比较器的基准电压。
• 当 REFSRC = 2 时,将选择内部基准模块输出的 VREF 作为 DAC 的基准输入, 而 DAC 输出将用作比较器的基准电压。
• 当 REFSRC = 3 时,内部基准模块输出的 VREF 将直接用作比较器的基准电压, 并且 DAC 关闭。

这个设计还是比较有意思的,我们举个例子,看一下信号的基本通路。就看一下 REFSRC = 3时候的情况,这个时候,DAC就没有效果了,直接将Vref送到了比较器的输入端。如下图所示:
在这里插入图片描述
既然是DAC,那我们如何给DAC输入数字量呢?
从图中也可以看出,有两个数字量的输入通道,DACCODE0DACCODE1,或者说,这两个寄存器的值就是输入的数字量,在代码中进行配置即可。

这两个通道的选择也比较方便,先给DACCTL1,这个时候就可以通过给DACSW赋值来选择具体的通道。

还有个小玩意没讲,就是REFMODE ,COMPx.CTL2 寄存器中的 REFMODE 位决定了比较器请求在快速模式还是超低功耗模式下运行内部VREF,并确定 8 位 DAC 的工作模式。

  • 如果 REFMODE 位为 0, 则会请求内部 VREF 在快速模式下运行, 并且比较器中的 8 位 DAC 也会配置为快速模式。
  • 如果 REFMODE 位为 1, 则会请求内部 VREF 在超低功耗模式下运行,并且比较器中的 8 位 DAC 也配置为超低功耗模式。

最最重要的,是DACCODEX的数值与DAC输出电压的具体关系(这个很基础):
输出电压Vout=基准电压Vref x DACCODEX / 256
(根据手册:DACCODEX为0的时候,当1来计算)

2.8 窗口比较器模式

窗口比较器,顾名思义,就是在一个“窗口”范围内才会触发比较器的输出,窗口比较器同时配置了触发的上下限两个阈值。

单片机中的这个窗口比较器和我们学过的不太一样,先看看我们上学时候的窗口比较器。
在这里插入图片描述
稍做分析,就可以得出UIUO之间的关系,如上图所示。我们可以分成三种情况讨论,分别是:

  1. UA < UI 此时输出电压信号UO为高电平
  2. UB < UI < UA 此时输出电压信号UO为低电平
  3. UI < UB 此时输出电压信号UO为高电平

而单片机中的这个窗口比较器就比较别致😏。将单片机中了两个比较器进行组合,可以构成一个窗口比较器(每个单片机中的比较器数量要根据具体型号而定)。
在这里插入图片描述
手册中还非常贴心地给了我们配置方法:

可以通过设置 COMPx.CTL1 寄存器中的 WINCOMPEN 位来启用窗口比较器模式。
• 将 COMP0.CTL0 寄存器中的 IPSEL 位配置为相应的输入信号引脚。
• 将 COMP0.CTL1 寄存器中的 WINCOMPEN 位设置为1
• 清除 COMP1.CTL1 寄存器中的 WINCOMPEN 位。
• 将 COMP1.CTL0 寄存器中的 IPSEL 位配置为 0x07, 选择 COMP0 正极端子作为输入。
不仅如此,还顺便给了我们信号的通路示意图::
我们可以据此推断出输入信号与输出信号的关系:
在这里插入图片描述
可以发现,我们的输入输出关系正好与我们以前熟悉的窗口比较器相反😆( Uout为高电平时的具体电压值与实际电路设计有关,不一定是UDD)。

2.9 比较器滞后

该比较器支持针对快速和超低功耗模式的可编程迟滞电压, 以避免在输入信号出现噪声时发生杂散输出转换。当Compx.CTL1 寄存器中的 HYST 位为 0 时, 比较器不会产生迟滞。为 123 分别生成10mV20mV30mV 典型迟滞电压。

关于迟滞电压构成的迟滞比较器,也是数字电子中的基础支持。我们简单举个例子。
假设我们配置了一个这样的迟滞比较器(如下图所示):
我们用比较器模块内部的DAC配置了1.65V的输出电压,比较器的另一个输入比较输入来自外部引脚。然后将迟滞电压设置为10mV,这个时候,我们的引脚输入电压和输出电压是什么样的关系呢?
在这里插入图片描述
经过简单分析,我们可以画出下面的图:
在这里插入图片描述

  • 当需要触发Uout上升沿的时候,因为滞回特性,需要的的输入电压为1.65+0.01=1.66V电压。
  • 当需要触发Uout下降沿的时候,因为滞回特性,需要的的输入电压为1.65-0.01=1.64V电压。

手册中还补充了以下内容:

还可以使用内部 8 位 DAC 来实现迟滞。参考信号发生器 8 位 DAC 的输入可以通过 COMPx.CTL3 寄存器中的DACCODE0和 DACCODE1 两个值来提供。用户可以将 COMPx.CTL2 寄存器中的 DACCTL 位配置为 1, 比较器输出值将在DACCODE0 和 DACCODE1 值之间选择 DAC 输入。借助这种配置, 无需使用外部元件即可为比较器生成所需的迟滞电平。

其实这部分内容我觉得有点不合乎逻辑哈,这个所谓的迟滞,应该只是单向的迟滞,并非双向迟滞。

3 比较器的优势

有人可能会说,何必这么复杂,我用ADC采集模拟电压,然后用个定时器中断判断转换后的AD值,然后再处理相关任务,也可以达到相同的目的。

事实果真如此吗?

非也,开始我也是这么想的,直到工作中遇到了必须使用比较器的场景,那就是快速响应。一般情况下,使用内部比较器的时候,只需要几十微妙,就可以对外界的电压信号快速响应。而采用普通ADC,自己设定阈值的这种方法,往往是毫秒级的。

所以在实际的工程开发中,需要根据不同的需求,分配和调度单片机的内部资源,优雅地完成每次开发工作,毕竟,优雅,永不过时!

在这里插入图片描述

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

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

相关文章

【BUG】已解决:You are using pip version 10.0.1, however version 21.3.1 is available.

You are using pip version 10.0.1, however version 21.3.1 is available. 目录 You are using pip version 10.0.1, however version 21.3.1 is available. 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#…

【Django】 读取excel文件并在前端以网页形式显示-安装使用Pandas

文章目录 安装pandas写views写urls安装openpyxl重新调试 安装pandas Pandas是一个基于NumPy的Python数据分析库&#xff0c;可以从各种文件格式如CSV、JSON、SQL、Excel等导入数据&#xff0c;并支持多种数据运算操作&#xff0c;如归并、再成形、选择等。 更换pip源 pip co…

Word 导入导出

在实际的开发过程中&#xff0c;也会遇到导入导出的功能&#xff0c;今天就简单的做一下总结。 1.需求&#xff1a;将下面word 数据导入到数据库并进行存储 在Controller中 RequestMapping(value "/ImportWord")public RawResponseBodyObject ImportWord(HttpServl…

VBA技术资料MF178:将某个文件夹中的图片导入Word

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

基于微信小程序图书馆座位预约管理系统设计与实现

1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔记本的广泛运用&#xff0c;以及各种计算机硬件的完善和升级&#x…

开源模型也能强过闭源?Llama 3.1-405B数值对标GPT4!

Llama 3.1-405B引起AI浪潮&#xff1a;开源模型也能强过闭源&#xff1f; Llama 3.1 就这几天&#xff0c;只要你有在关注AI相关的事&#xff0c;你就会看见一群人在讨论 Meta 新出的 Llama 3.1。外网无数的业内大佬都在为之疯狂&#xff0c;因为 Llama3.1-405B 成为了目前开源…

CefSharp音视频编译与免费下载

注&#xff1a;Cefharp 音频和视频播放编译&#xff0c;生成相应的dll文件&#xff0c;从而支持项目开发。 建议编译至少 16G 的 RAM和至少 250G 的 SSD。该脚本以 E 盘为例&#xff0c;您需要在 E 盘上手动创建 cef 文件夹。禁止在转载后通过发布其他平台向用户收取下载费用。…

JavaEE - Spring Boot 简介

1.Maven 1.1 什么是Maven 翻译过来就是: Maven是⼀个项⽬管理⼯具。基于POM(Project Object Model,项⽬对象模型)的概念&#xff0c;Maven可以通 过⼀⼩段描述信息来管理项⽬的构建&#xff0c;报告和⽂档的项⽬管理⼯具软件。 可以理解为&#xff1a;Maven是一个项目管理工具…

MFC与QT中禁用Esc、Alt+F4、关闭图标

在业务中&#xff0c;我们需要按指定的方式才能关闭当前对话框。如下图需输入密码点击确认后&#xff0c;界面才能关闭。 1.禁用关闭按钮 在对话框初始化部分添加将关闭按钮禁用 //MFC CMenu *pSysMenu GetSystemMenu(FALSE); ASSERT(pSysMenu ! NULL); pSysMenu->EnableM…

【BUG】已解决:NameError: name ‘python‘ is not defined

NameError: name ‘python‘ is not defined 目录 NameError: name ‘python‘ is not defined 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于…

学习记录——day18 数据结构 树

树的存储 1、顺序存储 对于普通的二叉树&#xff0c;不适合存储普通的二叉树顶序存储&#xff0c;一般用于存储完全二叉树而言&#xff0c;如果使用顺序存储&#xff0c;会浪费大量的存储空间&#xff0c;因为需要给没有节点的位置留出空间&#xff0c;以便于后期的插入。 所以…

图书管理系统设计

设计一个图书管理系统时&#xff0c;我们需要考虑系统的基本功能、用户需求、技术选型以及数据的安全性和完整性。下面是一个基本的图书管理系统的设计概览&#xff1a; 1. 系统目标 管理图书信息&#xff1a;添加、删除、修改图书信息。借阅管理&#xff1a;处理借书、还书流…

Leetcode—297. 二叉树的序列化与反序列化【困难】

2024每日刷题&#xff08;148&#xff09; Leetcode—297. 二叉树的序列化与反序列化 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(…

Oracle对比两表数据的不一致

MINUS 基本语法如下 [SQL 语句 1] MINUS [SQL 语句 2];举个例子&#xff1a; select 1 from dual minus select 2 from dual--运行结果 1-------------------------------- select 2 from dual minus select 1 from dual--运行结果 2所以&#xff0c;如果想找所有不一致的&a…

汽车免拆诊断案例 | 2018 款别克阅朗车蓄电池偶尔亏电

故障现象 一辆2018款别克阅朗车&#xff0c;搭载LI6发动机和GF6变速器&#xff0c;累计行驶里程约为9.6万km。车主反映&#xff0c;该车停放一晚后&#xff0c;蓄电池偶尔亏电。 故障诊断 接车后用虹科Pico汽车示波器和高精度电流钳&#xff08;30 A&#xff09;测量该车的寄…

4、Python+MySQL+Flask的文件管理系统【附源码,运行简单】

4、PythonMySQLFlask的文件管理系统【附源码&#xff0c;运行简单】 总览 1、《文件管理系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 注册2.3 个人中心界面2.4 文件上传界面2.5 其他功能贴图 3、下载 总览 自己做的项目&#xff0c;禁止转载&#xff0c…

C++【泛型编程】【string类常用接口】学习

目录 泛型编程 推演实例化 显示实例化 类模板 类模板的声明和定义分离 STL string string的构造和拷贝构造 选取特定字符串拷贝 解析&#xff1a; 关于npos的解析 验证 从一个字符串中拷贝前几个字符 解析&#xff1a; 注意&#xff1a; 验证&#xff1a; size…

第13周 简历职位功能开发与Zookeeper实战

第13周 简历职位功能开发与Zookeeper实战 本章概述1. Mysql8窗口函数over使用1.1 演示表结构与数据1.2 案例1:获取男女总分数1.3 案例2****************************************************************************************本章概述 1. Mysql8窗口函数over使用 参考案例…

C++客户端Qt开发——Qt窗口(菜单栏)

Qt窗口是通过QMainWindow类来实现的。 QMainWindow是一个为用户提供主窗口程序的类&#xff0c;继承自QWidget类&#xff0c;并且提供了一个预定义的布局。QMainWindow包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个浮动窗口&#xff08;铆接部件)(dock widgets、一个…

算法从零到精通 (一) ~ 快慢双指针

1. 前言 快慢双指针是一种常用的算法技巧&#xff0c;通常用于解决涉及链表或数组的问题。它的基本思想是使用两个指针&#xff0c;一个移动速度快&#xff08;快指针&#xff09;&#xff0c;一个移动速度慢&#xff08;慢指针&#xff09;&#xff0c;来解决特定的问题。这两…