|
|
次 ADC 采样周期分成两段,
|--------Settling-------|==Conversion==|----Settling--- . . .
Timer 2 overflow ^
ADC0 ISR ^
1️⃣ Settling(稳定时间)
输入电压“充到ADC内部电容”的过程
还不准,不能测
2️⃣ Conversion(转换时间)
ADC 真正开始“量电压”
输出 result
🧠 关键理解:
❗ ADC不是一触发就准
👉 必须先“等电压稳定”
② 为什么需要 Settling(本质)
ADC内部结构类似👇:
输入信号 → 模拟开关(MUX) → 采样电容(Csample)
⚡ 问题来了:
👉 这个电容不是瞬间充电的!
它受以下影响:
外部电阻(比如电位器)
内部电阻(MUX)
电容大小
👉 所以:
电压需要时间“慢慢逼近真实值”
③ 核心公式(重点)
Settling 时间公式:
📌 参数解释
参数 含义
n ADC位数(10位)
SA 允许误差(比如 0.25 LSB)
Rtotal 总电阻
Csample 采样电容
🧠 本质:
👉 这是一个 RC充电时间公式(指数过程)
🔢 ④ 实际计算(你这段代码的例子)
条件:
n = 10
SA = 0.25
R = 105kΩ
C = 5pF
代入:
Tsettle = ln(1024 / 0.25) × 105k × 5pF
≈ 4.4 μs
📌 含义:
👉 至少要等 4.4微秒
否则:
ADC读到的是“没充满的电压”
⚠️ ⑤ 额外限制(很多人会忽略)
至少还要再等 1.5 μs
👉 在这些情况:
切换 ADC 通道(MUX)
改变增益(PGA)
🧠 所以最终:
👉 这里主要瓶颈是:
外部 100k 电位器(电阻太大)
⚡ ⑥ Conversion(转换时间)
说明:
ADC转换 = 10个 SAR 时钟周期
给定:
SAR_CLK = 3 MHz
计算:
Tconvert = 10 × 400ns = 3.3μs
🧮 ⑦ 总采样周期(最重要结论)
最小采样周期:
Tsample = Tsettle + Tconvert
= 4.4 + 3.3
= 7.7 μs
🧠 意思是:
👉 每次采样之间:
至少要间隔 7.7μs
否则:
数据不准 ❌
抖动严重 ❌
🚀 ⑧ 你的程序设置是多少?
Timer2 每 100μs 触发一次 ADC
对比:
项目 时间
最小需要 7.7 μs
实际设置 100 μs
✅ 结论:
👉 ✔️ 完全安全(甚至很宽裕)
🔧 ⑨ 资源分配(很重要)
Timer1 → 串口波特率
Timer2 → 触发ADC
👉 这是典型设计:
Timer1:通信
Timer2:采样节奏
🧪 ⑩ 测试流程在干嘛
做的事情:
1️⃣ 串口连接电脑
2️⃣ 打开串口助手(115200)
3️⃣ 给 ADC 输入电压(电位器)
4️⃣ 实时打印电压
👉 就是一个:
“电压 → ADC → 串口输出”的完整链路
🧠 最关键总结(你一定要记住)
🌟 本段话的核心思想:
❗ ADC采样 ≠ 立刻转换
👉 必须先等输入电压稳定 |
|