0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CC2652LP驱动Δ∑ADC-ADS126x系列

电子设计 来源:电子设计 作者:电子设计 2022-01-19 16:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Other Parts Discussed in Post:ADS1261, CC2652R, ADS1261EVM, TMP116

作者:TI工程师 Yue Tang

官网的ADS1261驱动采用的是相对久远的TIVA驱动代码架构,并且没有提供完整工程,还存在一些小的bug,本文将阐述如何使用最新的SimpleLink™ Platform MCU,并基于最新的TI-RTOS架构来驱动ADS1261。本文的最后会给出完整的工程示例【下载】,示例稍作修改也可用于驱动TI其它支持SPI接口的Δ∑ADC

ADS126x 系列ADC是包含可编程增益放大器 (PGA) 的精密 40kSPS ΔΣ 模数转换器 ,它包含精密的电压基准,内部故障监控器和用于桥式传感器的交流激励。可以为要求最严苛的测量(包括称重秤和电阻式温度检测器 (RTD))提供高精度单芯片解决方案。

pYYBAGGKTgyAcIJ1AAEtvG57N8E920.png

Figure 1.ADS1261 内部框图

CC2652R 是 SimpleLink™ 微控制器 (MCU) 平台的一部分,该平台包括 Wi-Fi®、低功耗Bluetooth®、低于 1GHz、Thread、Zigbee®、802.15.4 和主机 MCU,它们共用一个易于使用的通用开发环境,其中包含单核软件开发套件 (SDK) 和丰富的工具集。借助一次性集成的 SimpleLink 平台,可以将产品组合中的任何器件组合添加至您的设计中,从而在设计要求变更时实现 100% 代码重用。

CC2652 Launchpad 是CC2652R对应的开发板,包含仿真器,如您是第一次接触,请参考如下步骤,来了解它的使用。

第 1 步:购买 CC26X2R1 LaunchPad
第 2 步:下载 SimpleLink CC13x2 和 CC26x2 SDK
第 3 步:开始使用 SimpleLink Academy

本文采用IAR进行开发,相关版本信息可在对应的SDK的release_notesxx.html中了解到,如下图:

IAR Embedded Workbench:EWARM-8.32.2

SDK版本:simplelink_cc13x2_26x2_sdk_3_20_00_68【请先下载安装后,再打开工程】

poYBAGGKTg6Ad7frAABhUCODvxM061.png

另外,使用的ADS1261EVM 也可从TI-STORE购买到。

ADS1261EVM CC2652LP 说明
/CS DIO_30 SPI – CS 片选
SCLK DIO_29 SPI – CLK时钟
DIN DIO_28 SPI – 主出从入[ 主:CC2652R, 从:ADS1261 ]
DOUT DIO_27 SPI – 主入从出[ 主:CC2652R, 从:ADS1261 ]
/DRDY DIO_26 ADS1261 输出 – 数据准备好指示,低有效
/RST DIO_25 ADS1261 输入 – 复位,低有效
STR DIO_21 ADS1261输入 – 启动转换,高有效
/PWDN DIO_15 ADS1261输入 – 控制进入低功耗模式,低有效

如下图,使用杜邦线,对照上表,将ADS1261EVM(左)和CC2652LP(右)连接起来。另外,在ADS1261EVM的JP1增加一个跳线帽【黄色框】,以旁路EVM上的TM4C129。

Figure 2.连线示意图

基于TI-RTOS的SPI接口驱动及单独控制CS引脚

【CC26X2R1_LAUNCHXL.c】 如下结构体中增加红色部分代码

GPIO_PinConfig gpioPinConfigs[] = {

……

/* ADS1261*/

GPIOCC26XX_DIO_30 | GPIO_DO_NOT_CONFIG, /* CS 已100K上拉,输入,低有效,SPI CS pin*/

GPIOCC26XX_DIO_15 | GPIO_DO_NOT_CONFIG, /* PWDN 已100K上拉,输入,低有效 power down */

GPIOCC26XX_DIO_21 | GPIO_DO_NOT_CONFIG, /* STR 已100K上拉,输入,高有效 启动转换*/

GPIOCC26XX_DIO_25 | GPIO_DO_NOT_CONFIG, /* RST 已100K上拉,输入,低有效 复位 */

GPIOCC26XX_DIO_26 | GPIO_DO_NOT_CONFIG, /* DRDY 无上拉,输出,低有效,数据准备就绪*/

};

【CC26X2R1_LAUNCHXL.c】使用SPI1,并且其中的CS引脚单独控制

const *** ***[CC26X2R1_LAUNCHXL_SPICOUNT] = {

{

……

},

{

.baseAddr = SSI1_BASE,

.intNum = INT_SSI1_COMB,

.intPriority = ~0,

.swiPriority = 0,

.powerMngrId = PowerCC26XX_PERIPH_SSI1,

.defaultTxBufValue = 0xFF,

.rxChannelBitMask = 1<

.txChannelBitMask = 1<

.mosiPin = CC26X2R1_LAUNCHXL_SPI1_MOSI,

.misoPin = CC26X2R1_LAUNCHXL_SPI1_MISO,

.clkPin = CC26X2R1_LAUNCHXL_SPI1_CLK,

.csnPin = PIN_UNASSIGNED, //单独控制【E2E LINK】

.minDmaTransferSize = 10

}

};

【CC26X2R1_LAUNCHXL.h】新增如下定义

/* ADS 1261 */

#define CC26X2R1_LAUNCHXL_SPI1_MISO IOID_27

#define CC26X2R1_LAUNCHXL_SPI1_MOSI IOID_28

#define CC26X2R1_LAUNCHXL_SPI1_CLK IOID_29

#define CC26X2R1_LAUNCHXL_SPI1_CSN IOID_30

#define CC26X2R1_LAUNCHXL_ADS1261_PWDN IOID_15 /* 已100K上拉,输入,低有效 power down */

#define CC26X2R1_LAUNCHXL_ADS1261_STR IOID_21 /* 已100K上拉,输入,高有效 启动转换*/

#define CC26X2R1_LAUNCHXL_ADS1261_RST IOID_25 /* 已100K上拉,输入,低有效 复位 */

#define CC26X2R1_LAUNCHXL_ADS1261_DRDY IOID_26 /* 无上拉,输出,低有效,数据准备就绪*/

新增如下红色项

typedef enum CC26X2R1_LAUNCHXL_GPIOName {

CC26X2R1_LAUNCHXL_GPIO_S1 = 0,

CC26X2R1_LAUNCHXL_GPIO_S2,

CC26X2R1_LAUNCHXL_GPIO_LED_GREEN,

CC26X2R1_LAUNCHXL_GPIO_LED_RED,

CC26X2R1_LAUNCHXL_GPIO_TMP116_EN,

CC26X2R1_LAUNCHXL_GPIO_SPI_FLASH_CS,

CC26X2R1_LAUNCHXL_SDSPI_CS,

CC26X2R1_LAUNCHXL_GPIO_LCD_CS,

CC26X2R1_LAUNCHXL_GPIO_LCD_POWER,

CC26X2R1_LAUNCHXL_GPIO_LCD_ENABLE,

CC26X2R1_LAUNCHXL_GPIO_ADS1261_CS, /* IOID_30 已100K上拉,输入,低有效,SPI CS pin*/

CC26X2R1_LAUNCHXL_GPIO_ADS1261_PWDN,/* IOID_15,已100K上拉,输入,低有效 power down */

CC26X2R1_LAUNCHXL_GPIO_ADS1261_STR, /* IOID_21,已100K上拉,输入,高有效 启动转换*/

CC26X2R1_LAUNCHXL_GPIO_ADS1261_RST, /* IOID_25已100K上拉,输入,低有效 复位 */

CC26X2R1_LAUNCHXL_GPIO_ADS1261_DRDY, /* IOID_26无上拉,输出,低有效,数据准备就绪*/

CC26X2R1_LAUNCHXL_GPIOCOUNT

} CC26X2R1_LAUNCHXL_GPIOName;

【spimaster.c】SPI初始化,基于EVM的实际情况

GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_CS, GPIO_CFG_OUT_OD_NOPULL|GPIO_CFG_OUT_HIGH); GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_PWDN, GPIO_CFG_OUT_OD_NOPULL|GPIO_CFG_OUT_HIGH);

GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_STR, GPIO_CFG_OUT_OD_NOPULL);

GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_RST, GPIO_CFG_OUT_OD_NOPULL|GPIO_CFG_OUT_HIGH);

GPIO_setConfig(CC26X2R1_LAUNCHXL_GPIO_ADS1261_DRDY, GPIO_CFG_IN_PU);

/* Open SPI as master (default) */

SPI_Params_init(&spiParams);

spiParams.frameFormat = SPI_POL0_PHA1;

spiParams.bitRate = 4000000;

masterSpi = SPI_open(CC26X2R1_LAUNCHXL_SPI1, &spiParams);

if (masterSpi == NULL) {

Display_printf(display, 0, 0, "Error initializing master SPI\n");

while (1);

}

else {

Display_printf(display, 0, 0, "Master SPI initialized\n");

}

其它改动这里不进一步赘述,请通过link获得代码工程,自行编译测试。

运行代码,参见如下串口打印信息:

测试代码会循环读写ADS1261内部寄存器,并会在最后读取ADS1261内u,其中“T:”表示CC2652 SPI口发送的数据,“R:”表示CC2652 SPI口接收到的数据,均为十六进。

Starting the SPI master example

Master SPI initialized

T:4100

R:FF41

T:4224

R:FF42

T:4301

R:FF43

T:4400

R:FF44

T:4520

R:FF45

T:4605E900

R:FF4605E9

T:4700E700

R:FF4700E7

T:48002400

R:FF480024

T:49003100

R:FF490031

T:4A000E00

R:FF4A000E

T:4B001B00

R:FF4B001B

T:4C40B700

R:FF4C40B7

T:4DFF9600

R:FF4DFF96

T:4E005A00

R:FF4E005A

T:4F004F00

R:FF4F004F

T:5000DB00

R:FF5000DB

T:51FF3D00

R:FF51FF3D

T:5200F100

R:FF5200F1

T:21006C000000

R:FF21006C00F3

T:220053000000

R:FF220053240F

T:230046000000

R:FF23004601F4

T:24002D000000

R:FF24002D00F3

T:250038000000

R:FF2500382013

T:260007000000

R:FF26000705E8

T:270012000000

R:FF27001200F3

T:2800D1000000

R:FF2800D100F3

T:2900C4000000

R:FF2900C400F3

T:2A00FB000000

R:FF2A00FB00F3

T:2B00EE000000

R:FF2B00EE00F3

T:2C0085000000

R:FF2C00854034

T:2D0090000000

R:FF2D0090FF00

T:2E00AF000000

R:FF2E00AF00F3

T:2F00BA000000

R:FF2F00BA00F3

T:30002E000000

R:FF30002E00F3

T:31003B000000

R:FF31003BFF00

T:320004000000

R:FF32000400F3

T:46108200

R:FF461082

T:5200F100

R:FF5200F1

T:5000DB00

R:FF5000DB

T:51BBE600

R:FF51BBE6

T:08007F00

R:FF08007F

T:0A005500

R:FF0A0055

T:1200AA0000000000

R:FF1200AA0654B219

Tmp:27.9743

最后,关于源TIVA驱动中的一处Bug,说明如下:

void writeMultipleRegisters(uint8_t addr, uint8_t count, const uint8_t data[])

{

/* Check that register map address range is not exceeded */

assert( (addr + count) <= NUM_REGISTERS );

uint8_t i;

for (i = addr; i < (addr + count); i++)

{

writeSingleRegister(addr +i, data[i]); //第一个值将是addr+addr

}

}

修改为:

void writeMultipleRegisters(uint8_t addr, uint8_t count, const uint8_t data[])

{

/* Check that register map address range is not exceeded */

assert( (addr + count) <= NUM_REGISTERS );

uint8_t i;

for (i = addr; i < (addr + count); i++)

{

writeSingleRegister(i, data[i]);

}

审核编辑:金巧

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动
    +关注

    关注

    12

    文章

    1928

    浏览量

    88192
  • 嵌入式处理
    +关注

    关注

    0

    文章

    341

    浏览量

    10450
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    德州仪器ADS644X系列ADC:高性能与灵活性的完美结合

    6442.pdf 产品概述 ADS644X系列ADC采用CMOS技术和开关电容架构,具备高达125 MSPS的采样率,提供14位无失码分辨率
    的头像 发表于 11-27 18:07 1092次阅读
    德州仪器<b class='flag-5'>ADS644X</b><b class='flag-5'>系列</b><b class='flag-5'>ADC</b>:高性能与灵活性的完美结合

    TI ADS642X系列ADC:高性能与灵活性的完美结合

      在电子设计领域,模数转换器(ADC)的性能直接影响着整个系统的精度和稳定性。德州仪器(TI)的ADS6424、ADS6423和ADS6422(统称
    的头像 发表于 11-27 15:57 272次阅读
    TI <b class='flag-5'>ADS642X</b><b class='flag-5'>系列</b><b class='flag-5'>ADC</b>:高性能与灵活性的完美结合

    深入解析ADS624X系列ADC:高性能与灵活性的完美结合

      在电子工程师的日常工作中,选择一款合适的模数转换器(ADC)至关重要。今天,我们就来深入探讨TI公司的ADS624X系列ADC,包括ADS
    的头像 发表于 11-27 14:09 283次阅读
    深入解析<b class='flag-5'>ADS624X</b><b class='flag-5'>系列</b><b class='flag-5'>ADC</b>:高性能与灵活性的完美结合

    探秘ADS612X系列12位ADC:高性能与低功耗的完美结合

      在当今高速发展的电子世界中,模拟 - 数字转换器(ADC)作为连接模拟世界和数字世界的桥梁,其性能的优劣直接影响着整个系统的表现。德州仪器(TI)的ADS612X系列ADC,以其卓
    的头像 发表于 11-27 10:41 273次阅读
    探秘<b class='flag-5'>ADS612X</b><b class='flag-5'>系列</b>12位<b class='flag-5'>ADC</b>:高性能与低功耗的完美结合

    TI ADS614X系列14位ADC:高性能与灵活性的完美结合

    ADS614X系列14位ADC,以其卓越的性能和丰富的功能,成为众多应用场景下的理想选择。今天,我们就来深入探讨一下这款ADC的特点、应用及设计要点。 文件下载:
    的头像 发表于 11-27 10:30 241次阅读
    TI <b class='flag-5'>ADS614X</b><b class='flag-5'>系列</b>14位<b class='flag-5'>ADC</b>:高性能与灵活性的完美结合

    ADS129x/ADS129xR 多通道生物电位测量 ADC 产品总结

    ADS1294、ADS1296、ADS1298(ADS129x)和ADS1294R、ADS129
    的头像 发表于 11-19 14:01 403次阅读
    <b class='flag-5'>ADS129x</b>/<b class='flag-5'>ADS</b>129xR 多通道生物电位测量 <b class='flag-5'>ADC</b> 产品总结

    ADS1262/ADS1263 32 位高精度 ADC 技术文档总结

    ADS1262和ADS1263 (ADS126x)是低噪声、低漂移、38.4kSPS、三角积分 (ΔΣ) ADC,集成了PGA、基准电压源和内部故障监控器。该
    的头像 发表于 11-11 18:16 1403次阅读
    <b class='flag-5'>ADS</b>1262/<b class='flag-5'>ADS</b>1263 32 位高精度 <b class='flag-5'>ADC</b> 技术文档总结

    ADS868x 16 位高速单电源 SAR ADC 核心信息总结

    ADS8681、ADS8685和ADS8689属于基于逐次逼近 (SAR) 模数转换器 (ADC) 的集成数据采集系统系列。这些器件具有高速
    的头像 发表于 11-10 16:48 583次阅读
    <b class='flag-5'>ADS868x</b> 16 位高速单电源 SAR <b class='flag-5'>ADC</b> 核心信息总结

    ADS866x 系列产品核心信息总结

    ADS8661和ADS8665属于基于逐次逼近 (SAR) 模数转换器 (ADC) 的集成数据采集系统系列。这些器件具有高速、高精度 SAR ADC
    的头像 发表于 11-10 10:41 330次阅读
    <b class='flag-5'>ADS866x</b> <b class='flag-5'>系列</b>产品核心信息总结

    ADS1260-Q1 车规级高精度 ΔΣ ADC 技术参数与应用总结

    ADS1260-Q1 和 ADS1261-Q1 (ADS126x-Q1) 是精密、40kSPS、三角积分 (ΔΣ) 模数转换器 (ADC),包括可编程增益放大器 (PGA)。这些器件还
    的头像 发表于 11-04 14:55 318次阅读
    <b class='flag-5'>ADS</b>1260-Q1 车规级高精度 ΔΣ <b class='flag-5'>ADC</b> 技术参数与应用总结

    ADS911x系列18位高速SAR ADC数据手册完整总结

    ADS911x是18位高速模数转换器(ADC系列,具有用于ADC输入的集成驱动器。集成的ADC
    的头像 发表于 10-22 13:47 386次阅读
    ‌<b class='flag-5'>ADS911x</b><b class='flag-5'>系列</b>18位高速SAR <b class='flag-5'>ADC</b>数据手册完整总结

    ADS9117 18位5MSPS SAR ADC,带ADC驱动器和基准电压源技术手册

    ADS911x是18位高速模数转换器(ADC系列,具有用于ADC输入的集成驱动器。集成的ADC
    的头像 发表于 10-22 11:10 455次阅读
    <b class='flag-5'>ADS</b>9117 18位5MSPS SAR <b class='flag-5'>ADC</b>,带<b class='flag-5'>ADC</b><b class='flag-5'>驱动</b>器和基准电压源技术手册

    ADS9129 16 位 20MSPS SAR ADC,带 ADC 驱动器和基准驱动器技术手册

    ADS912x是16位高速模数转换器(ADC系列,集成了用于ADC输入的驱动器。集成的ADC
    的头像 发表于 10-21 15:49 401次阅读
    <b class='flag-5'>ADS</b>9129 16 位 20MSPS SAR <b class='flag-5'>ADC</b>,带 <b class='flag-5'>ADC</b> <b class='flag-5'>驱动</b>器和基准<b class='flag-5'>驱动</b>器技术手册

    Texas Instruments LP5899/LP5899-Q1 LED驱动器数据手册

    Texas Instruments LP5899/LP5899-Q1 LED驱动器是SPI兼容设备,具有内部振荡器,可生成LP589x/LP589x
    的头像 发表于 07-14 11:23 552次阅读
    Texas Instruments <b class='flag-5'>LP</b>5899/<b class='flag-5'>LP</b>5899-Q1 LED<b class='flag-5'>驱动</b>器数据手册

    ADS126xADS1256比较优势在哪里?

    看了下ADS1256和ADS126x的数据手册,发现相同输出速率下,精度相差不是很大啊,ADS126x相对于ADS1256的优势在哪里?现在一个项目准备在这两款直接选一款!纠结中。。
    发表于 01-02 08:35