主题中讨论的其他器件:TM4C123
工具/软件:Code Composer Studio
您好!
您能否共享启用硬件采样平均值为8的示例代码?
我的客户一直在尝试使其正常工作、但似乎无法启用它。
谢谢、
Tadeo
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
您好!
您能否共享启用硬件采样平均值为8的示例代码?
我的客户一直在尝试使其正常工作、但似乎无法启用它。
谢谢、
Tadeo
您好、Tadeo、
我将仅附加您脱机发送的 TivaWare API 配置代码、而不附加任何其他应用程序代码、因此将来查找此帖子的任何用户都可以使用上下文:
MAP_SysCtlPeripheralEnable (SYSCTL_Periph_ADC0); MAP_ADCReferenceSet (ADC0_BASE、ADC_REF_EXT_3V); MAP_GPIOPinTypeADC (GPIO_Porte _BASE、 (GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3) ;GPIO_PIN_3_BASE (GPIO_GPIO_GPIO_0) | GPIO_GPIO_PIN_GPIO_PIN_0);GPIO_PIN_ADC0_GPIO_PIN_ADC0_ADC0_GPIO_SDK_0 (GPIO_PIN_PIN_ADC0_GPIOR_GPIO_SDK_0) MAP_ADCSequenceConfigure (ADC0_BASE、0、ADC_TRIGGER_TIMER、0); MAP_ADCSequenceStepConfigure (ADC0_BASE、 0、0、ADC_CTL_CH0); MAP_ADCSequenceStepConfigure (ADC0_BASE、0、 1、ADC_CTL_CH1); MAP_ADCSequenceStepConfigure (ADC0_BASE、0、2、 ADC_CTL_CH2); MAP_ADCSequenceStepConfigure (ADC0_BASE、0、3、 (ADC_CTL_END | ADC_CTL_CH3 | ADC_CTL_IE)); MAP_ADCSequenceEnable (ADC0_BASE、0); MAP_ADCIntEnable (ADC0_BASE、0); MAP_IntPrioritySet (INT_ADC0SS0、5 << 5); MAP_IntEnable (INT_ADC0SS0); MAP_SysCtlPeripheralEnable (SYSCTL_Periph_Timer1); MAP_TimerConfigure (Timer1_base、 Timer_CFG_PERIODICRARic); MAP_TimerControlTrigger (Timer1_base、timer_A、true); MAP_TimerLoadSet (Timer1_base、 Timer_A、400000);//周期时间5ms 或200Hz MAP_TimerEnable (Timer1_base、timer_A);
现在、回顾所有这些内容、我看到缺少 API 调用。 我认为需要添加这一点、以使操作正常工作。
请让它们也配置 ADC 时钟、例如:
ADCClockConfigSet (ADC0_BASE、ADC_CLOCK_SRC_PLL | ADC_CLOCK_RATE_FULL、25);// 16MHz
您好!
我尝试添加 API 调用、但它仍然不起作用。
我的问题再次是:
我使用200Hz 的采样率、并对4个通道进行采样->因此我每5ms 获得一次新的采样。
作为触发源、我使用计时器。
现在、当我打开 HardwareAveraging 时、例如8 ->我希望每5ms*8 = 40ms 获得一次样本。
问题是我仍然每5ms 获得一次采样(ADC 中断仍然每5ms 发生一次)...?
因此,在我看来,HardwareAveraging 的某些东西出现了问题,不起作用。。
也许您可以帮助我解决这个问题?
非常感谢
Chris
您好!
请注意- 在'ADC Functions'(供应商的 Ralph 大方地提供/提供)中,出现了'eval' (正常)... 不适用于 TM4C123系列 MCU! (所有这些函数都来自线程的创建程序(O.p.)) 相信(可以-希望)这些"非法"函数调用中的某些函数可能会解释或导致"解决海报问题"。
这是我们公司的一名年轻的"更好的实习生"发现的、因为她获得了能力、而且每天都在。 (以及重点突出的努力) 之后-一个快速示例(O.p.说"错过了")
ADCClockConfigSet (ADC1_base、ADC_CClock_SRC_PLL | ADC_CClock_RATE_FULL、30);// 16MHz 注意-所有海报引用都已改为 'ADC0_BASE!'
唉——司机库“遇到问题!” (两次)
4.2.2.3 ADCClockConfigSet
设置 ADC 的时钟配置。
参数:
ui32Base 是要配置的 ADC 的基址、它必须始终为'ADC0_BASE '。
注意: 对于 TM4C123x 器件、如果 PLL 被启用、PLL/25被用作 ADC 时钟 (因此参数"30"-看起来不正确! 对于'129 (480MHz)还可以-对于'123! (400MHz)因此"25"证明是正确的)
员工/我已经调查了供应商的 Ralph (之前提供)提供的代码、并"发现"了以下内容:
虽然"在这里不受青睐"(这是合理的) DRM 编码可能会-在这种有限的情况下-到达"节省一天!"
用户可能希望"实施这些更改"-并报告-我们现在"太挤了"-投入(更多)时间/精力-并相信这项分析既广泛又深入-并取得成功!
尊敬的 Chris:
虽然您正在获得 Ralph 和 CB1的大力支持、但我想谈谈我对硬件采样平均的看法。 平均电路的工作方式是、它将获取给定通道的样本 x 次数(即2、4、8、16、32、 或64)、然后再将平均值数据存储到 FIFO 中。 假设您以1Msps 的速度运行。 这意味着对于每个通道、理论上需要1us 的转换时间。 如果您将硬件采样平均值配置为64、则需要64uS 才能完成该平均值并将其存储到 FIFO 中、然后再移至下一个通道。 它不是每 x 个"触发器"获取通道转换的平均值。 每 x 个触发器数平均有两个问题。 这意味着在最后一次触发发生之前、需要使用另一个硬件缓冲器来存储中间值、然后再将最终平均值数据写入 FIFO。 第二个问题是、如果触发器相隔很远、则每次转换可能不再相互关联。 在您的用例中、每5ms 触发一次。 如果将触发器配置为每隔几个小时或几天发生一次、该怎么办? 也许有一些应用用例用于此目的、但这不是 ADC 硬件平均在 TM4C 器件中的工作方式。
请参阅数据表中显示的下图、其中 A、B C 和 D 是同一通道的4个不同采样点。
[引用 USER="Ralph Jacobi">我能否询问您的员工为什么会觉得64的设置不会将0x06的设置应用于 ADC_O_SAC 寄存器?
[/报价]
当然、正如我在几次写的那样、在调用该函数之后、我们对 'ADCSAC'的审查 结果显示为0x0。 这是在两块 LPad 上完成的、这两块 LPad 是客户原型系统的一部分、计划明天发货。 客户致电-要求此货件"提前发货"-因此、直到今晚 c.o.b.(营业结束)、我们才能开箱新的 LPad。 我们的仓库中有许多。 (几个街区外-在一个"气候控制"的区域-但租金却低得多。)
因为您有了一个不那么麻烦的测试、我们没有理由"删除您的发现"、而"训练障碍"的那一部分手指可能会被移除。 我相信我们发布了这一结果、认为这是"可能的"、而不是"绝对的"。 同样、在故障排除过程中发现的任何发现、尤其是拖了之后的发现、就像这个发现的那样、肯定会被呈现出来。 (早期判断-通常-证明是错误的。)
Jennifer 和我没有(更多)时间阅读/审查这里的最新帖子-(你的和 Charles 的一个)-一旦我们的"后台"清空、我们将"尝试"这样做... (员工/演员...)
谢谢你们——然而那个阴影的“4”的“重新定位”——仍然不在工作人员(超级聪明)和我自己(无聊的正常——在一个好日子。)
工作人员“猜测”也许——在第7次转换时产生了中断——但没有达到这样的细节(甚至现在)。
您在图中没有看到明显的视差吗? (第4位的变化-从第4位(预期)到第3位(意外) 显然是... 谢谢你 然而 、您已经做出了特别的努力来寻找-然后展示它。 为什么在右侧(4数据包)中显示的'4'和位置3中放置? 目的是什么? 这里没有人“得到”——完全没有人!
您可能会很好/很善良、但会有些细节吗?
至于您刚才介绍的代码、这很清楚、但前面的图表-正如我们确实尝试详细介绍的那样-会使我们的所有团队都无法理解。 (让我们(更多)谢谢!) 帮助! Mercî……
这是一个缺失的链接(您需要进行大量澄清-添加了文本)! 感谢 Charles -不是您的澄清/放大-我们迷路了。 (或员工—比我聪明——“预制”——@我的“高级”。)
我是否可以建议改进? 该图-哪个'model'是'4入口 FIFO'(您已经注意到)-也表示'4X 硬件过采样'(没有注意到-但我的印象是这样)- 是否正确? 因此-我们通过 两个(不同的-和不相关的)"4"的出现创造了"可能的困惑"-我们难道不是吗?
如果 我们保持相同的"4入口 FIFO"、但 将"硬件过采样"更改为"8X"、那么您现在的(大幅改进)图表将如何更改? 然后、该图是否可以(仅)显示这2个中的一个入口-'4入口 FIFO'-和'仅在第8次 ADC 捕获后'到达并被处理?
希望我能解释清楚,你可以再次缓解我们的(未知)不适。
也就是说、我们的海报报告了、即使配置了64X 过采样、他也以远高于"非过采样率"的速率收到了 ADC 中断! 这是"直至"的问题-不是吗?
刚才提到的员工-您的图表显示(仅一个)中断-不应该发生两个中断?
再次感谢您在"教育不受教育的人"方面付出的时间/努力/慷慨大方。
您好 CB1、
[报价 USER="CB1_MOBIT)]如果 我们保持相同的'4入口 FIFO'但 将"硬件过采样'-更改为'8X'、您的当前(大幅改进)图表将如何更改? 然后、该图是否可以(仅)显示这2个中的其中一个的条目-'4条目 FIFO'-和'仅在第8次 ADC 捕获后'到达并被处理?[/QUEST]
下图如何?
[引用 user="CB1_MOBIST"]刚才注意到的员工-您的图表显示(仅一个)中断-不应该发生两个中断?
否、它只会生成一个中断。 让我们再次使用我的代码来表示图。 序列发生器0仅配置了两个步骤(步骤0和步骤1)。 两 个步骤都将对 CH0进行采样。 您可以使用8倍过采样或64倍过采样、这无关紧要。 查看第二行、其中 ADC_CTL_IE 和 ADC_CTL_END 应用于步骤1。 在第1步被转换后、一个中断被生成。 并不是每个"步骤"完成都会生成一个中断。 每个"序列发生器"完成都会生成中断。
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
[引用 USER="Ralph Jacobi"]仅仅因为您启用了硬件过采样并不意味着计时器将知道它必须减少中断频率。 尝试使用 ADC_TRIGGER_TIMER、并将计时器设置为预期的采样率、而不是5ms [/QUERP]
我第一次读这篇文章-和员工-我们有"混合的感受"。 我有(一些)经验-他们有主要的 SMARTS -(在一个好日子)我们可能会"危险"。 (有一个希望)
以下是在(拉尔夫和查尔斯)(以及我的天才员工)的努力的基础上、尝试在更系统(可理解的框架内提出这个"ADC 硬件过采样"问题:
我们目前还没有 LPAD -用于编码和观察(即测试/验证)-但这似乎是一种合理的方法-第一种方法具有完整和可用的详细信息-以启用重新启动和测试。
再次感谢供应商代理(和朋友) Ralph & Charles 和我公司的激励人心的年轻员工、为我们讲解这条"老狗" 。 另一个新技巧。 ((也许)- 我们应该"等待并看到!")
Charles -再次非常感谢。 我们正在检查-我们今天早上阅读的内容-这可能是最有用的-请稍候。
(我们的运动——至少我的运动——被称为“快于一群海龟”——超越我们的 Speed Lane Charles——在远光灯上有点重…… 博伊兹!)
这里还有一点-支持我公司的总结-主张 ADC 采样率提高64倍(最小值)-如果和何时-用户寻求实现此类 ADC 硬件过采样!
海报写道: “硬件 解决方案似乎只有在我使用 ADC-Trigger 时才起作用:“TRIGGER_ALYWAYS”,因素64…
现在-触发率-太快-(可能)"不合理"-但肯定符合我公司提供的"计算值(或更高)"。 和提供了肯定的确认-硬件过采样-只有当 " ADC 采样率 -最低-等于或超过-所需的采样率乘以过采样率!" (可能-添加了一些额外的(安全时间)。)
现在-(有点)与 Charles 的报告相反-几位员工和我记得、我读到过采样-硬件过采样-降低了中断速率-降低了过采样因子。 (不相信查尔斯(Charles)的结论(准确)表明了这一点!)
我们希望(再次)展示 Charles 先前的结论: "查看第二行、其中 ADC_CTL_IE 和 ADC_CTL_END 应用于步骤1。 在第1步被转换后、一个中断被生成。 并不是每个"步骤"完成都会生成一个中断。 每个"序列发生器"完成都会生成中断。" 而且-员工/我相信-这篇文章值得挑战!
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
回顾他(之前的图表-在此复制-为清晰起见) -对" 中断生成"索赔提出质疑! (请注意、我已添加关键定义详细信息)
[引用 USER="CB1_MOBIT)]我们希望(再次)介绍 Charles 先前的主题: "查看第二行、其中 ADC_CTL_IE 和 ADC_CTL_END 应用于步骤1。 在第1步被转换后、一个中断被生成。 并不是每个"步骤"完成都会生成一个中断。 每个"序列发生器"完成都会生成中断。" 而且-员工/我认为-这篇文章值得挑战![/引述]
我在1中断上的发言是指我以图表表示形式提供的两行代码。 一个序列内的多个采样可以产生中断、这是合法的。 例如、如果您按如下方式更改代码。 但是、您为什么要在应用中这样做。 这就不能达到使用 FIFO 的目的。
ADCSequenceStepConfigure (ADC0_BASE、0、0、ADC_CTL_CH0 | ADC_CTL_IE);
ADCSequenceStepConfigure (ADC0_BASE、0、1、ADC_CTL_CH0 | ADC_CTL_IE | ADC_CTL_END);
您好、Ralph、
值得注意的是、您和我们的大部分员工仍然"激动"。
我刚刚添加到我的帖子(就在你的正上方)。 我现在非常确信——我的公司(团队努力)提出的逻辑和语言 ——在细节上——以及(甚至)过去所表现出的清晰度(当然也是颜色)——都超过了这一点。 同样、您和 Charles 的意见很好、但我的团队有"详细信息"、并制定了合理准确的系统指南。 (如此喜欢——我们的主要(特别是)“巨人” …… 客户)
员工赢得了“免费晚餐”——在一个体面的联合餐厅——如果我的“卡”不是“运送货物”——“没有洗过的菜”堆的高(非常高)等待着我们! 这种情况-经常发生-回声是...的条件。 “Hacienda CB1!” (为什么要洗涤-何时可以购买新产品?)
您好、Ralph、
是的、这是正确的、但某些东西仍然不起作用。 我的问题再次出现了:-)
一些事实:
->我必须对4个通道进行采样
->因此我使用序列发生器1 (FIFO 深度-> 4)
ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH0);
ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH1);
ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH2);
ADCSequenceStepConfigure (ADC0_BASE、1、3、ADC_CTL_CH3 | ADC_CTL_IE |ADC_CTL_END);
->我使用计时器来触发采样 率为200Hz (5ms)的 ADC 转换(ADC_TRIGGER_TIMER)
ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_TIMER、0);
SysCtlPeripheralEnable (SYSCTL_Periph_Timer1);
TimerConfigure (Timer1_base、timer_CFG_PERIODICRACRACASE);
TimerControlTrigger (Timer1_base、timer_A、true);
TimerLoadSet (Timer1_base、timer_A、400000); //周期时间5ms 或200Hz
TimerEnable (Timer1_base、timer_A);
->我使用硬件取平均值、系数为8
ADCHardwareOversampleConfigure (ADC0_BASE、8);
现在我以为情况会如此
-每5ms 对每通道8个样本进行平均采集并保存在序列发生器 FIFO 中
因此,我将每5ms*8*4=160ms 获得一个序列发生器1中断。
->问题实际上是我的中断处理程序仍然每5ms 调用一次->所以 我的假设是硬件平均不能正常工作。?!!
非常感谢
Chris
尊敬的 Chris:
一些问题。 您现在更改为使用序列发生器1。 使用序列发生器0之前。 如果您使用的是序列发生器1、我希望您已使用 ADCIntEnable (ADC0_BASE、1)为序列发生器1启用中断。 下一个问题是、您说您在5ms 处获得中断。 您确定这是从 ADC 获得的中断、而不是为5ms 中断配置的计时器? 您能否尝试在计时器中断中设置一个引脚并清除 ADC 序列发生器1中断中的该引脚? 1)测量引脚在禁用硬件平均值和系数8硬件平均值的情况下的高脉冲?
我希望这张图能说明它的工作原理。 请注意、该图未按比例绘制。
尊敬的 Chris:
[引用 user="Christoph50"->"I use a timer for trigger the ADC conversion (ADC_TRIGGER_TIMER) with a sample rate of 200Hz (5ms)
请再次阅读 Ralph 的最后一篇文章、因为他说 GPTM 仅启动 序列发生器采样周期、ADC 时钟速度处理过采样时间。 我在 Charles 图中看到的这些 X 表示 转换(完成) 中断之前模拟信号中相对于过采样周期的 FIFO 串行位时钟时间。 序列发生器 FIFO 循环 地根据 采样时钟速度(速率)将12位寄存器以串行位时间加载到每个 阶跃指定的通道中。 因此 、CB1之前 指出的 ADC 采样时钟速度对于确认其以正确的频率运行非常重要。
如果不正确、Charles 可以纠正我的问题、 ADC0/1只使用 SYSCLK 通过 寄存器配置外设行为和序列发生器步骤。
您好 BP101:
我想在图中显示序列发生器中每个通道的1X 过采样与8X 过采样之间的转换时间差。 如果您对8X 过采样进行编程、则序列发生器将获取每个通道的8倍采样并对转换结果求平均值、然后再将转换后的数据保存到 FIFO 中。 我真正要演示的是、使用8倍过采样时、完成序列发生器中的4个通道需要8倍的时间。 中断在一个序列中的所有4个通道完成后生成。 正确的做法是、对于8x 过采样、每个采样仍然需要1uS、但对于8个采样、则需要8uS (假设 ADCCLK 为16MHz)。
您好、Charles、
现在一切对我来说都很清楚:-)
我尝试了以下操作(就像您写的那样)...
->使用 ADC 触发源:ADC_TRIGGER_PROCESSOR
->在计时器中断(5ms)例程中、我调用 ADCProcessorTrigger (ADC0_BASE、1)并设置输出引脚
->在 ADC 序列发生器中断例程中、我清除了输出引脚、并测量了输出引脚的高电平时间
===================
->我看到 ADC 始终使用1Msps 进行采样(我不清楚)
->如果我更改了 ADC_O_PC 寄存器中的采样率,那么测量的时间也相应地发生了变化->因此硬件平均绝对有效:-)! (工作方式与您在图片中发布的内容类似)
->但是、我还有一件事->如果我使用函数 ADCClockConfigSet 来更改采样率 、这不起作用->我使用了 HWREG (ADC0_BASE + ADC_O_PC)=(ADC_PC_SR_1M)、而是直接起作用
非常感谢您的大力支持!
Chris
确实-供应商的 Charles 提供了最出色的(持续且高度详细)支持。 非常好!
但是、
[引用 user="Christoph50"]如果我更改了 ADC_O_PC 寄存器中的采样率,则测量的时间也相应地发生了变化->因此硬件平均绝对有效:-)!
您在得出该结论时很可能(仅限)部分正确:
这证明了"结果"(无论有无硬件平均、信号电平低于(接近恒定值)、都将 证明"几乎完全相同"。 因此无法进行正确(最终)的分析。
为了(真正)确认硬件平均值计算是否有效-在 ADC 转换"窗口"期间、输入信号应该"变化"。 例如、假设"过采样8 "-前4个输入信号电平"等于并设置为2V5 (2.5V)"、后4个输入信号电平"等于并设置为1V5"-硬件平均"结果"-(在适当的情况下) 显示为"2V0"。 (因此-一个真正的'HW 取平均值' -已经实现-现在才确认!)
减去 "分析严谨性"- 证明"声称硬件平均成功"还为时过早-尤其是声称" 确实有效/成功!"
为完整起见-海报的(原始) 采样率"200Hz"目标与现在(列出) 的"200Hz/8" 速率之间仍然存在"冲突"! HW 过采样可以通过 "乘以"ADC 触发计时器"速率-乘 以"HW 过采样值"或略高于实现(最初所需)采样率。 (允许"内部管理/其他因素...")
[引述 USER="Charles Tsaaaaa">正确的是、如果使用8倍过采样、每个采样仍然需要1us、但对于8个采样、则需要8uS (假设 ADCCLK 为16MHz)。 [/报价]
这将与我和我一个时间前在论坛上辩论的内容背道而驰。
您可能想说 8倍 过采样时为8us、最终转换时为1us。 似乎 8x 过 采样 需要 8 x 12 个 ADC 时钟周期 、以将12位转换为 任何 (单个)序列发生器 FIFO + TL500ns。 数据表并未区分采样时间和转换时间、但从技术上讲、这两个词 的含义不同。
示例: 单个30Mhz 时钟周期33ns * 12位移入 FIFO 或400ns x 8 样本= 3.2us + 1us 转换 可为 单个序列发生器步长提供4.2us。
您好 BP101:
您可以查看我的更新图吗?
各种文件的若干摘录。
用户指南中找到。
ADC 数据的硬件过采样可提高精度。 过采样因子
2x、4x、8x、16x、32x、 或64x、但会将 ADC 的吞吐量降低相应的值
系数。 硬件过采样统一应用于所有采样序列发生器。
启用硬件取平均值可提高 ADC 的精度、但会以吞吐量为代价。 原因
例如、启用4倍过采样可降低250k 次采样/秒 ADC 的吞吐量
62.5k 个样本/秒。
来自数据表:
最多可累加64个采样并对其取平均值
从而在序列发生器 FIFO 中形成单个数据条目。 吞吐量按比例下降
平均计算中的样本数。 例如、如果配置了平均电路
为了平均16个样本、吞吐量减少了16倍。
在查尔斯最新的画图中显示的清晰度和努力必须获得高度的掌声。 (甚至来自-这个地毯隧道-论坛记者...)
我是否可以注意到三个(仍然)未决项目:
所需的"精细细节"-介绍了一种方法、通过该方法、可以收集"硬件平均"(实际)对结果转换的影响-在02:xx 时间范围内到达这里-今天早上早些时候。 这种"硬件平均"的"假定精度"是否可能(至少)证明其转换速度(已实现)非常重要? 这一事实已被(方便)绕过-但事实证明是非常真实的!
[引用 user="BP101"]方框图15-2指示平均值是在转换器外部进行的,但我们是否应该以这种图形方式推断它不是转换器的一部分?
平均值计算在转换器外部完成。
[引用 user="BP101">X 信号采集点过采样(图15-6)似乎会将串行 FIFO 加入到 AD 转换器中。 为了在 ADC 时钟时间内实现不同的采集点、实际上是否需要完全转换样本、以便在以后的相同信号采集点实现移动性。
是的、每个采样结果将首先存储到"数字"累加器中。 然后、在将最终平均值保存到 FIFO 之前、累加器的最终结果被采样数除以。 仅支持2、4、8、16、32、 64是为了简化除法。 无需分频器逻辑。 只需将累加器右移1、2、3、4或5位即可。
[引用 USER="BP101]否则、ADC 块可能会使用 SYSCLOCK 进行循环 FIFO 和 AD 转换、但没有生成图15.2所示的任何时钟源。 与图相关的采样时钟的确切含义是什么。 15-7? [/报价]
ADC 转换器如图15-7所示的"模拟"组件脱离 ADCCLK 运行。
在图15-2中看到的所有其他内容都是 ADC 控制器逻辑、它是"数字"、它们都是从 SYSCLK 运行的。
这意味着当数据跨越不同的时钟域时、必须进行一些同步。 例如、当您接收到来自计时器、PWM 等的触发信号时、控制器必须使该触发信号从 SYSCLK 域同步到 ADCCLK 域。 当 ADC 完成转换时、12位结果必须通过从 ADCCLK 到 SYSCLK 的同步。 同步会占用这里的一些 SYSCLK 周期、我对此并不感到惊讶。
最小 NSH 为4个 ADCCLK 周期、转换需要12个 ADCCLK 周期、这为 TC 提供了16个 ADCCLK 周期。 当 ADCCLK=16MHz 时、转换为1Msps 或1uS TC 转换时间。 这是理论转换速率、不包括我刚才提到的同步和其他延迟。 在电气部分中、有一个 TLT (从触发到转换开始的延迟)、它是2个 ADC 时钟。
您好、Charles、
检查时钟数学以确认结果时、绝不会感到很痛苦。
[引用用户="Charles Tsaa"]。 在电气部分中、有一个 TLT (从触发到转换开始的延迟)、它是2个 ADC 时钟。 [/报价]
然而奇怪 的是、被 描述为固定时间范围的采样窗口、例如 、触发至转换 ACDCLK @32MHz 将 TLT 62.5ns。 1us TC 中的其他500ns 发生在哪里?
[引用 USER="Charles Tsaaa"] 最小 NSH 为4个 ADCCLK 周期,转换需要12个 ADCCLK 周期,这为 TC 提供了16个 ADCCLK 周期[/引用]
TLT 值解释似乎 试图将采样窗口包括在 TC 值中、而不考虑 NSH 默认值。 12 位转换花费12个 ADCCLK 周期似乎是合适的、但是过采样累加器是否位于 SRAM 空间中? 它不使用 序列发生器 FIFO 、而是用于最终转换结果。 因此 、数据表中可能对累加器的解释有限、这是基于模拟的、器件中的空间电荷屏障区域、这些区域在 Cadc 电容器上保持采样充电时间范围。
如果所有 序列发生器通道的并联累加器、 则转换器时钟必须是 模拟采样位速率的12倍、否则 ADCLK @16MHz 需要192Mhz 或更快的转换器。 点是 、当硬件取平均值似乎首先需要转换为数字时、TC 说明中似乎缺少采样窗口时间
您好 BP101:
正如 Ralph 所建议的、如果您有与 OP 问题不同的新问题、请创建新主题。
[引用 user="BP101]'但奇 数被 描述为固定时间范围的采样窗口、例如 、触发转换 ACDCLK @32MHz 会使 TLT 62.5ns。 1us TC 中的其他500ns 出现在何处?
TLT 以 ADCCLK 周期为单位指定、而不是绝对时间、无论 ADCLK 是16MHz 还是32MHz。 我不明白您在说"其他500ns 在1us 内的发展情况"时所说的是什么。 对于32MHz、TC 为500ns 或0.5us。 NSH=4需要满足125ns TS。
[引用 user="BP101]TLT 值解释尝试 将样本窗口包括在 TC 值中,而不考虑 NSH 默认值。 12 位转换花费12个 ADCCLK 周期似乎是合适的、但是过采样累加器是否位于 SRAM 空间中? 它不使用 序列发生器 FIFO 、而是用于最终转换结果。 因此 、数据表中的累加器可能会有有限的解释、这是基于模拟的、器件中的空间电荷屏障区域、这些区域会在 Cadc 电容器上保持采样充电时间范围。
累加器只是在触发器中实现的寄存器。 我将根据我很久以前从计算机架构课程中学到的知识绘制一张高级图。 右移逻辑是一种实现分频器的方法。 在实际的硬件设计中、这种转变是一种缠绕导线的问题。 即0移位将为 MSB:0、1移位将为 MSB:1、2移位将为 MSB:2、以此类推。
您好、Charles、
您的图 WOW 是数据表中缺失的细枝末节的一个很好的组成部分、累加器是数字的。
也许 DQ 触发器与 TSN 电容器保持时间耦合、并通过 TSN 采集时间帧的采样倍数形成。 这是我的观点、似乎缺少时间、因为它与 TSN 值相关、因为它与 GPTM 触发采样开始相关。
这就是我们使用 GPTM 一次性 TnOTE 位来触发 ADC 采样事件的原因。 最后、在中断处理程序中重新加载一次性 GPTM 的倒计数。 当涉及 NVIC 时、这似乎是确保 SYSCLK 与 ADCCLK 同步的最谨慎的方法。 然而、即使这不是完全可以证明的、只是衡量定时 ARM 进度的一个步骤
您好、Charles、
另一点不是很清楚、您在最近的帖子中提到过;电气部分不表示 NSH 是通过脚注直接链接到 TS 的因素。 当我们将 ADC 时钟数乘以 NSH 周期时、过采样位速率将会改变 TS (125n/250ns)。
因此、Tc 并非始终为1us、过采样率会将 Tc 增加一倍(TS * NSH)。 下面的 FCONV 仅决定转换比特率、不会在表15-4/5中生成或显示一个新的周期 TC 到 NSH 周期的链接。 将 NSH 周期的 TC 包含在两个表中会很有帮助。 缺失的信息(表格)导致大多数海报假设 TC 始终为1us、如电气部分 ADC 规格所示。 表的增加将表示当谷值或位速率下降时、TC 增加。
K. ADC 转换时间(TC)包括 ADC 采样时间(TS)。
比特率公式不包括 Tc 系数:
FCONV = 1/((NSH + 12)* TADC)
其中:
■NSH 为 ADC 时钟的采样保持宽度
■TADC 是 ADC 转换时钟周期、与 ADC 时钟频率 FADC 的倒数相反
ADC 时钟频率的倒数是多少?