SPI与ads8345

这段时间专注于对stm32外设的学习,把自己的学习心得和大家分享。

通过spi控制ads8345模数转换,涉及spi和ads8345两个操作对象。


一ads8345

1基本信息:位数-16位,通道数-8(8通道单端输入或四通道差分输入),输出形式-串行,功能-模数转换,转换速率-100KHz。

2.这是引脚图,


DCLK输入时钟信号,决定实际转换速率。CS片选。Din输入控制字,上升沿锁存。Dout输出转换结果,下降沿输出。COM用于模拟输入的常用参考(例如量程Vcom-Vref~Vcom+Vref),一般接Vref。SHDN低功耗待机模式。(可以不用)BUSY工作时输出低电平,不工作时(cs为高)输出高阻抗。

3.控制位


S为开始位(为1),A2A1A0通道选择位,Bit2是单端或差分选择位,Bit1和Bit0用于掉电模式选择和时钟模式选择。


11总是上电 00每个转换之间掉电 10内部时钟模式 01保留待将来使用

****关于时钟模式的要求:外部时钟转移数据进出设备,第一次上电时必须设置时钟,时钟模式选择切换时需要一个额外的转换周期,每个转换间应设为掉电模式

实际使用时,Bit1,Bit0一般直接设为11。


通道选择注意,对应的值与实际通道并不吻合,应按参考手册设置。

4.时序图


前八个时钟周期用于SPI发送控制字给ads8345,接下来一个时钟周期用于BUSY=1(这导致转换结果需要左移一位,因为SPI最少一次传输或接受8位),再接下来16个时钟周期用于SPI发送ads8345转换结果,LSB位传送时,spi发送第二个控制字的MSB位(bit7)。以24个时钟周期为一个转换周期,所以转换速率=时钟周期速率/24。

5.数据格式


This table represents the ideal output code for the given input voltage and does not include the effects of offset, gain error, or noise

这个结果只是理论值,因为busy占用了一个时钟周期的关系,需要将转换结果左移一位。

上图表明了转换结果只是一个补码,需要转换程实际值。当模拟信号<Vref,采集量程从-Vref到Vref-1LSB,这种好处是能采到负值信号,当模拟信号>=Vref,量程变为0到2Vref。但是无论两成如何变化,0~Vref-1LSB对应的码制不变。

二 SPI 

1使用SPI,要会看懂这些图

结构图


主从设备示意图


时钟极性配置图


全双工主模式时序图


四个引脚:MISO,MOSI,SCLK,NSS

数据发送过程:数据写入发送缓冲器时,发送过程开始。发送第一位数据时,数据字被并行传入移位寄存器(此时TXE将开始被置位),然后串行移出到MOSI脚

数据接收过程:在最后采样时钟沿,RXNE被置位,移位寄存器接收的数据传送到接收缓冲器。

2.SPI设置


时钟极性与ads8345的时序图有关,空闲为低,上升沿锁存。数据长8位(发送一次,接受两次),MSB在前。分频时要注意不能超过ads8345的转换速率限制。

3.通道转换


SPI第一次发送数据为控制字,第二三次为提供时钟信号。第一次接收数据舍弃,第二三次接收数据才是目标数据,再将目标数据进行左移,转换成实际值。

SPI使用特点:发送一次,接受一次。并不建议完全按照那张时序图


觉得还行就点顶···


### 回答1: 要编写STM32读取ADS8345的程序,我们需要以下步骤: 1. 硬件连接:将ADS8345的引脚与STM32的引脚连接好。ADS8345的VCC连接到STM32的3.3V电源,GND连接到STM32的地,SCLK连接到STM32的SCK引脚,DIN连接到STM32的MISO引脚,DOUT连接到STM32的MOSI引脚,CS连接到STM32的任意GPIO引脚。 2. 初始化SPI接口:使用STM32库函数初始化SPI接口,设置SPI的工作模式、数据位长度等参数。 3. 初始化ADS8345:向ADS8345发送初始化命令,设置采样速率、参考电压等参数。可以参考ADS8345的数据手册来配置它的寄存器。 4. 开始转换:向ADS8345发送转换命令,命令ADS8345开始进行模数转换。 5. 读取数据:使用SPI接口从ADS8345读取转换后的数据。首先发送一个读取命令,之后通过SPI接收数据,将接收到的数据保存到变量中。 6. 数据处理:根据ADS8345的工作模式和数据格式,将接收到的数据进行处理,可以根据需要进行放大、滤波等操作。 7. 循环读取:如果需要连续读取数据,则可以使用循环来实现,不断重复步骤4和步骤5。 以上就是使用STM32读取ADS8345的基本步骤。具体实现时,可以根据自己的需求和硬件平台来进行适当调整和优化。 ### 回答2: ADS8345是一款16位ADC芯片,广泛应用于工业自动化、仪器仪表等领域。下面以STM32读取ADS8345的程序为例进行介绍。 首先,需要在STM32的开发环境中配置SPI通信,并正确连接STM32和ADS8345SPI接口。接下来,可以按照以下步骤进行编写程序: 1. 初始化SPI接口:设置STM32的SPI时钟频率、数据大小、CPOL和CPHA等SPI参数,并使能SPI接口。 2. 配置ADS8345:向ADS8345写入相应的配置命令,比如参考电压、测量通道等。 3. 启动转换:向ADS8345发送转换启动命令,开始进行模拟信号的转换。 4. 读取转换结果:通过SPI接口从ADS8345读取转换结果。根据ADS8345的16位ADC特性,通常需要发送两个读取命令,分别读取高8位和低8位数据。 5. 转换结果处理:将读取到的转换结果数据进行拼接,并进行相应的换算、处理或显示。 以上是一个基本的读取ADS8345的程序框架,具体的代码实现可以根据具体的STM32芯片型号和开发环境做出相应的调整。此外,还需要注意ADS8345的操作时序和通信协议,确保程序的正确性和稳定性。 最后需要提醒的是,由于涉及到硬件和通信协议等内容,代码实现过程中可能会遇到一些问题和挑战。在编写过程中可以参考STM32的开发手册和ADS8345的数据手册,利用STM32的开发工具和相关文档进行调试和排查。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值