主题中讨论的其他器件:TM4C123、
你好
需要输入边沿定时器采样源代码。
Peripherals 文件夹中没有示例文件。 ( EDGE_COUNT、 OneShot_16位、 Periode_16位、 PWM)
我需要 EDGE_TIME 示例文件。
谢谢
[附加所需配置的图像]
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.
你好
需要输入边沿定时器采样源代码。
Peripherals 文件夹中没有示例文件。 ( EDGE_COUNT、 OneShot_16位、 Periode_16位、 PWM)
我需要 EDGE_TIME 示例文件。
谢谢
[附加所需配置的图像]
你好。 查尔斯
1) 1)是的、没错。 您从未说过它需要8个 CPU 周期。
在前面的方框图表示中、我了解到8个周期是 ISR 处理的短周期。
我询问了处理 ISR 例程需要多少个周期。
如果我让您感到不舒服、我会感到很抱歉。
我将提及 Burano 先生 对 ISR 处理周期的解释。
2) 2)请检查以下信息。
数据表中也对输入边沿计时模式进行了说明。
注意:对于上升沿检测、输入信号必须在至少两个系统时钟周期内为高电平
上升沿之后。 同样、对于下降沿检测、输入信号必须为低电平
下降沿之后至少两个系统时钟周期。 根据此标准、
边沿检测的最大输入频率为系统频率的1/4
Q1>输入边沿时间和输入边沿计数器之间的差值除以4是多少?
Q2>是否为1/4,因为边沿需要检测4个边沿,2个上升沿和2个下降 沿?
我不明白你对我说了什么、所以我问。
Q3>可以检测到的最大周期是多少=分辨率 x 系统频率或分辨率 x (系统频率/4)?
如果除以4、则可检测到的最小输入信号频率为20MHz 或10MHz (当系统时钟为80MHz 或40MHz 时)
Q4>是否可以将20Mhz 或10MHz 检测为输入信号?
计算、最大检测周期 =分辨率 x SYSCLK
什么是分辨率? 如果分辨率是计时器分辨率、则之前的值为0.01%= 100ns。
如果没有,则为16位计时器,2^16=65536
例如> 100ns x 80MHz = 8秒
Q5> 如果没有 ,12.5ns x 65536 = 89.2us ,这是正确的吗?
谢谢。
Q1>输入边沿时间和输入边沿计数器之间的差值除以4是多少?
引脚上的最大输入频率为 SYSCLK/4、这适用于边沿时间和边沿捕捉模式。
Q2>是否为1/4,因为边沿需要检测4个边沿,2个上升沿和2个下降 沿?
例如、如果您以80MHz 运行、则根据 TM4C123 MCU 要求、您可以正确采样的最快频率为20MHz。 假设您有一个80MHz 输入、MCU 将如何对以80MHz 运行的输入信号进行采样? 这是不可能的、因为奈奎斯特频率为40MHz。 奈奎斯特频率是指在不引入误差的情况下对信号进行采样的最小速率、即信号中存在的最高频率的两倍。 为什么20Mhz 而不是40MHz? 原因是 MCU 锁存输入、这需要额外一个周期。 锁存异步信号可用作转移滤波器。
在任何情况下、您都需要记住的是、如果您以80MHz 的频率运行 SYSCLK、最快的输入 PWM 频率为 SYSCLK 的1/4、即20Mhz。
Q3>可以检测到的最大周期是多少=分辨率 x 系统频率或分辨率 x (系统频率/4)?
我将在此举一个例子。 如果您以80MHz 运行、则一个时钟周期为12.5ns。 如果使用16位计数器、则2^16=65536。 您可以捕获的最大周期为12.5*65536=819us。 我想您可以计算其他计数器宽度的最大周期。
[引用 user="Jame shin"] Q4>是否可以将20Mhz 或10MHz 检测为输入信号[/引用]
请参阅上面的答案。
[引用 user="Jame shin"] Q5> 如果不是, 12.5ns x 65536 = 819.2us ,这是正确的吗?
16位计时器的校正。
您好 Charles。
我一直在研究您设计的源代码。 (314.tm4c123_timer_edge_time_mode_zip)
输入条件为1kHz 占空比50%信号。 (TM4C123gh6pge,端口 F,同一信号,同步输入 PF0 (T0CCP0),PF1 (T0CCP1))
(Timer0AIntHandler、Timer0BIntHandler)、只有 Timer0A 不会跳转到 ISR。
我很担心、我将提出问题。
Q1>让我知道问题是什么。 ?
我想到了下面的日志输出的输出。
timerLoad 奖,39,999 (40,000 - 1个计数),
Q2> 为什么1减?
-定时器模块 时钟40MHz (T_clk:0.025us)
1kHz、占空比50% T_input:1000us、 t1:500uS、t2:500uS
(结果)占空比= 500us / 0.025us = 20,000
Q3> 这是正确的,占空比= 20,000?
谢谢
[附加图像]
CCS 工具
2. Keil 工具
[引用用户="Jame shin"](Timer0AIntHandler、Timer0BIntHandler),只有 Timer0A 不会跳转到 ISR.Q1>让我知道问题是什么。 ?[/报价]
问题在于引脚 PF0是特殊的、您没有注意到它。 您需要在更改其配置之前将其解锁。 阅读此文档。
[引用 user="Jame shin"] Q2> 为什么1减去?
因为在定时器初始化之后、第一个值为零。 尽管这对所涉及信号的总体精度并不太重要、但使用正确的概念是合理的。
[引用 user="Jame shin"] Q3> 正确,占空比= 20,000?
占空比表示为信号上升时间与信号总时间之间的关系、即 TIMEON /(TIMEON + TIMEOFF)。 它是介于0和1之间的值。 由于您不显示 ISR 代码、我们无法说出您目前正在读取的内容、但20000肯定只是涉及的值之一。
更重要:
请勿像您一样尝试将您的传感器输出与 MCU 的计时器同步(瞄准40000个时钟)。 没有什么可以保证它们同步、您将获得非常奇怪的结果。 测量占空比的方法是始终使用连续计时器、直至达到最大大小(大多数人更喜欢递减计数);存储之前的向上转换计数、存储向下转换计数、然后再继续、每次向上转换1次、使用三个值执行计算。 当计时器滚动时要注意-如果您不处理该问题、您可能会有一些错误的负职责。
此致
布鲁诺
Jame、
1) 1)再次阅读我两天前的邮件、该邮件的开头更重要。 您似乎忽略了它。
2) 2)您的职责仍然与期限相混淆。 使用 Google 获取 PWM、并尝试真正了解这些内容。
3) 3)您的信号当然会改变18个 CPU 周期、就像这样简单。 如果您需要更好的容差、则需要检查您使用的传感器是否能够提供该容差、您需要检查布线的电容、信号的健康状况以及将测量提升到更高水平的所有细节。 在测量科学中、精度提高10倍的成本比实现的时间和成本增加100倍、这并不少见。
此致
布鲁诺
*喜欢*
[引用 user="Bruno Saraiva"]如果您需要更好的容差,则需要检查您使用的传感器是否能够提供该容差[/引用]
让我强调这一点。 如果您需要更好的容差、您首先需要验证传感器和测量过程是否能够提供一致的稳定值以满足您的容差要求。
[引用用户="Bruno Saraiva"]在测量科学中、精度提高10倍的成本是要实现的时间和金钱的100倍、这并不少见。[/引用]
这实际上可能是一种轻描淡写的说法。
Robert
你好 Bruno。
在我第一次问 e2e.ti.com/.../2286628问题之前、 我考虑了几个方面。
输入信号状态检查中找到的输入电容器
我认为如下。
它是 MCU 芯片内部抖动的计数器误差。
2. MCU 芯片内的定时器模块时钟抖动。
3.检测输入信号抖动
作为确认信号、输入信号不会动摇至示波器。
输入信号在示波器中使用探针 COMP 5V 和1KHz 信号。
问题1>为什么日志图片上的计数器值不会按顺序输出?
-我不知道以前的内容。 请详细解释。
-在上一次答复中提出问题1。
问题2> 1kHz 信号是否快速?
最终目标是在80MHz 的边沿时间检测20Mhz 输入信号
但是、由于1kHz 输入信号的边沿时间误差、我们无法进行下一步。
问题3>是否可以检测到0.05us 的边沿时间和0.025us 的半周期?
- 数据表详细说明了可能的边沿时间或计数器捕获。
-输入检测信号被描述为检测多达1/4的系统时钟。
谢谢。
[引用 user="Jame shin"]
它是 MCU 芯片内部抖动的计数器误差。
2. MCU 芯片内的定时器模块时钟抖动。
[/报价]
根据我的经验、上述任何一项都没有机会
[引用 user="Jame shin"]3. 检测输入信号抖动[/quot]
虽然"抖动"是过于笼统的描述、但这正是我和其他人建议的:传感器信号可能不精确到12ns -供应商是否保证精度? 您的应用是否需要该精度???? 您会得到什么占空比变化??? 您尚未通知此类信息。
[引用 user="Jame shin"作为确认、输入信号不会动摇至范围。
您能提供证据吗? 您使用示波器记录了多少个样本? 它们是否都显示了完全相同的占空比? 我不这么认为... 即使在合理的100MHz 示波器上、如果您应用"典型 PWM 1KHz 传感器输出"、您也会看到至少0.01%刻度的变化。
[引用 user="Jame shin"]问题2> 1kHz 信号是否快速?
要测量该信号的占空比、您的 CPU 需要在每个上升沿转换后执行非常简单的计算。 它有大约80、000个时钟周期来实现它。 我想说、这些计算不会消耗超过200个周期、从而使+79、000个时钟得到良好的休息! 虽然没有官方指定的"快速信号"、但您认为1KHz 是快速信号吗?
[引用 user="Jame shin"]最终目标是在80MHz 的边沿时间检测20Mhz 输入信号[/quot]
本论坛上有几篇文章讨论了 TCCP 模式下定时器的最小捕获周期。 它们都显示1/4周期。 您一直在重复和/或向这个已经很长的主题中添加新问题、这只是令人困惑、不能真正帮助您自己或其他任何人。 我建议您重新组织您的想法、阅读 PWM 信号定义、应用前面提到的全宽计数方法、并阅读此处提供的"最短周期捕获"帖子。 如果仍然有疑问,则提出一个新的、单独的、简洁的问题。
此致
布鲁诺
[引用 user="Jame shin"]
我认为如下。
它是 MCU 芯片内部抖动的计数器误差。
[/报价]
否 这不太可能。 对于数字器件、有一个+/-1计数的固有精度测量值、但这实际上就是您要处理的所有问题。
[引用 user="Jame shin"]2. MCU 芯片内的定时器模块时钟抖动。[/quot]
我相信您所寻找的词语是抖动。 振动涉及物理运动。
但是、这确实会引起一个问题。 您使用什么作为时钟源?
[引用 user="Jame shin"]
3.检测输入信号抖动
作为确认信号、输入信号不会动摇至示波器。
[/报价]
您是如何进行此测量的? 请注意、您在 IC 18上进行测量的次数为20000或0.09%、因此您使用的任何技术都必须具有比这更好的精度、精度和稳定性。
[引用 user="Jame shin"]
问题2> 1kHz 信号是否快速?
最终目标是在80MHz 的边沿时间检测20Mhz 输入信号
[/报价]
基于逐周期!?? 不会发生。 这会在所有设置和计算的周期之间保留4个周期。
如果您有每隔几毫秒左右验证频率的更简单任务、则可以使用更简单的技术。
Robert
大家好。
感谢你的答复。
如何解决此抖动? ?
我将再次询问所附的图片并使其简洁。
为什么跳过而不是顺序?
[图1. 日志消息和软件图]
2. 将图像附加到输入信号状态。
示波器采样率1GS/s (CH1:T0CCP0、Ch2:T0CCP1)、
如何查看图像?
-是由外部输入信号而不是内部 MCU 生成的计数错误
最后、 如何解决此问题?
求解后、我希望最终目标检测20Mhz 的输入信号。
谢谢
[引用 USER="Bruno Saraiva"]信号转换的检测"与"信号周期和占空比的测量不同
这确实是真的(而且再次-魔鬼的 lurks、这样的细节。)
海报 Robert 很好地注意到 O..p.的声称"失败"、即"将此类测量(和处理的计算)限制在1/4系统时钟-确保成功!" 事实上-这不是! (很明显、(某些) MCU 需要"时间"来"处理/计算"-这(进一步)会使1/4系统时钟声明发生衰减!)
在"逐周期"的基础上执行此类测量(我认为)相当罕见、并且"会加剧(同时)信号和测量"抖动"的影响。
正如 Robert 所指出的-海报很少(即从不)证明他们的愿望是合理的-但却期望"永无休止、高级别的回应"。 而且-由于海报"无法解决他们的挑战"-正确(该挑战)或最适合-甚至合理的可能性有多大?
合理数量(同时包括)的"上升沿和下降沿"的"时间记录"-通过长建议的"双定时器方法"(即为了简单起见)-可以实现、 在合理的时间间隔内计算信号周期和占空比后"计算结果、这可能会降低"信号和测量抖动"的影响。 几乎肯定的是,没有任何依据来宣传"逐周期"措施的追求。
[引用 USER="CB1_MOBIT"]在合理的时间间隔内,对信号周期和占空比进行"事后"计算,这可能会降低"信号和测量抖动"的影响。 [/报价]
为了记录 目的而声明的(抖动)海报投诉、我们见证 了类似的行为120MHz SYSCLK、甚至 捕获 了25kHz 信号 CCP 边沿计数。 之前建议用于低频 kHz 信号海报、以使用 PIOSC 时钟源、进一步降低 GPTM 计数中继承的误差百分比。 20Mhz 信号的情况可能正好相反、其中 从 PLL 480 400MHz 时钟源分频得出的 GPTM 时钟源80-120MHz 可捕获(稳定)边缘、误差百分比更小。
猴子在鼓上的撞击速度越快,就越希望得到的香蕉越多。
更改为。 尊敬的所有人:
我将告诉您我看到的内容。
1:发生了计数错误。
这是一个抖动问题。
抖动发生的原因有两个主要原因。
3.1由线路上的信号反射或阻抗不匹配导致的波形失真。
- 检查示波器捕获的波形,它看起来很好。
它 可以应用滤波器、但它不是基本解决方案
3.2 MCU 内部 PLL 设计错误。
-M4C、MCU 的锁相环(PLL)设计故障。
Timer A 和 Timer B 这是同步计时器时发生的抖动。
4、TI 数据表规定在最大输入20Mhz 的1/4边沿时间内检测到80MHz 系统时钟
—数据表的内容是谎言。 !!
5.不要以相反的方式问我。
我想听到客观的真相。
-不要隐瞒真相。 -
如果没有,请提供证据。
谢谢。
您是一个有趣的角色。
突然间、您的单个示波器捕捉比多年的工程设计更可靠! 嗯,恭喜!!! 没有其他人做过这样的测试!!! 您刚刚发现了它、而这么多的盲工程师在过去的几年中都参与了使用这些微控制器的项目和应用开发... 请致电诺贝尔奖组织者、他们可能有东西等着您。
[引用用户="Jame shin")在最大输入20Mhz 的1/4边沿时间检测到80MHz 系统时钟[/引用]
同样、此(语法不准确)文本显示检测到。 这些信息没有谎言。
[引用 user="Jame shin"]否则,请提供证据。
为什么这里有人需要向您提供证据? 事实上、TM4C MCU 能够100%检测至少持续4个时钟周期的信号。 如果您能够生成50ns 方波信号、请将其发送到运行@80MHz 的 TM4C123 MCU、并证明未检测到该信号、然后返回您的证据。
正如您可能怀疑的那样、我对这一主题的自愿捐款已经结束
布鲁诺
[引用 user="Jame shin"]
我将告诉您我看到的内容。
1:发生了计数错误。
[/报价]
不、您已经看到了抖动。 但没有任何错误证据。 任何测量都将出现误差、但您尚未提供幅度的证据。
[引用 user="Jame shin"]
抖动发生的原因有两个主要原因。
3.1由线路上的信号反射或阻抗不匹配导致的波形失真。
[/报价]
这可能会导致抖动。 验证边缘锐度足够简单。 我认为我们没有看到过这一点。
[引用 user="Jame shin"] 它 可以应用筛选器,但它不是基本解决方案
如果按滤波器表示低通滤波器、则这与解决方案几乎相反。 您可以添加一个施密特触发缓冲器来锐化边沿、但我认为这仍然会给您留下抖动。 如果这是原因、那么您确实需要清除传输和阻抗匹配。
[引用 user="Jame shin"]
3.2 MCU 内部 PLL 设计错误。
-M4C、MCU 的锁相环(PLL)设计故障。
[/报价]
否
现在、所有 PLL 都具有抖动(这是它们的工作方式)、我同意它的抖动并非完全表征、而是设计不正确。
3.3输入波形具有抖动。
您尚未共享信号源或对其抖动的任何测量、但任何信号源都将具有抖动。
[引用 user="Jame shin"]
4、TI 数据表规定在最大输入20Mhz 的1/4边沿时间内检测到80MHz 系统时钟
—数据表的内容是谎言。 !!
[/报价]
绝对没有这方面的证据。 您的测量值对于它是1/4还是1/2的系统时钟都不敏感。
这一点丝毫不重要、因为您所说的按周期测量20MHz 周期的目标根本无法实现。
我强烈怀疑您实际上想测量不同的东西(频率可能是?) 但由于某些未知原因、坚持这种特定方法是唯一可以接受的方法。
[引用 user="Jame shin"]
我想听到客观的真相。
-不要隐瞒真相。 -
[/报价]
没有人隐瞒真相。 不过、我不确定您是否在听。 Bruno 和 CB1非常乐于助人、尤其是 Bruno 一直在为您提供每一步路线。
Robert
[引用 user="Jame shin"]2. 这是一个抖动问题。
3.2 MCU 内部 PLL 设计错误。
-M4C、MCU 的锁相环(PLL)设计故障。
[/报价]
请查看数据表中指定 PLL 频率配置的第5.2.5.5节:
'如果主振荡器为主 PLL 提供时钟参考、软件可以从 PLL 频率 n (PLLFREQn)寄存器(见274页)中使用硬件提供的用于编程 PLL 的转换。 内部转换可提供±1%的目标 PLL VCO 频率范围内的转换。 第1431页的列出了实际的 PLL 频率和给定晶振选择的误差。"
内部转换可提供±1%的目标 PLL VCO 频率范围内的转换。
也许这些记录的信息与您所关注的"抖动"相关? 当然、如果您认为1%的转换设计不佳、这是您的意见、您可以随意这么做、但对于 Cortex M4 MCU 而言、这几乎不是关键的设计缺陷。 遗憾的是、对于成本为6美元的芯片上的400MHz PLL、精度不会达到0.01%。
[引用 user="Jame shin"]4. TI 数据表规定、80MHz 系统时钟在最大输入20Mhz 的1/4边沿时间被检测到
—数据表的内容是谎言。 !! 
[/报价] 
在这一点上、数据表不是"谎言"。 它是100%精确。 您未正确读取它。
您之前已经发布过、但我将重新发布相关段落:
'对于上升沿检测、输入信号必须在上升沿之后的至少两个系统时钟周期内为高电平。 同样、对于下降沿检测、输入信号必须在下降沿之后的至少两个系统时钟周期内为低电平。 基于此标准、边沿检测的最大输入频率为系统频率的1/4。"
这清楚地表明 检测不 是测量。 两者之间存在着非常明显的差异。 Bruno 和 CB1都试图向您表达这一点...
这意味着、在80MHz 时、您可以看到20MHz 信号的边沿变化、但不能可靠地看到25MHz 信号。 这并不意味着您可以测量它的确切频率。 您只知道它在那里。 如果是18MHz 还是20MHz、您不会立即知道、但您会知道发生了边沿变化。 但在30MHz 时、您甚至可能在再次切换回之前注意到边沿变化。
CB1建议、为了测量此类信号的频率、可以随着时间的推移对许多样本进行测量、然后进行后采样计算/算法以挑选频率。 当然、甚至不接近于逐周期即瞬时测量。 这种即时测量完全超出了 Cortex M4提供的单个测量范围。 因此、我们的实验室示波器为什么要花费1000美元而不是10美元来提供"即时测量"。
拉尔夫
如 CB 所说、这需要类似的结果。 但是、我确实认为您在某件事上错了。
[引用用户="Ralph Jacobi"]
'如果主振荡器为主 PLL 提供时钟参考、软件可以从 PLL 频率 n (PLLFREQn)寄存器(见274页)中使用硬件提供的用于编程 PLL 的转换。 内部转换可提供±1%的目标 PLL VCO 频率范围内的转换。 第1431页的列出了实际的 PLL 频率和给定晶振选择的误差。"
内部转换可提供±1%的目标 PLL VCO 频率范围内的转换。
也许这些记录的信息与您所关注的"抖动"相关?
[/报价]
这不是抖动。 引用的表未将错误列显示为文本状态。 但是 、'123文档在 这方面似乎有一个更完整的表格。 它是等效的表 20-14、显示了误差项。 这与我的解释是一致的、这是指来自 PLL 和晶振频率之间非整数关系的误差。 因此、它是一个固定的误差、可以针对与抖动不同的情况进行校准。
抖动是一个潜在的重要 PLL 特性、但它与该转换误差不同(我认为这是一个很糟糕的名称、当然解释不正确)、并且我无法找到瞬时抖动或更长期的抖动平均值的数字 (例如、PLL 频率超过50个周期)。
Robert
也许我有不同版本的手册?
[引用 user="Jame shin"] E2E 的定义似乎已褪色。
真的——在“87”个后哨之后——这(通过任何想象力)怎么会“褪色”?
是否有三个"外部人员"和供应商代表为指导和协助做出诚实和持续的努力? 即使在1KHz 范围内"支持游戏"时、尤其是在您"支持游戏"时。 传输至20MHz。 (来源未知。)
或许"索取海报"的理解和"接受建议的方法"更恰当地将(单独)登记为"褪色?"
您好 CB1。 
CB1 :Q >"E2E 似乎褪色了吗?" 
a>我在表达式中犯了错误。 抱歉。 
CB1:Q>是否没有三个"外部人员"和供应商代表为指导和协助做出诚实和持续的努力? 
a>每个人都诚实地说、但有人说讽刺 
我想看到您的帖子。 
我了解了如何检测和测量1KHz 的检测方法。 0.01%占空比 
我想使用1kHz 检测方法检测20MHz 的边沿时间。 
如何检测20Mhz? 
谢谢。 
[引用 user="Jame shin">如何检测20Mhz? 
[/报价] 
您可能是指"测量"、因为您的 MCU 能够很好地检测到此类信号! (特别是如果您采用我所描述的"双定时器简化"、一个用于上升沿、另一个用于下降沿)
如果您可以"逃离"过去(如此有限)对"逐周期测量"的渴望(远远超出此 MCU 和类似 MCU 的能力)-我最近的帖子以及其他帖子-确实描述了在"多周期间隔"上进行测量的方法! 这提供了"减少信号抖动的影响"的附加优势!
放松一点-阅读(几次、缓慢)-然后深思熟虑和规划-应该会让您获得成功。 (更专注的思考-而不是(另一个)图表-(我认为)是您取得成功的最佳途径。)
[引用 user="Robert Adsett72"]请花一些时间并定义要测量的内容以及需要新值的频率(而不是要测量的频率)。
很棒,很棒! (我是否可以提供(另一项)额外的努力***类似于***)
供应商-最常-"从这种(重要)指导中获得帮助!" 海报无法(目前)满足他们的愿望-但(始终)表达"无质量"、以释放他们(通常是有疑问)的"问题解决方法! 正如我们在这里看到的那样,我们将捍卫(这种有缺陷的方法)“死亡!”
这是"诗意"(你会注意到具有讽刺意味的)-很可能、"两者都是真实的!" 如果海报 无法解决问题-他们有哪些逻辑足以解决问题、"制定最佳的问题解决方法?"
然而,这种"有缺陷的海报宣传 方法"往往(几乎是盲目的)被接受,而更恰当的时候(至少)应该对它们提出质疑,有时甚至是对它们提出质疑!
这就是您所做的! 太棒了! ("就像"按钮在哪里? (笑声) (笑声) 如此 能说明严重缺陷(令人发指) "不解决!")
你好。 CB1和 TI 工程师
正如您告诉我的"放松->阅读后再次->思考->分析 器!! "
我看了上一篇文章并对其进行了思考。 e2e.ti.com/.../2257664
CB1 POST A> 如果您的目标是最高精度、则最好捕获"n"类"相似极性"信号边沿之间的"时间增量"、这将降低"计时抖动"对测量的影响。 
           (然后、您可以将该"总持续时间"除以"n"、以确定信号的周期。) 
a_Q> 、例如、上一篇文章中提到的抖动问题。
SYSCLK 40MHz TC 0.025us、输入信号1kHz、占空比50%、TS=1000US T1 (H) 500us、T2 (L) 500us。 当应用需要0.01%占空比时。(0.1us)
时间加载值= 1000us / 0.025us = 40000 (0 ~ 39999 (0x9C3F))设置、 H 持续时间周期= 500uS/0.025us = 20000
发生抖动: H 持续时间+- 18个周期(n ?)
-总持续时间/ n = 40000 / 18 = 2222.222...
我不知道我是否要将该值设置为 Time Load 值或如何执行该操作
请提供详细说明。 ?
Q1> 输入信号已更改并测试。
问题1Kh 已将示波器中的探针 COMP (故障校准) 5V、1kHz 更改为晶体振荡器。
  Q1-1>输入信号20Mhz、占空比50%、TS=0.05us T1 (H) 0.025us、T2 (L) 0.025us / SYSCLK 80MHz TC 0.0125us、时间负载值0.05/0.0125 = 4 (3 (0x3)) 
  Q1-2>输入信号1MHz、占空比50%、TS=1us T1 (H) 0.5us、T2 (L) 0.5us / SYSCLK 40MHz TC 0.025us、时间负载值1/0.025 = 40 (39 (0x27)) 
  Q1-3>输入信号500kHz、占空比50%、TS=2us T1 (H) 1us、T2 (L) 1us / SYSCLK 40MHz TC 0.025us、时间负载值2/0.025 = 80 (79 (0x4F)) 
  Q1-4>输入信号200kHz、占空比50%、TS=5us T1 (H) 2.5us、T2 (L) 2.5us / SYSCLK 40MHz TC 0.025us、时间负载值5/0.025 = 200 (199 (0xC7)) 
当 SYSCLK 80MHz、 dution 0.6us、 cycle:0.6/0.0125=48 cycle 时
当 SYSCLK 40MHz、dution 0.9us、 cycle:0.9/ 0.025=36 cycle 时
[测试结果]
Q1-1,2,3>:“不好”,(原因)不能执行 printf 语句,ISR 处理周期也不应该
(因为、H duation 4周期和 ISR 48或36周期)
   Q1-4>:“良好”,(分析)执行 printf 语句,但跳过序列计数器值。 (原因) printf 语句处理时间为3.5ms。 
                         - H dutation 200 cycle /ISR 36 cycle = 5.5 enought 
                          [注意]日志内容的准确度为+/- 1cycle 0.5%(1/200=0.005)) 
Q2> 如何按顺序对其进行 printf 语句?
在[ 图3] “200kHz Input”(200kHz 输入)下,“System Clock 40MHz, Log Message ”(系统时钟40MHz,日志消息)计数值。
Q3>我对数据表中的11.3.2.4输入边沿计时模式感到困惑
   注意:对于上升沿检测、输入信号必须在至少两个系统时钟周期内为高电平 
        上升沿之后。 同样、对于下降沿检测、输入信号必须为低电平 
        下降沿之后至少两个系统时钟周期。 基于此标准 
        边沿检测的最大输入频率为系统频率的1/4 
如果您看上面的内容、系统时钟80MHz、输入20Mhz 边沿时间为什么数据表会解释这种可能性?
谢谢。
[ 附加相关图像]
CH1 :T0CCP0、 Ch2 :T0CCP1、 Ch3:ISR 处理时间持续时间(使用 GPIO)
[图1] 1MHz 输入,系统时钟40MHz,“不好”
[图2] 500kHz 输入,系统时钟40MHz,“不好”
[图3] 200kHz 输入、系统时钟40 MHz、 日志 消息 "良好"
[图4] 200kHz 输入、系统时钟80MHz、ISR 进程持续时间 0.6us
[图5] 200kHz 输入、系统时钟40MHz、ISR 处理持续时间 0.9us "良好"
[引用 user="Jame shin"]Q> 例如、来自之前的一篇文章、该文章是抖动问题... 我不知道我是否要将此值设置为 Time Load 值或如何执行它
您的主题行(正确)将"边沿时间"列为您选择的"问题解决"方法。 我建议您将要测量的信号呈现到两个不同的定时器输入引脚上、其中一个设置为"上升沿上的中断-第二个设置为下降沿上的中断"。 然后、在两个(独立)定时器中断内、您将"记录该边沿时间"到 RAM 中。 如果包含"n 个这样的中断-那么减去"n 个 RAM 值和第一个 RAM 值"之间的"时间增量"(差值)(这些值"由每个边沿定时器保存到 RAM 中)、然后将"时间增量"除以您选择的"n"(8-16应该起作用) 您的结果是"减少抖动测量(两者均相同)"上升和下降、边沿到边沿、持续时间"。 需要清除-在相同的 RAM 存储数据上执行此过程-一次一个特定的边沿。 (即、您可以首先计算"上升沿"之间的平均持续时间-然后计算"下降沿"的持续时间。 使用此类"平均值计算"可实现零偏差-提高测量精度。
现在、您试图设置"时间负载值"-我是否可以问"为什么这是一个要求?" 如果您按照我的指示(在上面重复)操作、则您在边沿时间模式下使用两个计时器基本上是"完全自动!" 回想一下、您试图从两个计时器中"捕获多个边沿事件"-每个计时器都响应不同的信号边沿。 (相同输入信号的值-并且两个"边沿时间值的集合"都记录在一起。 再说一次-这消除了您对计时器加载值的"需要"-正如您的写作所寻求的那样。 这(现在)是否清晰?
Jame shin 说:Q2> 如何按顺序对 printf 语句进行声明?
由于"printf"需要相当长的时间、因此"MCU 注意事项"-这会给 MCU 带来(添加和不需要)挑战/需求-并且没有什么好处! 您的真实"数据记录"必须通过"写入 RAM 的边沿时间集合"-以及(仅)在" n 个信号边沿集合完成后查看和记录!" "printf"可能会添加错误或导致错过某些边沿-这是不可接受的! 这是否清楚?
这篇文章已经"开着"了这么长时间-在这里(当然不是我)很少能回忆起在两个定时器的 ISR 中所做的事情。 您在电容器中显示(仅一个) ISR -您确实(也许现在)意识到必须有两个单独的 ISR -每个 ISR "记录到 RAM"它记录的边沿时间(刚刚)!
为了提高准确性、这两个 ISR 现在应该是(唯一)允许运行的 ISR、在本次"边缘计时器掌握"练习中。 这只是标准的"kiss"、它始终为用户成功提供最佳/最快(通常是唯一的)路径。 (即使"禁止在这里"、尤其是"禁止在这里!")
您向我提供的日志具有最小的价值。 我相信、更好的是"边沿时间记录-由每个计时器收集!" 这种情况不会出现在(任何地方)!
我现在将计算占空比的方法保留为"未声明"。 这是(几乎)直观的-这项练习留给了"参与"的读者... (如果有...)
[引用 USER="CB1_MOBIT"]因为"printf"需要相当长的时间、"MCU 注意事项"-这会给 MCU 带来(添加和不需要)挑战/需求-并且没有什么好处!
看到 Jame 在上述帖子中捕获的如此强大的振铃后、我有抖动。 可疑 的电感电流(dv/dt 和 di/dt)可能会影响 GPTM CCP 输入结构在 所需的4个 SYSCLKS 时钟周期内稳定在预期(稳定)边沿的能力。 EK-TM4C1294-XL Launch Pad 优于 TM4C123、James 期望这种精度通过为每个 GPTM 模块选择 PIO 16MHz 时钟源来减少抖动可能导致 GPTM 计数精度。 由于成本更高、但具有 LCD 屏幕的强大 DK-TM4C1294-XL 无需 通过虚拟端口使用 UARTprintf()、同时将 LCD 应用中断添加到混合环境中。
[引用 USER="CB1_MOBIST"]为了提高准确性、在本次"边缘计时器掌握"练习中、这两个 ISR 现在应该是(仅限)允许运行的 ISR。[/引用]
在 NVIC 中断处理方面、更重要的是 SYBIOS CPU 负载监视器显示 CCS 调试不是我们所认为的那么可预测、即使是通过强制执行的 INT 优先级也是如此。 最终应用的增长对 NVIC 和 GPTM 计时器的影响 INT 源处理程序一直漂移到硬编码 CCP (预期)捕获窗口之外。
[引用 USER="CB1_MOBIST"]然后-在两个(单独的)计时器中断中-您将该边沿时间"记录到 RAM[/引用]
您之前的评论(zillion 和1帖子之前)似乎非常合理、让 GPTM 仅确定频率、1/p=F 和 F=1/p P=1/F 允许嵌入式 C 代码仅通过1个 INT 处理程序在简单算法中解析占空比%、即使这样、也很难解决边沿时间中的所有振铃问题。 请注意 、Jame 的边沿到边沿时间捕获 仅测试50%占空比、振铃 就像直接从连接到 MOSFET 电感负载的电阻网络获取一样。
[引用用户="Jame shin"]你告诉我"放松->再次发表文章->思考->分析 器!! "[/报价]
您似乎花了时间来确定特定技术的工作方式、而不是确定您正在测量的内容和用途。
您尚未对正在测量的信号施加任何限制。
以下问题尚未解决
Robert
您好 CB1。
CB1_Q1> 主题行(正确)将"边沿时间"列为您选择的"问题解决"方法。
a1> 我继续使用您提出的解决方案。
使用两个计时器和一个上升下降事件中断的1kHz 输入信号测试导致18计数抖动。
如您所说。 "放松一点-阅读(几次、缓慢)-然后深思熟虑和规划-应该会让您获得成功。"
我不理解的是"时间差"。
它由该内容计算得出。 正如您所说的" CB1_POST: 将"总持续时间"除以"n"
因此、我计算出40000 (总持续时间)/ 18 (n)。
我问这个意图是否正确。
可能 是以下情况吗?
公式> TBR (结束:nth RAM 值)- TAR (开始:第一个 RAM 值)= H 持续周期(时间增量)
a1.1> H 持续时间周期(时间增量)/n、上升1th、下降2th、n 意味着2?
我向你解释过,但我仍然不明白。
BP101的帖子以深数学差分形式显示了感应电流、电压导数的数量。
您似乎在谈论一件简单的事情。 总之、我不知道如何减少抖动。
A1.2> 例如,请再告诉我?
CB1_Q2>现在您试图设置一个"时间负载值"-我可以问一下、"为什么这是一个要求?"
    a2> 我想知道我是否应该设置 Time Load 值。 正如您所说的" CB1_POST:将"总持续时间"除以"n" 
        Ex> 1kHz 输入信号和40MHz SYSCLK 的时间负载值,1ms/0.025us = 40000 (39999 (0x9C3F) 
        因此、我认为这是一个值的变化。 
CB1_Q3>两者都处于边沿时间模式-本质上是"完全自动!" 回想一下、您试图从两个计时器中"捕获多个边沿事件"
     a3>我这么做了。 
        请检查要发布的源代码。 
CB1_Q4>这消除了对计时器负载值的"需要" 
     a4>将该受限周期的初始 Time Load 值设置为0x39CF。 
        您对"消除您对计时器加载值的"需求"的理解是什么? 
CB1_Q5>此(现在)是否已清除?
     a5>否 
        信号路径:200kHz Crstal OSC -->施密特触发--> MCU 的 T0CCP0 (TA)& T0CCP1 (TB) 
        出现测试结果(日志消息)+1个周期(0.025us)错误。 
        误差比为1/200 = 0.005 (0.5%)。 
        每200个连续周期会丢失一个脉冲。 
        因此将发生累积误差。 
我的帖子>如何按顺序打印?
CB1_Q6>不可接受! 这是否清楚?
A6>是的、是的。
简单计算
        ex> 当输入信号200kHz 时,SYSCLK 为40MHz,TA-ISR (需要36个周期),TB-ISR (需要44个周期),两个事件信号间隔(需要100个周期) 
            printf 处理时间约为3.5ms 
            在 TB-ISR 处理后打印 printf ()。 
            必须在 ISR (TA+TB)的量周期内输出、80周期 x 0.025us = 2us。 
是否有方法可以在不丢失 printf 语句的情况下继续打印?
CB1_POST> 此帖子已"打开"了这么长时间
  Post_a> 是的、我无法充分理解 
         我不知道这意味着什么、但我想这是标准的"吻"!! 
CB1_TAG> 为什么"边沿计时器"需要"负载设置?"
Tag_a> 计数从边沿输入信号事件开始。
计数在下一个边沿输入信号事件结束。
因此、设置要计数的时间加载值。
谢谢。
[附加源代码]
//includes
#include // C99标准的变量定义。
#include // C99标准的输入和输出功能。
#include // C99标准的布尔定义。
#include "inc/tm4c123gh6pge.h"//中断和寄存器分配的定义。
#include "inc/hw_memmap.h"// Tiva C 系列器件的存储器映射定义。
#include "inc/hw_types.h"//常用类型和宏的定义。
#include "inc/hw_gpio.h"
#include "driverlib/sysctl.h"// DriverLib 系统控制 API 的定义和宏。
#include "driverlib/interrupt.h"//为 DriverLib 的 NVIC 控制器 API 定义和宏。
#include "driverlib/gpio.h"// DriverLib GPIO API 的定义和宏。
#include "driverlib/timer.h"//为 DriverLib 的计时器 API 定义和宏。
#include "driverlib/pin_map.h"//Mapping of peripherals to pins for all parts。
#include "driverlib/uart.h"// DriverLib UART API 的定义和宏。
#include "driverlib/adc.h"// DriverLib 的 ADC API 定义。
#include "driverlib/fpu.h"// FPU 操作例程的原型。
#include "utils/uartstdio.h"// UART 控制台函数的原型。
//需要通过相对链接添加"utils/uartstdio.c"。
//定义
#define UART1_BAUDRATE 115200 // UART 波特率(bps)
//函数原型
void init_timer (void);
void Duty_cycle (void);
void init_uart (void);
//全局变量
uint32_t sys_clock;
uint32_t start = 0、end = 0、length = 0;
uint32_t int_FLAG = 0;
int main (void
)
//在40MHz
SysCtlClockSet (SYSCTL_SYSDIV_5|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHz|SYSCTL_OSC_MAIN)上配置系统时钟;
SYS_CLOCK = SysCtlClockGet ();
//ISR 处理器周期
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOG);
//使能处理器响应中断。
IntMasterEnable();
init_uart();
UARTprintf ("\n TCLK =%d\n",sys_clock);
// GPIO PD[2]-TA,PD[3]-TB 输出 ISR 处理时间的持续时间
GPIOPinTypeGPIOOutput (GPIO_PORTD_base,GPIO_PIN_2 | GPIO_PIN_3);
init_timer();
TimerEnable (TIMER0_BASE、TIMER_Both);
while (1){
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_2、~GPIO_PIN_2);
如果(int_FLAG = 0x1)
{
INT_FLAG = 0;
//GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_2、GPIO_PIN_2);
UARTprintf ("\nDUTY:%d =%d (结束)-%d (开始)\n"、长度、结束、开始);
//GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_2、0);
}
}
void init_timer (void)
{
//启用和配置 Timer0外设。
SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
//初始化计时器 A 和 B,以便在边沿计时模式中向上计数
TimerConfigure (TIMER0_BASE、(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_CAP_TIME_UP | TIMER_CFG_B_CAP_TIME_UP));
// Timer A 记录位置边沿时间,Timer b 记录 neg 边沿时间
TimerControlEvent (TIMER0_BASE、TIMER_A、TIMER_EVENT_POS_EDGE);
TimerControlEvent (TIMER0_BASE、TIMER_B、TIMER_EVENT_NEG_EDGE);
//设置定时器计数的值
//输入信号20Mhz,TS=0.05us,SYSCLK 40MHz TC=0.025,计数= 0.05uS/0.025us = 2 (2-1=1 (0x1)
//输入信号1MHz,TS=1us ,SYSCLK 40MHz TC=0.025,计数=1uS/0.025us = 40 (40-1=39 (0x27)
//输入信号500kHz、TS=2us ,SYSCLK 40MHz TC=0.025,计数=2uS/0.025us = 80 (80-1=79 (0x4F)
//输入信号200kHz、TS=5us ,SYSCLK 40MHz TC=0.025,计数=5uS/0.025us = 200 (200-1=199 (0xC7)
//输入信号1kHz、 TS=1ms 、SYSCLK 40MHz TC=0.025、计数= 1ms/0.025us = 40000 (40000-1=39999 (0x9C3F)
TimerLoadSet (TIMER0_BASE、TIMER_Both、0x4F);
TimerSynchronize (TIMER0_BASE,TIMER_0A_SYNC|TIMER_0B_SYNC);
//配置定时器读取的引脚(PF0)
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOF);
// TM4C Port-F0解锁并置位提交控制寄存器。 PA[1:0]、PA[5:2]、PB[3:2]、PC[3:0]、PD[7]、 PF[0]
HWREG (GPIO_PORTF_BASE + GPIO_LOCK)= GPIO_LOCK_KEY;
HWREG (GPIO_PORTF_BASE + GPIO_CR)|= GPIO_PIN_0;
// GPIO 配置,T0CCP0 (TA)-PF[0],T0CCP1 (TTB)-PF[1]
GPIOPinConfigure (GPIO_PF0_T0CCP0);
GPIOPinConfigure (GPIO_PF1_T0CCP1);
GPIOPinTypeTimer (GPIO_PORTF_BASE、GPIO_PIN_0 | GPIO_PIN_1);
//计时器中断清除(TA、TB)
TimerIntClear (TIMER0_BASE、TIMER_CAPA_EVENT|TIMER_CAPB_EVENT);
//启用指示的定时器中断源。
TimerIntEnable (TIMER0_BASE、TIMER_CAPA_EVENT|TIMER_CAPB_EVENT);
//在中断控制器中启用指定的中断。
IntEnable (INT_TIMER0A);
IntEnable (INT_TIMER0B);
}
// TIMERA、上升沿、中断 ISR
空时间0AIntHandler (空)
{
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_2、GPIO_PIN_2);
TimerIntClear (TIMER0_BASE、TIMER_CAP_EVENT);
Start = TimerValueGet (TIMER0_BASE、TIMER_A);
GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_2、0);
}
// TIMERB,下降沿,中断 ISR
空时间0BIntHandler (空)
{
GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_3、GPIO_PIN_3);
TimerIntClear (TIMER0_BASE、TIMER_CAPB_EVENT);
结束= TimerValueGet (TIMER0_BASE、TIMER_B);
长度=结束-开始;
INT_flag = 1;
GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_3、0);
}
void init_UART (void)
{
//启用和配置 UART0以调试打印输出。
SysCtlPeripheralEnable (SYSCTL_Periph_UART0);
SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
GPIOPinConfigure (GPIO_PA0_U0RX);
GPIOPinConfigure (GPIO_PA1_U0TX);
GPIOPinTypeUART (GPIO_Porta_base、(GPIO_PIN_0 | GPIO_PIN_1));
UARTStdioConfig (0、UART1_AUDRATE、SYS_CLOCK);
} 
您好 Robert。
感谢您对帖子的回复。 
似乎我要从我的问题中取出一份调查。 
Robert_Q1>您的信号的最终来源是什么? 
       a1>这是为了检测和校正线性编码器的高速信号输出的误差。 
Robert _Q2>它具有多宽的频率范围? 
       a2>根据传输速度、(最小值) 1MHz ~(最大值) 20Mhz。 
Robert _Q3>占空比的范围是多少? 
       a3>a1答案是相同的。 
          占空比0.01%~ 100%(最小单元位与传输数据的最大位) 
Robert _Q4>您需要多长时间测量一次信号(以及需要测量哪些属性)? 
       a4>我不知道为什么你会问这个问题。 
          根据应用要求、将持续两周时间和一天时间。   (与 A1答案相同) 
Robert _Q5>是否有替代信号可用(为什么您一直在测量高频(RF)信号)? 
       a5>a1答案是相同的。 
          当我在第11.3.2.4章的 TI 数据表中说这是可能的时、我应该怎么看? (真相与谎言) 
          您坚持问卷调查!! 问题不恰当。 
          那么20Mhz 不会出现? 
Robert _Q6>您需要在两次测量之间执行哪些任务? 
       a6>类似于 A1答案 
          错误值通过串行接口发送到控制器件 
Robert _Q7-1>、当涉及测试时(您在其中抱怨抖动)。 
       A7-1>似乎我继续回答上一张海报。 
Robert _Q7-2>您的源信号的可重复性如何? 
       A7-2> A1和 A4答案相同。 
Robert_Q7-3>同样重要的是、您如何知道? 
       A7-3>未看到先前的帖子、 
            请再次缓慢阅读有关1kHz 信号抖动的帖子。 
            您知道如何通过抖动来抱怨表达式!! 
           1kHz 信号使用示波器中的校准信号 
           200kHz、500kHz、1MHz、20Mhz 信号使用晶体振荡器 
Robert_Q8>BTW 在40000次中的18次计数约为450ppm。 那么、您的晶体精度和漂移规格是什么? 
      A8>1kHz 请求 Tektronix 公司提供频率稳定性 
          200kHz、500kHz、1MHz、20Mhz 晶体振荡器频率稳定性:+- 50ppm 
          BTW 是什么意思? 
谢谢。
请,请!!!!
TI 的某个人能否锁定此主题????? 如"防止新员额"中所述?
这个线程现在是无用的。 包括原始帖子、这是现在的消息编号100!!!! 标题为"TM4C123GH6PGE:我需要 EDGE_TIME 示例文件。"、在没有任何逻辑的情况下、有各种各样的自由讨论来回移动。
Robert、CB1、Ralph、BP101、Jame 您自己、 请不要再在这里写了吗?????
Jame、我们仍然可以为您提供帮助。 只需打开一个主题的线程、其中包含一个清晰且具体的问题。 我们并不否认帮助。
请记住未来的读者:人们来到这里寻找以前回答过的问题-把2和2放在一起,而现在这个标题下的这些帖子-同样-无用!
Jame、您的描述会随时间变化、第一个应用程序显然与您现在尝试执行的操作不同。 第一百次打开一个单独的线程,给它一个适当的标题,在其中提出一个明确的问题!
无法使用 TM4C129持续检测、测量、分析和输出与20MHz 信号相关的信息。 周期。 但这条线程不是讨论它的地方、因为它将浪费宝贵的资源。
请! 100就足够了!
布鲁诺