软件:STM32-F1系列-ADC(2026/6/30)

📅 2026/7/1 10:41:22
软件:STM32-F1系列-ADC(2026/6/30)
一、 ADC (Analog to Digital Converter) 基础概念1. 什么是 ADC简单来说就是翻译官。指将连续变量的模拟信号转换为离散的数字信号的器件现实世界电压是连续变化的模拟量比如1.23V、2.67V。CPU只认识0和1数字量。ADC 的作用把0~3.3V的电压转换成0~4095的数字让 CPU 能读懂2. 为什么 CPU 不能直接测电压STM32 内部全是数字电路无法直接感知连续的电压变化。必须经过 ADC 转换将物理量电压转化为数字量CPU 才能进行计算和处理。3. 分辨率 (12位 ADC)以 STM32F103 为例它是12位 ADC。计算公式2的12方4096量程映射0V→数字03.3V→数字4095精度计算3.3V/4096≈0.8mV这意味着 ADC 读数每增加 1电压大约升高 0.8 毫伏。二、 ADC 工作模式详解1. 转换模式对比①单次模式例如ADC1→CH5→转换一次→结束流程就是软件启动→CH5采样→CH5转换→DR寄存器得到结果→ADC停止→只转换一次→每次都需要重新启动才会进行模拟量到数字量0~4095的转换。②连续转换模式连续模式就是转换结束以后自动再来一次。例如ADC1→CH5→转换一次→自动重新开始循环转换→软件只启动一次因此单次模式和连续转换模式的区别只是在于转换结束以后停不停。③扫描模式扫描Scan只负责切换通道连续Continuous只负责是否重复执行整个扫描序列。例如CH1CH5CH9扫描模式开启后→ADC会按Rank顺序Rank1 → CH1 再到 Rank2 → CH5最后 Rank3 → CH9于是CH1→CH5→CH9如果是单次模式那么CH1→CH5→CH9→结束如果是连续模式那么CH1→CH5→CH9→循环2. 规则组 vs 注入组 (重点难点)这个概念非常重要可以这样通俗理解规则组 (Regular Group)形象比喻普通排队。特点按顺序来规规矩矩。如果有多个通道就一个接一个排好队转换。限制只有一个数据寄存器如果不及时取走数据新数据会覆盖旧数据。注入组 (Injected Group)形象比喻VIP 插队。特点优先级极高。当规则组正在工作时注入组突然触发ADC 会立刻暂停规则组先去执行注入组的转换执行完再回来继续规则组。应用用于处理紧急事件比如在主程序采集数据时突然监测到一个紧急故障信号需要立刻抓取。三、 数据读取的三种方式1查询法 (Polling)动作启动转换 →不断问“好了没” →好了就读。缺点CPU 一直在傻等浪费资源。2中断法 (Interrupt)动作启动转换 →CPU 去干别的 →转换完成触发中断 →CPU 回来读数。优点CPU 利用率提高。3DMA 法 (Direct Memory Access) —— ⭐ 最重要动作启动转换 →DMA 自动把数据搬运到内存数组​ →CPU 完全不用管。优点零 CPU 干预效率最高。典型应用高速数据采集如声音、波形、多通道轮询。四、 黄金搭档ADC 的DMA在实际工程中ADC 很少单打独斗通常和以下两位配合1. ADC DMA (解决搬运问题)痛点如果采样频率很高比如 10kHzCPU 频繁去读数据会累死。解决方案用 DMA。c// 伪代码示例uint16_t ADC_Buffer[100]; // 定义一个数组// 配置DMAADC每次转换完自动存入 ADC_Buffer优势CPU 只在数组满了之后处理一次中间过程完全解放。2. ADC 定时器 (解决同步问题)痛点如果用Delay_ms()来控制采样频率不准且占用 CPU。解决方案用定时器触发。text定时器(TIM3) --(每秒触发1次)-- ADC --(开始转换)-- 数据优势采样频率极其精准互不干扰。五、 DAC (Digital to Analog Converter) 是啥1. 什么是 DACADC 的逆过程数字 →模拟。给 DAC 输入数字2048它输出电压1.65V。2. 主要用途波形生成输出正弦波、三角波用于信号发生器。音频输出将 MP3 解码后的数字信号转为模拟信号推动耳机发声。可变电压源输出0~3.3V之间的任意电压控制外部设备。六不同模式的工作场景1场景一一个通道只测一次例如按一下按键测一次电池电压上电测一次电位器用户点击开始测量配置非扫描Scan OFF单次Continuous OFF流程开始→CH5→结束2场景二多个通道只测一次例如上电初始化时电池电压温度光敏全部测一遍。配置扫描模式Scan ON单次Continuous OFF流程CH1→CH2→CH3→结束3场景三一个通道持续监测例如一个电位器控制LED亮度。用户一直在旋钮。配置非扫描模式连续模式ADC一直采样CH5→CH5→CH5→循环4场景四多个传感器一直工作最常见例如机器人电池电压电流温度光敏霍尔这些都要一直更新。配置扫描模式连续模式DMA读取数据流程CH1→CH4→CH5→循环同时DMA不断搬运数据七模式决策真正决定是否连续的不是传感器本身而是你的应用需求。‘例1温度传感器如果这是空调每1秒测一次温度。其实没必要连续采样。可以配置成TIM2→每1秒触发ADC一次→ADC单次转换→结束CPU和ADC大部分时间都在休息。这是很多工业设备采用的方法。例2电机电流检测FOC控制PWM频率20kHz。每个PWM周期都要测一次电流。这种时候ADC几乎一直工作。可以配置成定时器触发连续转换模式所以连续模式不是因为温度传感器而是因为数据更新频率要求高。如果答案是上电一次 → 单次用户按键一次 → 单次每100ms一次 → 通常定时器触发单次每1s一次 → 通常定时器触发单次每50μs一次 → 连续或高速定时器触发一直实时监测 → 连续模式七、 ⚠️ 避坑指南关于 STM32F103 的 DACSTM32F103C8T6 (俗称“蓝桥”) 是没有 DAC 外设的原因受限于芯片引脚数量和成本这款最常用的入门级芯片砍掉了 DAC。替代方案如果你需要做模拟输出功能通常有两种做法PWM RC 低通滤波用定时器产生 PWM通过电阻电容滤除高频成分变成直流电压最常用、最省钱。外接 DAC 芯片通过 SPI/I2C 接口连接独立的 DAC 芯片。