ADS1256实现轮询

文章描述了使用STM32F407通过SPI通信实现了ADS1256的轮询功能。解决了使用过程中,各个通道之间数据读取串码的问题。SPI通信可以使用硬件SPI通信,也可以使用I/O模拟SPI通信。区别在于硬件SPI通信的过程中不会被中断打断,具有较高的稳定性,但是代码移植性不高。在实现软件SPI通信成功后,硬件SPI也是非常简单的。

阅读数据手册

数据手册这里只列举关键部分的内容。

读懂一些必须的Timing

t1t1:表示的是SPI的SCLK最小时钟周期,τCLKIN 为 ADS1256 的 输入时钟周期,按照该芯片推荐的7.68MHz 的时钟可知 τCLKIN = 130ns,故 t1 为 520ns。
t 2H 和 t 2L:由 t1 可知二者必须都大于200ns,切相加要大于520ns。
t6:在发送读取命令(RDATA,RDATAC和RREG)后,需要延时6.51us,可以取10us。
t11:上一个命令的最后时钟周期的下降沿到下一个命令的第一个时钟周期的上升沿之间的时间。
在这里插入图片描述
t17:这是指在没有更新通道的情况下,每次数据更新的时间,即16 × 0.13us = 2.08us,同是可以推出30000SPS采样率的情况下DRDY为低电平的窗口时长为 1/30000 - 2.08 = 31us。这是一个非常重要的信息,也是解决问题的关键。
在这里插入图片描述
在这里插入图片描述

t18:根据描叙,t18 是从信号在模拟输入端被改变后,传输到数字滤波器后需要的时间,之后数据才是可读的,这时DRDY引脚被拉低。
表格13,表示的是在不同的采样率下数据建立的时间(t18),图18表示的是在SYNC命令或者硬件SYNC生效后,数据索取时序图。

轮询的原理

在这里插入图片描述
轮询各通道的时序图如上。结合上一节读懂的Timing,可以设计如下软件设计思路:
1 等待DRDY拉低,在这里插入图片描述按照上述写寄存器命令设置下一个要读取的通道。
2 发送SYNC命令,同步A/D转换。在下一个命令到来前需要延时 t11 = 24 × 0.3us = 3.12us,这里取5us。
3 发送WAKEUP命令,使SYNC命令生效。
在这里插入图片描述
SYNC命令在WAKEUP命令的第一个时钟下降沿生效。生效后DRDY立即变为高电平。(在WAKEUP后面延时视情况而定,只要WAKEUP命令 + 延时 + RDATA命令 + t 6 + 接受数据的总时间 不超过 t 18即可。)
4 发送RDATA命令,延时 t 6 后接受上个通道的数据。(这里解释下,每次设置好某一通道后,需要经过t18后,该通道的数据转换才完成)

数据读取错误或者各通道出现相同的数据的问题

本次实验的软件思路为:用定时器每隔一秒触发轮询四个通道(无论是差分还是单个),同时将DRDY设置为外部中断,当两个中断的中断标志位均为 “1” 时,则设置一个通道并读取上一个通道的数据。
解决办法分为两步:1 在保证SPI通信稳定且准确的情况下,尽量提高通信速率。2 在定时器中断标志位为“1”后,必须要在新的DRDY中断标志位置 “1” 后,立即执行轮询代码(原因后面会讲)。
这是主函数WHILE部分代码:

while(1)			
	{
   
		u16 show_y = 210;
		
		//轮询部分
		if(TIME3_Overflow_Count_By_1_1s == 1)			//定时器中断标志位为1
		{
   
			DRDY_GET_LOW = 0; 									//在轮询前,先将DRDY中断标志位置“0”
			for(i = 0; i < 4096; i++)
				ADS1256_Cycling_Visit();
			TIME3_Overflow_Count_By_1_1s = 0;
		}
		//轮询部分

		ADS1256_Data_Convert(g_tADS1256.AdcCh1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值