本文只介绍工作流程,工作原理参考另一篇https://blog.csdn.net/li_654/article/details/118181429?spm=1001.2014.3001.5501

一、初始化参数

初始化采用官方提供的驱动程序,直接调用AD7124_Setup(&g_ad7124dev,ad7124_regs)即可,寄存器配置需要根据自己需求进行相应配置,双通道采集配置参数如下:

ad7124_st_reg ad7124_regs[AD7124_REG_NO] =
{{0x00, 0x00,     1, 2}, /* AD7124_Status */{0x01, 0x14C0,   2, 1}, /* AD7124_ADC_Control 全功率模式,连续转换0x04C0 ADC_CONTROL的DOUT_RDY_DEL位置1*/{0x02, 0x0000,   4, 2}, /* AD7124_Data */{0x03, 0x0000,   3, 1}, /* AD7124_IOCon1 */{0x04, 0x0000,   2, 1}, /* AD7124_IOCon2 */{0x05, 0x02,     1, 2}, /* AD7124_ID */{0x06, 0x0000,   3, 2}, /* AD7124_Error */{0x07, 0x0044,   3, 1}, /* AD7124_Error_En *///进行CRC校验{0x08, 0x00,     1, 2}, /* AD7124_Mclk_Count */{0x09, 0x8011,   2, 1}, // 读取通道0 8011{0x0A, 0x0001,   2, 1}, /* AD7124_Channel_1  读取通道2 8031*/{0x0B, 0x0001,   2, 1}, /* AD7124_Channel_2 */ {0x0C, 0x0001,   2, 1}, /* AD7124_Channel_3 */{0x0D, 0x0001,   2, 1}, /* AD7124_Channel_4 */{0x0E, 0x0001,   2, 1}, /* AD7124_Channel_5 */{0x0F, 0x0001,   2, 1}, /* AD7124_Channel_6 */{0x10, 0x0001,   2, 1}, /* AD7124_Channel_7 */{0x11, 0x0001,   2, 1}, /* AD7124_Channel_8 */{0x12, 0x0001,   2, 1}, /* AD7124_Channel_9 */{0x13, 0x0001,   2, 1}, /* AD7124_Channel_10 */{0x14, 0x0001,   2, 1}, /* AD7124_Channel_11 */{0x15, 0x0001,   2, 1}, /* AD7124_Channel_12 */{0x16, 0x0001,   2, 1}, /* AD7124_Channel_13 */{0x17, 0x0001,   2, 1}, /* AD7124_Channel_14 */{0x18, 0x0001,   2, 1}, /* AD7124_Channel_15 */{0x19, 0x01E0,   2, 1}, /* AD7124_Config_0 *///PGA  1  0x01E0{0x1A, 0x0000,   2, 1}, /* AD7124_Config_1 */{0x1B, 0x0000,   2, 1}, /* AD7124_Config_2 */{0x1C, 0x0000,   2, 1}, /* AD7124_Config_3 */{0x1D, 0x0000,   2, 1}, /* AD7124_Config_4 */{0x1E, 0x0000,   2, 1}, /* AD7124_Config_5 */{0x1F, 0x0000,   2, 1}, /* AD7124_Config_6 */{0x20, 0x0000,   2, 1}, /* AD7124_Config_7 *///滤波和采样速度{0x21, 0x010001, 3, 1},  //0x010001{0x22, 0x000000, 3, 1}, /* AD7124_Filter_1 */{0x23, 0x000000, 3, 1}, /* AD7124_Filter_2 */{0x24, 0x000000, 3, 1}, /* AD7124_Filter _3 */{0x25, 0x000000, 3, 1}, /* AD7124_Filter_4 */{0x26, 0x000000, 3, 1}, /* AD7124_Filter_5 */{0x27, 0x000000, 3, 1}, /* AD7124_Filter_6 */{0x28, 0x000000, 3, 1}, /* AD7124_Filter_7 */{0x29, 0x800000, 3, 1}, /* AD7124_Offset_0 */{0x2A, 0x800000, 3, 1}, /* AD7124_Offset_1 */{0x2B, 0x800000, 3, 1}, /* AD7124_Offset_2 */{0x2C, 0x800000, 3, 1}, /* AD7124_Offset_3 */{0x2D, 0x800000, 3, 1}, /* AD7124_Offset_4 */{0x2E, 0x800000, 3, 1}, /* AD7124_Offset_5 */{0x2F, 0x800000, 3, 1}, /* AD7124_Offset_6 */{0x30, 0x800000, 3, 1}, /* AD7124_Offset_7 */{0x31, 0x500000, 3, 1}, /* AD7124_Gain_0 */{0x32, 0x500000, 3, 1}, /* AD7124_Gain_1 */{0x33, 0x500000, 3, 1}, /* AD7124_Gain_2 */{0x34, 0x500000, 3, 1}, /* AD7124_Gain_3 */{0x35, 0x500000, 3, 1}, /* AD7124_Gain_4 */{0x36, 0x500000, 3, 1}, /* AD7124_Gain_5 */{0x37, 0x500000, 3, 1}, /* AD7124_Gain_6 */{0x38, 0x500000, 3, 1}, /* AD7124_Gain_7 */
};

这是读通道0数据,读通道1数据只需要修改0x09寄存器数据为0x8031(因为AVSS接地线),参数的设置需要详细看手册才能明白。

二、采集数据

每两个数求平均代码:

unsigned long int GetAdAvrgValue(U32 * pdata,uint8_t num)
{unsigned long int max, min;unsigned long int sum;uint8_t i;min = pdata[0];                                             // 赋值最小值  max = pdata[0];                                             // 赋值最大值sum = pdata[0];                                             // 赋值累加第一个值for(i=1; i<num; i++){min = (min > pdata[i])? pdata[i]:min;                    // 记录最大值max = (max < pdata[i])? pdata[i]:max;                   // 记录最小值sum += pdata[i];                                      // 数据累加} if(num > 2){return (sum - (max + min))/(num-2);                     // 数据放入处理数组中}else {return sum/num;}
}

手动切换通道代码:

ad7124_st_reg ad7124_regs_ch0[1]=
{{0x09, 0x8011,   2, 1}, // 使能读取通道0  /***测试阶段0x8011***/
};
ad7124_st_reg ad7124_regs_ch1[1]=
{{0x09, 0x8031,   2, 1}, // 使能读取通道1  /***测试阶段0x8031***/
};

采集数据代码:

void InsertAdcData(void)
{      U16 i,j=0;U32 data1s_ch0[50];U32 data1s_ch1[50];    AD7124_WriteRegister(&g_ad7124dev, ad7124_regs_ch0[0]);if( AD7124_WaitForConvReady(&g_ad7124dev,5) >= 0 )          //采集通道0数据{AD7124_ReadRegister(&g_ad7124dev, &ad7124_regs[2]);       stSysDataVar.gu32_ReadAdValue[0][gu8_ReadAdCnt_ch0++] = (ad7124_regs[2].value>>8)&0xFFFFFF;}AD7124_WriteRegister(&g_ad7124dev, ad7124_regs_ch1[0]);if( AD7124_WaitForConvReady(&g_ad7124dev,5) >= 0 )          //采集通道1数据{AD7124_ReadRegister(&g_ad7124dev, &ad7124_regs[2]);       stSysDataVar.gu32_ReadAdValue[2][gu8_ReadAdCnt_ch1++] = (ad7124_regs[2].value>>8)&0xFFFFFF;}if(gu8_ReadAdCnt_ch0>=ADC_VALUE_COLUMN)                     //每次需要采集100个点  {    gu8_ReadAdCnt_ch0=0;gu8_ReadAdCnt_ch1=0;memcpy(stSysDataVar.gu32_ReadAdValue[1],stSysDataVar.gu32_ReadAdValue[0],ADC_VALUE_COLUMN*4);memcpy(stSysDataVar.gu32_ReadAdValue[3],stSysDataVar.gu32_ReadAdValue[2],ADC_VALUE_COLUMN*4);             for(i=0;i<ADC_VALUE_COLUMN;i+=2){data1s_ch0[j] = GetAdAvrgValue(stSysDataVar.gu32_ReadAdValue[1]+i,2);data1s_ch1[j] = GetAdAvrgValue(stSysDataVar.gu32_ReadAdValue[3]+i,2);            j++;if(j>=50){j=0;memcpy(stSysDataVar.ADC_AllData,data1s_ch0,50*4);memcpy(stSysDataVar.ADC_AllData+50,data1s_ch1,50*4);}}}
}

注意:采集数据之前需完成初始化配置,不然会出错。

这里是通过写0x09寄存器数据进行切换通道,每个通道读取的数据放在二维数组中,采集频率是100HZ,每10毫秒采集一个点,每次采集100个点的数据,采集100个点之后把这些临时数据拷贝到其它序号的二维数组中,这里是为了防止采集到的临时数据还没用就被下一次更新,然后把这100个点数据每两个求平均,得出50个点数据,采集频率就是50HZ了,最后求平均之后的数据赋值于一个数组,前边存通道0后边存通道1 数据,封装好之后供其它函数调用。

AD7124采集工作流程相关推荐

  1. 驰骋工作流程引擎案例-水质检测工作流程设计开发实现过程

    2019独角兽企业重金招聘Python工程师标准>>> Technorati Tags: 开源驰骋工作流引擎, .NET工作流,表单设计器,ccflow, jflow, 案例,水质监 ...

  2. zabbix工作流程(自定义添加监控项目)

    Zabbix工作流程监控流程描述 zabbix上自带的监控想模板及项目很少,所以很多时候我们需要自己制定一些项目及操作. 这里我只说明了如何来获取zabbix需要监控的一些数据方式.web界面的添加及 ...

  3. java mvc模式工作流程_SpringMVC的简介和工作流程

    一.简介 Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.Spri ...

  4. K8S架构设计及工作流程分析

    Kubernetes架构设计 核心组件 api server 功能 controller manager 负责维护集群的状态 scheduler 负责资源的调度按照预定的调度策略将Pod调度到相应的机 ...

  5. 一起来学习网站SEO优化工作流程到底怎么做?

    作者介绍:大家好!我是鱿年年★→ 个人主页:鱿年年的博客主页 系列专栏:网站SEO 目录 前言 一:行业网站概况分析 二:布局关键词 三:SEO优化 1:站内优化 2:站外优化 四:网站数据的监测工作 ...

  6. Spring Cloud(十一):Hystrix服务熔断-工作流程

    1. Hystrix服务熔断 1.1 断路器 类似保险丝 1.2 熔断是什么 熔断机制是应对雪崩效应的一种微服务链路保护机制.当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而 ...

  7. 工作流程管理系统,表结构与运行机制

    驰骋工作流引擎,工作流程管理系统,表结构与运行机制. 前言: 1, ccflow 有自动修复数据表功能, 所以表的字段的变化不需要用户干预由ccflow自动完成. 所以如果你看到sql的错误,在执行一 ...

  8. SpringCloud进阶-Hystrix的熔断机制+Hystrix的工作流程

    提示:本文主要对SpringCloud中的Hystrix的熔断机制和工作流程进行总结 文章目录 前言 一.简介 1.熔断是什么 二.实操 1.实现 2.测试 三.总结 1.大神结论 2.熔断类型 3. ...

  9. 神经肿瘤组学基础知识、工作流程及应用

    在过去几年中,从脑肿瘤患者中采集的具有常规临床用途的神经影像数据的数量.种类和复杂性以及由此产生的影像参数数量都大幅增加.因此,如果没有人工智能(AI)领域的方法支持,对成像数据进行及时且成本效益高的 ...

  10. 舆情监测系统工作流程大致是怎样的?

    随着中国互联网的快速发展,越来越多的人将互联网作为获取信息的首选渠道,舆情监测已成为政府.企业的重要工作内容. 舆情监控可以整合互联网信息采集技术及信息智能处理技术,通过对互联网海量信息自动抓取.自动 ...

最新文章

  1. 福布斯2019全球最佳创投人榜单发布,沈南鹏蝉联全球第一
  2. 解决python发送multipart/form-data请求上传文件的问题
  3. LVM是逻辑盘卷管理1
  4. linux和windows输入法,关于输入法框架,这里有可以跨平台的linux和windows。。。。...
  5. linux怎么设置ftp为主动模式,linux设置ftp服务器为主动模式
  6. php将pdf保存文件到本地,将生成的PDF文件存储在服务器上
  7. thinkphp5 后台多选删除_TP5(thinkPHP框架)实现后台清除缓存功能示例
  8. 百度地图API的使用教程以及案例
  9. 可视化优化:百度地图内网访问(通过nginx代理)
  10. BI与SaaS碰撞,让数据处理更加轻松(下)
  11. javascript中的字符串编码转换
  12. 章节1 计算机体系结构
  13. HTML5 案例学习笔记
  14. u盘有图标计算机显示没有,电脑没插U盘却显示U盘图标的解决方法
  15. 浏览器输入一个URL地址后发生的事情
  16. 散户炒股七大绝招 巨额获利风险小 (网摘)
  17. 传感器检测系统及实训QY-812G
  18. 夏季吃5种水果对抗紫外线
  19. 广西北海打击涉嫌传销“一日游” 一周查获7辆涉传大巴
  20. c语言课程设计之黑白棋游戏,c语言课程设计黑白棋游戏.doc

热门文章

  1. 数据结构c语言版题库填空题,数据结构(C语言版)选择、填空题
  2. 《遗传算法原理及应用》笔记—基本遗传算法
  3. 1688API接口,item_get_app - 获取1688app上原数据
  4. 第一部分:基础知识(第一章)XAP 就是 ZIP
  5. HTML5期末大作业:学校网站设计——初级中学网站(16页)HTML+CSS+JavaScript 学校网页设计作业 网页设计作业 学生个人设计成品,网页设计作业
  6. 致敬逆行者网页设计作品 大学生抗疫感动专题网页设计作业模板 疫情感动人物静态HTML网页模板下载
  7. 计算机网络 校园网规划与设计方案,校园网网络规划与设计的方案.pdf
  8. 在Eclipse4.2 4.3 中安装最新版插件 WindowsBuilder swt
  9. php滑动门效果,基于JavaScript实现滑动门效果的代码实例介绍(图文)
  10. 数学智力题 武士数独题目_数学智力题九宫格