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

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

3天内不再提示

双剑合璧 !看HPM6750 如何赋能 ADS1263 实现32位高精度数据处理

先楫半导体HPMicro 2022-08-19 10:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文摘自先楫开发者@xiashuang的测评内容,分享了先楫HPM6750 如何赋能 ADS1263 实现32位高精度数据采集及处理 ,来看看吧

--------------- 以下为测评内容---------------

(本期测评开发板为 HPM6750EVK)


据官方用户手册, TI 的32位ADC:ADS1263 性能很强,最高采样到38.4k(26us),需要的处理器性能必须要具有很强的运算功能,正好试下HPM6750,于是画了一块PCB板,经过一周的等待终于到了,焊接了必要的元件就开干!


6ea5e830-1f2e-11ed-9ade-dac502259ad0.jpg

6ec32f12-1f2e-11ed-9ade-dac502259ad0.jpg


为了先验证板子的情况,先用软件模拟 SPI 进行实验,需要 7 根信号线进行连接通讯,定义的GPIO如下:

*RST---------PE25
*DRDY--------PE26
*MISO--------SPI2.MISO  PB25
*MOSI--------SPI2.MOSI  PB22
*SCK---------SPI2.SCK   PB21
*CS----------PF1
*START-------PF4

先初始化IO口,时钟的开启已经在board_init()中完成,所以指示配置一下寄存器就行

 /*设置IO口为通用IO*/
  HPM_IOC->PAD[IOC_PAD_PE25].FUNC_CTL = IOC_PE25_FUNC_CTL_GPIO_E_25; 
    HPM_IOC->PAD[IOC_PAD_PE26].FUNC_CTL = IOC_PE26_FUNC_CTL_GPIO_E_26;
    HPM_IOC->PAD[IOC_PAD_PB25].FUNC_CTL = IOC_PB25_FUNC_CTL_GPIO_B_25;
    HPM_IOC->PAD[IOC_PAD_PB22].FUNC_CTL = IOC_PB22_FUNC_CTL_GPIO_B_22;
    HPM_IOC->PAD[IOC_PAD_PB21].FUNC_CTL = IOC_PB21_FUNC_CTL_GPIO_B_21;
    HPM_IOC->PAD[IOC_PAD_PF01].FUNC_CTL = IOC_PF01_FUNC_CTL_GPIO_F_01;
    HPM_IOC->PAD[IOC_PAD_PF04].FUNC_CTL = IOC_PF04_FUNC_CTL_GPIO_F_04;
/*配置输入输出*/
    /*ps-上下拉电阻 PE-上下拉开关 SMT-施密特 DS-驱动强度 OD-开漏  MS-电压选择*/
    uint32_t pad_ctl_out = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1);
    uint32_t pad_ctl_in = IOC_PAD_PAD_CTL_PE_SET(1) | IOC_PAD_PAD_CTL_PS_SET(1)|IOC_PAD_PAD_CTL_SMT_SET(1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOE, 25, 1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOB, 22, 1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOB, 21, 1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOF, 01, 1);
    gpio_set_pin_output_with_initial(HPM_GPIO0, GPIO_DO_GPIOF, 04, 1);
    HPM_IOC->PAD[IOC_PAD_PE25].PAD_CTL = pad_ctl_out;
    HPM_IOC->PAD[IOC_PAD_PB22].PAD_CTL = pad_ctl_out;
    HPM_IOC->PAD[IOC_PAD_PB21].PAD_CTL = pad_ctl_out;
    HPM_IOC->PAD[IOC_PAD_PF01].PAD_CTL = pad_ctl_out;
    HPM_IOC->PAD[IOC_PAD_PF04].PAD_CTL = pad_ctl_out;

    HPM_IOC->PAD[IOC_PAD_PE26].PAD_CTL = pad_ctl_in;
    HPM_IOC->PAD[IOC_PAD_PB25].PAD_CTL = pad_ctl_in;

相应的IO输出及输入读取如下:

#define ADS1263_RESET_H gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOE, 25, 1)
#define ADS1263_RESET_L gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOE, 25, 0)
#define ADS1263_START_H gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOF, 4, 1)
#define ADS1263_START_L gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOF, 4, 0)
#define ADS1263_CS_H    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOF, 1, 1)
#define ADS1263_CS_L    gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOF, 1, 0)
#define ADS1263_SCLK_H  gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOB, 21, 1)
#define ADS1263_SCLK_L  gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOB, 21, 0)
#define ADS1263_DIN_H   gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOB, 22, 1)
#define ADS1263_DIN_L   gpio_write_pin(HPM_GPIO0, GPIO_DO_GPIOB, 22, 0)
#define ADS1263_DOUT    gpio_read_pin(HPM_GPIO0, GPIO_DI_GPIOB, 25)
#define ADS1263_DRDY    gpio_read_pin(HPM_GPIO0, GPIO_DI_GPIOE, 26)

初始化ADS1263

int init_ads1263(void)

{
    printf("*************************************************************\r\n");
    printf("*                                                           *\r\n");
    printf("* ADS1263 TEST ^_^                                          *\r\n");
    printf("*                                                           *\r\n");
    printf("*************************************************************\r\n");

    GPIO_Configuration();
    ADS1263_INIT();//ADS1263初始化
    ADS1263_CS_L;
    Delay(0xf);
    ADS1263_WRITE(0x08);//START1 command,当START引脚为低电平时,可由此命令启动ADC1的转换。
    ADS1263_CS_H;
    Delay(0xf);
    return 0;
}
读取AD值
int read_ads1263(void)
{
    if(ADS1263_DRDY != 1)
    {
        ADS1263_CS_L;
        Delay(0xf);
        ADS1263_WRITE(0x12);//读取ADC1
        STATUS=ADS1263_READ_REG();
        ADC1_DATA=ADS1263_READ();
        checksum = ADS1263_READ_REG();
        ADS1263_CS_H; 
        count++;
        D[47]++;
        if(D[76] > 0)
        {
            ADC1_DATA = Filter_ch1(ADC1_DATA,D[76],D[77]);
        }
        ADC1_DATA = CELL_ADSOURSE_FILTER(ADC1_DATA,D[78],D[79]);

        mv_Now = ADC1_DATA / 2147483648.0 * 2500 / 32;//mv数
        //测试重量参数
        Weight = (mv_Now - mv_Zero)/ 10.0f * mv_Full * mv_Cali;
        INT32toREG(ADC1_DATA,&D[0]);//源码
        FP32toREG(mv_Now,&D[2]);//mv数
        FP32toREG(Weight,&D[4]);//重量
        //校秤参数
        mv_Zero = REGtoFP32(&D[70]);//mv零点
        mv_Full = REGtoFP32(&D[72]);//满量程
        mv_Cali = REGtoFP32(&D[74]);//校准系数    

        return ADC1_DATA;
    }
    else
        return 0;
}

利用上次移植的modbus 裸机例子,在主循环中不断查询AD状态读取。

连接好线,接上称重传感器开始测试


6ed788cc-1f2e-11ed-9ade-dac502259ad0.jpg

MODBUS上位机画面,使用50kg C3电阻应变桥式称重传感器采样400次精度在±1g,后来降低采样到60次/s,滑动平均5次,精度在±0.2g 。

6eeff362-1f2e-11ed-9ade-dac502259ad0.png

逻辑分析仪抓取波形图。采用软件模拟SPI,速度在3M左右,读取命令+状态+4字节数据+校验共7个字节数据在20.5us左右

6f18f2bc-1f2e-11ed-9ade-dac502259ad0.png


【实验总结】

HPM6750 在配置IO时要注意名称,因为IO引脚较多,宏定义也比较多,在初始化容易写错(这次因为IO编号写错导致两个IO口没有输出,查了1个多小时)。看来图形化代码工具还是很有必要的(*悄咪咪告诉你们,先楫图形化代码工具已经上线使用中啦);

HPM6750 的驱动强度和施密特单独出来和I.MX RT系列比较像增加了IO控制的灵活性,PCB上高速信号的抗信号反射电阻和驱动限流电阻都可以省去了,等以后试下芯片的施密特能否代替外部输入上的 74HC14;

HPM6750 运算速度很快,等以后试试高阶FIR看看;

ADS1263 的高速采样及其以来模拟电源的纹波,对内部DCDC电源还是要增加滤波器,采样60HZ对50-hz和60hz纹波抑制后精度一下就上来了;

--------------- 以上为全部测评内容---------------


本期的测评分享就到这里,若想获取更多关于HPM6750的精彩内容,可点击下面 “ 阅读原文 ”了解详情哦~


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

    关注

    26

    文章

    6507

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    HPM5E3YIVK单核32RISC-V处理

    HPM5E3YIVK单核32RISC-V处理HPM5E3YIVK是先楫半导体(HPMicro)HPM5E3Y/
    发表于 05-18 09:27

    hpm6750 高频发送 udp_send 时 过一段时间就返回ERR_INPROGRESS

    现在发生的异常是 运行环境是 hpm6750 开发的一个例程 是用lwip 裸机(无os) 每500us 发送一个 udp请求 开始运行的时候正常 运行一段时间后就返回ERR_INPROGRESS
    发表于 04-06 21:49

    深入剖析ADuC834:高精度数据采集与处理的理想之选

    的微控制器,特别适用于高精度数据采集与处理应用。 文件下载: ADUC834.pdf 一、ADuC834概述 ADuC834是一款完整的智能传感器前端,它将两个高分辨率ADC、一个8MCU以及程序/
    的头像 发表于 03-24 11:25 356次阅读

    hpm6750 两个板载网卡+usbcdc_ecm网卡,多次调用ftp,切换网卡后,报错

    hpm6750 两个板载网卡+usbcdc_ecm网卡,多次调用ftp,多次切换网线后,出现报错pbuf_free:p->ref>0;有时候出现[E
    发表于 01-19 16:05

    ADS1252:高精度24模数转换器的深度解析

      在电子设计领域,高精度模数转换器(ADC)是实现精确数据采集的关键部件。德州仪器(Texas Instruments)的ADS1252就是一款具有卓越性能的24
    的头像 发表于 12-08 17:23 1468次阅读
    <b class='flag-5'>ADS</b>1252:<b class='flag-5'>高精度</b>24<b class='flag-5'>位</b>模数转换器的深度解析

    深入解析ADS1253:24高精度ADC的卓越性能与应用指南

      在电子设计领域,高精度模拟 - 数字转换器(ADC)一直是实现精确测量和数据采集的关键组件。今天,我们将聚焦于德州仪器(Texas Instruments)的ADS1253,一款具
    的头像 发表于 12-08 09:22 938次阅读
    深入解析<b class='flag-5'>ADS</b>1253:24<b class='flag-5'>位</b><b class='flag-5'>高精度</b>ADC的卓越性能与应用指南

    解析ADS1232和ADS1234:24高精度ADC的卓越之选

      在电子工程师的日常设计工作中,高精度模拟 - 数字转换器(ADC)是实现精准数据采集不可或缺的关键组件。今天,我们就来深入探讨德州仪器(TI)推出的ADS1232和
    的头像 发表于 11-30 10:23 1440次阅读
    解析<b class='flag-5'>ADS</b>1232和<b class='flag-5'>ADS</b>1234:24<b class='flag-5'>位</b><b class='flag-5'>高精度</b>ADC的卓越之选

    ADS1262/ADS1263 产品核心信息总结

    ADS1262和ADS1263ADS126x)是低噪声、低漂移、38.4kSPS、三角积分 (ΔΣ) ADC,集成了PGA、基准电压源和内部故障监控器。该ADS1263集成了一个用
    的头像 发表于 11-12 10:47 1240次阅读
    <b class='flag-5'>ADS</b>1262/<b class='flag-5'>ADS1263</b> 产品核心信息总结

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

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

    ADS891xB 系列 18 高精度 SAR ADC 核心信息总结

    ADS8910B、ADS8912B和ADS8914B (ADS891xB)属于引脚到引脚兼容、高速、单通道、高精度、18
    的头像 发表于 11-10 14:26 967次阅读
    <b class='flag-5'>ADS</b>891xB 系列 18 <b class='flag-5'>位</b><b class='flag-5'>高精度</b> SAR ADC 核心信息总结

    EtherCAT转PROFINET合璧,重塑海水淡化动力智控

    EtherCAT转PROFINET合璧,重塑海水淡化动力智控 在工业海水淡化处理厂中,动力系统的稳定性和效直接关系到制水成本与运行可靠
    的头像 发表于 10-23 09:31 378次阅读
    EtherCAT转PROFINET<b class='flag-5'>双</b><b class='flag-5'>剑</b><b class='flag-5'>合璧</b>,重塑海水淡化动力智控

    【米尔RK3576开发板免费体验】集成MQ-2烟雾传感器和ADS1263模块实现气体监测

    (GNU/Linux 6.1.75 aarch64)系统。 1.传感器与模块连接 设备 接口类型 开发板连接引脚 功能说明 ADS1263模块 SPI SPI0_CLK/SPI0_MISO 32高精度
    发表于 08-28 10:22

    ADS1263EVM-PDK评估模块技术解析与应用指南

    exas Instruments ADS1263EVM-PDK性能演示套件(PDK)是ADS1263模数转换器(ADC)的评估平台。ADS1263是一款低噪声、低漂移、32Δ-Σ A
    的头像 发表于 08-21 15:30 1893次阅读
    <b class='flag-5'>ADS1263</b>EVM-PDK评估模块技术解析与应用指南

    笙泉高精度24ADC (MAD2402)新上市,精准量测

    笙泉高精度24ADC (MAD2402)新上市,精准量测 ADC简述模拟数字转换器ADC (Analog-to-digital Converter) 主要有几种类型,包括
    发表于 07-04 13:28

    HPM5E31IGN单核 32 RISC-V 处理

    问题。其单核设计在保证性能的同时实现了优异的效比,主频可达248MHz,远超同类ARM架构处理器。这种高性能特性使其能够轻松应对实时数据处理、复杂算法运算等挑战性任务。核心特性架构:
    发表于 05-29 09:23