您好!
[问题1]
我使用内部温度传感器来监测温度、但有时它会捕获异常值。
查看勘误表、可以看到错误"ADC:温度传感器最小采样窗口要求"导致采样周期延长。
我将 ACQPS 从6增加到了63、但情况并未改善。
如果您有任何对策、请告诉我。
[问题2]
TMS320F2802x 的勘误表(sprz292)中描述的错误"ADC:初始转换"是否即使在当前市场上的器件上也存在?
谢谢、
科基
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.
您好!
[问题1]
我使用内部温度传感器来监测温度、但有时它会捕获异常值。
查看勘误表、可以看到错误"ADC:温度传感器最小采样窗口要求"导致采样周期延长。
我将 ACQPS 从6增加到了63、但情况并未改善。
如果您有任何对策、请告诉我。
[问题2]
TMS320F2802x 的勘误表(sprz292)中描述的错误"ADC:初始转换"是否即使在当前市场上的器件上也存在?
谢谢、
科基
您好、Matthew
> TRM 中列出的 ACQPS 的有效值也受到限制。
我在 TRM 中找不到有关 ACQPS 限制的说明。 它在哪个页面上列出?
我已经验证了#1。
该器件集成到 SOC14和 SOC15中以进行双采样。 两者都可能异常。
2我将 ACQPS 从6增加到了63、但该值没有提高。
目前、通过连续检测基准温度超过10次来避免异常输出。
如果您有任何对策、请告诉我。
最棒的
科基
科基
您是否能够从温度传感器中发布10个仅适用于 SOC15 (弃用 SOC14)的连续值、以便我查看差异的幅度。 如果转换更简单、则可以进行所有转换 SOC0-15读取温度传感器(然后全部触发)并报告 SOC1-15。
如果您还可以在设置 ADC 的位置附加 C 文件、我也可以查看该文件。
您还能评论一下您在系统中尝试使用的分辨率、以摄氏度为单位吗? 即、您需要检测10度的上升/下降等
最棒的
Matthew
Matthew
很抱歉迟到了。
>您是否能够仅针对 SOC15 (丢弃 SOC14)从温度传感器中发布10个连续值,
由于异常值很少、我附加了 CCS 图形、而不是连续10个片段的转换结果。
■正常值
AdcResult.ADCRESULT15 (=temp)= 1914~1921
degC=40~42
■异常值
AdcResult.ADCRESULT15 (=temp)= 4090
degC=429
■温度 图
如果检测到异常温度、操作将停止。
因此、图像仍然是异常值、但异常值会暂时发生。
■°C 图
>如果您还可以在设置 ADC 的位置附加 C 文件,我也可以查看该文件。
附加设置 ADC 的 main.c 文件。
e2e.ti.com/.../HVLLC_2D00_Main.c
>您是否还可以对您要在系统中使用的分辨率(以摄氏度为单位)进行注释?
■温度传感器的使用
当 C2000℃120 μ s 时、执行 PWM 输出停止处理。
■分辨率、单位为度
1 μ s℃分辨率。
如果您需要任何其他信息、请告诉我。
最棒的
科基
科基
感谢您提供更多详细信息。 我没有想到温度传感器上的误差项是一个饱和 ADC 转换;温度传感器不应该能够向转换器提供这种输出电压(因为温度计算得出结果)。 出现问题时、转换是否始终进入电源轨/4095? 即使使用超出规格的温度传感器、这也不是我所见过的行为。
您能评论一下引脚 ADCINA5以及它从外部连接到了什么吗? 我想排除这个引脚上的过压、在温度传感器进入 ADC 之前、它会以某种方式破坏温度传感器的电压输出。
"temp"变量是否可能被覆盖、转换是否在正确的范围内? 一个选项是将 ADCRESULT15直接馈送到温度传感器功能、并查看问题是否消失。 我意识到、我们立即使用了"temp"、但最好查看一下。
最棒的
Matthew
您好、Matthew
感谢您的及时响应。
>出现问题时,转换是否始终进入电源轨/4095?
→ADC 转换结果有多种异常值。 (例如、temp = 2170)
>您能评论引脚 ADCINA5以及它从外部连接到什么吗?
→TMS320F28027没有 ADCINA 5引脚。
>是否有可能覆盖"temp"变量,转换在正确的范围内?
>一个选项是将 ADCRESULT15直接馈送到温度传感器功能,并查看问题是否消失。
→温度是直接使用 ADC 转换结果计算得出的。
但是、情况是相同的、会出现异常值。
谢谢、
科基
科基
我已经查看过您附加的几个帖子的代码、您是否还可以在初始设置完成后附加所有 ADC 寄存器的屏幕截图? 在开始控制环路/采样之前、我想确切地验证 ADC 的配置方式。
设置后、您是否还可以确认它在运行期间不会被更改、即发生的所有情况是 ADC 触发器和寄存器读取?
最后、如果您可以了解不同的触发源及其发生频率、即 SOC1连接到 PWM SOCA、每10kHz 发生一次等
最棒的
Matthew
您好、Matthew
>在初始设置完成后,还会附加所有 ADC 寄存器的屏幕截图吗?
以下是 ADC 初始化后的 ADC 寄存器设置。
>您能否确认在运行时不会更改,即只会发生 ADC 触发器和寄存器读取?
以下是 ADC 转换期间的 ADC 寄存器设置。
ADCCTL1・・・持续变化(较低字节 E5是固定的)
ADCINTFLG・・・0x0000
ADCINTOVF・・・0x0080
SOCPRICTL・・・ 持续变化(最低字节0是固定的)
ADCSOCFLG1・・・不断变化
>如果您可以了解不同的触发源及其发生频率,
>即 SOC1连接到 PWM SOCA、每10kHz 发生一次等
I 从软件触发更改为 PWM4 (固定为100kHz)触发。
它运行了1小时、但没有出现异常值。
在软件触发时、它在几分钟内发生。
谢谢、
科基
科基
感谢您收集这些信息、这对您有很大帮助。 我相信我知道会发生什么情况导致温度传感器读数"随机"不良。
在您的系统(和许多控制系统)中、通常有多个采样域、这样、随着采样频率的时域彼此移动、转换顺序可能不一致。
对于温度传感器、当它处于其 SW 触发计划中时、您必须考虑初始转换样本、因此您需要对通道进行双采样。 根据以上代码、这是:
其他 ADC ISR 之一可能出现在这些指令之间、这会使虚拟样本无效、并使 SOC15成为 ADC 空闲状态下的第一个样本。 这将导致 SOC15的读数不准确。
当您将 SOC14/15与其他 SOC 置于同一 ePWM 触发器中时、您保证 ADC 不会在最后一个通道被转换之前停止。
我认为、如果您将上述行替换为
AdcRegs.ADCSOCFRC1.ALL = 0xC000;
它也会产生相同的效果、因为强制寄存器将同时写入两个位。
如果您有更多问题、请告诉我、但是您之前实施的方法或上述方法都应该解决这个问题。
我非常感谢您在与我合作解决该问题时所表现的耐心和帮助
最棒的
Matthew
您好!
感谢您的礼貌回应。
我更改了您提供的说明。
检测到的异常值的频率已降低、但在运行约4小时后仍然发生一次。
我是否可以采取任何措施来改进这一点?
根据 ADC 结束中断的时序、SOC14可能不是虚拟采样、SOC15可能是第一个采样。
因此、检测到异常值。
我的看法是否正确?
此外、您能否详细地告诉我在检测到异常值时的流速?
Ex) SOC14启动→SOC15启动 ...
我无法很好地理解下一行。
我 想深入了解原因、因此请详细解释以下各行。
>在您的系统(和许多控制系统)中、通常有多个采样域、
>这样转换顺序可能与采样的时域不一致
>频率相互移动。
谢谢、
科基
科基
您对 SOC15有时成为第1个样本的理解是正确的、如果发生这种情况、它将受到我们先前在该主题中讨论的勘误表的影响。
不同的采样频率意味着、当 SOC15是第2个采样或第1个采样时、将会出现不一致的行为、具体取决于 ePWM (在您的系统中)何时触发其他 SOC。
当您提到在实施之前的权变措施时、如果您在4小时后仍然看到问题、这是写入 SOC.all = 0xC 还是将温度传感器与 ePWM 触发器相关联?
最棒的
Matthew
您好、Matthew
我不明白您在发生错误时对 ADC 操作流程的评价。
现在、SOC14和 SOC15进行双采样。
SOC14的优先级高于 SOC15、因此首先开始采样。
轮询指针指示正在转换或最近已转换的通道。
因此、在转换期间指针指示 SOC14、当 SOC14完成时 、指针指示 SOC15并开始转换
这种感觉是否正确?
如果正确、在双采样的情况下、我认为按 SOC14→SOC15顺序进行的转换始终保持不变。
===========================================================================================================
AdcRegs.ADCSOCFRC1.bit.SOC14 = 1;// SOC14 SW 触发器
AdcRegs.ADCSOCFRC1.bit.SOC15 = 1;// SOC14 SW 触发器
while (AdcRegs.ADCINTFlG.bit.ADCINT8 = 0){}// SOC15 SOC 结束等待
AdcRegs.ADCINTFLGCLR.bit.ADCINT8 = 1;// ADCINT8 FLG 清零
temp = AdcResult.ADCRESULT15;//从 SOC15获取温度传感器采样结果
===========================================================================================================
[引用 userid="8973" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/979582/tms320f2802-adc-soc0-and-internal-temperature-sensor/3665150 #3665150"]是否可以将寄存器写入内容放入 PWM ISR 或 PWM 更新函数中? [/报价]
很抱歉、请更详细地告诉我该过程。
谢谢、
科基
科基
您对 ADC 状态机的理解是正确的。 但是、由于一些 ADCSOC 直接连接到 PWM 触发器、因此可能会异步进入依赖于 C28x 执行代码的 CPU/SW 触发器、从而将 SOC14/15锁存到 ADC 状态机。
通过这种方式、PWM 触发 SOC 有可能出现在温度传感器 SOC14和 SOC15之间。 我曾希望使用:
AdcRegs.ADCSOCFRC1.ALL = 0xC000;
这将消除这种情况的可能性、但虽然它减少了不良温度传感器读数的出现、但它并未完全消除(我相信您在运行4小时后看到了不良值)。
我相信、在其他 SOC 仍处于待定状态时、SOC14/15仍有可能被置位、或者其他 SOC 可能会从 PWM 模块触发、而 PWM 模块基于自己的时基与线性 C 代码。
我认为有两种选择可以尝试:
1)将 SOC14/15的触发源从 SW 触发器中切换为已使用的 PWM 触发器之一: 这将确保始终按照规定的顺序锁存和处理这些触发器、因为它们将根据已知时间(即 PWM 比较值)触发。 这样做的缺点是、您可能会使 ADC 在2个采样时保持忙碌状态的时间更长、这可能会影响您的其他 PWM 触发器。 根据这些更新速率、这可能无关紧要。 如果对您的系统来说可以、这将是最干净的解决方案。
2)将 SW 触发器/写入放置在其中一个 PWM ISR 内(假设 ISR 与某些 PWM 事件相关联以进行更新)。 这将保证触发器相对于系统中其他事件的同步写入。 如果您不需要对温度传感器进行采样、通常可以在此处插入本地计数器的比较以限制 ADC 使用量、如果需要任何 ADC BW、我们可能会考虑。 像每100次调用 ISR 一样、继续并强制使用 SOC14/15。
请告诉我、以上内容是否进一步明确了我认为问题可能是什么以及解决方案。
最棒的
Matthew
您好、Matthew
[引用 userid="8973" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/979582/tms320f2802-adc-soc0-and-internal-temperature-sensor/3668738 #366878"]由于一些 ADCSOC 直接与 PWM 触发器关联、因此这些触发器可能异步于依赖 C28x 执行代码将 SOC14/15锁存到 ADC 状态机的 CPU/SW 触发器。我不理解所引用的句子。 请详细解释。
我还将尝试两种解决方案、稍后我将向您介绍结果。
谢谢、
科基
科基
例如、您已将 SOC0和 SOC1配置为从 ePWM1 ADCSOCA、SOC2和 SOC3从 ePWM5 ADCSOCB、SOC4和 SOC5从 ePWM7 ADCSOCB 等触发
所有这些触发器在时间上都可能不同、并且不一定与您在 CPU 域中用于 SOC14/SOC15的软件强制同步。 如果它们是彼此的非整数倍数、它们将移入和移出相位、并且可能会重叠。
公平地说、如果我们没有针对该器件的第一个示例勘误表、这不会是问题、但由于存在该器件、它会在这里带来一些独特的问题。
最棒的
Matthew