Arduino Due DAC 输出范围校正:差分放大电路实现 0–3.3V 全量程
元件清单
| 元件 | 规格 | 数量 |
|---|---|---|
| Arduino Due | – | 1 |
| 电容 C1, C2 | 100 nF,陶瓷或聚酯 | 各 1 |
| 电阻 R1, R2 | 100 kΩ、150 kΩ,±1%,¼ W | 各 2 |
| 电阻 R3 | 1.3 kΩ,±1%,¼ W | 1 |
| 电阻 R4 | 6.8 kΩ,±1%,¼ W | 1 |
| 多圈电位器 Rp | 200 Ω | 1 |
| 运放 U1 | LM358(单电源轨至轨更佳,如 TLC2272) | 1 |
问题背景
Arduino Due 的两路 12 位 DAC(DAC0/DAC1)输出范围并非 0–Vref,而是 1/6 Vref 至 5/6 Vref。在 Vref = 3.3V 时,输出为 0.55V–2.75V,幅度仅 2.2V,分辨率约 0.537 mV/步。许多应用需要 0–3.3V 全量程输出,需外接电路校正。
电路原理
采用单电源差分放大电路:
- 基准电压 Vp:由 R3、R4、Rp 分压产生 0.55V,Rp 用于微调,使 DAC 输出 0 码时电路输出接近 0V(实测约 8 mV)。
- 差分放大:增益
G = R2/R1 = 150k/100k = 1.5。输出Vo = G × (Vi - Vp)。当 Vi 从 0.55V 变至 2.75V 时,Vo 从 0V 变至 3.3V,实现全量程映射。 - 电容 C1、C2 用于电源去耦与稳定。
设计要点
- 四只增益电阻(R1、R2)务必用 ±1% 或更高精度,否则增益误差直接影响量程。
- 运放必须支持单电源工作,LM358 可用但输出无法达满轨;若需输出 >3.3V 或更接近轨,请选轨至轨运放(如 TLC2272)。
- Rp 为多圈电位器,便于精细调节零点。
- 原理图见下图(GIF 动图展示连接)。
原理图

验证方法
- 上传代码让 DAC 输出 0 和 4095,用万用表测量电路输出,调节 Rp 使 0 码输出 ≈ 0V。
- 输出 4095 码,检查是否达 3.3V,若偏差大微调 R1/R2 或 Rp。
- 中间码值线性度测试,确认映射准确。
适用场景
需 0–3.3V 模拟输出的传感器激励、音频波形生成、PID 控制输出、外设驱动等。
制造工艺
- 使用 OpenSensors 监测空气质量:Arduino 与 Python 实战指南
- 用 Arduino 制作万能红外遥控器:分步指南
- 智能窗帘:基于Arduino与太阳能的自动光控系统
- Arduino Due 触摸屏井字棋游戏 — 人机对战
- DIY 数字身高仪:Arduino Nano + VL53L0X 激光测距 + OLED 显示
- 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
- 自制 FlightGear 飞行模拟升降舵配平轮:Arduino Nano + Python UDP 桥接方案
- 自制可拳击的可编程键盘按钮:基于 Arduino 与压电元件的分步指南
- Arduino 8 位并行 IO 端口库:一行代码实现 8 位数字读写
- 热敏电阻测温轻松上手:Arduino 分步实战教程
- Arduino 合成乐音:从零实现 88 键钢琴全音域
- 为Arduino构建隔离模拟输入电路