51单片机——DAC数模转换实验(一)

目录

[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 对应最小电流)。

用通俗的方式解释:

  1. 从\(V_{REF}\)流入的总电流 I,经过第一个 R 电阻后,会分成两路:一路是 I7(流向 D7 对应的 2R 电阻),另一路继续流向右侧的 R-2R 网络;
  2. 每经过一级(对应一个数字位),电流都会被二等分 ------ 比如 I7 是 I 的 1/128,I16 是 I 的 1/64...I0 是 I 的 1/1(仅举例,8 位 DAC 总共有 256 级);
  3. 数字位为 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 秒);

占空比 = 水龙头打开的时间占总时间的比例。

举例子:

  1. 占空比 0%:1 秒内水龙头全程关闭 → 接水量 = 0(等效 "平均水流"=0,对应 0V);
  2. 占空比 30%:1 秒内开 0.3 秒、关 0.7 秒 → 接水量 = 最大水量 ×30%(等效 "平均水流"=30% 最大,对应 1.5V);
  3. 占空比 50%:1 秒内开 0.5 秒、关 0.5 秒 → 接水量 = 最大水量 ×50%(等效 "平均水流"=50% 最大,对应 2.5V);
  4. 占空比 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 里的 "脉冲" 就是指一个周期内的高电平部分,"脉宽" 就是高电平的持续时间,调节脉宽 = 调节占空比。

总结

  1. PWM 输出的本质是占空比可调的方波信号(只有高低电平,无中间值),"脉冲可调" 就是调占空比;
  2. "脉宽足够" 不是指脉宽时间长,而是脉宽调节精度 / 脉冲频率满足负载感知平均电压的要求
  3. PWM 编码是将 "目标电压" 转换成 "对应占空比",最终通过方波的平均效应输出等效模拟电压
相关推荐
就是蠢啊3 小时前
51单片机——ADC数模转换实验(二)
单片机·嵌入式硬件·51单片机
田甲4 小时前
EasyScale单总线数字调光
单片机·嵌入式硬件
电子工程师-C514 小时前
基于51单片机的环境监测及窗帘控制系统
单片机·嵌入式硬件·51单片机
ACP广源盛139246256734 小时前
GSV2231G@ACP#2231G产品规格详解及产品应用分享
嵌入式硬件·计算机外设·音视频
星一工作室4 小时前
STM32项目分享:基于stm32的旋转书架
stm32·单片机·嵌入式硬件
qq_401700415 小时前
单片机如何控制电机
单片机·嵌入式硬件
清风6666665 小时前
基于单片机的篮球比赛计时与比分控制系统设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
悠哉悠哉愿意6 小时前
【嵌入式学习笔记】从单片机到嵌入式过渡
笔记·单片机·嵌入式硬件·学习
Coder_Boy_6 小时前
【人工智能应用技术】-基础实战-小程序应用(基于springAI+百度语音技术)智能语音控制-单片机环境搭建
stm32·单片机·嵌入式硬件