嵌入式RTC工作原理及应用场景
±20ppm 是衡量 RTC(实时时钟)精度的关键指标,表示 每百万秒(约11.57天)的最大时间误差范围。以下是通俗易懂的解释:
1. ppm 的含义
- ppm = Parts Per Million(百万分之一)
1 ppm = 1/1,000,000
(即 0.0001%)。
±20ppm 表示 RTC 的计时误差在 每百万秒 ±20秒 以内。
2. 实际误差计算
-
换算成每日误差:
±20 秒 / 1,000,000 秒 × 86,400 秒/天 ≈ ±1.728 秒/天
即每天最大走时误差不超过 ±1.728 秒。 -
每月误差(按30天计):
±1.728 秒/天 × 30 天 ≈ ±51.84 秒/月
即每月误差不超过 ±52 秒。 -
每年误差:
±1.728 秒/天 × 365 天 ≈ ±630 秒/年 ≈ ±10.5 分钟/年
。
3. 为什么用 ppm 表示?
- 适合描述微小误差:
晶振频率的微小偏差(如温度变化、老化)会导致长期累积误差,ppm 能直观量化这种影响。
示例:若晶振标称频率为 32.768 kHz,实际频率为 32.768 ±0.000655 Hz(即 ±20ppm),则每秒计时产生 ±20μs 偏差。
4. 不同精度等级对比
精度等级 | 每日误差 | 适用场景 |
---|---|---|
±20ppm | ±1.728 秒 | 普通消费电子(手表、家电) |
±5ppm | ±0.432 秒 | 工业设备、网络设备 |
±1ppm | ±0.0864 秒 | 基站、高精度仪器 |
温补RTC | ±0.05~0.5 秒/天 | 物联网设备(抗温度变化) |
5. 影响精度的因素
- 温度变化:晶振频率随温度波动(常温下±20ppm,-40°C~85°C可能漂移±100ppm)。
- 晶振老化:使用1年后可能额外增加 ±1~5ppm 误差。
- 电源噪声:电路干扰导致计时抖动。
6. 如何减少误差?
- 选择温补RTC(TCXO):内置温度传感器动态补偿频率(可达±2ppm)。
- 定期校准:通过GPS/NTP获取标准时间,修正RTC计数器(如每月自动校准)。
- 软件补偿:测量实际误差,在代码中调整计数值(如STM32的RTC校准寄存器)。
面试回答示例
“±20ppm 表示 RTC 的计时精度为 每百万秒误差不超过 ±20 秒,换算到日常使用中大约是 每天 ±1.7 秒。这种精度能满足普通嵌入式设备(如智能家居)的时间需求,但对基站等场景需更高精度(如±1ppm)。实际开发中,我们会通过温补晶振或软件校准来进一步提升精度。”
在嵌入式开发中,RTC (Real-Time Clock) 是一个至关重要的硬件模块,它的核心功能就是像一个永不停止的电子手表,即使在主系统完全断电的情况下,也能持续、精确地追踪时间和日期。
1. RTC 是什么?
- 本质: 一个独立的、低功耗的计时电路(通常集成在微控制器内部,或作为一个独立的外围芯片)。
- 核心功能: 持续计数秒、分、时、日、月、年(有时包括星期)。
- 关键特性: 需要非常小的电力维持运行,通常由一个独立的备用电源(如纽扣电池、超级电容)供电,确保在主电源移除后时间信息不丢失。
- 目标: 为嵌入式系统提供可靠、连续的日期和时间基准。
2. 它的工作原理是什么?它是怎么工作的?
RTC 的核心工作原理相对直观,主要依赖于稳定的振荡源和计数器链:
-
振荡源 (Crystal Oscillator):
- 绝大多数 RTC 使用一个外部连接的 32.768 kHz 石英晶体谐振器。这个频率值 (2¹⁵ = 32768) 被特意选择,因为经过一个 15 级二进制分频器后,正好能得到 1 Hz (1 秒) 的信号。
- 晶体提供极其稳定和精确的振荡频率。精度通常在每月几秒到几十秒(ppm - 百万分之一),更精密的 RTC 或带温度补偿的 RTC 精度更高。
-
分频器 (Divider):
- 32.768 kHz 的原始振荡信号被输入到一个分频电路(通常是 15 级二进制计数器)。
- 每经过一级分频,频率减半。
32768 Hz / 2¹⁵ = 32768 Hz / 32768 = 1 Hz
。输出就是一个精确的 1 秒脉冲信号。
-
时间/日期计数器 (Counters/Registers):
- 这个 1 Hz 的秒脉冲驱动一系列计数器(或寄存器):
- 秒计数器 (0-59)
- 分计数器 (0-59)
- 时计数器 (0-23 或 12 小时制)
- 星期计数器 (1-7,可选)
- 日计数器 (1-28/29/30/31,需处理闰年)
- 月计数器 (1-12)
- 年计数器 (00-99 或 0000-9999)
- 这些计数器像时钟的齿轮一样联动:秒满 60 进 1 分,分满 60 进 1 时,依此类推,并自动处理闰年、不同月份的天数等复杂日历规则。
- 这个 1 Hz 的秒脉冲驱动一系列计数器(或寄存器):
-
寄存器接口 (Register Interface):
- RTC 模块内部有一组映射到其计数器状态的寄存器。
- 嵌入式系统的 CPU 通过特定的总线接口(如 I2C、SPI 或并行总线)访问这些寄存器。
- 设置时间: CPU 向这些寄存器写入期望的初始时间/日期值。
- 读取时间: CPU 从这些寄存器中读取当前的计数值,即当前的时间/日期。
-
备用电源 (Backup Power Supply - VBAT/VBU):
- 这是 RTC 工作的关键依赖。
- 一个独立的电源输入(通常是 1.8V - 3.3V),连接到一个纽扣电池 (如 CR2032)、可充电电池或超级电容。
- 当主系统电源 (
VCC/VDD
) 存在时,RTC 由主电源供电,并可能同时给备份电源充电(如果是可充电方案)。 - 当主系统电源断开或掉电时,RTC 模块自动无缝切换到备用电源供电。由于 RTC 电路功耗极低(微安级),一个小电池可以维持其运行数年甚至十年以上,确保时间持续流逝不中断。
3. 实际使用场景是什么样的?
RTC 的应用极其广泛,几乎所有需要知道“现在几点”或“过了多久”的嵌入式设备都会用到它:
- 数据记录与时间戳: 记录传感器读数、系统事件、故障日志时,必须标记精确的发生时间(如环境监测设备、工业控制器、行车记录仪)。
- 定时唤醒与调度: 设备在低功耗睡眠模式下,依靠 RTC 产生闹钟中断,在预定时间唤醒系统执行任务(如智能电表定时抄表、温控器定时调节、物联网设备定时上报)。
- 用户界面显示: 需要显示当前日期和时间的设备(如智能家居面板、POS 机、医疗设备、车载信息娱乐系统)。
- 文件系统时间戳: 存储文件时记录创建、修改和访问时间(如使用 SD 卡或 Flash 存储的设备)。
- 网络时间同步 (NTP/SNTP): 设备联网后,可以使用 RTC 记录的时间作为基础,通过网络时间协议校准到更精确的全球时间。
- 计时与倒计时: 实现精确的秒表、烹饪定时器、预约开机等功能。
- 安全与授权: 在证书验证、访问控制中,时间是一个关键因素(如门禁系统、授权软件的有效期检查)。
- 事件序列化: 确定多个事件发生的先后顺序。
4. 它有哪些依赖?
RTC 的正常工作需要硬件和软件两方面的支持:
-
硬件依赖 (Hardware Dependencies):
- 外部 32.768 kHz 晶体谐振器: 这是最核心的依赖,提供基准时钟。晶体和芯片引脚之间的连接走线需要精心设计(长度短、远离干扰源、合适的负载电容)。
- 负载电容: 连接在晶体两端的两个小电容(通常几到几十皮法),用于微调振荡频率使其达到标称值。其值由晶体规格和芯片要求决定。
- 备用电源: 不可或缺!可以是不可充电的锂电池(CR2032 最常见)、可充电电池、或超级电容。必须连接到 RTC 专用的
VBAT
/VBU
引脚。 - 电源切换电路: 通常集成在 RTC 模块或微控制器内部,负责在主电源 (
VCC
) 掉电时自动无缝切换到备用电源 (VBAT
)。外部可能需要二极管防止反向电流。 - 主电源 (
VCC
): 系统正常工作时为 RTC 供电。掉电时由备份电源接管。 - 物理接口: 如果是独立 RTC 芯片,需要连接到 CPU 的通信总线(I2C、SPI 等)。
-
软件依赖 (Software Dependencies):
- RTC 外设驱动:
- 初始化: 配置时钟源(选择外部晶体)、设置分频器、启用 RTC 模块、配置闹钟和唤醒中断等。
- 时间设置: 提供 API 让应用程序设置初始日期和时间(通常通过写入特定寄存器)。
- 时间读取: 提供 API 让应用程序读取当前日期和时间(从特定寄存器读取)。需要注意读取时可能需要特殊操作(锁存或原子读取)以避免在计数器进位过程中读到不一致的值。
- 闹钟设置: 配置在特定时间(或周期性)产生中断。
- 校准: 提供机制(如写入校准寄存器)补偿晶体的微小频率偏差。
- 中断服务程序: 处理 RTC 产生的中断(如秒中断、闹钟中断)。
- 时间库: 应用程序层可能需要库来方便地处理时间数据(转换、格式化、计算时间差等)。
- 操作系统支持: 如果使用 RTOS 或嵌入式 Linux 等,操作系统通常提供对 RTC 的抽象层和系统时间服务 (
gettimeofday
,settimeofday
)。
- RTC 外设驱动:
总结
RTC 是嵌入式系统中提供连续、可靠时间基准的基石。它依靠外部晶体产生精确振荡,通过分频和计数器链计算时间,并由独立的备用电源保证在主系统断电时持续工作。其应用场景覆盖了从简单的时间显示到复杂的系统调度和数据记录。实现一个稳定可靠的 RTC 功能,需要仔细处理其硬件依赖(晶体、电容、电池)并编写正确的驱动程序进行初始化和访问。
相关文章:
嵌入式RTC工作原理及应用场景
20ppm 是衡量 RTC(实时时钟)精度的关键指标,表示 每百万秒(约11.57天)的最大时间误差范围。以下是通俗易懂的解释: 1. ppm 的含义 ppm Parts Per Million(百万分之一) 1 ppm 1/1,…...

一天搞懂深度学习--李宏毅教程笔记
目录 1. Introduction of Deep Learning1.1. Neural Network - A Set of Function1.2. Learning Target - Define the goodness of a function1.3. Learn! - Pick the best functionLocal minimaBackpropagation 2. Tips for Training Deep Neural Network3. Variant of Neural…...
Go语言常见接口设计技巧-《Go语言实战指南》
在 Go 中,接口是连接代码组件的桥梁。合理设计接口可以大幅提升程序的可维护性、可扩展性和测试友好性。本章将分享 Go 开发中常见的接口设计技巧与最佳实践。 一、接口设计原则 1. 面向接口编程,而非面向实现编程 尽量使用接口类型作为函数参数或返回值…...

python打卡训练营打卡记录day43
复习日 作业: kaggle找到一个图像数据集,用cnn网络进行训练并且用grad-cam做可视化 进阶:并拆分成多个文件 数据集来源:Flowers Recognition 选择该数据集原因: 中等规模:4242张图片 - 训练快速但足够展示效…...
Camera相机人脸识别系列专题分析之十一:人脸特征检测FFD算法之低功耗libvega_face.so人脸属性(年龄,性别,肤色,微笑,种族等)检测流程详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:Camera相机人脸识别系列专题分析之十:人脸特征检测FFD算法之低功耗libvega_face.so人脸识别检测流程详解 这一篇我们开始讲: Camera相机人脸识别系列专题分析之十一:人脸特征检测FFD算法之低功耗lib…...
解决:输入SSH后,仍无法通过网址登录以及紧接着的新问题Permission denied(publickey,password).
现象: 管理员: Windows PowerShell输入SSH后,仍无法通过网址登录 例如输入你的ssh命令:ssh -CNg -L xxxx:127.0.0.1:xxxx rootaaaaaaaaa.com -p yyyyy 得到终端提示:ssh无法识别为 cmdlet、函数、脚本文件或可运行程序的名称。 解…...

【QT控件】QWidget 常用核心属性介绍 -- 万字详解
目录 一、控件概述 二、QWidget 核心属性 2.1 核心属性概览 2.2 enabled 编辑 2.3 geometry 2.4 windowTitle 2.5 windowIcon 使用qrc文件管理资源 2.6 windowOpacity 2.7 cursor 2.8 font 编辑 2.9 toolTip 2.10 focusPolicy 2.11 styleSheet QT专栏&…...

uniapp-商城-77-shop(8.2-商品列表,地址信息添加,级联选择器picker)
地址信息,在我们支付订单上有这样一个接口,就是物流方式,一个自提,我们就显示商家地址。一个是外送,就是用户自己填写的地址。 这里先说说用户的地址添加。需要使用到的一些方式方法,主要有关于地址选择器,就是uni-data-picker级联选择。 该文介绍了电商应用中地址信息处…...
HTTPS加密通信详解及在Spring Boot中的实现
HTTPS(Hyper Text Transfer Protocol Secure)是HTTP的安全版本,通过SSL/TLS协议为通讯提供加密、身份验证和数据完整性保护。 一、HTTPS核心原理 1.加密流程概述 客户端发起HTTPS请求(连接到服务器443端口)服务器返…...
如何让 Git 停止跟踪文件?停止后又如何恢复跟踪?
在使用 Git 管理代码时,有时我们希望某些文件不再被 Git 跟踪(比如本地配置文件、临时文件等),但保留这些文件在本地;过了一段时间,可能又需要恢复跟踪这些文件。本文将用通俗易懂的语言,教你如…...

【第16届蓝桥杯 | 软件赛】CB组省赛第二场
个人主页:Guiat 归属专栏:算法竞赛 文章目录 A. 密密摆放(5分填空题)B. 脉冲强度之和(5分填空题)C. 25 之和D. 旗帜E. 数列差分F. 树上寻宝G. 翻转硬币H. 破解信息 正文 总共8道题。 A. 密密摆放࿰…...
SQL进阶之旅 Day 10:执行计划解读与优化
【SQL进阶之旅 Day 10】执行计划解读与优化 开篇 今天是我们的"SQL进阶之旅"系列的第10天,我们将深入探讨SQL执行计划的解读与优化技巧。随着数据库规模的增长和业务复杂度的提升,理解SQL语句在数据库引擎中的执行过程变得至关重要。 执行计…...

AR/MR实时光照阴影开发教程
一、效果演示 1、PICO4 Ultra MR 发光的球 2、AR实时光照 二、实现原理 PICO4 Ultra MR开发时,通过空间网格能力扫描周围环境,然后将扫描到的环境网格材质替换为一个透明材质并停止扫描;基于Google ARCore XR Plugin和ARFoundation进行安卓手…...
Visual studio 中.sln/.vcxproj/.vcxproj.filters和.vcxproj.user文件的作用
在 Visual Studio (尤其是 C 项目) 中,.sln、.vcxproj、.vcxproj.filters 和 .vcxproj.user 文件各自承担着不同的关键角色。理解它们的作用对于项目管理和协作至关重要。 核心原则: .vcxproj 和 .sln 是项目/解决方案的核心定义文件,必须纳…...

【汽车电子入门】一文了解LIN总线
前言:LIN(Local Interconnect Network)总线,也就是局域互联网的意思,它的出现晚于CAN总线,于20世纪90年代末被摩托罗拉、宝马、奥迪、戴姆勒、大众以及沃尔沃等多家公司联合开发,其目的是提供一…...
JVM学习(七)--JVM性能监控
目录 一、JVM性能监控 1、JVM监控及诊断工具-命令行篇 2、JVM监控及诊断工具-GUI篇 3、JVM运行时参数 一、JVM性能监控 1、JVM监控及诊断工具-命令行篇 面试题: 1、你使用过Java虚拟机性能监控和故障处理工具吗? 2、怎么打出线程栈信息。 3、怎么获取 Jav…...
关于 java:5. Java IO 与文件操作
一、File 类(读取文件属性) 1.1 java.io.File 类概述 File 是 Java IO 中的核心类,用于表示文件或目录的路径名。 它是一个抽象路径名,可以表示实际存在或不存在的文件/文件夹。 File 类提供了创建、删除、重命名、判断属性、获…...

【笔记】为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境)
📝 为 Python 项目安装图像处理与科学计算依赖(MINGW64 环境) 🎯 安装目的说明 本次安装是为了在 MSYS2 的 MINGW64 工具链环境中,搭建一个完整的 Python 图像处理和科学计算开发环境。 主要目的是支持以下类型的 Pyth…...
【笔记】MLA矩阵吸收分析
文章目录 一、张量运算的计算量1. FLOPs定义2. 张量计算顺序对计算量的影响 二、MLA第一次矩阵吸收的计算量分析1. 原始注意力计算2. MLA源代码中的吸收方式3. 提前吸收4. 比较分析4.1 比较顺序1和顺序24.2 比较顺序2和顺序3 三、MLA第二次矩阵吸收的计算量分析1. 原始输出计算…...
600+纯CSS加载动画一键获取指南
CSS-Loaders.com 完整使用指南:600纯CSS加载动画库 🎯 什么是 CSS-Loaders.com? CSS-Loaders.com 是一个专门提供纯CSS加载动画的资源网站,拥有超过600个精美的单元素加载器。这个网站的最大特色是所有动画都只需要一个HTML元素…...
开源的JT1078转GB28181服务器
JT1078转GB28181流程 项目地址: JT1078转GB28181的流媒体服务器: https://github.com/lkmio/lkm JT1078转GB28181的信令服务器: https://github.com/lkmio/gb-cms 1. 创建GB28181 UA 调用接口: http://localhost:9000/api/v1/jt/device/add 请求体如下…...

智能守护电网安全:探秘输电线路测温装置的科技力量
在现代电力网络的庞大版图中,输电线路如同一条条 “电力血管”,日夜不息地输送着能量。然而,随着电网负荷不断增加,长期暴露在户外的线路,其线夹与导线在电流热效应影响下,极易出现温度异常。每年因线路过热…...
Java垃圾回收算法及GC触发条件
一、引言 在Java编程语言的发展历程中,内存管理一直是其核心特性之一。与C/C等需要手动管理内存的语言不同,Java通过自动垃圾回收(Garbage Collection,简称GC)机制,极大地减轻了开发人员的负担,…...

【Hot 100】118. 杨辉三角
目录 引言杨辉三角我的解题代码优化优化说明 🙋♂️ 作者:海码007📜 专栏:算法专栏💥 标题:【Hot 100】118. 杨辉三角❣️ 寄语:书到用时方恨少,事非经过不知难! 引言 …...

useMemo useCallback 自定义hook
useMemo & useCallback & 自定义hook useMemo 仅当依赖项发生变化的时候,才去重新计算;其他状态变化时则不去做不必要的计算。 useCallback 缓存函数。但是使用注意📢 ,useCallback没有特别明显的优化。 *合适的场景——父…...

ffmpeg 的视频格式转换 c# win10
1,下载ffmpeg ,并设置环境变量。 ffmpeghttps://www.gyan.dev/ffmpeg/builds/ 2.新建.net 9.0 winform using System; using System.Diagnostics; using System.Text; using System.Windows.Forms;namespace WinFormsApp11 {public partial class Fo…...

【irregular swap】An Examination of Fairness of AI Models for Deepfake Detection
文章目录 An Examination of Fairness of AI Models for Deepfake Detection背景points贡献深伪检测深伪检测审计评估检测器主要发现评估方法审计结果训练分布和方法偏差An Examination of Fairness of AI Models for Deepfake Detection 会议/期刊:IJCAI 2021 作者: 背景…...

【JAVA】注解+元注解+自定义注解(万字详解)
📚博客主页:代码探秘者 ✨专栏:《JavaSe》 其他更新ing… ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏作者水平有限,欢迎各位大佬指点&…...

【Doris基础】Apache Doris中的Version概念解析:深入理解数据版本管理机制
目录 引言 1 Version概念基础 1.1 什么是Version 1.2 Version的核心作用 1.3 Version相关核心概念 2 Version工作机制详解 2.1 Version在数据写入流程中的作用 2.2 Version在数据查询流程中的作用 2.3 Version的存储结构 3 Version的进阶特性 3.1 Version的合并与压…...
【Linux 基础知识系列】第一篇-Linux 简介与历史
一、什么是 Linux? Linux 是一种类 Unix 操作系统,它是由 Linus Torvalds 于 1991 年首次发布的。作为一个开源操作系统,Linux 的源代码可以被任何人自由使用、修改和分发。在现代计算环境中,Linux 凭借其强大的性能、高稳定性、…...