【DSP学习】C2000_ADC中断_笔记

第 19 集《ADC 的中断》学习笔记

来源:B站视频 BV18h411B7Fz 第 19 集《ADC 的中断》,UP 主 Study-Charging(系列《DSP 自学视频(顾老师)从入门到编写(C2000)》)。

本文整理自视频字幕逐字稿(共 367 条、约 21 分钟),按讲解逻辑重新分节、修正了口语和语音识别的口误,技术结论以视频为准。本集实际讲了三块内容:ADC 参考电压选择、ADC 信号调理电路、ADC 的中断。


一、ADC 参考电压怎么选

参考电压是 ADC 把模拟量转换成数字量时的参照标准,它准不准,直接决定转换结果准不准。可以说,参考电压是影响 ADC 转换精度最重要的因素之一。

F28335 内部 ADC 通过寄存器 ADCREFSEL (参考电压选择,位域 REF_SEL)来决定用内部还是外部参考电压:

REF_SEL 值 参考电压来源
00 内部参考电压(默认)
01 外部参考电压 2.048 V
10 外部参考电压 1.5 V
11 外部参考电压 1.024 V

关于"选择外部"的含义 :你把 REF_SEL 配成 01,只是告诉 DSP「我现在用的是外部参考电压、值是 2.048 V」 ;这个 2.048 V 本身得靠你自己的硬件电路做出来,再接到 ADCREFIN 引脚上。另外两种(1.5 V / 1.024 V)同理。

1.1 用内部参考电压

最简单的方式。选内部参考时,ADCREFIN 引脚可以悬空 ,也可以按手册接法处理。除此之外,另外三个引脚 ADCRESEXT、ADCREFP、ADCREFM 的接法是固定的(具体看芯片手册):

  • ADCRESEXT:接一个 20 kΩ 电阻;
  • ADCREFP、ADCREFM:各接一个 2.2 μF 电容。

还有一个 ADCL0,它相当于一个偏置电压,通常让它偏置为 0(即接地或按手册处理)。

1.2 用外部参考电压

为满足工业应用需求,通常外部参考电压选 2.048 V 。视频推荐使用 TI 的 REF3020 这颗芯片来产生精确的 2.048 V,送进 ADCREFIN 引脚。

转换比例关系 :F28335 的 ADC 输入引脚信号范围是 0 ~ 3 V。若你选 2.048 V 作为参考定义,那么当输入信号达到 3 V 时,内部实际参照检测到的是 2.048 V------两者之间存在一个固定的对应/缩放关系,写程序算实际物理量时要留意这个缩放。


二、ADC 信号调理电路(把 ±5 V 变成 0~3 V)

前面反复强调:F28335 内部 ADC 的输入电压范围必须在 0 ~ 3 V 内。但现实里传感器输出的信号往往不满足这个区间(比如常见的 ±5 V ),这时候就需要信号调理电路,把传感器输出"搬"到 ADC 允许的范围里(例如调理成 0~3 V)。

视频里举了一个具体例子:设计一个电路,把 −5 V ~ +5 V 转成 0 ~ 3 V。

2.1 电路结构(思路)

信号 Vin(传感器输出)先经过:

  1. 前级 R11 + C11 低通滤波,把传感器信号里的毛刺/高频噪声滤掉;
  2. 再经过运放电路 ,最终输出 Vout,送到 ADC 引脚。

2.2 用「虚短、虚断」推导

运放工作的两个基本假设:虚断 (输入端不取电流)和虚短(同相/反相输入端等电位)。视频带着从这两个原则出发,把电路的传递函数推出来。

  • 在 2 号点 ,由虚断推出其电压 v1 与输入的关系:v1 = Vin / 16;

  • 在 3 号点 ,由虚断推出 v2:v2 = Vin / 53 + 5;

  • 再由虚短 (v1 = v2)联立,得到最终的输出表达式:

    Vout = (16 / 53) × (Vin + 5 V)

2.3 验证

  • 当 Vin = −5 V:Vout = (16/53) × 0 = 0 V;
  • 当 Vin = +5 V:Vout = (16/53) × 10 ≈ 3.02 V ≈ 3 V。

一条线性关系,正好把 −5 V ~ +5 V 映射成 0 ~ 3 V,满足 ADC 输入要求,可以放心送进 ADC 引脚。

留给你思考 :如果传感器电压范围是 −10 V ~ +10 V,这个调理电路又该怎么改(电阻网络、比例关系如何调整)?


三、ADC 的中断

进入正题。看 28335 的中断向量表,里面跟 ADC 相关的有三个中断:

中断名 PIE 位置 含义
SEQ1INT INT1.1 序列发生器 SEQ1 完成一次序列转换时产生
SEQ2INT INT1.2 序列发生器 SEQ2 完成一次序列转换时产生
ADCINT INT1.6 由上面两者"或"出来(见下)

3.1 SEQ1INT 与 SEQ2INT

  • SEQ1INT :序列发生器 SEQ1 完成一个序列的转换时,可以产生一个中断。通过寄存器可以选**「每次转换完成都中断」还是「隔一次中断一次」**------一般用的是每次完成都中断。
  • SEQ2INT :序列发生器 SEQ2 完成一个序列转换时产生的中断。

跟工作模式的关系(呼应前面讲过的 ADC 工作模式):

  • 两个序列发生器独立工作 → 可以分别产生 SEQ1INT 和 SEQ2INT;
  • 级联(cascade)模式 → 两个序列发生器合成一个 SEQ1,此时就只有 SEQ1INT 了。

所以实际用中断时,一定要结合当前 ADC 的工作模式,判断哪个中断才会真正产生中断事件。

3.2 一个必须先厘清的概念

ADC 中断不是用来「启动」ADC 转换的。 前面讲过 ADC 的启动方式(软件触发、ePWM 的 SOC 触发、外部引脚/定时器触发等)。这里的中断,指的是:

转换完成之后 才产生 SEQ1INT / SEQ2INT 这样的中断事件,然后 CPU 进中断去取结果、做处理(滤波、计算、控制等)。

别把"中断触发转换"和"转换完进中断"搞反了。

3.3 ADCINT = SEQ1INT OR SEQ2INT(28335 的新设计)

向量表里除了 SEQ1INT、SEQ2INT,还有个 ADCINT,而且很特别 ------你翻寄存器会发现,没有任何专门描述 ADCINT 的使能/标志/状态位。那它怎么用?

这是 28335(以及后续新 C2000 处理器)跟老芯片(如 2812)在 ADC 中断上的一个区别:

  • ADCINT 其实就是 SEQ1INT 和 SEQ2INT 的「或(OR)」;
  • 只要 SEQ1INT 使能了,当 SEQ1 产生中断事件时,ADCINT 事件也跟着产生;
  • 同理,SEQ2INT 使能后,SEQ2 的中断事件也会让 ADCINT 产生;
  • 换句话说,只要 SEQ1 或 SEQ2 之一被使能并产生中断事件,ADCINT 就被使能、也产生中断事件。

所以它不需要单独的寄存器去控制 ,是硬件直接"或"出来的。理解这一点,就不会因为找不到 ADCINT 的使能位而困惑。


四、小结

本集虽然叫《ADC 的中断》,但顺带把 ADC 前端的两个关键问题也讲清了:

  1. 参考电压 :ADCREFSEL 选内部(默认)/外部(2.048/1.5/1.024 V);外部常用 2.048 V(TI REF3020),注意 0~3 V 输入范围与参考电压的缩放关系。
  2. 信号调理 :传感器信号常不在 0~3 V 内,用运放 + 虚短虚断把它搬进 ADC 量程(例:±5 V → 0~3 V,Vout = 16/53·(Vin+5))。
  3. ADC 中断 :向量表三兄弟 SEQ1INT(1.1)、SEQ2INT(1.2)、ADCINT(1.6);其中 ADCINT = SEQ1INT OR SEQ2INT,无独立控制寄存器;中断是转换完成后 才进,用来取数处理,不是用来启动转换;级联模式下只有 SEQ1INT。

下一集(第 20 集)才会把 ePWM 触发 + ADC 转换 + ADC 中断 真正写成一个能跑的「ADC 采样程序」。

相关推荐
Дерек的学习记录4 小时前
Unreal Engine 5:第三人称运动系统和人物动画
开发语言·学习·ue5
zhangrelay4 小时前
mrpt杂乱笔记-26-10-31
笔记·学习
熊猫钓鱼>_>4 小时前
平行视界兼容模式与魔法变量配置避坑【鸿蒙心迹】
运维·服务器·开发语言·笔记·华为·harmonyos·openharmony
衡石科技4 小时前
让多轮问数保持口径一致:Data Agent 的上下文、偏好与学习开关
人工智能·学习·安全
IT19956 小时前
Docker 快速部署 DM8 达梦数据库|完整踩坑笔记
笔记·docker·容器
東隅已逝,桑榆非晚6 小时前
算法2. 双指针法-复写零
c++·笔记·学习·算法
Star(up up up)6 小时前
Docker系列---Docker容器基本命令(新手小白保姆级实操教程)
运维·学习·程序人生·青少年编程·docker·容器·dubbo
云析赢指标公式网46 小时前
文华财经指标源码笔记:WINNER筹码函数、控盘变量与MACD变体的调试记录
java·笔记·算法
无心水6 小时前
22、数学与经济管理(运筹学) 核心考点与学习笔记
人工智能·笔记·学习·架构师·软考·软考架构师·软考系统架构师