最近有好几个朋友私信问我ADS1220芯片相关的问题,之前的文章中做过一些介绍《SPI应用之驱动ADS1220》,今天再来做一个补充。

芯片简介

  一个具有 PGA、VREF、2 个 IDAC 和 SPI 接口的 24 位、2kSPS、4 通道、低功耗小型 Δ-Σ ADC。配置比较丰富,所以其应用可以很广泛。本文将具体介绍以下几种应用:

1.4个输入通道,采用内部参考电压,用于多路单端信号采集。

2.差分信号采集,配合PGA功能,用于采集电桥式称重/压力传感器等

3.使用2 个 IDAC,用于三线PT100温度检测。

1.多路信号采集

1.1 硬件设计

芯片为标准的4线SPI接口,另外DRDY引脚用于指示转换完成,可用可不用(不用时,可以通过软件读取寄存器来获取状态)。

芯片的模拟电源和数字电源是独立的,没有要求两个电源必须一样(有些芯片有这个要求,使用时要注意)。

外部参考电压没有使用,可以悬空。

上图中的应用是4通道信号采集。AIN0~AIN3为4个通道输入,其中输入范围为0~VREF(内部参考电压为2.048V)。

芯片与单片机的SPI接口连接,以STM32为例,接SPI1:

1.2 软件设计

SPI的配置可参考之前的文章《SPI应用之驱动ADS1220》。

ADS1220虽然配置丰富,但只有4个寄存器,使用起来比较简单。

官方提供了相关的驱动程序,单片机用的是MSP430,但是芯片寄存器的一些宏定义、函数都可以借鉴,只要稍微修改一下底层函数即可,也可以参考之前的文章。废话不多说,直接看初始化程序:

void ADS1220Init(void)
{uint8_t ch_cfg[4]={ADS1220_MUX_0_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS, ADS1220_CC|ADS1220_DR_45, ADS1220_VREF_INT|ADS1220_PSW_SW, ADS1220_IDAC1_OFF|ADS1220_IDAC2_OFF};ADS1220SendResetCommand();//复位HAL_Delay(100);ADS1220WriteRegister(ADS1220_0_REGISTER,4,ch_cfg);//配置4个寄存器HAL_Delay(100);ADS1220SendStartCommand();//启动转换
}

程序中将4个寄存器的值定义在一个数组ch_cfg[4]中,然后通过写寄存器函数,一次性写入到芯片。

4个数组元素(寄存器)的定义如下:

ADS1220_MUX_0_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS---使能通道0和GND作为输入,增益为1,旁路(不适用)PGA

ADS1220_CC|ADS1220_DR_45---连续转换模式,转换速率为45SPS

ADS1220_VREF_INT|ADS1220_PSW_SW---使用内部参考电压,打开低侧电源开关

ADS1220_IDAC1_OFF|ADS1220_IDAC2_OFF---关闭IDAC1和IDAC2电流源

配置完成后启动ADC,然后调用下面函数读取数据:

long ADS1220ReadData()
{long Data;/* assert CS to start transfer */ADS1220AssertCS(1);/* send the command byte */
//  ADS1220SendByte(ch,ADS1220_CMD_RDATA);/* get the conversion result */
#ifdef ADS1120Data = ADS1220ReceiveByte(ch);Data = (Data << 8) | ADS1220ReceiveByte(ch);/* sign extend data */if (Data & 0x8000)Data |= 0xffff0000;
#elseData = ADS1220ReceiveByte();Data = (Data << 8) | ADS1220ReceiveByte();Data = (Data << 8) | ADS1220ReceiveByte();/* sign extend data */if (Data & 0x800000)Data |= 0xff000000;
#endif/* de-assert CS */ADS1220AssertCS(0);return Data;
}

如果需要循环读取4个通道,则每次读取数据后,需要重新配置寄存器选择下一个通道,程序如下:

//选择通道函数
void ADS1220_SelCh(uint8_t ch)
{uint8_t cfg[2]={ADS1220_MUX_0_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS};switch(ch){case 0://选择通道0cfg[0] = ADS1220_MUX_0_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);break;case 1://选择通道1cfg[0] = ADS1220_MUX_1_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);break;case 2://选择通道2cfg[0] = ADS1220_MUX_2_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);break;case 3://选择通道3cfg[0] = ADS1220_MUX_3_G|ADS1220_GAIN_1|ADS1220_PGA_BYPASS;ADS1220WriteRegister(ADS1220_0_REGISTER,1,cfg);break;}
}__IO uint16_t ADS1220_Tick = 0;
float Vin[4];
//循环读取4个通道
void ADS1220_GetData()
{uint32_t temp;static uint8_t ads_ch = 0;if(ADS1220_Tick<50)return;ADS1220_Tick=0;switch(ads_ch){case 0://读取通道0 然后切换到通道1temp = ADS1220ReadData();Vin[0] = temp*2.048f/8388608;//转换为电压 单位Vads_ch = 1;ADS1220_SelCh(ads_ch);break;case 1://读取通道1 然后切换到通道2temp = ADS1220ReadData();Vin[1] = temp*2.048f/8388608;//转换为电压 单位Vads_ch = 2;ADS1220_SelCh(ads_ch);break;case 2://读取通道2 然后切换到通道3temp = ADS1220ReadData();Vin[2] = temp*2.048f/8388608;ads_ch = 3;ADS1220_SelCh(ads_ch);break;case 3://读取通道3 然后切换到通道0temp = ADS1220ReadData();Vin[3] = temp*2.048f/8388608;ads_ch = 0;ADS1220_SelCh(ads_ch);break;}
}

需要说明的是,程序中没有判断转换完成标志,而是直接定时50ms读取,因为转换速率高于读取速率,且测量的是直流信号,所以这里影响不大。

2.电桥传感器应用

2.1 硬件设计

AIN1和AIN2作为信号输入端,REFP1和REFN1用做参考电压。数字接口与上面的应用一样。

2.2 软件设计

驱动程序与上面的应用一样,只是寄存器的配置不同,需要修改的也只有存储寄存器的数组ch_cfg[4]。电桥信号一般比较小,需要使能PGA功能。具体配置如下:

uint8_t ch_cfg[4]={ADS1220_MUX_1_2|ADS1220_GAIN_128, ADS1220_CC| ADS1220_DR_20, ADS1220_VREF_EX_AIN|ADS1220_PSW_SW, ADS1220_IDAC1_OFF|ADS1220_IDAC2_OFF};

4个数组元素(寄存器)的定义如下:

ADS1220_MUX_1_2|ADS1220_GAIN_128---使能通道1和通道2作为差分输入,增益为128

ADS1220_CC| ADS1220_DR_20---连续转换,转换速率为20SPS

ADS1220_VREF_EX_AIN|ADS1220_PSW_SW---使用 AIN0/REFP1 和 AIN3/REFN1 输入选择的外部基准电压,打开低测电源开关

ADS1220_IDAC1_OFF|ADS1220_IDAC2_OFF---关闭IDAC1和IDAC2电流源

该应用不用切换通道,直接调用ADS1220ReadData()函数定时读取数据即可。

3.三线PT100测温

3.1 硬件设计

电路图如下,用到了IDAC1和IDAC2两个可编程电流源,配置到AIN2和AIN3用于输出电流,参考电压配置为REFP0和REFN0。

3.2 软件设计:

寄存器配置如下:

uint8_t ch3_cfg[4]={ADS1220_MUX_0_1|ADS1220_GAIN_32, ADS1220_CC| ADS1220_DR_20, ADS1220_VREF_EX_DED|ADS1220_PSW_SW|ADS1220_IDAC_250, ADS1220_IDAC1_AIN2|ADS1220_IDAC2_AIN3};

4个数组元素(寄存器)的定义如下:

ADS1220_MUX_0_1|ADS1220_GAIN_128---使能通道0和通道1作为差分输入,增益为32

ADS1220_CC| ADS1220_DR_20---连续转换,转换速率为20SPS

ADS1220_VREF_EX_DED|ADS1220_PSW_SW|ADS1220_IDAC_250---使用 REFP0 和 REFN0 输入选择的外部基准电压,打开低测电源开关,可编程电流源配置为250uA

ADS1220_IDAC1_AIN2|ADS1220_IDAC2_AIN3---IDAC1和IDAC2电流源分别配置到AIN2和AIN3通道。

与电桥应用类似,该应用不用切换通道,直接调用ADS1220ReadData()函数定时读取数据即可。

PS:至于PT100测温的原理、怎样设计和计算温度,提高精度等,将在以后文章中专门做介绍。

源码:(公众号不支持外部链接,请复制到浏览器打开)

链接:https://pan.baidu.com/s/1WqhXaRAcKy0qLyuifx8rvA

提取码:2ob2

推荐阅读:

STM32CubeMX系列教程

STM32F4通过U盘升级程序

远程升级单片机程序怎么设计?

欢迎关注公众号"嵌入式技术开发",大家可以后台给我留言沟通交流。如果觉得该公众号对你有所帮助,也欢迎推荐分享给其他人。

ADS1220的几种应用介绍(含源码)相关推荐

  1. 利用多线程爬虫搭建代理ip池的两种方法(含源码)

    搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...

  2. Python使用pandas对CSV进行操作(11种基础操作含源码)

    源数据如下:含脏数据(price列) 下列源码用到如下四个包: import pandas as pd import glob import os import csv 目录 1.基础文件读写(等同于 ...

  3. 关于mysql存取图片的三种方式(含源码示例)

    最近在做小程序的后台,要求将小程序用户以upload方法上传的图片保存到mysql数据库中. 然后机缘巧合三种方式都试了,所以专门整理出来分享给大家.可能有的地方说的不太对,欢迎大家帮纠正. ==== ...

  4. 静态HTML网页设计作品 代码质量好-上海介绍(5页) HTML+CSS+JavaScript(含源码)

    HTML5期末大作业:上海介绍网站设计--代码质量好-上海介绍(5页) HTML+CSS+JavaScript(含源码) 一.作品展示 二.文件目录 三.代码实现 <!DOCTYPE html& ...

  5. 手把手教你SSM整合开发办公系统(OA)——报销单(含源码)

    文章目录 前言 项目展示 技能要求 一.开始前的准备 1.OA系统是什么? 2.人员权利与报销流程 3.数据库设计 4.创建项目及作用说明 5.包与全局变量配置 6.编写过滤器 7.静态资源的复制与请 ...

  6. Eatting外卖基于瑞吉外卖代码全功能优化含源码

    Eatting外卖基于瑞吉外卖代码全功能优化含源码 文章目录 项目的最终部署 源码地址 github:[源码地址](https://github.com/yangxingyue0623/Eating_ ...

  7. PHP单页面加密视频教程附源码,thinkphp3.2最新版本项目实战视频教程(含源码)

    php教程 当前位置:主页 > php教程 > thinkphp3.2最新版本项目实战视频教程(含源码) thinkphp3.2最新版本项目实战视频教程(含源码) 教程大小:2.1GB   ...

  8. 智能家居硬件小制作(含源码)《手势识别控制器》基于PAJ7620手势模块、L298N驱动板、arduino

    智能家居硬件小制作(含源码)<手势识别控制器>基于PAJ7620手势模块.L298N驱动板.arduino 目录 智能家居硬件小制作(含源码)<手势识别控制器>基于PAJ762 ...

  9. 抖音小程序基础之 目前提供哪些API(教程含源码)

    抖音小程序基础之 目前提供哪些API(教程含源码) 小程序开发框架提供丰富的 字节跳动宿主 原生 API,可以方便的调起 字节跳动宿主 提供的能力,如获取系统信息等.详细介绍请参考 API 文档. 通 ...

最新文章

  1. gcc离线安装 ubuntu 不用编译_Ubuntu快速搭建C++开发环境(VS Code编辑器)
  2. JavaScript容易犯错的九个陷阱
  3. idea alt+insert快捷键中implement
  4. 河北省往届高考成绩查询2021,2021河北高考成绩查询时间 高考成绩查询入口
  5. android返回后屏幕旋转了,Android recovery 模式下屏幕显示旋转
  6. SaaS市场普及 网络推广策略最有效
  7. atlas mysql 读写分离_MySQL读写分离工具Atlas
  8. Java 8 Lambda演练
  9. Java设计模式笔记(1)单例模式
  10. Java 多线程 —— AQS 原理
  11. DiagnosticsTextBox:WinForms的日志窗口
  12. 【基础概念大总结】— 网络安全 Java 基础知识大汇总
  13. 微信跳转浏览器提示_微信跳转外部浏览器跳转提示的2种实现方式
  14. java 编译java文件_如何编译JAVA文件
  15. sin(a-b)=sina*cosb-sinb*cosa的推导过程
  16. Linux内核常见分配函数
  17. 谷歌浏览器 chrome 71版本以上 设置默认允许flash
  18. 通用计算机的发展历程,中国计算机发展史
  19. iOS - 使用TestFlight进行App的Beta版本测试
  20. 生活随记 - 祝福大家2021年新年快乐

热门文章

  1. java编程基础答案_Java编程基础答案试题题目及答案,期末考试题库,章节测验答案...
  2. 从普通人到月入几万的创作人,我是怎么做到的?
  3. PC端“交易猫”网站爬虫项目
  4. linux环境变量设置图解,Ubuntu Linux 各个环境变量配置文件详解, 环境变量PATH设置...
  5. 复现计算机论文模型,深度学习模型复现难?看看这篇句子对模型的复现论文
  6. 三分钟了解阿里云学生机购买限制条件详细规则
  7. maya的BonusTools
  8. LINUX+Heartbeat 通过心跳实现双机高可用
  9. 第三章 Python基础知识
  10. 设计Weekday类