目录
[1. 概述](#1. 概述)
[2. DAC 介绍](#2. DAC 介绍)
[2.1 技术指标](#2.1 技术指标)
[2.2 工作原理](#2.2 工作原理)
[2.2.1 基础认识](#2.2.1 基础认识)
[2.2.2 完整工作流程](#2.2.2 完整工作流程)
[3. PWM 介绍](#3. PWM 介绍)
[3.1 核心逻辑](#3.1 核心逻辑)
[3.2 核心参数](#3.2 核心参数)
[3.3 PWM 的输出](#3.3 PWM 的输出)
1. 概述
ADC(模数转换器)是将现实中"慢慢变、无间断"的模拟信号转换成计算机能读懂的数字信号的电子器件
现在要**将离散的数字信号(0/1 二进制)转换为连续的模拟信号,**也需要相应的转换器------即 DAC 数模转换器
核心逻辑是 "加权求和"------ 把数字信号的每一位(bit)按照其权重(2 的幂次)转换成对应的电压 / 电流,再将这些信号叠加,最终得到与数字量成正比的模拟信号
举个最基础的 2 位 DAC 例子(参考电压 Vref=3V):
数字位:bit1(高位,权重 2¹=2)、bit0(低位,权重 2⁰=1)
数字值 00 → 模拟电压 = 0×2 + 0×1 = 0V
数字值 01 → 模拟电压 = 0×2 + 1×1 = 1V
数字值 10 → 模拟电压 = 1×2 + 0×1 = 2V
数字值 11 → 模拟电压 = 1×2 + 1×1 = 3V
DAC 广泛应用于音频、工业控制(PLC、单片机通过 DAC 输出模拟电压 / 电流,控制电机转速、阀门开度等)、通信等领域,是电子系统中不可或缺的组成部分。
2. DAC 介绍
2.1 技术指标
DAC 的主要技术指标如下:
① 分辨率
DAC 的分辨率就是它能分辨的最小模拟信号变化量,也是衡量 DAC "精细度" 的核心指标。
可以用一个形象的比喻理解:
DAC 的位数 就像尺子的 "刻度数量",分辨率就是尺子的 "最小刻度";
比如一把 10cm 的尺子,若分成 10 格(1 位近似),最小刻度是 1cm(分辨率低);若分成 100 格(2 位近似),最小刻度是 0.1cm(分辨率高)。
DAC 的分辨率直接由其位数(bit)决定,位数越多,分辨率越高,能输出的模拟信号越精细。
实际工程中,若参考电压范围是 0~Vref,常简化为 Vref / 2^n(误差极小,入门可优先记这个简化公式)。以参考电压 Vref = 5V 为例:
8 位 DAC:分辨率 = 5V / 256 ≈ 0.0195V = 19.5mV(最小能分辨 19.5mV 的电压变化);
12 位 DAC:分辨率 = 5V / 4096 ≈ 0.00122V = 1.22mV(精细度是 8 位的 16 倍);
16 位 DAC:分辨率 = 5V / 65536 ≈ 0.000076V = 76μV(精细度极高)。
② 线性度
线性度是实际转换特性曲线与理想直线特性之间的最大偏值
DAC 线性度衡量实际输出与理想线性关系的偏差,核心指标是INL(整体偏差) 和DNL(局部步长偏差)( 若 DNL < -1LSB,会出现码丢失),均以 LSB 为单位
| 特性 | 分辨率 | 线性度 |
|---|---|---|
| 核心含义 | 能分辨的最小电压变化 | 实际输出与理想直线的偏差 |
| 决定因素 | DAC 的位数(硬件设计) | 芯片工艺、元器件误差 |
| 通俗比喻 | 尺子的最小刻度(1mm) | 尺子刻度的均匀程度 |
| 关联 | 高分辨率≠高线性度 | 高线性度需要硬件工艺支撑 |
③ 绝对精度和相对精度
④ 建立时间
2.2 工作原理
以经典的R-2R 梯形 DAC T型电阻网格来介绍其工作原理,内部结构如下:

2.2.1 基础认识
| 标注 / 元件 | 作用 |
|---|---|
| \(V_{REF}\) | 参考电压源(DAC 的电压基准,整个转换的 "标尺",比如 5V、3.3V) |
| R/2R 电阻 | 构成R-2R 梯形电阻网络(核心!实现电流的 "加权分流",对应数字位的权重) |
| D0~D7 | 8 位数字输入信号(0 = 低电平,1 = 高电平,D0 是最低位 LSB,D7 是最高位 MSB) |
| 0/1 开关 | 由数字位 D0~D7 控制:数字为 1 时接运放输入端,数字为 0 时接地 |
| I/I7~I0 | 电流标注:I 是总电流,I7~I0 是 R-2R 网络各级分流后的电流 |
| 运算放大器(三角符号) | 将电阻网络输出的总电流 转换成模拟电压 V0(电流→电压转换) |
| \(R_{fb}\) | 运放的反馈电阻,决定输出电压的放大比例(V0 = -I 总 × \(R_{fb}\)) |
| \(V_0\) | DAC 最终输出的模拟电压 |
图的核心是R-2R 电阻网络的电流加权:
R-2R 梯形网络的每一级,都会把流入的电流精确二等分(因为等效电阻相等),最终让不同数字位(D0~D7)对应不同权重的电流(D7 对应最大电流,D0 对应最小电流)。
用通俗的方式解释:
- 从\(V_{REF}\)流入的总电流 I,经过第一个 R 电阻后,会分成两路:一路是 I7(流向 D7 对应的 2R 电阻),另一路继续流向右侧的 R-2R 网络;
- 每经过一级(对应一个数字位),电流都会被二等分 ------ 比如 I7 是 I 的 1/128,I16 是 I 的 1/64...I0 是 I 的 1/1(仅举例,8 位 DAC 总共有 256 级);
- 数字位为 1 时,该位对应的电流会流入运放;为 0 时,电流直接接地(不参与输出)。
2.2.2 完整工作流程
① 数字输入控制开关
比如:
若 D7=1(最高位):D7 对应的开关接运放输入端,I7 电流流入运放;
若 D7=0:开关接地,I7 电流直接流到地,不参与输出;
同理,D0~D6 的每一位,都通过开关决定 "该位的电流是否流入运放"。
② 电流求和
运放的反相输入端会收集所有数字位为 1 的电流,形成总电流\(I_{01}\)
(图中 I01):\(I_{01}\) = (D7×I7) + (D6×I16) + ... + (D0×I0)
(注:Dn=1 时取对应电流,Dn=0 时取 0)
③ 电流转电压(运放的作用)
运放接成 "反相放大器",反馈电阻 \(R_{fb}\) 将总电流转换成输出电压:\(V_0 = -I_{01} × R_{fb}\)(负号表示输出电压与参考电压极性相反,实际应用中可通过电路调整,核心是电压大小与数字量成正比)
3. PWM 介绍
但是 DAC 专用芯片价格较高,在实际应用中通常使用 PWM 技术来模拟 DAC 输出
开发板上集成了一个 DAC 模拟电路,通过单片机 IO 口生成 PWM 波来模拟 DAC 输出
PWM(Pulse Width Modulation,脉冲宽度调制 )是一种通过改变数字脉冲信号的 "占空比",来等效输出连续模拟电压 / 功率的技术
3.1 核心逻辑
PWM 信号本身是离散的数字方波 (只有高、低两个电平,比如 5V 和 0V),但通过调整 "高电平在一个周期内的占比",可以让负载得到的平均电压 / 功率等效于某一模拟值
可以通俗地理解:
把 PWM 信号比作 "给水杯接水":
高电平(5V)= 水龙头打开,水流最大;
低电平(0V)= 水龙头关闭,水流为 0;
周期 = 接水的总时间(比如 1 秒);
占空比 = 水龙头打开的时间占总时间的比例。
举例子:
- 占空比 0%:1 秒内水龙头全程关闭 → 接水量 = 0(等效 "平均水流"=0,对应 0V);
- 占空比 30%:1 秒内开 0.3 秒、关 0.7 秒 → 接水量 = 最大水量 ×30%(等效 "平均水流"=30% 最大,对应 1.5V);
- 占空比 50%:1 秒内开 0.5 秒、关 0.5 秒 → 接水量 = 最大水量 ×50%(等效 "平均水流"=50% 最大,对应 2.5V);
- 占空比 100%:1 秒内全程打开 → 接水量 = 最大水量(等效 "平均水流"=100% 最大,对应 5V)
虽然水龙头只有 "开 / 关" 两种状态(对应 PWM 的高 / 低电平),但通过调整 "开的时间占比",最终得到的 "平均水量" 是连续变化的(对应等效模拟电压)
为什么负载能 "感知到" 平均电压,而不是高低电平跳变?
① 人眼的视觉暂留(比如 LED 调光):PWM 的频率通常很高(比如几千 Hz),一个周期只有几百微秒,LED 每秒闪烁几千次 ------ 人眼的视觉暂留时间约 20ms,根本感知不到闪烁,只能看到 "平均亮度":占空比低→平均电压低→亮度低,占空比高→平均电压高→亮度高。
② 电机的机械惯性(比如电机调速):电机的转子有重量,具有机械惯性,无法跟随 PWM 的高频高低电平快速启停 ------ 它只会响应 "平均供电功率":占空比越大,平均功率越高,转速就越快,不会出现 "高电平转、低电平停" 的抖动。
③ 硬件滤波(比如简易 DAC):如果想让 PWM 输出真正平滑的模拟电压(比如替代 DAC),只需加一个 "低通滤波器"(电容 + 电阻):电容会在高电平时充电、低电平时放电,高频的高低电平跳变会被 "抹平",最终输出平滑的平均电压(比如 50% 占空比的 PWM,滤波后就是稳定的 2.5V 直流电压)。
假如还不明白,可以假设你有一个 5V 电源、一个开关、一个小灯泡、一个计时器:
操作 1:开关全程闭合(100% 占空比)→ 灯泡最亮(等效 5V);
操作 2:1 秒内闭合 0.5 秒、断开 0.5 秒(50% 占空比)→ 灯泡亮度是最亮的一半(等效 2.5V);
操作 3:1 秒内闭合 0.2 秒、断开 0.8 秒(20% 占空比)→ 灯泡很暗(等效 1V)。
👉 这个过程中,开关只有 "闭合(高电平)" 和 "断开(低电平)" 两种状态,但灯泡的亮度却能连续变化 ------ 这和 PWM 让负载感知到连续模拟量的原理完全一致。
DAC 是 "直接调节水龙头的开度",让水流大小连续变化(直接输出模拟量)
PWM 是 "快速开关水龙头",比如 1 秒内开 0.5 秒、关 0.5 秒,平均水流就是最大水流的 50%(等效模拟量)
3.2 核心参数
| 参数 | 定义 | 举例 |
|---|---|---|
| 周期(T) | 一个完整的 "高电平 + 低电平" 的时间长度,单位:ms/μs;周期的倒数是频率(f=1/T) | 周期 20ms → 频率 50Hz(常用) |
| 占空比(D) | 一个周期内,高电平时间占总周期的比例(0~100%) | 高电平 10ms、周期 20ms → 占空比 50% |
| 高 / 低电平 | PWM 信号的两个固定电平(如 Vcc=5V、GND=0V) | 单片机 PWM 常用 3.3V/0V、5V/0V |
PWM 等效模拟电压计算公式:
如果 PWM 的高电平是 Vcc(如 5V)、低电平是 0V,
那么负载得到的平均等效电压:Vavg = Vcc × 占空比(小数形式)
例子:Vcc = 5V,占空比 30% → Vavg = 5×0.3 = 1.5V
例子:占空比 100% → Vavg = 5V(持续高电平),占空比 0% → Vavg = 0V(持续低电平)
PWM 与 DAC 的核心区别:PWM 是 "等效模拟量"(需滤波),DAC 是 "直接模拟量"(精度更高),需根据场景选择。
| 特性 | PWM(脉冲宽度调制) | DAC(数模转换器) |
|---|---|---|
| 输出形式 | 离散方波(只有高低电平),需滤波得平滑模拟量 | 直接输出连续的模拟电压 / 电流 |
| 核心原理 | 调整占空比,通过 "平均效应" 等效模拟量 | 电阻网络加权求和,直接生成模拟量 |
| 精度 / 平滑度 | 依赖滤波效果,占空比分级越多越精细 | 依赖位数(分辨率),位数越高越精细 |
| 硬件成本 | 几乎无额外成本(单片机自带 PWM 外设) | 需专用 DAC 芯片 / 模块,成本更高 |
| 典型应用 | 电机调速、LED 调光、电源稳压(对平滑度要求低) | 音频输出、精密控制(对平滑度 / 精度要求高) |
3.3 PWM 的输出
PWM 对应模拟信号的等效图,如图所示:

从上图可以看到,只要保证数字信号脉宽足够就可以使用 PWM 进行编码,从而输出电压
理解:
① "编码" 在这里的意思是 ------将你想要的模拟电压值,转换成 PWM 的占空比参数:
比如你想输出 "等效 1.5V",已知 PWM 高电平是 5V,那么通过公式\(占空比=目标电压/V_{cc}\),算出占空比 = 30%;
这个 "把 1.5V 转换成 30% 占空比" 的过程,就是 "PWM 编码"------ 用数字信号的 "脉宽 / 占空比" 来 "代表" 模拟电压值
② "脉宽足够" 不是指高电平时间要足够长(比如几十毫秒),这里的 "脉宽足够" 是两个核心条件(满足其一即可):
脉宽的调节精度足够:能调出足够细的占空比梯度,让等效电压的精度满足需求 ------ 比如想输出 1.5V、1.6V、1.7V,就需要脉宽能调到 30%、32%、34%(而不是只能调 50%、100%),"精度足够" 才能编码出足够多的电压等级;
脉冲的频率足够高(周期足够小):让负载无法感知方波的 "跳变",只能感知平均电压
PWM 的输出其实就是对外输出脉冲可调(即占空比调节)的方波信号,信号频率由 T 决定,占空比由 C 的值决定,其示意图下图所示:

理解:
① 输出形态是 "方波信号":不管怎么调,PWM 对外输出的电信号永远是 "高电平(如 5V)→低电平(如 0V)→高电平→低电平" 循环的方波,没有中间电平(比如 1.5V、2.5V),这是数字信号的典型特征(只有 0/1 两种状态)
② "脉冲可调" 的核心是 "占空比调节":这里的 "可调" 不是调方波的频率(当然频率也能调,但 PWM 的核心是调占空比),而是调 "一个周期内高电平的时间占比"------本质是 "脉冲的宽度(高电平时间)在调节";
③ "脉冲" 的本质是 "高电平的时间片段" :PWM 里的 "脉冲" 就是指一个周期内的高电平部分,"脉宽" 就是高电平的持续时间,调节脉宽 = 调节占空比。
总结
- PWM 输出的本质是占空比可调的方波信号(只有高低电平,无中间值),"脉冲可调" 就是调占空比;
- "脉宽足够" 不是指脉宽时间长,而是脉宽调节精度 / 脉冲频率满足负载感知平均电压的要求;
- PWM 编码是将 "目标电压" 转换成 "对应占空比",最终通过方波的平均效应输出等效模拟电压