[ADC]TI am4378 ADC采样设置问题(am335x类似)
这段时间在调试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类似)的更多相关文章
- FL Studio采样设置之时间拉伸栏
今天小编将带领大家了解一下FL Studio采样设置页面中的时间拉伸栏知识,该栏目包含了和采样音频的时间拉伸相关的设置.其右边是一个时间伸缩方式下拉列表,里面列出了很多种类的伸缩方式,自动方式是默认的 ...
- stm32的ADC规则组通道采样顺序设置
先看一下固件库手册 再看一下手册上的例子: 有两个通道,,并且顺序如下
- 关于Stm32定时器+ADC+DMA进行AD采样的实现
Stm32的ADC有DMA功能这都毋庸置疑,也是我们用的最多的!然而,如果我们要对一个信号(比如脉搏信号)进行定时采样(也就是隔一段时间,比如说2ms),有三种方法: 1.使用定时器中断每隔一定时间进 ...
- STM32cube库配置双ADC的同步规则采样
http://www.stmcu.org/module/forum/forum.php?mod=viewthread&tid=605203&extra=page%3D&page ...
- STM32 ADC基础与多通道采样
12位ADC是一种逐次逼近型模拟数字数字转换器.它有多达18个通道,可测量16个外部和2个内部信号源.ADC的输入时钟不得超过14MHZ,它是由PCLK2经分频产生.如果被ADC转换的模拟电压低于低阀 ...
- 关于右移和除法的关系 , ADC采集电量 ,ADC采集MIC(麦克风)
//////////////////////////////////////////////////////////////////////////////////////////////////// ...
- TI CC2541的中断优先级设置.
实际看到的中断优先级设置是这样的:
- tween.js是一款可生成平滑动画效果的js动画库。tween.js允许你以平滑的方式修改元素的属性值。它可以通过设置生成各种类似CSS3的动画效果。
简要教程 tween.js是一款可生成平滑动画效果的js动画库.相关的动画库插件还有:snabbt.js 强大的jQuery动画库插件和Tweene-超级强大的jQuery动画代理插件. tween. ...
- android设置多个类似APP其中的一个为默认
05-09 17:01:13.547: I/ActivityManager(3003): START u0 {act=android.intent.action.VIEW cat=[android.i ...
随机推荐
- linux中WDCP的日志彻底删除技巧
apache或nginx都有开关默认日志,一个是正常访问日志,一个是错误的日志,目录在 /www/wdlinux/nginx-1.0.15/logs /www/wdlinux/httpd-2.2.22 ...
- 记一次在线安装postgresql-9.4的问题
一.在线安装 apt-get install postgresql-9.4 二.运行状态 systemctl status postgresql 显示运行正常,但是却没有启动默认的5432监听端口 三 ...
- excel中对数据进行分类求和
我们在用excel处理数据时,常常需要按不同的类别分别汇总数据.例如下图中需要求出每个业务员的总销售金额等. 通常情况下我们的数据量很大,而且需要较快的统计出来结果,所以我们要用一定的技巧才能计算出来 ...
- Mybatis mark 勿看
Mybatis底层原理总结(一) 2018年01月11日 11:51:06 阅读数:2668 本文适合对Mybatis有一定了解的. 1. Mybatis 读取XML配置文件后会将内容放在一个Conf ...
- 如何获取 docker 容器(container)的 ip 地址(转)
1. 进入容器内部后 cat /etc/hosts 会显示自己以及(– link)软连接的容器IP 2.使用命令 docker inspect --format '{{ .NetworkSetting ...
- php分享二十六:读写日志
一:读写日志注意事项: 1:fgets取出日志行后,注意用trim过滤下 2:explode(“\t", $line) 拆分后,注意判断下个数是否正确,如果不正确,怎么处理? 如果某一列 ...
- 笔记 Hadoop
今天有缘看到董西成写的<Hadoop技术内幕:深入解析MapReduce架构设计与实现原理>,翻了翻觉得是很有趣的而且把hadoop讲得很清晰书,就花了一下午的时间大致拜读了一下(仅浏览了 ...
- 转:Math: Math.atan() 与 Math.atan2() 计算两点间连线的夹角
我们可以使用正切操作将角度转变为斜率,那么怎样利用斜率来转换为角度呢?可以利用斜率的反正切函数将他转换为相应的角度.as中有两个函数可以计算反正切,我们来看一下. 1.Math.atan() Math ...
- mysql protocol
http://hutaow.com/blog/2013/11/06/mysql-protocol-analysis/ https://dev.mysql.com/doc/internals/en/cl ...
- (原创)拨开迷雾见月明-剖析asio中的proactor模式(一)
使用asio之前要先对它的设计思想有所了解,了解设计思想将有助于我们理解和应用asio.asio是基于proactor模式的,asio的proactor模式隐藏于大量的细节当中,要找到它的踪迹,往往有 ...