ADS1256


ADS1256简介
ADS1256是TI推出的一款微功耗、高精度、8 通道、24 位高性能模数转换器。该芯片还带有4个可编程的I/O口、输入缓冲器和可编程增益放大器等,芯片本身可以测量0-5v的信号,高电压采集可以通过把信号分压成0-5v的范围内再给模块输入,所以ADS1256可以采集市面上大多数的标准电压信号。
芯片特点
- 8通道输入
- 可采集单端信号与差分信号
- 最高30KSPS的采样率
- 4个可编程I/O
- 0-5V信号输入
引脚说明
这个引脚说明关联本文开头的图片里的两个模块
| 引脚名称 | 引脚说明 |
|---|---|
| VIN/5V | 模块供电正极 |
| GND | 模块供电负极 |
| D0 | 数字IO口0,时钟输出 |
| D1-D3 | 数字IO口1-3 |
| SCLK | SPI时钟输入 |
| DIN | SPI数据输入 |
| DOUT | SPI数据输出 |
| DRDY | 数据输出就绪 |
| CS | 片选 |
| RESET | 复位 |
| SYNC/PDWN | 同步/关闭电源 |
| AIN0-AIN7 | 信号输入,(8路单端/4路差分) |
模块相关寄存器与命令
ADS1256一共有11个寄存器,可以通过配置相应的寄存器实现数据输出位的顺序、是否自校准、是适用缓冲器、单端/差分、采样率等的配置。每一个寄存器具体的作用这里不展开详细说明,可自行参考ADS1256的数据手册
命令表,其中包含了读/写数据、校准、复位等指令。
芯片的SPI通讯时序可参考这个这个时序图和下面的时序特性说明。注意通信时, CS 必须保持为低电平。

相关程序
初始化
SPI初始化
void SPI2_Init(void)
{
SPI_InitTypeDef SPI_InitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
/****Initial SPI2******************/
/* Enable SPI2 and GPIOB clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
/* Configure SPI2 pins: NSS, SCK, MISO and MOSI */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* SPI2 configuration */
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; //SPI1设置为两线全双工
SPI_InitStructure.SPI_Mode = SPI_Mode_Master; //设置SPI2为主模式
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; //SPI发送接收8位帧结构
SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; //串行时钟在不操作时,时钟为低电平
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; //第一个时钟沿开始采样数据
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; //NSS信号由软件(使用SSI位)管理
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //定义波特率预分频的值:波特率预分频值为8
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; //数据传输从MSB位开始
SPI_InitStructure.SPI_CRCPolynomial = 7; //CRC值计算的多项式
SPI_Init(SPI2, &SPI_InitStructure);
/* Enable SPI2 */
SPI_Cmd(SPI2, ENABLE);
}
ADS1256初始化,给芯片做自校准并且设置芯片的参数(采样率、数据位顺序、放大倍数等)
void ADS1256_Init(void)
{
ADS1256WREG(ADS1256_STATUS,0x06); // 高位在前、使用缓冲
ADS1256WREG(ADS1256_ADCON,ADS1256_GAIN_1); // 放大倍数1
ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS); // 数据10sps
ADS1256WREG(ADS1256_IO,0x00);
//**自校准**//
while(ADS1256_DRDY);
CS_0();
SPI_WriteByte(ADS1256_CMD_SELFCAL);
while(ADS1256_DRDY);
CS_1();
}
读取某个通道的AD值
signed int ADS1256ReadData(unsigned char channel)
{
unsigned int sum=0;
while(ADS1256_DRDY);//当ADS1256_DRDY为低时才能写寄存器
ADS1256WREG(ADS1256_MUX,channel); //设置通道
CS_0();
SPI_WriteByte(ADS1256_CMD_SYNC);
SPI_WriteByte(ADS1256_CMD_WAKEUP);
SPI_WriteByte(ADS1256_CMD_RDATA);
sum |= (SPI_WriteByte(0xff) < < 16);
sum |= (SPI_WriteByte(0xff) < < 8);
sum |= SPI_WriteByte(0xff);
CS_1();
if (sum >0x7FFFFF)
{
sum -= 0x1000000;
}
return sum;
}
主函数,单端输入,读取每一个通道的AD值并且转换后从串口打印输出
int main(void)
{
u8 i=0;
int Adc;
float Volts;
SystemConfiguration(); //系统初始化
USART_Config(USART1,115200); //串口1初始化,波特率 115200
Init_ADS1256_GPIO(); //初始化ADS1256 GPIO管脚
Delay_ms(50);
ADS1256_Init();
while(1)
{
for(i = 0;i < 8;i++)
{
Adc = ADS1256ReadData( (i < < 4) | ADS1256_MUXN_AINCOM);
Volts = Adc*0.000000598;
printf(" %.4fV ",Volts);
}
printf("rn");
}
}
实验效果
接线
| STM32 | ADS1256 |
|---|---|
| 5V | VIN/5V |
| GND | GND |
| SCLK | PB13 |
| DIN | PB15 |
| DOUT | PB14 |
| DRDY | PB11 |
| CS | PB12 |
实验现象

AIN0通道接到GND,输出读数为0.0012V,其他通道悬空,输出的是浮空电压。

AIN0通道接入单片机的3.3V,串口输出显示AIN0的读数为3.3185V

审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
adc
+关注
关注
100文章
7980浏览量
557464 -
STM32
+关注
关注
2314文章
11214浏览量
375432 -
ADS1
+关注
关注
0文章
27浏览量
11934
发布评论请先 登录
相关推荐
热点推荐
深入剖析MCP1256/7/8/9电荷泵评估板:功能、使用与设计要点
深入剖析MCP1256/7/8/9电荷泵评估板:功能、使用与设计要点 在电子工程领域,DC - DC转换电路是极为关键的一部分,尤其在电池供电的应用场景中,对高效、低噪声的DC - DC转换方案需求
STM32驱动串口屏,STM32F103C8T6串口发送指令控制HMI串口屏
仅是一部分常用的基础指令,更多更仔细的指令或者函数可以访问陶晶驰资料官网。 硬件和接线 硬件需要一块STM32F103C8T6的开发板,杜邦线诺干,2.4寸串口屏一块 接线 串口屏 STM32
串口调试步骤(适合免驱动的232串口设备)
密码切换到root超级管理下 apt update 更新插件 apt-get install cutecom 安装系统自带的串口调试工具 cutecom 输入串口测试的指令会弹出一个图形界面如下图 32串口协议测试需要将第2和第
深入剖析ADS1255/6:24位低噪声ADC的卓越性能与应用
在电子设计领域,高精度模拟到数字的转换至关重要。德州仪器(TI)的ADS1255和ADS1256作为24位超低噪声模数转换器(ADC),为众多对精度要求极高的应用提供了完整的高分辨
深度剖析ADS1255/6:24位高精度ADC的卓越之选
在电子设计领域,高精度模拟 - 数字转换器(ADC)是实现精确测量和数据采集的关键组件。ADS1255和ADS1256作为德州仪器(TI)推出的极低噪声、24位ADC,为众多对精度要求极高
NucleiStudio_IDE_201909串口打印浮点型数据时无数据输出,软件该如何配置串口才能打印浮点型数据?
NucleiStudio_IDE_201909串口打印浮点型数据时无数据输出,软件该如何配置串口才能打印浮点型数据?
发表于 11-07 07:57
关于stm32f4zgt6和mspm0g3507串口通信问题
本人在使用stm32f4zgt6和mspm0g3507串口通信时出现问题,情况如下:
m0芯片使用软件超时解析进行数据接收,使用标准库的transmit函数进行数据发送。
stm32使用DMA+空闲
发表于 09-01 11:11
DTU的S485/232串口能够复用吗?
想问一下,DTU的S485/232串口能够复用吗?就是窗口下面接很多传感器设备那种,主要是传感器数量过大,一个传感器接一台DTU太过于浪费。
发表于 08-06 06:58
STM32串口发送数据,USART_FLAG_TC无法置位怎么解决?
STM32串口发送数据,在经过一段时间的数据发送,大概200ms发送一下,一次发送大概二三十个字节的数据,有可能会发生USART_FLAG_TC不置位的情况,如何解决或者避免?轮询发送,后卡在了
发表于 07-29 11:44
串口转网口网关有哪些功能应用
在工业物联网与智能设备管理领域,串口转网口网关已成为连接传统设备与现代网络的核心枢纽。这类设备通过将RS-232、RS-485等串口协议转换为TCP/IP、MQTT等网络协议,解决了各
6轴步进电机驱动+STM32F767+485+CAN+网口+12输入输出原理图
6轴步进电机驱动+STM32F767+485+CAN+网口+12路输入输出 原理图 步进电机驱动方案TMC5160
发表于 06-27 16:18
•1次下载
STM32驱动ADS1256串口输出-AD转换
评论