STM32F103硬件SPI驱动ADS1256

本文介绍了作者在STM32F103项目中使用ADS1256进行高分辨率AD转换的经历。在遇到采样速率问题导致读出异常后,通过调整ADS初始化中的采样速率解决了问题。代码示例和学习心得也一同分享。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:

最近实验室有几个项目都需要用到高分辨率AD转换,于是就开始了ADS1256的开发。

新手,焊得丑,见谅(能用就行)


二:

本以为很容易就能做完,结果被采样速率的问题困扰了很久。

代码如下,使用2.5V基准源进行测试,结果在读ADS时经常出现读出0xFFFFFF的情况,只能忍住悲伤开始查找资料,后来在TI论坛上看到一位大哥说这种情况一般是SPI没有读取到数据于是直接将ADS初始化中的10SPS改成30000SPS,结果一测试OK了。



void ADS1256_Init(void)
{ 	
  ADS1256WREG(ADS1256_STATUS,0x04);    
	ADS1256WREG(ADS1256_MUX,0x01);
  ADS1256WREG(ADS1256_ADCON,0x00);              
  ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS);  
  ADS1256WREG(ADS1256_IO,0x00);  	
}


三:

可能因为ADS1256是外部ADC,数据转换速率慢于单片机时就会造成SPI上没有数据导致单片机读取不到吧,模数转换很多东西的确比较复杂,以前只注重简单的应用,还是需要以后继续学习,也请各位大哥多多指正。

最后附上代码:

ADS1256.c

#include "ADS1256.h"

#define  FILTER_NUM 10

unsigned int ads_value;
unsigned int ads_flitter[FILTER_NUM+1];
long double ads_voltage;

void SPI1_Init(void)
{
 SPI_InitTypeDef  SPI_InitStructure;
 GPIO_InitTypeDef GPIO_InitStructure;
 /****Initial SPI1******************/
 
 /* Enable SPI1 and GPIOA clocks */
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
 

 /* Configure SPI1 pins: NSS, SCK, MISO and MOSI */
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
 GPIO_Init(G
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值