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.
工具与软件:
尊敬的支持团队:
我有关于上述勘误表 ADC_ERR_06的问题。 我们有多款客户电路板、控制器的电源为外部3.0V 模拟基准电压为2.5V。
采样率为6MHz @12位分辨率。
我们的某些板在 TI 的勘误表中已订阅 Phenomens。 有些不是、当我们将电源电压增加到3.3V 时、甚至连字符也似乎消失。
其他几乎相同的软件可在 TI 的评估板上运行、具有从未出现过的0x800字符。
将电源电压增加到3.3V 是否可以解决该问题?
问题是否会通过降低10位的 ADC 分辨率而消失?
因为我们的产品不接受勘误表中建议的变通办法。
我们必须读取100KHz 的 DMA 并进行一些计算、而不需要实际的剩余 CPU 功耗。 此外、值0x800在我们的应用程序中可能是实数模拟值。
我们已经激活了平均函数、但它只有助于减少问题。 真正可行的解决方案。
我们将为您分享的每一条信息感到高兴。
如果您无法提供真正的解决方案、是否会有新的器件修订版本?
如果不是,我担心我们的工作将会浪费大量的时间。
此致
Siegfried
尊敬的 Siegfried:
在我们的内部测试中、我们发现此勘误表仍然会影响器件在整个工作电压范围内的性能、因此您观察到的误差在3.3V 电压下消失这一情况属于异常情况。
勘误表中张贴的权变措施是我们提出的主要建议。 遗憾的是、该问题在转换期间确实会导致 ADC 读数突变、因此我们需要在这些器件中解决该问题、以便监控结果并检查它们是否超出预期范围、如勘误表中所述。
不久的将来、我们没有为此器件计划任何芯片修订。 我们发布了其他器件、这些器件更新了器件、而不受此错误的影响。 如果您愿意、可以在新帖子中列出您的系统要求;如果我们有其他适合的器件、我们可以向您推荐。 否则、您可以看看 所有 MSPM0产品 并查找另一款、然后查看勘误表以查看是否不包含 ADC_ERR_06勘误表。
尊敬的 Dylan:
感谢您的反馈。 但仍然是剩下的问题。 很显然、不同的电源只是副作用、明白了。
但如果我们使用10位转换模式、它可能会有所帮助。
总是感觉很奇怪的是采样率和采样时间之间的关系。
我们使用 DMA、求平均值、触发源事件和 DMA 完成时的中断。
请参见随附的配置片段。
但我不太理解的是 GUI 中相对于测量得到的采样率的设置。
当 Power Down Mode 设置为 Auto 时、GUI 计算出的采样率为213、33kHz、但物理上大约为100kHz。
此外、ADC 不会在 CPU 热启动后启动。
手动进入断电模式时、即使在热启动后、ADC 也能安全启动。
ADC121.$name ="ADC12_0";
ADC121.samplingOperationMode ="sequence";
ADC121.configureDMA = true;
ADC121.subChanID = 1;
ADC121.repeMode = true;
ADC121.TRIGSrc ="DL_ADC12_TRIG_SRC_EVENT";
ADC121.enableInterrupts =["DL_ADC12_INTERRUPT_DMA_DONE"];
ADC121.adcMem1chansel ="DL_ADC12_INPUT_CHAN_1";
ADC121.adcMem2chansel ="DL_ADC12_INPUT_CHAN_2";
ADC121.adcMem3chansel ="DL_ADC12_INPUT_CHAN_3";
ADC121.adcMem4chansel ="DL_ADC12_INPUT_CHAN_7";
ADC121.adcMem5chansel ="DL_ADC12_INPUT_CHAN_12";
ADC121.adcMem7chansel ="DL_ADC12_INPUT_CHAN_1";
ADC121.adcMem8chansel ="DL_ADC12_INPUT_CHAN_2";
ADC121.adcMem9chansel ="DL_ADC12_INPUT_CHAN_3";
ADC121.adcMem10chansel ="DL_ADC12_INPUT_CHAN_4";
ADC121.adcMem11chansel ="DL_ADC12_INPUT_CHAN_5";
ADC121.sampCnt = 3;
ADC121.endAdd = 5;
ADC121.sampleTime1 ="1ms";
ADC121.interruptPriority ="1";
ADC121.enableDMATriggers =["DL_ADC12_DMA_MEM5_Result_Loaded"];
ADC121.enableFIFO = true;
ADC121.dataFormat ="DL_ADC12_SAMP_CONV_DATA_FORMAT_signed";
ADC121.adcMem0vref ="VREF";
ADC121.adcMem1vref ="VREF";
ADC121.adcMem2vref ="VREF";
ADC121.adcMem3vref ="VREF";
ADC121.adcMem4vref ="VREF";
ADC121.adcMem5vref ="VREF";
ADC121.powerDownMode ="DL_ADC12_POWER_DOWN_MODE_MANUAL";
ADC121.adcMem4avgen = true;
ADC121.adcMem5avgen = true;
ADC121.adcMem3avgen = true;
ADC121.adcMem2avgen = true;
ADC121.adcMem1avgen = true;
ADC121.adcMem0avgen = true;
ADC121.hwNumerator ="DL_ADC12_HW_AVG_NUM_ACC_2";
ADC121.hwDenominator ="DL_ADC12_HW_AVG_DEN_DIV_BY_2";
ADC121.sampleTime0 ="155ns";
ADC121.peripheral.$ASSIGN ="ADC0";
ADC121.peripheral.adcPin0.$assign ="PA27";
ADC121.peripheral.adcPin1.$assign ="PA26";
ADC121.peripheral.adcPin2.$assign ="PA25";
ADC121.peripheral.adcPin3.$assign ="PA24";
ADC121.peripheral.adcPin7.$assign ="PA22";
ADC121.peripheral.adcPin12.$assign ="PA14";
ADC121.adcPin0Config.$name ="ti_driverlib_GPIO_GPIOPinGeneric5";
ADC121.DMA_channel.addressMode ="F2B";
ADC121.DMA_channel.enableInterrupt = true;
ADC121.DMA_channel.enableEvents =["event_channel"];
ADC121.DMA_CHANNEL.interruptPriority ="1";
ADC121.DMA_CHANNEL.$NAME ="DMA_CH2";
ADC121.DMA_channel.peripheral.$assign ="DMA_CH2";
ADC121.adcPin1Config.$name ="ti_driverlib_GPIO_GPIOPinGeneric6";
ADC121.adcPin2Config.$name ="ti_driverlib_GPIO_GPIOPinGeneric7";
ADC121.adcPin3Config.$name ="ti_driverlib_GPIO_GPIOPinGeneric8";
ADC121.adcPin7Config.$name ="ti_driverlib_GPIO_GPIOPinGeneric0";
ADC121.adcPin12Config.$name ="ti_driverlib_GPIO_GPIOPinGeneric1";
勘误表文本确实指出这种行为发生在12位模式下、我需要检查这种措辞是否意味着它没有发生在10位模式下。 我认为、这里的语言可能需要一些更新、以使之更加清晰。
以上是您使用的外设的完整列表吗? 因为如果您只使用这些器件、则可以使用其他器件、例如 MSPM0L1117、此器件不受此勘误表的影响。 它还具有符合您提到的采样率的 ADC、它具有 DMA、事件系统。 我建议您看一看。
您如何测试实际的 ADC 采样率? 您能详细说明一下"热启动"吗?
否、这只是项目的一个重要部分、此外、我们使用了两个 UART、SPI 和一些 I/O。
实际采样率正在通过连接到 I/O 引脚的 DMA DONE IRQ 进行测试。
成功传输六个采样后。 warmstart 表示上电后仅执行复位。
当断电模式处于自动状态时、会出现 ADC 问题。 当模式为手动预热启动时不存在问题。
有时即使有自动 ADC 运行,但只是有时它似乎是一个竞争条件或计时问题.
比如复位不会结束断电模式。
一个器件没有 ADC_ERR_06、它的 ADC 能够采样高达1.68Msps、2 UART、1个 SPI 和多达44个 IO (总共48引脚)以及 DMA、因此、如果您最终决定切换器件、您可能需要查看 MSPM0L1117。
至于热启动问题-当您点击复位按钮与按住按钮超过一秒钟时、器件是否表现出相同的行为? 这两种操作提供不同类型的复位。 此外、当器件不发送数据时、您是否能够在不进行复位的情况下将调试器重新连接到目标来检查器件的状态? 然后、您可以查看是否有 NMI、硬故障、程序计数器是否跳到了意外的某个地方等
关于复位后的 ADC 主题、它与按下复位按钮时间无关。 有时会发生这种情况、应用程序本身始终在运行。 但 ADC 数据永远不会刷新。 但这个主题对我们来说是个次要主题、因为它在不使用 auto_mode 进行断电时有效。 但是、也许我们的问题与 MSM0L1117中勘误表的 ADC_ERR_05相关。
真正的问题是0x800数据。 12位以外的模式怎么样?
您有没有回答?
MSPM0L1117看上去挺有希望、但实际上、我们将两个 DMA 用于 SPI、一个用于 ADC、两个用于 UART。 因此、最小折衷意味着 UART 上没有 DMA、因为器件最多具有3个 DMA。
我将向您发送完整配置。
MSPM0L111X 系列既不支持 MATHACL、也不支持比32MHz 更高的频率?
ADC_ERR_05只是说、如果在 ADC 启用之前事件触发器被置为有效、则它将在 ADC 启用时进入队列并执行、因此听起来您的问题与此无关。
理解了您需要比 MSPM0L1117更多 DMA 通道的观点。 要回答有关此器件的其他问题:它不支持 MATHACL、并且主时钟不能超过32MHz、因此您对这两项观察结果都是正确的。
无论是在12位模式还是10位模式下、ADC 中都会出现 ADC_ERR_06。
关于热启动的问题、我仍想深入到最下面-我看到、如果您使用"手动断电"模式、则问题不会发生。 这意味着您的唤醒源不会在您预热启动器件时触发、而是在您首次刷写器件时可以正常工作? 在 ADC 工作时、您是调试项目还是让其自由运行? 您是否正在使用低功耗模式、在该模式下、ADC 会进入睡眠状态、因此不会响应触发器?
它每次直接刷写时、在调试或释放模式下工作。 当断电模式处于自动模式且器件刚刚通过按钮复位时、ADC 有时无法工作。 当我们对调试器进行下电上电或从调试器启动时、不会发生这种情况。 对我来说、这似乎是一个触发条件问题。 看起来像是一个竞态条件。 在调试器中,我只在重新启动应用程序后才在调试器中看到连字符,而不是在刷写后直接看到。 我们不使用任何电源开关功能。 CPU 始终在32MHz 上运行
当您使用我们的其中一个 driverlib 示例进行尝试并调整示例时、您是否注意到这个问题? 我以前在 launchpad 上运行了大量的 ADC 示例、但现在还没有出现这个问题。 您可能需要开始剥离已构建的应用程序代码的背层、以查找导致该行为的部分。
在上面、我想您提到您使用的是定制板、您可能需要尝试运行您在 LP-MSPM0G3507上开发的应用代码、以查看问题是否仍然发生、以便您可以确定这是基于硬件还是基于软件的问题。
说实话、我们的两种平台上都使用外形。在 TI 的 Eval 板上、此行为与我们的定制板上的行为相同。
我知道自己在做什么。 此外、您无法提供真正的解决方案。
我明白您的目标、让我们结束本例。
没有真正解决、但我担心您无法提供解决方案。