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.

[参考译文] TM4C1290NCPDT:读取 AIN16-AIN19、PK0-PK3时出现问题

Guru**** 2524550 points
Other Parts Discussed in Thread: TM4C1290NCPDT

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/878045/tm4c1290ncpdt-problems-reading-ain16-ain19-pk0-pk3

器件型号:TM4C1290NCPDT

大家好

在定制电路板的 TM4C1290NCPDT 上获取 AIN16-AIN19的错误读数时遇到问题。 我正在读取静态电压。 我在 ADC1上使用序列发生器来测量电压、由于各种原因、AIN16的序列与 AIN17-19的序列不同。  我读取全部20个模拟输入、其他16个输入正常。

在搜索论坛时、我发现与 AIN16-AIN19有关其他器件系列的问题、但我无法确定这是否相关(请参阅底部的链接)

相关代码可在 GitHub https://github.com/apollo-lhc/cm_mcu/blob/bootloader_options/projects/cm_mcu/ADCMonitorTask.c 上找到 

这些引脚使用从 TI PinMUX 工具生成的代码进行配置、并且我可以告诉这些引脚与其他引脚没有什么不同。

(另外,我尝试检查这些部件的 AFSEL 和 PCTEL 寄存器的配置,但却不能显示我得到的东西的头尾,即使对于工作信道,这些值也永远不是非零。)

我意识到我在这里没有提供很多信息、但我不确定要写什么;坦率地说、我希望有人告诉我这是这个部件的已知问题。  

谢谢

Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这不是 TivaWare 驱动程序的已知问题。 您是否在 FreeRTOS 下运行? 如果运行 TIRTOS、我可以在那里传输您的问题、但在此器件上不支持 FreeRTOS。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    很遗憾、我使用的是 FreeRTOS。。。 感谢您让我知道这不是一个已知问题。 我想我将尝试在没有任何 RTOS 的情况下创建一个最小示例、除非其他人有任何建议。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当整个"ADC 信号组发生故障"时、获得关键见解的最快、最简单的方法是:

    • 首先确认具有该"组"的信号具有 ADC 的输入规格(尤其是电平)、并且"可"匹配 ADC 在频率处的输入阻抗
    • 确认上述内容后(即信号在 ADC 规格中)、必须注意"设置和配置"。 ADC 软件的说明"

    这种方法的优点是最初不需要进行软件分析或更改。

    遵循"如何"对" ADC 信号组发生故障"进行"快速/后续"测试。    (为了器件生存、应测量这些信号以确认它们是否符合 ADC 规格(尤其是电平)。)

    • 暂时从(一个或多个)"已知正常/工作" ADC 输入中移除输入信号
    • 然后-将其中一个(当前)出现故障的 ADC 信号(正在从"PK0-PK3"输入)路由到该"已知正常/工作输入"。   (现在"不存在"其原始(工作)信号)

    如果"新的/交换的"信号、则"读取到预期值"可能是:

    • 您的"PK0-PK3" ADC 输入存在设置和/或配置问题
    • "PK0-PK3"上可能存在路由和/或"信号输入匹配"问题

    如果 "新的/交换的"信号、则"未读出预期"可能是:

    • 存在信号电平或"信号输入匹配"问题、必须加以纠正

    所有定制电路板都可能存在问题- 如果有"未组装电路板"、则应探测该电路板以确保正确且成功的(PK0-PK3)布线。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这是一个简单的程序、用于转换 PK0 (AIN16)并在 UART0上输出数字值。 我认为问题出在 FreeRTOS ADC 驱动程序。

    /cfs-file/__key/communityserver-discussions-components-files/908/ADC_5F00_PK0.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    CB1_MOBILE、您好 、感谢您的回复。 我没有说明这一点、但我们进行了与您建议的测试类似的测试。 我们手动更改了每个信号的输入、并查看了代码中的 ADC 读数。 除提及的 AIN 通道(AIN16-AIN19)外、所有通道均正确遵循施加的外部电压。 有问题的通道没有变化、而是看起来是恒定的。 这不是你所建议的,但我认为是解决同一个问题的。  (还检查了电气连接。)

    对于怀疑定制电路板有问题的客户、我很感激这是支持 POV 所需的默认响应。 唉、没有包含相关器件的评估板(我只需要一个 TM4C4C123GXL 板即可。)

    谢谢  

    Peter

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢。 FreeRTOS 不提供任何 ADC 接口、因为我正在使用 Tivaware。 我将尝试您的测试程序、然后返回给您。 起初、我看不到关于您所做的与我所做的事情有什么不同。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢您-诸如您的问题是一个有趣的挑战。

    我们不能告诉您、是否按照我们的建议将"故障信号的任何信号重新路由"到已知正常状态(即编号较低的 ADC 通道引脚)。   至少-这样可确认信号电平、接地基准和输入阻抗"合理/可接受"。    我们是否可以再次要求执行此任务(即使只有一个"故障通道")?

    我们注意到,尽管 Ain16人的居住顺序不同,但也有报告称其失败。   (我们不希望这样。)    但是-所有"发生故障"的模拟通道驻留在 Port_K 上-您是否已完全正确地启用 Port_K、然后将命令的 PK0-PK3作为 ADC?   (我们注意到、您提供的代码避免了(必要的)低级初始化-将"Failed Port_K Initialization (失败的 Port_K 初始化)"保留为"Highsuspect!")

    此 MCU 支持20个 ADC 通道(从 Ain0到 Ain19)-但您的四个序列发生器的范围从 Ain0到 Ain20!   (我们怀疑其中一个通道是内部裸片温度、但链接的代码片段不够详细、无法进行说明和/或确保。)

    这里、您对 ADC 序列发生器的再利用是有创意的、但有些"不寻常"。   而这种见解会带来进一步(简化)的建议。

    • 请绕过/禁用(即注释掉) 您的"void initADC0FirstSequence()"-仅启用"void initADC0SecondSequence()。"   (这将尝试确定"在序列之间切换是否会影响您的问题。")
    • 如果实施失败-请在"失败"第二序列中安装代码-代替(即交换代码)(几乎)工作代码(包括第一序列)。   (适用于 Ain16。)    在这种情况下、旁路/禁用第二序列。   (此处的目的是"尝试从第一序列的成功中获益-但您的"有缺陷的渠道"现在正在被使用。)

    希望您能给这些建议一个“公平(未经修改)的尝试”-我们已经建立了合作关系,然后通过类似的方法将技术公司公开... 通过有条理、有重点、有灵感的诊断成功(经常)...   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的  、再次感谢您花时间查看代码链接! 非常感谢。

    我将尽快尝试执行您建议的测试。 我想、通过直接向 AIN16-19输入施加电压并且读取值不会发生任何变化、可以有效地探测到同样的东西。

    遗憾的是、初始化分散在几个不同的区域。 引脚设置在一个文件中、我直接从 TI PinMUx 工具[A]生成该文件。 ADC 本身 ETC 在系统初始化函数中初始化,该函数在 RTOS 启动前调用,位于链接[b]。 我还将 PK4-PK7初始化为链路[A]中的 GPIO 引脚。 我将 pinmux 输出作为工具生成它、以便在需要重新执行 pinmux 分配时可以轻松地将其替换。 但它会导致代码分布在许多地方。  

    序列发生器、如果有不同的方法来实现这一目的、那么我会很乐意更改代码、因为这种方法"创新性"更低、而且标准更高。 我同意我所做的是有点尴尬的。

    今天、由于暴风雪、我离开了实验室、但我会尽快尝试您的建议。 再次感谢您花时间为我提供帮助。

    -Peter  

    [A]

    [b]  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您-非常感谢您的回答"有意义、详细且令人愉快"。    (通常年轻员工/我会因为不(盲目)同意海报的(赦免)"有点模糊"(即猜测)解决方案分析而受到"攻击"。   如前所述-我们在诊断领域拥有多年(成功)经验...)

    我们建议的顺序和仔细测试:

    • 假设很小
    • 通过探头"探出"最有效的(不需要的)代码或电路相互作用、而不是有效的(不需要的)代码或电路

    当雪消失时、接收您的结果将非常有用。    我们担心您的"设置/配置"。 端口 K 的说明"、尤其是其 ADC 功能可能会受到影响。   对 PK0-PK3施加电压-正如您所做的(超出我们的指令)、无法处理任何 Port_K SW 问题...

    我的小技术团队"购买"后"亲吻"。   简化限制了"作战领域"、因此更好(更快)地暴露(两种)错误及其来源。   我们希望您:

    • 遵循供应商的 Bob 提供的有用代码输入-但将其扩展到"所有"出现故障的 PK0-PK3引脚
    • 暂时关闭/禁用现有的四个 ADC 序列发生器 (注释说明了一种方法)
    • 仅使用单个序列发生器-仅在其(未更改/原始) MCU 引脚位置使用 PK0-PK3

    这旨在确定:

    • ADC 代码错误(可能是设置/配置)
    • 和/或您的(唯一)"切换 ADC 序列发生器"

    充当"有罪方"。   再说一次-只能运行一个序列!

    如果此操作失败-这些 MCU ADC 引脚(PK0-PK3)-可能(以某种方式)会出现问题。   (或外部组件、布线缺陷等)   在上述情况下(未能通过的情况),请:

    • 从您的"已知正常"(有效) ADC 通道中删除信号输入 (具有最简单的序列发生器)
    • 用路由到 PK0-PK3的信号输入(当前)替换这些信号输入
    • 对该(工作中)序列发生器的软件不做任何更改-我们要更改的只是"正在引入信号!" (PK0-PK3)

    这旨在确定这些"关键输入"是否正确(即、具有 MCU 规格)。   (这证明了其有效性、因为此"经证明良好"序列发生器的"设置/配置"保持不变! (笑声) 软件不关心信号的来源...)

    星期五是我们繁忙的(即发货)日-我们不可能在发货后查看您的新文件-今天下午晚些时候(傍晚)...   (我们将在查看您新到达的文件后编辑此帖子...)

    或不是-请参阅以下帖子...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我的几个团队审查了您的代码-虽然我们(几乎)了解您的理由、但"代码分发"(赦免)却成为"审查的噩梦!"   我们发现、关键代码元素的"意外分布"(通常为"专用代码块")(但现在为"高度分散和未链接")与"Krzy Making!"相框

    我们深入研究您的代码后发现:

    良好:

    • 您已正确启用 Port_K 和两个 ADC 模块(0和1)
    • 您已配置这些"errant Port_K ADC 输入"。  (PK0-PK3)
    • 您按照 DRL 的指令"在配置 ADC 序列发生器之前禁用它"。   (此处提供的其他代码(原谅)遗漏了该代码!)

    未知:

    •  您的代码未明确显示"如果您在读取 ADC 之前正确地等待了采样序列完成。"

    不好:

    • 您不会这样做、"等待 ADC 模块准备就绪-在配置之前-通过 SysCtlPeripheralReady()。

    您的代码中的"深入探讨"(调查)无法确定、" ADC 输入"PK0-PK3"的报告方式和原因是"失败"。   (我们早期的方向提供了一个有利的纪律测试序列、旨在"消除"这些失败的原因...)

    同样、您的"对 ADC 模块进行重新编程"、这样它们将在不同的时间适应不同的 ADC 通道-(可能)"受邀处理编程问题"-通常不会遇到。   由于我们没有(任何)'129系列器件(我们需要速度)-我们无法自行测试/试验...

    现在、您还有另外一种方法可以实现、"二十个 ADC 通道"-同时避免"重新编程引起的 ADC 序列发生器问题!"   您不能:

    • 通过 ADC_0的序列0使用8个唯一通道
    • 和另一个通过 ADC_1的序列0实现的唯一8
    • 和4个额外的唯一通道、通过 ADC_0的序列1。   (达到20个通道!)
    • 另一个4 -通过 ADC_1的序列1。   (现在您已经创建了一个"斜升")

    我们认为这种方法消除了"即时序列发生器重新编程"可能带来的许多/大部分(可能全部)复杂问题。

    [编辑] 2020年2月7:29、08日: 我们认识到您的 ADC 序列发生器(可能)已"组装、以适应执行的简便性和速度。"   我们的方法(如上所述)针对"潜在问题缓解"-必须始终位于"优化"之前。   过早优化是(很多)程序员"疼痛和痛苦"的原因-并且应该尝试(在之后)程序的任务已经完成...

    以下几项(可能)"动态-序列发生器重新编程问题:"

    • 一旦任一序列发生器完成了他们的代码例程-它们不会被明确禁用!   这(可能)会为"显示"创建方法。
    • 每个/每个序列发生器都"由一个重复的和公共的触发器触发!"   (即 ADC_TRIGGER_PROCESSOR!)   此类"常见触发器"有多大可能导致误传?
    • 和- RTOS 如何影响上述任何一项?

    我的小组仍然相信、我们的"应首先执行先前确定的测试"-结果报告-然后(如有必要)考虑了此处的建议(此帖子)...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 、尊敬的  

    感谢您的帮助。 我发现问题是、我假设通道编号 ADC_CTL_CH0、 ADC_CTL_CH1等在数字中映射到0-19。 对于前16个通道、它们执行此操作、然后针对通道16 (第17个通道)进入0x100。 嗯、我甚至看到其他人在这个问题上也看到了这一点、但我没有注意到我犯了这个错误。 (我没有使用过#defines、而只是使用过数字。 新秀的移动。)

    我能够说服自己、当我使用 在 FreeRTOS 项目中的 Bob Crosby 示例时、我的代码出错了、并得到了合理的答案。

     我尝试了您的许多建议、可能会切换到您更明智的序列发生器用法。 感谢您的帮助。