简介:这份STM32F103C6T6-AD7791.rar资源是一份基于STM32CubeIDE和HAL库的AD7791 24位模数转换器驱动例程,面向需要实现低频高精度电压采样的嵌入式开发者。示例以STM32F103C6T6为主控,采用软件模拟SPI协议读取AD7791数据,适用于低功耗、50Hz/60Hz同步抑制的测量场景。资源包共163个文件,约64.38MB,包含HAL库头文件与源码(h/c)、编译生成的o/d/elf/map文件、CubeMX配置(ioc)、工程管理文件(cproject/project/ld/makefile)以及说明文档(md/txt),便于直接导入工程或对照学习。目前已有880人学习下载,配合作者博文《STM32模拟SPI协议获取24位模数转换芯片AD7791电压采样数据》阅读,可快速掌握模拟SPI时序、ADC数据解析与滤波思路,适合中高级开发者作为参考例程二次开发。 搞嵌入式这些年,我见过太多以芯片型号命名的工程压缩包,比如这个STM32F103C6T6-AD7791.rar。名字把方案核心写得很清楚:一颗 STM32F103C6T6 做主控,一颗 AD7791 做 24 位高精度 ADC。这个组合在称重仪表、桥式压力传感器采集、热电偶测温、4-20mA 模拟量采集这些对精度有硬指标的场合非常常见。我自己用这套搭配做过几版小板子,踩过不少坑,也总结出一套比较顺的调通路径。这篇就把方案选型、硬件接线、驱动代码、调试排障整个链条拆开讲一遍,想从单片机内置 12 位 ADC 升级到真正高精度采集的同学,照着走能省不少时间。
1. 先搞清楚这套方案解决什么问题
1.1 24 位 sigma-delta ADC 和单片机内置 ADC 的本质差别
很多人一开始想不通:STM32F103C6T6 明明自带两路 12 位 ADC,为什么还要外挂一颗 AD7791?这里面的差距不是“12 位变成 24 位”这么简单,而是两种完全不同的转换原理。
STM32F103 内置 ADC 是逐次逼近型(SAR),每一位比较都需要一个时钟周期,12 位分辨率在 3.3V 基准下,量化步进大约是 0.8mV。听起来还行?但称重传感器满量程输出通常只有几毫伏到十几毫伏,用 12 位 ADC 去采,相当于拿厘米刻度的尺子去量头发丝,一个 LSB 可能就吃掉整个信号的大半。更麻烦的是 SAR ADC 对前端噪声几乎没有抑制能力,源阻抗稍高读数就跳。
AD7791 这类 sigma-delta ADC 的思路完全不同。它用远高于信号频率的采样率对输入持续过采样,再用数字滤波器把大部分量化噪声推向高频并滤除,所以能在低频段拿到非常干净的有效位数。AD7791 是 ADI 的一颗单通道 24 位 sigma-delta ADC,带缓冲的差分输入、内置时钟,典型工作电流在 200μA 级别,接口是 3 线 SPI。它不需要外部晶振,不需要负电源,外围非常简单,特别适合做低功耗、高分辨率、单通道的模拟前端。配合 3.3V 基准时,双极性模式下 1 个 LSB 的理论值只有 3.3V 除以 2 的 23 次方,大约 393nV,这才叫“微伏级测量”的起点。
1.2 AD7791、ADS1232、HX711、ADS1256 到底怎么选
高精度 ADC 圈子里这几个型号被问得最多,很多人拿着称重需求不知道选谁。我按实际项目经验整理了一张对比表:
| 型号 | 分辨率 | 通道数 | 接口 | 典型定位 | 价格/易用性 |
|---|---|---|---|---|---|
| STM32 内置 ADC | 12bit | 多路 | 内部 | 中低速采集、电压监测 | 免费,但精度有限 |
| AD7791 | 24bit | 1 路差分 | SPI 3 线 | 低功耗单通道高精度 | 中等,外围简单 |
| ADS1232 | 24bit | 2 路差分 | 2 线串口 | 称重/桥式传感器专用 | 便宜,驱动简单 |
| HX711 | 24bit | 1 路差分 | 2 线串口 | 电子 |
本文还有配套的精品资源,点击获取