AD7793驱动程序(详细)

前言

AD7793是一款专门用来测温的芯片,功能强大。使用时MCU需要通过SPI通信总线配置AD7793使其工作,同时也需要SPI总线读取AD数据寄存器的数据。本文简单介绍SPI的通信时序、程序功能,如何简单的通过芯片手册成功配置AD7793芯片。

AD7793介绍

AD7793 是适合高精度测量应用的低功耗、低噪声的模拟/数字转换芯片,内置一个低噪声24 位Σ-Δ 型模拟数字转换器,其中含有3 个差分模拟输入,还集成了片内低噪声仪表放大器,因而可直接输入小信号。当增益设置为64、更新速率为4.17 Hz 时,均方根(RMS) 噪声为40 nV。采用2.7 ~ 5.25 V 电源供电,典型功耗为400 μA。
芯片内置一个精密低噪声、低漂移内部带隙基准电压源,也可采用外部差分基准电压。其它片内特性包括可编程激励电流源、熔断电流控制和偏置电压产生器。利用偏置电压产生器可将某一通道的共模电压设置为AVDD/2。
AD7793 可以采用内部或外部时钟工作,输出数据速率可通过软件编程设置,可在4.17 ~ 470 Hz 的范围内变化。内部结构框图如下
在这里插入图片描述

SPI总线

介绍

SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。
SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

特点

传输速度较快但是没有指定的流控制,没有应答机制确认是否接收到数据;通常在使用SPI总线的时候STM32需要使用4根线和外设相连。以STM32上的SPI2为例:
在这里插入图片描述

NSS:片选设备线,每个从机都有自己的一条单独的总线与主机连接,此总线的作用就是为主机选择对应的从机进行传输数据,每个从机与主机之间的NSS总线互不相干。SPI中规定通信以NSS信号线拉低为开始,拉高为结束。
SCK:时钟信号线,因为SPI是同步通信,所以需要一根时钟信号线来统一主机和从机之间的数据传输,只有在有效的时钟信号下才能正常传输数据,不同设备支持的最高传输频率可能不一样,在传输过程中传输频率受限于低速的一方;SPI是串行通讯协议,数据一位一位进行传输,SCLK提供时钟脉冲,MISO、MOSI则基于此脉冲完成数据传输。
MOSI:(Master Output, Slave Input),顾名思义,MOSI就是主机输出/从机输入,因为SPI是全双工的通信总线,即主机和从机可以同时收发数据,这样的话就需要俩条线同时分别负责:主->从和从->主这俩条传输线路。而MOSI就专门负责主机向从机传输数据。
MISO:(Master Input,, Slave Output),与MOSI恰恰相反,MISO专门负责从机向主机传输数据。

通信时序

SPI通信时序图
以SPI通信时序图为例,通讯过程中所有的运作都是基于SCK时钟线进行,SPI通讯的起始和停止都是由NSS信号线控制,当NSS为低电平时表示起始信号,高电平则表示停止信号;SPI中使用MOSI和MISO来进行全双工传输数据,SCK来同步数据传输,即MOSI和MISO同时工作,在时钟信号线SCK为有效时对MOSI、MISO数据线进行采样,采到的信息即为传输的信息。
主设备和从设备之间需要处于同一种工作模式下,我们通常来说是通过配置主设备来满足从设备的模式要求,主要有四种工作模式;
在这里插入图片描述
主要通过时钟极性CPOL和时钟相位CPHA配置工作模式,详细信息请百度。

STM32中SPI总线配置

void SPI1_Init(void)
{
   
    /*分别定义两个结构体--------------------------*/
 	GPIO_InitTypeDef GPIO_InitStructure;
    SPI_InitTypeDef  SPI_InitStructure;

	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_GPIOA, ENABLE );//PORTB时钟使能 
	RCC_APB2PeriphClockCmd(	RCC_APB2Periph_SPI1,  ENABLE );//SPI1时钟使能 	
    /*配置SCK、MISO、MOSI引脚--------------------------*/
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //PB5/6/7复用推挽输出 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA
	/*配置CS片选引脚为普通的IO--------------------------*/
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	
  • 8
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
分享AD7793测量PT100的应用心得分享,用AD7793测量PT100的部分程序,见附件下载AD7793测试程序及中文资料。经测试PT100全程温度测量范围内精度达到0.2度,至于干扰嘛,按照官方资料的硬件滤波方法效果还可以。因为涉及公司项目,所以代码不便完全公开,SPI使用的是RTT的底层硬件驱动(参考RealTouch),这里提供的代码主要是借鉴其中顶层应用部分,当然得需要软件标定。如果你感兴趣的话完全可以在这个基础上编写自已的底层驱动。对了,cpu用的stm32f103。 硬件简单描述:硬件可以参考官方资料中的提到的3线制应用,使用AD7793内部电流源,不过我采用的是4线制,效果应该更好些吧。 问题解答: 1. AD7793上电后采集正常,数据到时很稳定,过段时间后就没有数据输出了,AD一直处于转换中,不知道LZ遇到这种问题了没? 我想可能还是时序不太严谨容易出问题,当然这跟应用程序部分也可能有关系。就是软件驱动得做大量测试,硬件驱动如果用在嵌入式就涉及到同步问题。我使用的方法如下,感觉到目前为止7793工作还是挺稳定的。 其一:我现在使用RTT的底层硬件驱动,觉得就是人家编好硬件驱动还是严谨些吧。还有我在硬件上做个检测PT100是否挂载电路,如果检测不到就让7793复位。 其二:软件解决方法:就是一旦数据读取错误,就发复位命令,重新驱动。 可能感兴趣的项目设计: 基于AD7793的温度测量系统电路+PCB源文件,下载链接:https://www.cirmall.com/circuit/2490/detail?3

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

益智竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值