这段时间在调试AM4378的ADC问题,发现采样到的数据和真实输入波形有所出入,比如输入是1ms的周期,50%占空比的信号,但是采样的数据描点总是偏差较大,数据如下

iio device number being used is
scan_size:
read_size:
ADC value: ADC AVG Value:
read_size:
ADC value: ADC AVG Value:
read_size:
ADC value: ADC AVG Value:
read_size:
ADC value: ADC AVG Value:
read_size:
ADC value: ADC AVG Value:
read_size:
ADC value:

而DTS的设置如下

status = "okay"
adc {
ti, adc-channels = <, , >;
ti, chan-step-opendelay = <0x0 0x0 0x0>;
ti, chan-step-sampledelay = <0xff 0xff 0xff>;
ti, chan-step-avg = < >;
};

采样目标:采样20次,2个周期,也就是2ms, 数据点均匀分布。

问题:在20次基本保持两个周期的情况下,opendelay+sampledelay+other cycles并不符合ADC 24MHz clock的情况,且20次采样并未均匀分布。经过在TI社区咨询发现存在如下问题:

  • 如果不打算做采样平均,那么chan-step-avg不应该设置为1,而是0
  • ADC计算频率并不是24MHz,而是3MHz

-------------------------------------------------------分界线----------------------------------------------------------------

首先, 从Documentation/devicetree/bindings/input/touchscreen/ti-tsc-adc.txt中可以查到如下信息

  • opendelay maximum为0x3FFFF cycles
  • sampledelay maximum为0xFF cycles

其次, 从TI的数据手册可以看到如下信息,最快的一次采样,在Sampledelay=1, opendelay=0的情况下,为15cycles

在者,从驱动文件driver/mfd/ti_am335x_tscadc.c中可以看到如下代码段

tscadc->clk_div = clock_rate / ADC_CLK;
ADC_CLK =

tscadc->clk_div会被写入ADC的DIV分频寄存器,也就是说,clock_rate = 24MHz并不是ADC的真实clock, ADC_CLK才是,也就是3MHz 。

基于以上信息,我们就有如下计算:

/3MHz = .33ns ADC clock period --> .33ns *  ADC clocks = 5us sample period -->  / 5us = 200ksps sampling rate

也就说,最快的ADC采样频率是200ksps,而且是所有通道。也就说1个通道,则采样频率为200ksps; 如果2个通道,则采样频率为100ksps, 以此类推.......

关于chan-step-avg变量

在driver/iio/adc/ti_am335x_adc.c中有如下代码段, 可知AVG默认是0,且当chan-step-avg=0时,寄存器数据为0。 (根据代码段,这里当chan-step-avg=1, 好像写到寄存器的值也是0,不知为什么最终效果确实像做了2个数的平均)

if(adc_dev->step_avg[i])
  stepconfig = STEPCONFIG_AVG(ffs(adc_dev->step_avg[i]) - ) | STEPCONFIG_FIFO1;
else
  stepconfig = STEPCONFIG_FIFO1;

和如下的Datasheet

所以基于上面的采样目标,有如下设置即可, 因为只采用channel6,(0x11D + 15cycles)*333ns=100us. 也就是2ms内完成20次采样。333ns由上面的ADC clock得出。

status = "okay"
adc {
ti, adc-channels = <>;
ti, chan-step-opendelay = <0x11D>;
ti, chan-step-sampledelay = <0x1>;
ti, chan-step-avg = <>;
};

打印结果如下, 可以看出来已经比较均匀了。

ADC value:
ADC AVG Value:
read_size:
ADC value:
ADC AVG Value:
read_size:
ADC value:
ADC AVG Value:
read_size:
ADC value:
ADC AVG Value:
read_size:
ADC value:
ADC AVG Value:
read_size:
ADC value:
ADC AVG Value:
read_size:
ADC value:
ADC AVG Value:
read_size:
ADC value:
ADC AVG Value:
read_size:
ADC value:

[ADC]TI am4378 ADC采样设置问题(am335x类似)的更多相关文章

  1. FL Studio采样设置之时间拉伸栏

    今天小编将带领大家了解一下FL Studio采样设置页面中的时间拉伸栏知识,该栏目包含了和采样音频的时间拉伸相关的设置.其右边是一个时间伸缩方式下拉列表,里面列出了很多种类的伸缩方式,自动方式是默认的 ...

  2. stm32的ADC规则组通道采样顺序设置

    先看一下固件库手册 再看一下手册上的例子:  有两个通道,,并且顺序如下

  3. 关于Stm32定时器+ADC+DMA进行AD采样的实现

    Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1.使用定时器中断每隔一定时间进 ...

  4. STM32cube库配置双ADC的同步规则采样

    http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=605203&extra=page%3D&page ...

  5. STM32 ADC基础与多通道采样

    12位ADC是一种逐次逼近型模拟数字数字转换器.它有多达18个通道,可测量16个外部和2个内部信号源.ADC的输入时钟不得超过14MHZ,它是由PCLK2经分频产生.如果被ADC转换的模拟电压低于低阀 ...

  6. 关于右移和除法的关系 , ADC采集电量 ,ADC采集MIC(麦克风)

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  7. TI CC2541的中断优先级设置.

    实际看到的中断优先级设置是这样的:

  8. tween.js是一款可生成平滑动画效果的js动画库。tween.js允许你以平滑的方式修改元素的属性值。它可以通过设置生成各种类似CSS3的动画效果。

    简要教程 tween.js是一款可生成平滑动画效果的js动画库.相关的动画库插件还有:snabbt.js 强大的jQuery动画库插件和Tweene-超级强大的jQuery动画代理插件. tween. ...

  9. android设置多个类似APP其中的一个为默认

    05-09 17:01:13.547: I/ActivityManager(3003): START u0 {act=android.intent.action.VIEW cat=[android.i ...

随机推荐

  1. cucumber java从入门到精通(1)初体验

    cucumber java从入门到精通(1)初体验 cucumber在ruby环境下表现让人惊叹,作为BDD框架的先驱,cucumber后来被移植到了多平台,有cucumber-js以及我们今天要介绍 ...

  2. freeswitch订阅会议相关通知

    一. freeswitch订阅会议相关通知 event plain CUSTOM conference::maintenance 这时会收到各种通知,会议创建.成员加入.成员离开.成员开始讲话,成员停 ...

  3. ADO.NET事务

    在发布System.Transaction命名空间之前,可以直接用ADO.NET创建事务,也可以通过组件.特性和COM+运行库(位于System.EnterpriseServices命名空间中)进行事 ...

  4. 【转载,整理】Spotlight 监控

    非常好用,安装简易的监控软件 官网:https://www.quest.com spotlight官网链接地址:https://www.quest.com/products/#%20 一. Spotl ...

  5. U811.1接口EAI系列之二-BOM构成-委外BOM构成--VB语言

    1.下面代码实现了VB6.0中调用U8EAI-BOM构成服务,以下代码均为项目实际代码,可直接复制应用. 2.在u811.1版本中委外BOM构成与正常的BOM构成是同系列表,不单独存储. 3.是以存货 ...

  6. 基于Docker的负载均衡和服务发现

    应用的容器化和微服务化带来的问题 在缺省网络模型中,容器每次重启后,IP会发生变动,在一个大的分布式系统保证IP地址不变是比较复杂的事情 IP频繁发生变动,动态应用部署无法预知容器的IP地址,clie ...

  7. Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx

    Atitit 图像处理类库安装与安装模式的前世今生与未来大趋势attilax总结.docx 1. 安装的原理,主要是解压,复制,设置三大步1 2. 目前我们常见的三大种安装模式,二进制模式与源码安装模 ...

  8. webpack配置实践

    首先我们的需求: 打包调试 提取公共代码 压缩 热替换 1.打包调试 第一步,我们在目标文件夹下安装webpack(假设已有package.json)npm i webpack@ -gcnpm i w ...

  9. 菜鸟学SSH(十四)——Spring容器AOP的实现原理——动态代理

    之前写了一篇关于IOC的博客——<Spring容器IOC解析及简单实现>,今天再来聊聊AOP.大家都知道Spring的两大特性是IOC和AOP,换句话说,容器的两大特性就是IOC和AOP. ...

  10. How do I learn mathematics for machine learning?

    https://www.quora.com/How-do-I-learn-mathematics-for-machine-learning   How do I learn mathematics f ...