STM32 HAL库SPI驱动AD7789高精度ADC数据采集实战

STM32F103与AD7190高精度称重系统设计:从硬件连接到软件校准 本文详细介绍了基于STM32F103微控制器与AD7190高精度ADC芯片构建称重系统的完整方案。内容涵盖从硬件SPI接口连接、传感器接线,到软件驱动编写、寄存器配置及数据读取滤波,并重点讲解了两点校准法实现从ADC原始码值到实际重量的精确转换。该组合以高性价比实现了优异的应变采集性能,适用于需要精密测量的嵌入式应用。 阅读详情

1. 项目背景与硬件选型

最近在做一个传感器数据采集的项目,需要测量微弱的电压信号,STM32自带的12位ADC精度不够用,于是选了AD7789这款24位高精度ADC芯片。这家伙精度真的很高,最低功耗只有100μA,特别适合低速高精度的测量场景,比如温度传感器、压力传感器或者电子秤这类应用。

AD7789是ADI公司推出的Σ-Δ型ADC,内置PGA(可编程增益放大器),最高128倍增益,支持单极性和双极性输入模式。最关键的是它采用SPI接口,跟STM32连接起来特别方便。我用的主控是STM32F103C8T6,也就是常说的"蓝色药丸"开发板,性价比超高。

硬件连接很简单:AD7789的SCLK接PA5,DOUT/RDY接PA6,DIN接PA7,CS接PA4。电源方面,模拟部分我用了一颗LDO单独供电,避免数字噪声影响ADC精度。基准电压选了ADR421,2.5V的超低噪声基准源,确保测量稳定性。

2. CubeMX基础配置

打开STM32CubeMX,先配置时钟树。我用的外部8MHz晶振,PLL倍频到72MHz,这是F103的极限速度了。然后到SPI1配置:

在Mode里选Full-Duplex Master,这个很重要,因为AD7789需要先发送命令再读取数据。Data Size设成8bit,虽然ADC是24位的,但通信是以字节为单位进行的。

硬件NSS信号这里要选Disable,我们用软件控制片选。为什么不用硬件NSS呢?因为AD7789的通信协议比较特殊,需要在数据传输间隙保持CS为低电平,硬件NSS会自动拉高,不符合要求。

时钟极性(CPOL)设成High,时钟相位(CPHA)选2 Edge。这个配置是根据AD7789的时序图来的:时钟空闲时为高电平,数据在第二个边沿(也就是上升沿)采样。

分频系数我先设成256,这样SPI时钟大约是280kHz。虽然AD7789最高支持2MHz的SPI时钟,但刚开始调试时用低速更稳妥。

GPIO配置方面,除了SPI引脚,我还把PA4(CS)和PA6(RDY)配置成普通输出和输入。特别注意PA6要设置成上拉输入,因为AD7789的RDY信号是开漏输出。

最后生成代码时,记得在Project Settings里把库版本选为LL库(Low-Layer),这样代码效率更高。当然用HAL库也可以,只是函数调用开销大一些。

3. SPI通信深度解析

AD7789的SPI通信有点特殊,需要特别注意时序。它的DOUT/RDY引脚是复用的:平时作为数据准备信号(低电平有效),数据传输时作为数据输出。

通信流程是这样的:先拉低CS,然后发送8位配置命令,等待RDY变低,再发送读取命令,最后读取24位数据。整个过程CS要保持低电平,这是最容易出错的地方。

我一开始用HAL_SPI_Transmit和HAL_SPI_Receive函数,发现时序不对。后来看了源码才发现,这些函数会在传输前后控制CS引脚,不符合我们的需求。解决办法是直接用LL库的底层函数:

void AD7789_WriteByte(uint8_t data)
{
    w
STM32-24位AD7799驱动之手册代码详解,支持模拟SPI和硬件SPI 1.AD7799介绍 AD7799结构图如下所示: 其中REFIN参考电压建议为2.5V, REFIN电压低于0.1V时,则差分输入ad值就无法检测了,如下图所示: 注意: 如果REG_CONFIG的REF_DET开启的话,那么输入AD值电压低于0.5V时,则差分输入ad值就无法检测了,如下图所示: 2.AD7799差分信号的输入模式 如下图所示,差分输入电压有... 阅读详情

相关推荐

ADS1118温度采集实战:用STM32硬件SPI同时读取ADC和内置温度传感器

本文详细介绍了如何使用STM32F103C8T6的硬件SPI接口驱动ADS1118模数转换器,实现同时读取外部ADC通道数据和芯片内置温度传感器。文章深入解析了ADS1118的双数据返回机制、寄存器配置,并提供了完整的硬件SPI配置、驱动层代码以及交替采集电压与温度的实战应用方案,为物联网设备开发提供了高效、低成本的集成数据采集解决方案。

f6g7h8i9j的博客 228

STM32驱动AD7779:双极性电源下8通道同步ADC的SPI配置与数据采集实战

本文详细介绍了在双极性电源供电下,使用STM32通过SPI接口驱动AD7779同步ADC芯片实现8通道高精度数据采集的实战经验。重点解析了电源设计、抗干扰处理、寄存器配置、SPI通信技巧及数据校准方法,帮助工程师解决工业测量中的同步采样与噪声控制难题。

e3f4g5的博客 362

STM32 HAL库驱动ST7789实战案例

深入讲解如何使用STM32的HAL库驱动ST7789显示屏,涵盖初始化配置、SPI通信与显示控制,帮助开发者快速实现屏幕刷新与图形输出,提升嵌入式UI开发效率。

weixin_42298778的博客 1059

【嵌入式】STM32CubeMX配置AD7606的SPI接口实现高精度数据采集

本文详细介绍了如何使用STM32CubeMX配置STM32的SPI接口驱动高精度ADC芯片AD7606,实现8通道同步数据采集。内容涵盖硬件连接、CubeMX工程创建(定时器PWM、外部中断、SPI模式2配置)、核心驱动代码编写(含SPI数据读取与中断处理),以及调试技巧与常见问题排查,为嵌入式开发中的高精度模拟信号采集提供完整解决方案。

view3的博客 485

STM32驱动ADS1248:24位高精度ADC采样与SPI模式1配置详解

在高精度数据采集领域,24位Σ-Δ型ADC是桥式传感器、热电偶等微弱信号测量的核心器件。其内部集成的可编程增益放大器和低温漂基准源,配合外部MCU即可构建完整采样链路。然而,许多开发者在驱动这类ADC时,常因SPI时序配置不当而导致数据错位或读取失败。STM32作为主流嵌入式控制器,其SPI外设支持多种模式,而ADS1248要求的是CPOL=0、CPHA=1的Mode 1时序,理解并正确配置SCLK极性和相位是通信成功的关键。从寄存器初始化、命令字节拼装到24位转换结果的符号扩展,每个环节都直接影响最终精度

weixin_30872577的博客 147

STM32 HAL驱动AD7789[源码]

本文详细介绍了如何使用STM32的HAL库通过SPI驱动24位ADC芯片AD7789进行连续转换。作者分享了在项目中使用STM32F103RCT6的SPI模块驱动AD7789的完整过程,包括SPI模块的复用、参数设置、时钟配置以及通信协议的实现。文章特别强调了配置过程中的关键点,如时钟极性与相位的设置、通信寄存器的写入顺序以及数据读取的方法。此外,作者还提供了具体的代码示例,展示了如何配置AD7789为连续转换模式并读取转换结果。对于初学者来说,这是一篇非常实用的技术分享,能够帮助他们快速上手STM32与高精度ADC的驱动开发。

调试AD7799遇到的问题

经历了四天的挣扎,AD7799终于调试成功啦!!!!!!!说说我遇到的问题一、不判忙的状态下,读出数据是ffffff二、不加判忙读出的数据一直是000000,加上判忙后,一直检测不到RDY变低,程序一直执行在判忙函数中

AD7794使用过程中出现不工作的问题

使用AD7794进行温度测量,外部接的是六路温度铂电阻,采用单次采样方式分别进行六个通道的数据采样(每秒钟对六个通道分别进行一次采样)。

3张RTX 4090就能跑!BAGEL-7B多模态模型本地部署避坑指南(附Flash Attention安装技巧)

本文详细介绍了如何在3张RTX 4090显卡上本地部署BAGEL-7B多模态模型,包括硬件配置、环境设置、多卡并行优化及常见问题解决方案。特别提供了Flash Attention安装技巧和显存优化策略,帮助开发者高效运行这一开源多模态模型,实现文本与图像生成任务。

1a2s3d4f5g的博客 650

【毕业设计参考】基于yolov8+pyqt5自适应界面设计的锂电池表面缺陷检测系统

基于YOLOv8+PyQt5的锂电池表面缺陷检测系统结合了先进的目标检测技术与友好的用户界面设计,为锂电池质量检测提供了一种高效、准确的解决方案。未来,随着深度学习技术的不断发展,我们可以进一步优化模型,提高检测精度和速度,同时拓展系统功能,如实现实时视频流检测、与生产系统的深度集成等,为锂电池产业的发展注入新的活力。希望本文对大家在相关领域的研究和实践有所帮助,欢迎大家在评论区交流讨论。

1174

Cadence Allegro 17.4学习记录开始02-原理图Capture CIS 17.4

Allegro的第一方网表与第三方网表有以下几个区别点;Ø 与Allegro实现交互式操作的是第一方网表,第三方网表时不可以实现交互式操作;Ø 第三方网表不能将器件的Value属性导入到PCB中,输出时以封装属性来代替Value属性,第一方网表是可以的;Ø 网表导入到PCB中时,第三方的网表需要指定事先指定好PCB封装库文件,并产生Device文件,才可以将网表导入到PCB中,第一方网表则可以直接导入。

qq_31444421的博客 1万+

<工控><PLC>汇川Easy521系列PLC与汇川SV630N伺服进行EtherCat通讯的相关配置及指令编写

本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如果有值得记录的内容,也会添加进来。

用沸腾的热血,支付我们的人生吧! 2万+

YOLOv8改进 | Neck篇 | Slim-Neck替换特征融合层实现超级涨点 (又轻量又超级涨点)

本文给大家带来的改进机制是Slim-neck提出的Neck部分,Slim-neck是一种设计用于优化卷积神经网络中neck部分的结构。在我们YOLOv8中,neck是连接主干网络(backbone)和头部网络(head)的部分,负责特征融合和处理,以便提高检测的准确性和效率。亲测在小目标检测和大尺度目标检测的数据集上都有大幅度的涨点效果(mAP直接涨了大概有0.4左右。同时本文对Slim-Neck的框架原理进行了详细的分析,不光让大家会添加到自己的模型在写论文的时候也能够有一定的参照。

Snu77的博客 1万+

2026软考中级-软件设计师笔记(送最新视频教程)

核心口诀:运控存输输(运算器、控制器、存储器、输入、输出)例题(2019年上半年):核心公式:数字签名流程:数字证书作用:死锁4个必要条件:死锁判断公式:处理策略:程序设计语言的四大核心成分:顺序表操作(时间复杂度):链表操作(时间复杂度):核心思想:频率高的字符用短编码,频率低的用长编码 → 最小化总编码长度构造步骤(贪心算法):前提:有序表(升序/降序) 步骤:时间复杂度:O(log₂n) 例:查找中核心思想:用哈希函数将关键字映射到存储位置 哈希冲突:不同关键字映射到同一位置 → 用链地址法或开放定址

36万+

61、增益调度控制器:原理、建模与调优

本文详细介绍了增益调度控制器的原理、建模方法和调优流程。增益调度是一种针对非线性系统的控制策略,通过在不同工作点使用不同的线性控制器实现全局控制。文章涵盖了在Simulink中使用Control System Toolbox模块建模的具体步骤,以及如何利用systune进行增益调度表的调优。同时,还讨论了实际应用中的注意事项、典型案例(如化学反应器和飞机控制),并与其它控制方法进行了对比。最后,文章展望了增益调度控制器的未来发展趋势,包括与人工智能的结合、多目标优化调优以及实时调优能力的提升。

rgv234567的博客 181

DirectX function “GetDeviceRemovedReason“ failed with DXGI_ERROR_DEVICE_HUNG (“The GPU will not resp

游戏报错"DXGI_ERROR_DEVICE_HUNG"的解决方案 在使用RTX 40系显卡运行FIFA 23等游戏时,可能出现DirectX报错导致游戏崩溃。这主要由于最新显卡驱动与DirectX 12的兼容性问题。解决方法包括: 降级显卡驱动版本 修改游戏配置文件,将DIRECTX_SELECT设为1 在显卡控制面板中关闭垂直同步、抗锯齿、DLSS 3等功能 调整电源模式为性能优先 这些操作可以有效解决因驱动兼容性导致的游戏崩溃问题。

猿小白的博客 3867

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: 从模拟到数字的艺术:STM32 ADC与DMA如何重塑信号采集的边界
下一篇: 从像素到决策:工业相机如何成为机器视觉的智慧之眼
peace
博客等级 码龄26年 431粉丝 1252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值