一:
最近实验室有几个项目都需要用到高分辨率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