ADS1256+STM32程序详解

这篇具有很好参考价值的文章主要介绍了ADS1256+STM32程序详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

               ADS1256是TI公司推出的微功耗、高精度、8通道、24位高性能模数转换器(ADC)。该器件提供高达23比特的无噪声精度、数据速率高达30kSPS(次采样/秒)、十万分之一的非线性特性以及具备众输入模拟多路开关、输入缓冲器、可编程增益放大器和可编程数字滤波器等,,有完善的自校正和系统校正系统,SPI串行数据传输接口。可为设计人员带来完整而高分辨率的量测解决方,如应变计、气体分析、仪器仪表、压力传感器、血液分析、医疗科学仪器等应用,ADS1256采用SSOP-2封装。

ADS1256特点 

 1、8通道输入:可同时采集8路信号。 

 2、测量范围广:0-5V输入电压采样

 3、采集频率高,精度高:采集卡的采集速率为30K/s。 

ADS1256示意图

stm32 ads1256,24位ADC模块 ,stm32,嵌入式硬件,开源

1.  时序图

stm32 ads1256,24位ADC模块 ,stm32,嵌入式硬件,开源

STM32SPI可以直接连接,ADS1256的CS线仅仅只是做片选使用数据输出结束需要发送一次脉冲。在SCLK第一脉冲DIN开始接受数据输入,数据输入完毕的T6内SCLK需要保持低电平,然后调制一个周期的脉冲信号,数据即可全部到达DOUT总线,一次读写完毕。

核心源码:


#include <stdio.h>
#include "stm32f10x_gpio.h"
#include "ADS1256.h"


//***************************
//        Pin assign           
//            STM32            ADS1256        
//        GPIOB_Pin_11         <--- DRDY
//        GPIOB_Pin_12         ---> CS
//        GPIOB_Pin_13         ---> SCK
//        GPIOB_Pin_14(MISO)  <--- DOUT
//        GPIOB_Pin_15(MOSI)  ---> DIN
//***************************    

#define RCC_DRDY            RCC_APB2Periph_GPIOB
#define PORT_DRDY            GPIOB
#define PIN_DRDY            GPIO_Pin_11

#define PORT_CS                GPIOB
#define PIN_CS                GPIO_Pin_12


#define CS_0()                GPIO_ResetBits(PORT_CS, PIN_CS);
#define CS_1()                GPIO_SetBits(PORT_CS, PIN_CS);
#define ADS1256_DRDY          (PORT_DRDY->IDR & PIN_DRDY)


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; //
 SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                    
 SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;              
 SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                   
 SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;               
 SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                 
 SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //
 SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;      
 SPI_InitStructure.SPI_CRCPolynomial = 7;       
 SPI_Init(SPI2, &SPI_InitStructure);
 /* Enable SPI2  */
 SPI_Cmd(SPI2, ENABLE);  
}  


void Init_ADS1256_GPIO(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_DRDY, ENABLE); 

    GPIO_InitStructure.GPIO_Pin = PIN_DRDY; 
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
      GPIO_Init(PORT_DRDY, &GPIO_InitStructure);
     //SPI2 NSS 
    CS_1();
    GPIO_InitStructure.GPIO_Pin = PIN_CS;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(PORT_CS, &GPIO_InitStructure);
     
    SPI2_Init();
}



unsigned char SPI_WriteByte(unsigned char TxData)
{
  unsigned char RxData=0;
  while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_TXE)==RESET);
  SPI_I2S_SendData(SPI2,TxData);
  while(SPI_I2S_GetFlagStatus(SPI2,SPI_I2S_FLAG_RXNE)==RESET);
  RxData=SPI_I2S_ReceiveData(SPI2);
  return RxData;


void ADS1256WREG(unsigned char regaddr,unsigned char databyte)
{
    
    CS_0();
    while(ADS1256_DRDY);

    SPI_WriteByte(ADS1256_CMD_WREG | (regaddr & 0x0F));

    SPI_WriteByte(0x00);

    SPI_WriteByte(databyte);
    CS_1();
}


//³õʼ»¯ADS1256
void ADS1256_Init(void)
{
    //*************×ÔУ׼****************
       while(ADS1256_DRDY);
    CS_0();
    SPI_WriteByte(ADS1256_CMD_SELFCAL);
    while(ADS1256_DRDY);
    CS_1();
    //**********************************

    ADS1256WREG(ADS1256_STATUS,0x06);               
//    ADS1256WREG(ADS1256_STATUS,0x04);             

//    ADS1256WREG(ADS1256_MUX,0x08);                 ¡¯
    ADS1256WREG(ADS1256_ADCON,ADS1256_GAIN_1);             
    ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_10SPS);  
    ADS1256WREG(ADS1256_IO,0x00);               

    //*************************
    while(ADS1256_DRDY);
    CS_0();
    SPI_WriteByte(ADS1256_CMD_SELFCAL);
    while(ADS1256_DRDY);
    CS_1(); 
    //**********************************
}文章来源地址https://www.toymoban.com/news/detail-839692.html

到了这里,关于ADS1256+STM32程序详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F103硬件SPI驱动ADS1256

    最近实验室有几个项目都需要用到高分辨率AD转换,于是就开始了ADS1256的开发。 新手,焊得丑,见谅(能用就行) 二: 本以为很容易就能做完,结果被采样速率的问题困扰了很久。 代码如下,使用2.5V基准源进行测试,结果在读ADS时经常出现读出0xFFFFFF的情况,只能忍住悲伤

    2024年02月12日
    浏览(76)
  • K_A37_005 基于STM32等单片机驱动ADS1115 ADC模块 串口与OLED0.96双显示

    其他资料目录 直戳跳转 单片机型号 测试条件 模块名称 代码功能 STC89C52RC 晶振11.0592M ADS1115 ADC模块 STC89C52RC驱动ADS1115 ADC模块 串口与OLED0.96双显示 STM32F103C8T6 晶振8M/系统时钟72M ADS1115 ADC模块 STM32F103C8T6驱动ADS1115 ADC模块 串口与OLED0.96双显示 ADS1115 ADC模块 引脚说明 VIN 正极 5V供电

    2024年02月16日
    浏览(58)
  • FPGA控制ADS1256的ADC采集(一)

    最近在做一个项目,需要使用到高精度的ADC采集,由于项目对采集速率并没有太高的要求,所以就将成本尽可能地花在采样精度上,最后选择了TI的ADS1256这款比较热门的24位高精度AD芯片,调完后来写篇文章记录一下。 老规矩,在介绍如何用FPGA控制其进行AD转换之前先来聊聊

    2024年02月02日
    浏览(39)
  • 【STM32学习】ADC(一)—— STM32 内置 AD 模块框图

    现在我们大致知道,ADC 的大致转换流程就是输入模拟信号,经由采样、保持、量化、编码等过程,最终转换成数字信号。下面将通过ADC模块框图了解ADC模块正常运作需要做哪些事。 准备阶段: 配置分频数(控制ADC周期) ADC 的输入范围控制(需要让输入信号在ADC转换范围内

    2024年02月05日
    浏览(44)
  • STM32模拟SPI协议获取24位模数转换(24bit ADC)芯片AD7791电压采样数据

    STM32大部分芯片只有12位的ADC采样性能,如果要实现更高精度的模数转换如24位ADC采样,则需要连接外部ADC实现。AD7791是亚德诺(ADI)半导体一款用于低功耗、24位Σ-Δ型模数转换器(ADC) ,适合低频测量应用,提供50 Hz/60 Hz同步抑制。 这里介绍基于AD7791的24位ADC采样实现。 AD7791的管脚

    2024年02月09日
    浏览(61)
  • STM32 ADS1263驱动源码

    目录 简介: ADS1263.c: ADS1263.h: 测试结果:         ADS1262 和 ADS1263 (ADS126x) 是具有集成 PGA 、 电压基准和内部故障监视器的低噪声、低漂移、 38.4kSPS、Δ - Σ ADC 。 ADS1263 集成了一个 24 位辅助 Δ- Σ ADC , 适用于后台测量。这种支持传感器的 ADC 提供了一套完备的高精度、单芯片

    2024年04月13日
    浏览(32)
  • ADS1248/1247(TI) 24位ADC详细配置说明

    ADS1248是TI的一款 24位delta-sigma(ΔΣ) 、2KSPS、8通道(4通道差分)ADC芯片,通讯协议为SPI。可编程数据速率高达2ksps。低噪声PGA:48nVRMS在PGA=128。低漂移内部2.048-V参考值:10ppm/°C(最大值)。模拟电源:单极(2.7V至5.25V)和双极(±2.5V)工作。 提示:在配置寄存器前,默认已经配

    2024年02月06日
    浏览(36)
  • STM32+ADS1115使用说明文档

    目录 1.ADS1115简介  2.引脚功能 3.功能介绍 3.1 噪声表现 3.2 Multiplexer 复用器  3.3量程与分辨率  3.4 采样速率与转换时间 3.5数字比较器(在本次实验不使用) 3.6 操作模式 3.6.1 单次转换 3.6.2 连续转换 4. ADS1115 的IIC 4.1 IIC地址的选择  4.2 接收模式 4.3 发送模式 4.4 写入和读取寄存

    2024年02月09日
    浏览(43)
  • STM32读取24位模数转换(24bit ADC)芯片TM7711数据

    TM7711是一款国产低成本24位ADC芯片,常用于与称重传感器配合实现体重计的应用。这里介绍STM32读取TM7711的电路和代码实现。TM7711与HX710A是兼容的芯片,而与HX711在功能上有所不同: HX711具有双通道信号采样,三种放大倍数,支持设置模拟电压AVDD(也是内部参考电压)输出给外

    2023年04月08日
    浏览(74)
  • STM32读取24位模数转换(24bit ADC)芯片HX711数据

    HX711是一款国产低成本24位ADC芯片,常用于与称重传感器配合实现体重计的应用。这里介绍STM32读取HX711的电路和代码实现。 HX711的内部原理如下图所示: 市面上有普通和带屏蔽的两种模块: STM32可直接与HX711进行连接,选择2个具有FT(5V耐压)的管脚,将其中对应时钟输出的管

    2023年04月08日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包