资讯动态

嵌入式ADC入门:从采样原理到DMA采集与滤波实战

发布时间:2026/9/12 10:42:58 来源:尧图企业网站定制
做嵌入式开发迟早要跟ADC打交道。无论是读一个电位器电压、采集温度传感器的模拟输出还是做电流环采样、音频采集背后的核心都是同一个问题怎么把一个连续变化的模拟信号准确、高效地变成芯片能处理的数字量。这篇内容就围绕“嵌入式 ADC 入门”展开把模拟信号、数字信号、外设工作原理这三件事彻底讲透再配上实际的配置思路和排查经验给刚开始接触 ADC 的开发者一条能直接上手的路线。我默认你手上有一块常见的 MCU 开发板比如 STM32、GD32 或者其它 Cortex-M 内核的芯片因为这类芯片的 ADC 外设结构高度类似掌握了原理换个平台也就是寄存器名字不同而已。文章不会只堆理论而是把“芯片内部到底怎么工作”“配置时这些参数怎么定”“采样回来数据乱了怎么查”这类实际问题都覆盖到适合刚学完 GPIO 和中断、准备往模拟量采集方向走的初学者也适合调 ADC 总是不稳、想系统排查问题的开发者参考。1. 先把概念捋清模拟信号、数字信号和传感器接口1.1 为什么 MCU 不能直接读模拟量很多新手犯的第一个错误是把传感器输出直接往 GPIO 上一接然后期望程序里读到一个准确的电压值。但实际上 GPIO 引脚内部是一堆数字逻辑电路输入端是施密特触发器或比较器结构它只认“高电平”和“低电平”两个状态。电平高于某个阈值就判 1低于另一个阈值就判 0中间那一段连续的电压变化对 GPIO 来说等于不存在。所以 MCU 要感知真实的模拟世界必须先把连续电压“数字化”。ADCAnalog-to-Digital Converter模数转换器就是干这件事的专用外设。它把人能感知的连续模拟信号转成 CPU 和内存能处理的离散数字信号。这里有两个词要强调一下“连续”和“离散”。自然界的温度、压力、声音、光照在时间上和幅度上都是连续变化的而数字系统只能在离散的时间点把信号幅度近似成有限的数值。ADC 的全部工作原理本质上就是在处理这两个维度的离散化问题。1.2 采样、量化、编码一次 ADC 读取到底发生了什么一次完整的 ADC 转换内部经历了采样、量化、编码三个阶段很多芯片手册并不会把这三个阶段拆开讲但理解它们对后面排查问题非常关键所以这里详细说一下。采样ADC 内部有一个采样保持电路可以理解成一个“瞬间拍照”的快门。在采样阶段内部开关闭合采样电容开始充电电容电压逐渐逼近输入电压开关断开后电容电压就保持住了这段时间叫保持阶段。采样的关键参数是采样时间也就是开关闭合给电容充电的时间。如果采样时间太短电容还没充到和输入电压一致测出来的值就会偏小而且输入阻抗越高、信号源内阻越大需要的采样时间越长。量化保持住的模拟电压会被内部比较器网络和一个基准电压逐级比较最终确定它落在哪个电压区间。区间的个数由 ADC 分辨率决定。以 12 位 ADC 为例基准电压 3.3V那么电压被划分成 2^12 4096 个区间每个区间宽度是 3.3V / 4096 ≈ 0.806mV。这个区间宽度通常叫 1 LSB就是最低有效位对应的模拟量。量化必然带来误差因为不管模拟电压落在区间内哪个位置最终都只能用一个整数码表示这个误差最大就是 ±0.5 LSB。对于 12 位 ADC、3.3V 基准理论最大量化误差大约是 0.4mV多数场景可以忽略但在高精度测量场景就要认真对待了。编码量化得到的序号转换成二进制数字。比如输入 1.65V对 12 位 ADC 来说大约对应 2048二进制就是 100000000000。数字信号到这里才算正式产生之后数据总线、DMA、内存里流动的都是这个二进制数。1.3 关键问题Nyquist 采样定理不是“选大一点的频率”就行采样频率怎么定是 ADC 使用中最容易被低估的一环。Nyquist 采样定理说要无失真地重建一个最高频率为 f 的模拟信号采样频率必须至少是 2f。但实际工程里几乎没人卡着 2 倍去做因为真实信号总伴随噪声和谐波而采样过程里有一个很隐蔽的坑叫“混叠”。混叠用一句大白话解释就是如果采样频率不够高高频信号会被“伪装”成低频信号而你根本看不出来因为采样点完全一样。网上有高速旋转车轮倒转的视频就是这个原理视觉采样率跟不上轮辐的转动频率看起来轮子就在倒转。ADC 同样如此信号里一旦混入了超过采样频率一半Nyquist 频率的成分这个高频成分不会消失而是折叠回低频区域污染你要测的有效信号。有个真实的例子。用 1kHz 采样率去采一个 600Hz 的信号按直觉认为 1kHz “挺够用了”但这个信号频率大于 500Hz 的 Nyquist 频率最终你会看到 400Hz 的假信号而且这个假信号数据非常干净根本不会让你觉得数据有问题。这就是混叠最坑的地方它不是产生噪声而是产生一个看起来合理、实际完全错误的读数。所以我做 ADC 采集项目时的习惯是采样率至少留 5 到 10 倍裕量如果信号最高频率是 100Hz采样率至少设到 1kHz。如果信号源本身带了明显的高频噪声前置 RC 低通滤波器比任何数字滤波都更有效因为数字滤波只能处理已经被混叠“污染”的数据而模拟滤波是在污染发生之前就把高频成分挡掉了。2. ADC 不只是“一个模块”架构选型与外设的完整形态2.1 SAR ADC、FLASH ADC、Δ-Σ ADC 怎么选MCU 内置 ADC 大多数是 SAR逐次逼近型架构也就是“成功逼近寄存器”结构。它的工作原理很像用天平称重先放最大的砝码比如比较电压的一半看电压是否超过超过就保留没超过就退回去换成下一档更小的砝码如此逐级比较。12 位 SAR ADC 就要比较 12 次每比较一次需要一个时钟周期。这种架构的特点是转换时间固定、功耗低、分辨率适中非常适合一般传感器采集、电池电压检测、电机电流采样这类场景。除了 SAR另外两种常见架构也要了解。FLASH ADC并行比较型用一堆比较器同时比较所有参考电压速度极快但分辨率每增加 1 位比较器数量翻一倍12 位就需要 4095 个比较器所以只存在于超高速示波器芯片里。Δ-Σ ADC 则是另一个极端用极低的位数常见 1 位配合极高的过采样率和数字滤波换取非常高的分辨率常用于高精度称重、音频编解码但转换延时大不适合快速实时控制。架构速度分辨率延迟典型场景FLASH极快低≤8位极低示波器前端、高速通信SAR中等中10~16位低MCU 内置 ADC 主流方案Δ-Σ慢高16~24位高称重传感器、音频、精密测量2.2 16位 ADCEEPROM 存两个点就敢说校准校准的意义和做法ADC 硬件本身是“线性”的但真实世界里没有理想器件。实际芯片内部的比较器、参考源、采样电容都存在失调和增益误差。失调误差指的是输入电压为 0 时输出码不为 0而是偏了一个固定值增益误差指的是实际转换曲线和理想曲线的斜率不一致满量程处偏差最明显。ADC 校准的思想就是测出这条真实曲线上的两个点然后把它拉回到理想曲线上。为什么要两个点因为两点确定一条直线有了斜率和截距就能修正整条曲线上任意一点的读数。具体做法是给一个已知的精确电压 V1读取 ADC 原始码 C1再给另一个精确电压 V2读取 C2。然后得到修正公式修正值 V1 (原始码 - C1) × (V2 - V1) / (C2 - C1)存到 EEPROM 里的就是两个标定点数据每次上电读出来算一次斜率和偏移。这个方案成本很低却能把整体精度从“芯片本身的 ±2% 甚至更差”提升到“修正后的 ±0.1%”量级。外部 ADC 芯片的三点校准思路跟这个一样只是多点拟合能进一步修正非线性误差原理上都是“测标准源反推修正系数”。2.3 时钟抖动、电源噪声与 PCB 布局的 3 个要点ADC 对采样时钟的质量极其敏感尤其是做高位数采样时。时钟抖动会让采样时刻不稳定等效为在信号上叠加了一个额外噪声信噪比直接恶化。给 ADC 供电的电源如果带有高频纹波也会通过内部参考电压耦合到转换结果里。所以硬件设计上要注意三个关键点。第一MCU 的模拟电源引脚VDDA和模拟参考电压引脚VREF要单独走线用 0.1μF 和 1μF 或 10μF 电容并联就近去耦。这个并联组合常被称为“低频大电容储能、高频小电容滤纹波”小电容负责高频大电容负责瞬态响应两个叠在一起才能覆盖更宽的频段。第二ADC 输入引脚前方加入一个 RC 低通滤波器。一方面把带外高频噪声滤掉避免混叠另一方面RC 的电容可以作为 ADC 内部采样电容的“蓄水池”。因为每一次采样瞬间内部开关闭合采样电容会从外部抽走一小股电荷如果外部电容太小这个电荷抽走会拉低输入电压造成读数偏低。放一个 100nF 外部电容就能把这种电荷冲击吸收掉采样结果稳定很多。第三模拟地和数字地分开铺然后在 MCU 下方单点连接。数字电路的高速翻转会在数字地上产生很大的地弹噪声如果模拟部分和数字部分共用地回路噪声就会顺着地线进入 ADC 参考回路。单点连接的目的是让数字回流地电流不经过模拟敏感区域。很多入门开发板并没有严格做这个区分所以你会看到同一个板子有人测出来很稳有人测出来跳动厉害往往就是参考地处理和走线差异导致的。3. 外设工作原理解析从寄存器到 DMA3.1 外设本质上是一组寄存器状态机嵌入式里常说的“外设”并不是一个黑盒子它本质上就是芯片内部的一组数字逻辑电路通过总线映射到 CPU 的地址空间里。操作外设本质上就是往特定地址读或者写值这些地址就是寄存器。MCU 外设手册里密密麻麻的寄存器表格归根到底就是在描述一个状态机写控制寄存器 给出输入读数据寄存器 取走输出读状态寄存器 查询当前状态。以 ADC 外设为例简化来看有这么几个关键寄存器控制寄存器启动转换、配置分辨率、采样时间寄存器配置采样周期数、状态寄存器转换完成标志、数据寄存器保存转换结果。流程就是配置 → 启动 → 等待标志 → 读数据。不管芯片厂商把这一套包装成标准库还是 HAL 库底层序列都不会改变理解了这个序列任何 MCU 的 ADC 驱动都能快速上手。3.2 从轮询到中断阻塞、查询和 DMA 三种使用方式使用 ADC 有三种典型模式各自的优劣非常明显。轮询模式启动转换后CPU 在一个 while 循环里不断查询转换完成标志位。代码最简单但 CPU 被完全占住转换期间干不了别的适合低频采集比如每秒读一次温度。中断模式启动转换后CPU 去干别的事转换完成时触发中断在中断服务函数里读取数据。CPU 利用率提升但是频繁进中断也有开销如果以 100kHz 采样率连续转换意味着每秒进 10 万次中断系统很容易被拖垮。DMA 模式DMADirect Memory Access直接存储器访问是芯片内部一个能独立搬数据的外设。ADC 转换完成后数据不需要 CPU 参与直接通过 DMA 通道搬运到内存数组里。搬运完成后 DMA 触发一次中断告诉你“一批数据准备好了”。这才是高速连续采集的正确打开方式CPU 只需在后台处理数据几乎零额外负担。3.3 一个可复用的 ADC 多通道采集配置示例下面给一个基于常见 Cortex-M MCU 的简化配置示例不绑定具体芯片型号但结构和寄存器名按照主流芯片习惯来写。核心逻辑是配好时钟、引脚、DMA然后循环启动转换。// 假设宏定义ADC_BASE、ADC_CH_SEL、DMA_CH_ADC 等 static uint16_t adc_buffer[4]; // 假设采集 4 个通道 void ADC_Init(void) { // 1. 使能时钟 RCC-APB2ENR | RCC_APB2ENR_ADC1EN; RCC-AHBENR | RCC_AHBENR_DMA1EN; // 2. 配置引脚为模拟输入 GPIOA-MODER | (3U 8); // PA4 模拟模式 GPIOA-MODER | (3U 10); // PA5 模拟模式 // 3. ADC 参数12 位分辨率采样周期 28.5 个周期 ADC1-CR1 0; ADC1-CR2 0; ADC1-SQR1 (4 - 1) 20; // 4 个转换序列 ADC1-SQR3 (4U 0) | (5U 5); // 通道 4、通道 5 前两位 ADC1-SMPR1 (7U 12) | (7U 15); // 通道 4、5 最长采样时间 // 4. 配置 DMA外设地址固定为 ADC 数据寄存器内存地址为数组 DMA1_Channel1-CPAR (uint32_t)ADC1-DR; DMA1_Channel1-CMAR (uint32_t)adc_buffer; DMA1_Channel1-CNDTR 4; DMA1_Channel1-CCR DMA_CCR_MEM2MEM_DISABLE | DMA_CCR_PL_LOW | DMA_CCR_MSIZE_16BIT | DMA_CCR_PSIZE_16BIT | DMA_CCR_MINC_ENABLE | DMA_CCR_DIR_FROM_PERIPH | DMA_CCR_EN; // 5. 使能 ADC 的 DMA 请求并校准 ADC1-CR2 | (1U 8); // DDS 模式 ADC1-CR2 | (1U 23); // 使能 DMA ADC1-CR2 | (1U 0); // 启动 ADC // 等待校准完成略去具体延时 }这段逻辑里ADC 不断按通道 4、通道 5 以及后续配置的通道顺序循环转换每次转换完 DMA 自动把结果搬进 adc_buffer当搬完一圈 4 个数据后 DMA 计数归零可以触发中断通知应用层。数组里的下标固定对应通道顺序这一点非常重要多通道采集错位的问题绝大多数出在“改动了通道顺序但没有同步改 DMA 数量和内存处理逻辑”上。实际项目里我不会真的让 DMA 一直跑满速而是用定时器触发 ADC 启动这样采样率就变成完全可控的。比如定时器每 1ms 触发一次 ADC 启动那么采样率刚好 1kHz数据天然按时间对齐后面做滤波、频谱分析都非常省事。4. 数据回来了然后呢滤波、标定与真实场景4.1 数据漂移是什么常见滤波手段ADC 数据回来之后真正考验工程能力的地方才开始。裸数据往往是没法直接用的最典型的问题就是“漂移”放那不动数值却在小范围跳动甚至缓慢上升或下降。数据漂移的来源很多可能是电源纹波、基准电压温漂、信号源阻抗过高导致的采样不完整也可能是附近数字信号耦合进来的噪声。面对漂移软件滤波是第一道防线也是成本最低的。三种滤波手段几乎覆盖了 90% 的 MCU 采集场景。中值滤波连续采 N 次排序取中间值。对毛刺类脉冲噪声效果极好代价是需要排序比较耗时间适合低速采集。滑动平均滤波维护一个长度为 N 的队列新数据进来旧数据出去取平均。对随机噪声抑制效果好但是会带来 N/2 个采样周期的延迟且对脉冲毛刺不敏感一个极端毛刺会被平均掉一部分但不是完全消除。一阶低通滤波递推平均滤波代码实现极其简单只有两行y y alpha * (x - y);alpha 是滤波系数范围 0 到 1。alpha 越大滤波越轻、响应越快alpha 越小滤波越重、响应越慢。等效于一个模拟 RC 低通滤波器对高频噪声抑制平滑同时有很好的实时性。我的经验是一般传感器场景 alpha 取 0.05 到 0.2 比较合适比如电机电流采样取 0.2温度采样取 0.05因为温度本来变化就慢。滤波参数要怎么定最直接的办法是用串口把原始数据打出来在 PC 端用串口助手或 Python 画一下曲线看噪声的频率和幅度再决定滤波窗口长度。不要拍脑袋定否则要么滤波太强把真实信号削平了要么滤波太弱根本压不住噪声。如果要更进一步就得先弄清楚一件事软件滤波也分“低通”“高通”“带通”的概念。一阶低通滤波器的截止频率 fc alpha / (2π × T)其中 T 是采样周期。假设采样率 1kHzT 1msalpha 0.1截止频率约 16Hz意味着高于 16Hz 的成分都被明显削弱。这个公式非常有价值因为你可以像设计模拟电路一样设计数字滤波器的带宽而不是盲人摸象。4.2 滤波后还能拿来干什么FFT 频谱分析、环境监控数据稳定了就能往更实际的方向延伸。比如做一个基于 MCU 的 FFT 频谱分析系统把 ADC 连续采集的信号做快速傅里叶变换得到频谱分布。FFT 需要采样数据均匀、连续所以定时器触发采样 DMA 搬运 环形缓冲区是标配。FFT 的核心参数是采样点数和采样率分辨率 采样率 / 采样点数比如 1kHz 采样率、256 点 FFT频率分辨率就是 3.9Hz只能分辨差异大于 3.9Hz 的频率成分。如果要做精细的振动分析就要提高采样率或增大 FFT 点数但 MCU 内存有限512 点 FFT 通常就是入门级 MCU 的实用上限了。再举一个更常见的应用环境监控。用 ADC 采集温湿度传感器输出、光敏电阻分压数据经过滤波后与阈值比较超过阈值就执行逻辑。这里有一个 MCU 内置的实用功能——模拟看门狗Analog Watchdog。它可以在 ADC 转换结果低于下限或高于上限时直接产生中断这样就不需要 CPU 不断去轮询比较数值数据超过阈值时由硬件自动通知你省资源又及时。4.3 完整的最小系统示例从读电压到输出到日志把上面的内容串成一个完整的例子。假设要做一个小家电的电池电压监测MCU 每隔 100ms 采一次电压做滑动平均滤波再换算成真实电压值最后通过串口打印。这里给出核心代码逻辑。#define V_REF 3.30f #define ADC_FULL_SCALE 4096.0f #define FILTER_N 16 static uint16_t filter_buf[FILTER_N]; static uint8_t filter_idx 0; static uint32_t filter_sum 0; void Timer_100ms_ISR(void) { uint16_t adc_raw ADC_GetConversionResult(); // 从 ADC 数据寄存器读取 // 滑动平均滤波 filter_sum - filter_buf[filter_idx]; filter_buf[filter_idx] adc_raw; filter_sum filter_buf[filter_idx]; filter_idx (filter_idx 1) % FILTER_N; uint16_t avg_raw filter_sum / FILTER_N; // 换算真实电压并考虑分压电阻修正系数 float voltage (float)avg_raw / ADC_FULL_SCALE * V_REF * 2.0f; // 假设 2:1 分压 // 串口日志输出 printf(ADC:%d, %.2fV\r\n, avg_raw, voltage); }这个例子里有几个容易踩的细节filter_sum 如果放 8 位单片机里要注意溢出16 个 12 位值最大为 65520超过 uint16 上限一点点需要把 filter_sum 声明成 uint32_t分压系数一定要根据实际电阻值计算而不是想当然地写上“2.0”printf 在 MCU 上如果重定向了串口输出会比较耗时100ms 打印一次还好如果高频输出就要考虑用二进制协议替代文本输出。5. 常见问题与排查技巧实录5.1 现象一ADC 数值漂得离谱这是新手最高频的问题。接一个稳定的电压源串口打印出来的数值却在几十甚至几百个 LSB 之间乱跳根本不是“轻微波动”的级别。排查顺序我建议按这几步走。先检查硬件输入的信号源内阻是不是太大。如果信号源阻抗超过 10kΩ直接接 MCU 的 ADC 引脚采样瞬间内部采样电容充电RC 时间常数过长充电不完全数据就会带很大的随机性甚至系统性偏低。解决方法是加一个运放缓冲器电压跟随器或者加一个外部电容来提供瞬间电荷。再检查软件采样时间是不是设得太短了。很多 MCU 默认采样周期是 1.5 或 7.5 个 ADC 时钟周期但实际使用高速时钟时ADC 时钟本身很快1.5 个周期很可能根本不够充电。把采样周期调到最大比如 STM32 上的 239.5 周期大部分“漂移”问题会明显改善。如果还是很跳检查参考电压和供电。用万用表量一下 VDDA 和 VREF 引脚的电压是否纹波很大曲线是否干净。如果整块板子是 USB 供电USB 5V 经过板载 LDO 转 3.3VLDO 输入端纹波大输出端通常会好一些但如果 MCU 附近没有足够的去耦电容高速数字翻转的噪声会直接耦合到模拟电源上。5.2 现象二数据跳变 / 多通道 DMA 数据错乱多通道 DMA 采集时数据错乱是一个典型问题。现象是明明通道 1 接的是电位器通道 2 接的是光敏打印出来却时不时对调或者某次数据整体偏移了一个位置。这通常不是硬件问题而是“DMA 缓冲区和通道序列配置不一致”。具体来说芯片内部的 ADC 会按照 SQR3、SQR2、SQR1 里定义的顺序依次转换通道每转完一个通道结果打入数据寄存器DMA 就把数据搬走。DMA 本身不关心你配置了多少个通道它只关心数据寄存器只要产生新值就往内存地址写一个。如果你在 DMA 配置时CMAR 指向数组首地址而数组长度 CNDTR 是 3但 ADC 转换序列有 4 个通道那么 DMA 搬完 3 个数就停了第 4 个通道的结果会继续打入数据寄存器却没人搬走。下次 DMA 重新启动时第一个写进去的恰恰是上次遗留的第 4 通道数据整个数组错位一位。解决方法是永远保证CNDTR ADC 转换通道数并且这个数在系统运行中不要随意变化。如果要在运行时动态修改通道数一定要先停 DMA 和 ADC修改配置清空 DMA 计数器再重新启动。另外一个容易忽略的点是数据寄存器宽度。12 位 ADC 数据在寄存器里是右对齐存储的但 DMA 搬运时如果配置成 8 位模式只会搬低 8 位高 4 位丢失数据变成原值的低位看起来就像信号被截断了。所以 DMA 搬运宽度必须和 ADC 数据寄存器宽度一致1 6位或 32 位不要想当然地按“数据长度是 12 位”去配 8 位搬运。5.3 现象三上电后外设逻辑混乱“上电后外设逻辑混乱”这个问题在那些从低功耗模式唤醒、或者多外设共享电源域的板子上经常出现。表象是第一次上电运行正常复位之后数据不对或者要按两次复位才能稳定跑起来。这种问题十有八九出在“未等待外设就绪”或者“未重新初始化外设时钟”上。特别是带内部参考电压或者带校准功能的 ADC芯片上电后首先内部模拟部分要稳定然后要执行一次校准。如果代码太快在模拟电源还没稳定的时间窗口内就去读 ADC得到的数据自然不可靠。解决办法是给 ADC 模块一个明确的等待时间。有些芯片会提供“校准完成标志位”直接轮询这个标志最可靠如果没有标志位就加一个 10ms 级别的延时给模拟电路充足的稳定时间。5.4 问题速查表把平时调试中积累的高频问题整理成一张表方便后面遇到问题直接对照排查。问题现象可能原因排查 / 解法数值整体偏小采样时间不足、信号源阻抗过高增大采样周期输入端加 0.1μF 电容数值随机跳动大参考电压波动、电源纹波、地噪声优化电源去耦检查模拟地与数字地多通道数据错位DMA 计数器与通道数不匹配确保 CNDTR 通道数修改序列前先停 DMA数据只有低 8 位DMA 搬运宽度配置错误把 DMA 位宽和数据寄存器位宽设为一致上电初期数据异常模拟模块未稳定、未完成校准增加等待时间等待校准完成标志读数与万用表差异大分压电阻误差、未做标定用标准源做两点校准并软件修正高频信号被误读为低频采样率不足导致混叠提高采样率或加模拟低通滤波器这里单独强调一下“读数与万用表差异大”这个问题。很多初学者用万用表量到一个电压然后用 ADC 读发现差了几十毫伏甚至更多就怀疑 ADC 坏了。但实际上万用表和 ADC 的测量原理很多情况下不同万用表通常用较高内阻和较慢的积分式测量测的是平均值ADC 是瞬时采样采到的可能是信号上的某个波动点。如果被测信号本身带有小幅波动两者读数存在差异是正常的。更重要的是分压电阻的精度常用的 5% 精度电阻两个串联分压后误差轻松超过 3%这个误差也远大于 ADC 本身的分辨率误差。排除这些因素以后还有偏差再考虑做校准。最后再分享一个我自己很受用的经验调试 ADC 不要一上来就接真实传感器。先用一个电位器接成简单分压电路然后用万用表实测电位器输出电压再对比 ADC 的原始码换算电压确保这一条链路完全精准了再接传感器。这个习惯帮我避开了很多“传感器原理没搞清却以为是 ADC 采不准”的坑。ADC 是嵌入式系统中承上启下的关键外设它既要和模拟世界的各种传感器打交道又要和数字世界的 CPU、DMA、内存协同工作。把它的工作原理彻底弄懂往后做数据采集、信号处理、反馈控制心里都会非常有底。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价