该Stellaris® ADC模块的转换分辨率为10-位,并支持4个输入通道,以及一个内部温度传感器。 ADC
模块含有一个可编程的序列发生器,它可在无需控制器干涉的情况下对多个模拟输入源进行采样。
每个采样序列均对完全可配置的输入源、触发事件、中断的产生和序列优先级提供灵活的编程。
该 Stellaris® ADC 提供下列的特性:
■ 4个 模拟输入通道
■ 单端和差分输入配置
■ 内部温度传感器
■ 500,000 次/秒的采样率
■ 4个可编程的采样转换序列,入口长度1到8,每个序列均带有相应的转换结果FIFO
■ 灵活的触发控制
– 控制器(软件)
– 定时器
– 模拟比较器
– PWM
– GPIO
■ 硬件可对多达64个采样值进行平均计算,以便提高精度
以上是LM3S8962的ADC 部分的特点。看了上面特点,有几个问题了
1。4个可编程的采样转换序列,入口长度1到8,每个序列均带有相应的转换结果FIFO 这句话是啥意思?影响我们对ADC控制吗?工作原理是?
2。模拟比较器,PWM,GPIO控制怎样触发控制的?
3。怎样使用内部温度传感器?
从上面的框图,我们研究ADC内部电路设计原理:
从上图的从右往左看,模拟信号从外部输入,经过10位AD转换后,采样结果经过硬件平均电路(64次),然后送到FIFO块,FIFO块内部有4个FIFO,每个FIFO对应不同的采样通道,每个FIFO块对应一个采样序列发生器,不同采样序列发生器对应一个中断输出,。
采样控制对应4个选择器,每个选择器对应的4个触发控制事件(比较器,GPIO(PB4),定时器,PWM)控制采样。
从上图,我们清楚看到,ADC 4个通道只能依次轮询控制采样(查询方式),对应中断方式,ADC模块怎样检测到哪个通道采样的?原理又如何?
该 Stellaris® ADC通过使用一种基于序列的可编程方法来收集采样数据,取代了传统ADC模块使用
的单次采样或双采样的方法。每个 采样序列 均为一系列程序化的连续(back-to-back)采样,使得
ADC可以从多个输入源中收集数据,而无需控制器对它进行重新配置或处理。对采样序列内的每个
采样进行编程,包括对某些参数进行编程,如输入源和输入模式(差分输入还是单端输入),采样
结束时的中断产生,以及指示序列最后一个采样的指示符。
该部分说明,ADC 采样原理是基于序列的可编程方法来采集数据,有别于传统的ADC模块的单次采样或双次采样,看来很有特色。
下面研究采样序列发生器工作原理
采样控制和数据捕获由采样序列发生器进行处理。所有序列发生器的实现方法都相同,不同的只是
各自可以捕获的采样数目和FIFO深度。表 12-1 在 251页 给出了每个序列发生器可捕获的最大采样数
及其相对应的FIFO深度。在本实现方案中,每个FIFO入口均为32位(1个字),低10位包含的是转
换结果。
表 12-1. 序列发生器的采样数和FIFO深度
序列发生器采样数FIFO深度
SS3 1 1
SS2 4 4
SS1 4 4
SS0 8 8
对于一个指定的采样序列,每个采样均通过 ADC采样序列输入多路复用器选择 (ADCSSMUXn) 寄
存器的4个位和 ADC采样序列控制 (ADCSSCTLn)寄存器的4个位(半字节)进行定义,其中 "n" 对
应的是序列编号。该 ADCSSMUXn 的半字节用于选择输入管脚,而 ADCSSCTLn 半字节包含采样
控制位,这些控制位分别与参数(例如 温度传感器的选择, 中断使能,序列末端和差分输入模式)
对应。采样序列发生器可以通过置位 ADC活动采样序列发生器 (ADCACTSS)寄存器中相应的ASENn
位进行使能,但也可以在使能之前进行配置。
当配置一个采样序列时,允许同一序列内的相同输入管脚有多种用法。在 ADCSSCTLn 寄存器中,
任意采样组合的 中断使能 (IE)位均可以置位,使得必要时可在每个序列采样结束后产生中断。同
样地, END位可以在采样序列的任何点(point)置位。例如,如果使用序列发生器0,那么可以在
第5个采样相关的半字节内将 END位置位,使得序列发生器0可以在第5个采样后结束采样序列。
在一个采样序列执行完后,可以从 ADC采样序列结果 FIFO (ADCSSFIFOn)寄存器中检索结果数
据。所有的FIFO均为简单的环形缓冲区,该缓冲区通过读取一个地址来“获取(pop)”结果数据。为
了实现软件调试,FIFO头指针和尾指针的位置以及FULL和 EMPTY 状态标志都可以在 ADC采样序列
FIFO状态(ADCSSFSTATn)寄存器中看到。上溢和下溢条件可以使用ADCOSTAT 和 ADCUSTAT
寄存器进行监控。
上面说采样序列发生器的工作情况,大家看半天,不知道被绕晕了没有。我个人理解如下:
采样序列发生器就是可以多次采样数据的一个控制器,可灵活配置采样的次数。通过配置采样序列发生器,可以在
采样动作完成,产生中断标志。可以从寄存器中查询采样结果数据。
感觉采样序列发生器就是一个缓冲寄存器,目的确保驱动采样数据而已
在采样序列发生器的外面,控制逻辑的剩余部分负责如中断产生、序列优先级设置和触发配置等任
务。
大多数的ADC控制逻辑都是在14-18 MHz 的ADC时钟速率下运行。当选择了系统XTAL时,内部的
ADC分频器通过硬件自动配置。自动时钟分频器的配置对所有Stellaris®器件均以16.667 MHz 操作
频率为目标。
ADC 采样工作频率16.667MHZ;
中断
采样序列发生器虽然会对引起中断的事件进行检测,但它们不控制中断是否真正被发送到中断控制
器。ADC模块的中断信号由 ADC 中断屏蔽 (ADCIM)寄存器的MASK位的状态来控制。中断状态可以
在两个位置观察到:一个是ADC原始中断状态(ADCRIS) 寄存器,它显示的是采样序列发生器的中
断信号的原始状态,另一个是ADC中断状态和清除(ADCISC)寄存器,它显示的是ADCRIS寄存器的
INR位和ADCIM寄存器的MASK位进行逻辑与所得的结果。通过向ADCISC对应的IN位写入1来清除
中断。
从上面可以得到三个有用信息:
中断原始信号查询:一个是ADC原始中断状态(ADCRIS) 寄存器,它显示的是采样序列发生器的中断信号的原始状态; 有中断表示有数据采集处理了;
中断屏蔽位查询: ADC 中断屏蔽 (ADCIM)寄存器的MASK位的状态来控制
中断清除方法:通过向ADCISC对应的IN位写入1来清除中断
优先级设置
DATASHEET 原文如下:
当同时出现采样事件(触发)时,ADC采样序列发生器优先级(ADCSSPRI)寄存器的值将为这些事
件设置优先级,安排它们的处理顺序。优先级值的有效范围是0到3,其中0代表优先级最高,而3代
表优先级最低。优先级相同的多个活动采样序列发生器单元不会提供一致的结果,因此软件必须确
保所有活动采样序列发生器单元的优先级是唯一的。
这儿,我有点迷糊了。ADC 模块是通过模拟选择开关选择外面的模拟通道采样的,会存在多个活动的采样序列发生器单元
同时采样吗?
仔细想想,不知是否是TI是这样设计他的硬件的。 软件控制模拟通道选择采样,然后设置对应的采样序列发生器单元的优先级别,等待中断服务程序处理。
换句话说,早起鸟儿不一定就早有虫吃,这要看她的优先级。所以说“软件必须确
保所有活动采样序列发生器单元的优先级是唯一的。”
看看DATASHEET 对采样事件控制的说明:
每个采样序列发生器的采样触发在ADC事件多路复用器选择(ADCEMUX)寄存器中定义。外部的外
设触发源随着Stellaris®家族成员的变化而改变,但所有器件都共用“控制器”和“一直(Always)”触发
器。软件可通过置位ADC处理器采样序列启动(ADCPSSI)寄存器的CH位来启动采样。
在使用“一直(Always)”触发器时必须非常小心。如果一个序列的优先级太高,那么可能会忽略
(starve)其它低优先级序列。
上面给我们传递下面的信息;
采样触发 通过ADCEMUX 寄存器定义 ,关键有两位,采样启动CH位,触发器方式(一直触发)。外部触发源根据器件不同
而变化。
一直触发带来风险,导致中断程序一直处理优先级高的采样通道,优先级低的被忽略了
使用硬件平均电路可产生具有更高精度的结果,然而结果的改善是以吞吐量的减小为代价的。硬件
平均电路可累积高达64个采样值并进行平均,从而在序列发生器FIFO中形成一个数据入口。吞吐量
根据平均计算中的采样数而相应地减小。例如,如果将平均电路配置为对16个采样值进行平均,则
吞吐量也减小了16因子(factor)。
平均电路默认是关闭的,因此,转换器的所有数据直接传送到序列发生器FIFO中。进行平均计算的
硬件由ADC采样平均控制 (ADCSAC)寄存器进行控制。(见267页)。ADC中只有一个平均电路,所有
输入通道(不管是单端输入还是差分输入)都接收相同数量的平均值。
使用硬件平均电路,优点采样精度更高去,确定吞吐量减小。为啥因为采样16个数,采样一个数据出来。
这儿有个疑问?TI 为啥不采样滑到窗口的平均电路,这样应该不会减小吞吐量的!!!!。如果减小吞吐量,就是
每16个采样求平均,相当于采样周期变慢了?不知道我的理解是否在正确!欢迎大虾指正
平均电路默认关闭,需要要让软件开启,此外平均电路只有一个
DATASHEET 上说:
转换器本身会为所选模拟输入产生10位输出值。通过某些特定的模拟端口,输入的失真可以降到最
低
这儿某些特定的模拟端口,输入的失真可以降到最
低 啥玩意,怎样工作的?
大虾们,知道的快来给我们分享
ADC模块的测试模式是用户可用的测试模式,它允许在ADC模块的数字部分内执行回送操作。这在
调试软件中非常有用,无需提供真实的模拟激励信号。该模式可用于ADC测试模式回送(ADCTMLB)
寄存器。
需要注意了,弄清楚ADC测试模式回送的啥东西?否则调试软件不是白搭!
看来上面的寄存器,大家就明白了,返回上面寄存器的低10位值。低10位值跟我们采样配置有关的