低成本MCU无ADC?用比较器实现10位Σ-Δ模数转换
2026/6/21 17:01:35 网站建设 项目流程

1. 项目概述与核心价值

在嵌入式系统开发中,模拟信号采集是一个绕不开的环节。很多低成本微控制器(MCU)为了控制成本,并没有集成模数转换器(ADC)。当你的项目需要读取一个电位器的位置、一个温度传感器的电压,或者任何其他模拟量时,没有ADC似乎就成了一个硬伤。传统的解决方案是更换一颗带ADC的MCU,或者外挂一个独立的ADC芯片,但这都意味着成本的增加和电路复杂度的提升。

几年前,我在一个对成本极其敏感的低功耗传感器节点项目中就遇到了这个难题。主控MCU选型时,HC9S08Rx系列以其极低的功耗和不错的性能脱颖而出,但它偏偏没有内置ADC。就在考虑是否要妥协换方案时,我想起了Σ-Δ(Sigma-Delta)调制技术。这种技术的精髓在于“用时间换精度”,通过过采样和噪声整形,配合数字滤波,可以用非常简单的模拟前端(往往只需要一个比较器)实现高分辨率的模数转换。

Freescale(现NXP)的这份应用笔记恰好提供了一个绝佳的实践指南:利用HC9S08Rx MCU自带的模拟比较器(ACMP)和内部定时器,仅需两个电阻和一个电容,就能在软件中实现一个10位分辨率的Σ-Δ ADC。这不仅仅是省下了一颗ADC芯片的钱,更是将系统的模拟部分简化到了极致,同时充分利用了MCU富余的数字处理能力。对于电池供电的便携设备、分布式传感器、消费类电子等场景,这种方案在成本、功耗和体积上的优势是巨大的。

本文将带你深入拆解这个方案的每一个细节,从Σ-Δ的原理开始,到外部RC电路的计算与选型,再到HC9S08Rx的配置和汇编代码的逐行分析。我会结合自己的实操经验,补充原文档中未提及的调试技巧、参数权衡的考量以及可能遇到的“坑”。无论你是正在寻找低成本ADC方案的工程师,还是对Σ-Δ转换原理感兴趣的学习者,这篇文章都将提供一份可直接“抄作业”的详细指南。

2. Σ-Δ ADC核心原理:为什么能用比较器实现高精度?

在深入硬件和软件之前,我们必须先理解Σ-Δ ADC的核心思想。否则,你只会觉得这是一堆魔法代码和神秘电路。理解了“为什么”,后面的“怎么做”就顺理成章了。

2.1 从“以时间换精度”说起

传统ADC(如逐次逼近型SAR ADC)在一个转换周期内,通过一系列精密的比较和决策,直接输出一个与输入电压成比例的数字码。它的精度严重依赖于内部数模转换器(DAC)和比较器的线性度、精度,硬件成本高。

Σ-Δ ADC走了一条完全不同的路。它用一个1位ADC(实际上就是一个比较器),以远高于奈奎斯特频率(信号最高频率的两倍)的速度对信号进行采样,这个速度就是过采样率。然后,它通过一个反馈环路,让这1位数据流的“密度”来代表模拟输入电压的平均值。最后,用一个数字滤波器对这个高速的1位数据流进行降频滤波,得到我们需要的多位数码。

简单来说:它用一个速度极快但精度只有1位的“粗糙”转换器,通过统计大量采样结果的平均值,来获得高精度的转换结果。这就是“以时间换精度”。

2.2 一阶Σ-Δ调制器:噪声整形的魔法

一阶Σ-Δ调制器是结构最简单、也最稳定的。它的核心结构如图1所示,包含三个部分:

  1. 积分器:对输入信号与反馈信号的差值进行累积。
  2. 1位量化器(比较器):将积分器的输出转化为1位数字信号(0或1)。
  3. 1位数模转换器(DAC):将1位数字信号反馈回去,与输入信号做减法。

这个反馈环路是一个负反馈系统。它的目标是迫使比较器输出的1位数据流的平均值,去跟踪输入模拟信号的平均值。如果输入电压高,反馈环路会努力产生更多的“1”;如果输入电压低,则产生更多的“0”。

这个过程的精妙之处在于噪声整形。量化过程(比较器判决)会引入量化误差(噪声)。在传统ADC中,这个噪声均匀分布在0到采样频率一半的频带内。而在Σ-Δ调制器中,积分器和反馈环路的作用,相当于一个高通滤波器作用于量化噪声。它将量化噪声的功率“推”到了高频区域,而在我们关心的低频信号带宽内,噪声被极大地抑制了。

生活化类比:想象一下你在用一把刻度很粗的尺子(1位比较器)测量一张纸的厚度。单次测量误差很大。但如果你快速测量1000次,然后把所有结果平均一下,这个平均值的精度就会远高于尺子本身的刻度。Σ-Δ ADC中的数字滤波器就是在做这个“平均”的工作,而反馈环路确保你的测量过程是围绕真实厚度上下波动的,而不是偏到一边去。

2.3 连续时间与离散时间实现

Σ-Δ调制器可以用两种方式实现:离散时间(常用开关电容电路)和连续时间。本文采用的是连续时间实现,其核心模拟部分就是一个简单的RC无源积分器(R1和C1)和一个作为1位DAC的反馈电阻(R2),如图3所示。

连续时间实现的优势

  • 电路极其简单:仅需几个无源器件。
  • 天然的抗混叠滤波:RC积分器本身就是一个低通滤波器,可以抑制输入信号中高于采样频率的高频成分,省去了额外的抗混叠滤波器。
  • 对时钟抖动相对不敏感:在某些应用场景下比离散时间实现更有优势。

性能公式: 对于一阶Σ-Δ调制器,其信噪比(SNR)与过采样率(M)的关系为:SNR (dB) ≈ 30 * log10(M) - 3.41其中,M = f_s / (2 * f_in)f_s是采样频率(比较器判决频率),f_in是输入信号带宽。

要获得N位的有效分辨率,理论上需要SNR达到约(6.02 * N + 1.76) dB。对于10位分辨率,需要SNR > 62 dB。代入公式计算:30 * log10(M) - 3.41 > 62log10(M) > (62 + 3.41) / 30 ≈ 2.18M > 10^2.18 ≈ 151

因此,过采样率M需要大于151。原应用笔记选择了M=130,实测SNR达到61.2 dB,动态范围65.7 dB,非常接近10位理论极限(约61.96 dB),是一个工程上合理且高效的选择。这意味着,如果你的输入信号带宽是100 Hz,那么采样频率f_s至少需要2 * 100 Hz * 151 ≈ 30.2 kHz

3. 硬件电路设计与元器件选型

理解了原理,我们来看如何用HC9S08Rx MCU把它搭建出来。整个模拟前端只有三个外部元件,但每一个的选择都至关重要。

3.1 核心电路图解析

参考图5的电路,我们将其分解:

  • MCU:HC9S08Rx系列,需要带有模拟比较器(ACMP)模块的型号,例如MC9S08RE或RG系列。其内部带隙基准电压(VBG,通常约1.2V)被用作比较器的参考电压。
  • 积分网络(R1, C1):这是Σ-Δ调制器的核心。输入信号V_in通过R1对电容C1进行充电/放电。C1上的电压即为积分器的输出,连接到比较器的同相输入端(ACMP+)。
  • 反馈网络(R2):连接在MCU的一个GPIO(PTA1或PTA2)与积分节点(C1与比较器正输入端连接点)之间。这个GPIO根据比较器的输出,在VDDGND之间切换,充当1位DAC,形成反馈环路。
  • 比较器:MCU内部的模拟比较器。反相输入端(ACMP-)连接内部带隙基准VBG。正相输入端连接积分节点。输出(ACO)为数字信号,指示V_in+是否大于V_in-

3.2 关键参数计算与选型依据

这是硬件设计中最关键的一步,直接决定ADC的性能和量程。

1. 电阻R1和R2的取值(设定量程)电阻R1和R2构成了一个反馈系数。它们的比值决定了输入电压V_in与内部基准VBG之间的关系,从而决定了ADC的输入量程。

原文档设定电源电压VDD = 2.4V(两节镍镉电池),并期望满量程输入也为2.4V。选择R1 = R2 = 47 kΩ

为什么是这个值?在稳态下,反馈环路迫使积分节点电压的平均值等于参考电压VBG(约1.2V)。通过基尔霍夫电流定律(KCL)在积分节点分析: 当反馈端输出VDD(2.4V)时,流入节点的电流为(V_in - VBG)/R1 + (VDD - VBG)/R2。 当反馈端输出GND(0V)时,流入节点的电流为(V_in - VBG)/R1 + (0 - VBG)/R2。 为了使比较器输出“0”和“1”的密度能反映V_in,需要确保在V_in为0V和VDD时,积分器都不会饱和(即电容电压不会持续向一个方向变化而无法回头)。R1 = R2是一个对称且简单的选择,它使得输入电压范围大致以VBG为中心,上下摆动幅度相近。经过计算,这种配置能在V_in从0V到VDD变化时,保证积分器正常工作。

实操心得:在实际应用中,VDD可能不是精确的2.4V,VBG也有公差(典型值1.2V,但需查数据手册)。如果你需要精确的绝对电压测量,这个方案可能需要进行系统校准。但对于比例式测量(如电位器分压)或变化量测量,它非常有效。如果VDD是3.3V,仍使用47kΩ,量程会等比例扩大,但需注意积分电容的充放电速度是否还能跟上采样频率。

2. 积分电容C1的取值(设定带宽)电容C1和电阻R1共同决定了积分器的时间常数τ = R1 * C1。这个时间常数必须与采样频率f_s相匹配。

  • 如果C1太大(τ太大),积分器响应慢,无法及时跟踪输入信号的变化,导致动态性能差。
  • 如果C1太小(τ太小),积分器响应过快,比较器输出的“0”“1”序列中高频噪声过多,会增加后续数字滤波的负担,也可能因为电压摆动太小而易受噪声干扰。

原文档给出一个经验值:C1应小于18 nF。这个值是基于f_s = 50 kHz,过采样率M=130(信号带宽约190Hz),通过模拟和实验得出的。它确保了在信号带宽内,积分器有足够的增益来整形噪声,同时又不会引入过大的相移导致环路不稳定。

计算公式参考: 积分器的截止频率f_c = 1 / (2π * R1 * C1)。通常建议使f_c远低于采样频率f_s(例如f_s / 10或更低),但高于你关心的信号带宽f_in。例如,若f_s=50kHzf_in=100Hz,可取f_c = 1kHz。则:C1 = 1 / (2π * R1 * f_c) = 1 / (2 * 3.14 * 47000 * 1000) ≈ 3.4 nF你可以选择一个接近的标准值,如3.3nF或4.7nF。原文档的1nF是一个更激进的选择,提供了更宽的带宽裕量,但对噪声更敏感。

3. 元器件类型与布局

  • 电阻:普通5%精度的碳膜或金属膜电阻即可。Σ-Δ架构对元件绝对精度不敏感,这是其巨大优势。但应尽量选择温度系数小、噪声低的类型。
  • 电容C1:必须使用陶瓷电容,如X7R或X5R材质。避免使用电解电容,因为其等效串联电阻(ESR)和电感(ESL)会破坏积分器的特性。
  • 电源去耦VDDVSS之间必须并联一个0.1μF陶瓷电容(尽可能靠近MCU引脚)和一个1-10μF的钽电容或电解电容。这是所有MCU电路的标准做法,对于模拟电路部分更是至关重要,可以滤除电源噪声,防止干扰比较器。
  • 布局:R1、R2、C1构成的模拟节点是高阻抗节点,极易受到噪声干扰。布线时应:
    • 使这三个元件的连接点尽可能靠近MCU的比较器输入引脚。
    • 用接地铜箔包围这个模拟区域,提供屏蔽。
    • 避免数字信号线(特别是高频时钟线)从模拟部分上方或附近穿过。

4. 软件实现:用定时器与中断构建数字滤波器

硬件搭建好后,剩下的工作全部由软件完成。软件的核心任务是:

  1. 以固定频率(f_s)采样比较器输出
  2. 对采样结果进行计数(数字滤波和降频)
  3. 每累积1024次采样,输出一个10位结果

原文档提供了两个汇编程序:SigmaDeltaM.asm(仅调制器)和SigmaDeltaF.asm(完整的ADC转换器)。我们重点分析完整的ADC实现。

4.1 系统初始化与配置

软件开始于一系列的寄存器配置,这是让MCU各模块按我们需求工作的前提。

Reset: ldhx #RamEndAddress+1 ; 初始化堆栈指针 txs lda #setSIMOPT sta SIMOPT ; 配置系统选项,如看门狗 lda #setPMCSC1 sta PMCSC1 ; 配置电源管理,使能低电压检测 mov #setACMPSC,ACMPSC ; 配置模拟比较器:使能模块,选择内部带隙基准作为反相端输入

关键点在于ACMPSC寄存器的配置(setACMPSC: equ %11100011):

  • ACME=1:使能模拟比较器模块。
  • ACBGS=1:选择内部带隙电压(~1.2V)作为比较器反相输入端(ACMP-)的参考源。这是整个方案能工作的基础。
  • ACF=0:不清除比较器标志位(我们通过查询ACO位来读取状态)。
  • ACIE=0:禁用比较器中断,我们将用定时器中断来同步采样。

接下来配置定时器(TPM),这是整个系统的“心跳”:

clr TPMCNTH clr TPMCNTL ; 清零定时器计数器 mov #setTPMMODH,TPMMODH mov #stTPMMODLF,TPMMODL ; 设置定时器溢出值,决定中断频率 bset TOIE,TPMSC ; 使能定时器溢出中断 bset CLKSA,TPMSC ; 选择总线时钟(BUSCLK)作为定时器时钟源

TPMMOD的值决定了采样频率f_s。假设总线时钟f_bus = 8 MHz。在SigmaDeltaF.asm中,stTPMMODLF被设置为$85,即十进制133。 定时器溢出周期T_int = (TPMMOD + 1) / f_bus = (133 + 1) / 8MHz = 16.75 µs。 对应的中断频率f_s = 1 / T_int ≈ 59.7 kHz。这就是我们的Σ-Δ调制器采样频率。原文档中提到的60kHz即来源于此。

4.2 主循环与中断服务程序(ISR)流程

配置完成后,程序进入一个简单的等待循环:

WaitState: wait ; 进入低功耗等待模式,等待中断唤醒 bclr PTE0,PTE ; 清除PTE0引脚(可用于外部观测) bra WaitState ; 循环等待

WAIT指令让MCU进入低功耗模式,只有中断能唤醒它。这对于电池供电设备是省电的关键。

中断服务程序(TPMInt)是核心逻辑所在,其执行流程如下:

  1. 清除中断标志:读取TPMSC寄存器后清除溢出标志TOF
  2. 置位观测点:将PTE0引脚拉高。这个引脚在硬件电路中未使用,但可以用来用示波器观察中断发生的时刻和频率,是调试时非常重要的测试点。
  3. 读取比较器并反馈
    • brset ACO,ACMPSC,SetOutHigh:检查比较器输出标志ACO
    • 如果ACO=1V_in+ > VBG),跳转到SetOutHigh,将反馈引脚PTA1PTA2置高(输出VDD),同时对结果变量Sample加1
    • 如果ACO=0,则将反馈引脚拉低(输出GND),结果变量Sample不变。
    • 这里的Sample变量,实际上就是“1”的计数器。在1024次采样中,Sample的值就是高电平出现的次数。
  4. 递增总采样计数器Counter变量加1。
  5. 判断是否完成一次完整转换
    • 检查Counter是否达到1024(10位分辨率需要2^10次采样)。
    • 如果未达到,直接从中断返回(rti)。
    • 如果达到1024,说明一次完整的10位转换完成。此时: a. 将PTE1引脚拉低(可作为“数据就绪”信号)。 b. 将16位的Sample结果(SampleH:SampleL)分别输出到PTBPTC端口。 c. 将PTE1引脚拉高。 d. 清零CounterSample变量,为下一次转换做准备。

4.3 代码中的关键细节与优化

  • 双反馈引脚:代码中同时控制PTA1PTA2,是为了增加反馈驱动能力,降低输出阻抗,确保反馈电压VDD/GND的稳定性。在实际应用中,如果MCU引脚驱动能力足够,使用一个引脚即可。
  • 10位结果的输出:结果被拆分为高8位(SampleH)和低8位(SampleL),分别从PTBPTC端口输出。由于我们只累积了1024次,SampleH实际上只有低2位有效(值范围0-3),SampleL是完整的8位。你可以根据实际需要,在软件中将其组合成一个16位整数,或者直接使用Sample变量的值(范围0-1023)。
  • 指令周期与定时:注释中标注了关键指令的机器周期数。这对于精确控制中断服务程序的执行时间很重要,确保它不会超过定时器中断的间隔。本例中ISR最长执行路径约为108个周期,在8MHz总线时钟下约为13.5µs,小于中断间隔16.75µs,是安全的。
  • 低功耗设计:主循环使用WAIT指令,在等待转换完成期间MCU处于低功耗模式,只有定时器在运行并周期性唤醒MCU进行采样。这极大地降低了平均功耗。

5. 性能实测、调试技巧与常见问题

纸上得来终觉浅,绝知此事要躬行。根据文档描述和我的实际测试,这个方案可以达到接近10位(约9.7位)的有效分辨率。但要想让它稳定工作,需要注意以下几点。

5.1 性能指标解读

  • 信噪比(SNR):文档实测在2.4V电源、125Hz输入信号、50kHz采样频率下,SNR达到61.2 dB。根据公式ENOB = (SNR - 1.76) / 6.02,可计算出有效位数(ENOB)约为(61.2 - 1.76) / 6.02 ≈ 9.87位。这是一个非常不错的成绩。
  • 动态范围(DR):实测65.7 dB。动态范围指的是系统能处理的最大信号与最小可分辨信号(通常定义为噪声电平)的比值。对于10位ADC,理论最大动态范围约为61.96 dB,实测值略高,可能是因为测量方式或噪声基底较低。
  • 线性度与单调性:Σ-Δ ADC由于其工作原理,天生具有良好的线性度和单调性。只要积分器和反馈环路工作正常,其输出码不会出现非单调(即输入电压增加,输出码反而减小)的情况。

5.2 调试工具与方法

  1. 示波器是首选工具
    • 观测点1(PTE0):连接示波器,应看到频率为f_s(约60kHz)的方波。这验证了定时器中断是否正常触发。
    • 观测点2(PTA1/PTA2):这是反馈信号。当输入一个固定的直流电压时,你会看到一个占空比变化的PWM波。输入电压越高,高电平占空比越大。这是Σ-Δ调制器正常工作的最直观证据。
    • 观测点3(积分节点):在C1与比较器正输入端相连的点测量。你应该能看到一个以VBG(~1.2V)为基准上下波动的三角波或锯齿波。其波动幅度和形状反映了环路的工作状态。如果波形失真或直流偏置严重,可能是R1/R2取值不当或C1值不合适。
  2. 逻辑分析仪或调试器:用于捕获PTB/PTC端口输出的10位结果,验证转换值是否随输入电压线性变化。
  3. 信号发生器与万用表:使用信号发生器产生一个纯净的低频正弦波或三角波作为V_in,用高精度万用表测量其实际电压,与MCU输出的数字结果进行对比,绘制转移曲线,评估线性度和精度。

5.3 常见问题与解决方案

问题1:输出码始终为0或1023(满量程)。

  • 可能原因1:比较器未正确配置或未使能。检查ACMPSC寄存器配置,确保ACME=1,并正确选择了参考源(ACBGS=1)。
  • 可能原因2:硬件连接错误。检查V_in是否确实连接到电路,R1、R2、C1是否焊接良好,没有虚焊或短路。
  • 可能原因3:输入电压超出量程。确保V_in在0V到VDD之间。如果V_in非常接近0V或VDD,积分器可能饱和,导致输出码锁死在极限值。

问题2:输出码噪声大,跳动剧烈。

  • 可能原因1:电源噪声。检查电源去耦电容(0.1µF和1µF)是否紧靠MCU电源引脚焊接。尝试使用线性稳压电源为系统供电,而不是开关电源。
  • 可能原因2:积分电容C1值过小或质量不佳。尝试增大C1值(如从1nF增加到2.2nF或4.7nF),以增强积分效果,平滑噪声。务必使用高质量的陶瓷电容(X7R)。
  • 可能原因3:采样频率f_s过高。降低定时器的TPMMOD值,从而降低f_s。过高的采样频率可能使积分器来不及响应,导致调制器不稳定。
  • 可能原因4:模拟部分布局不佳,受到数字开关噪声干扰。重新布局,缩短模拟走线,增加地线屏蔽。

问题3:动态响应慢,跟不上输入信号的变化。

  • 可能原因1:积分电容C1值过大。减小C1值可以加快积分器响应速度,但需与问题2权衡。
  • 可能原因2:输入信号带宽f_in超过了设计值。回忆一下,过采样率M = f_s / (2 * f_in)。为了达到10位精度,M需要大于130。如果你的f_s固定为60kHz,那么能处理的信号带宽f_in必须小于60kHz / (2 * 130) ≈ 230 Hz。对于更高频率的信号,你需要提高f_s,或者接受更低的分辨率。

问题4:在输入电压接近VBG(1.2V)时,输出码在512附近有规律地来回跳动几个码。

  • 这是正常现象,称为“空闲音”。当输入电压等于参考电压时,理想的Σ-Δ调制器输出会是一个稳定的01交替模式(010101...)。在实际电路中,由于元件不匹配和噪声,会表现为围绕中心值的小范围周期性波动。这通常不影响整体性能,数字滤波器会将其平均掉。如果觉得影响大,可以稍微增加C1的值,或者考虑在软件中增加一个简单的数字平均滤波。

6. 方案扩展与高级应用思考

这个基础的10位Σ-Δ ADC方案已经非常实用,但我们还可以在此基础上进行优化和扩展,以适应更复杂的应用场景。

6.1 提高分辨率:牺牲速度换取精度

根据SNR公式SNR ≈ 30*log10(M) - 3.41,分辨率每提高1位,SNR需要增加约6 dB,这意味着过采样率M需要翻倍。例如,要达到12位分辨率(SNR约74 dB),需要:M > 10^((74+3.41)/30) ≈ 10^2.58 ≈ 380如果保持信号带宽f_in不变(如100Hz),采样频率f_s需要提高到2 * 100Hz * 380 = 76 kHz。同时,软件中的累加计数器需要从1024次增加到4096次。这意味着一次完整的转换时间将从原来的约17毫秒(1024/60kHz)增加到约54毫秒(4096/76kHz)。你需要根据应用对速度和精度的要求进行权衡。

6.2 优化功耗:动态调整采样率

在电池供电应用中,功耗至关重要。一个优化策略是动态调整采样率

  • 待机模式:当监测的物理量变化缓慢时,可以大幅降低采样频率f_s和过采样率M,以极低的功耗维持一个较低分辨率(如8位)的监测。
  • 激活模式:当检测到信号变化或需要高精度测量时,再切换到高f_s和高M的模式。这可以通过在软件中动态修改定时器的TPMMOD寄存器值来实现。

6.3 多通道输入:使用模拟开关扩展

HC9S08Rx的模拟比较器通常只有1个或2个。如果需要测量多个模拟信号,可以外接一个模拟多路复用器(如CD4051、74HC4051等)。将多路输入连接到模拟开关,再用一个GPIO控制开关的地址线,轮流选通不同的输入通道到R1。软件上需要在每次转换完成后切换通道,并留出足够的时间让新的信号通过RC积分网络稳定下来。

6.4 软件滤波增强:对抗空闲音与噪声

除了基本的累加计数,可以在软件中增加更高级的数字后处理:

  • 移动平均滤波:对连续多个10位转换结果进行平均,可以进一步平滑噪声,特别是对抑制空闲音有较好效果。
  • 中值滤波:对于偶发性脉冲噪声,中值滤波比平均滤波更有效。
  • 校准算法:在代码中存储零点和满量程的校准值,对每个输出结果进行线性校正,可以补偿VBG误差、电阻公差等带来的系统误差。

6.5 移植到其他MCU平台

这个方案的核心思想是通用的,可以移植到任何带有模拟比较器和定时器的MCU上,例如常见的STM8、AVR、PIC等系列。移植的关键步骤是:

  1. 配置比较器:使能比较器模块,并选择一个稳定的内部或外部参考电压作为反相端输入。
  2. 配置定时器:设置一个定时器,以所需的采样频率f_s产生中断。
  3. 在中断服务程序中:读取比较器输出状态,控制一个GPIO进行反馈(1位DAC),并对“1”进行计数。
  4. 主循环中:当计数达到目标值(如1024)后,输出结果并清零计数器。

相比于寻找一颗带高精度ADC的MCU,利用现有资源实现Σ-Δ ADC,往往能带来更低的BOM成本和更大的设计灵活性。这个方案让我深刻体会到,在嵌入式设计中,有时“软件定义硬件”的思路能开辟出意想不到的优化路径。当你下次面对一颗没有ADC的MCU时,不妨先别急着换型号,看看它的比较器和定时器,也许一个高精度的ADC就藏在其中。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询