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.

[参考译文] MSPM0G3507-Q1:ADC 读数随比较器触发设置中的 DAC 值而变化

Guru**** 2465890 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1548601/mspm0g3507-q1-adc-reading-varies-with-dac-value-in-comparator-triggered-setup

器件型号:MSPM0G3507-Q1
主题:SysConfig 中讨论的其他器件

工具/软件:

大家好:

我使用 MSPM0L3507 时遇到了一个问题、即使 DAC 值在每次采集时保持恒定、ADC 读数也会根据比较器输入端设置的 DAC 值而变化。 这表明 DAC、比较器和 ADC 子系统之间存在某种交互或干扰。

设置详细信息:

    ADC 由比较器的事件触发。

    DAC 配置为输出用作比较器输入之一的电压、从而定义阈值。

    DAC 和 ADC 的基准电压均设置为内部基准:Vref+= 2.5V;VREF−= GND。

比较器触发的 ADC 转换是否会受到比较器中使用的 DAC 值的影响? 此类设置是否有任何最佳实践?

以下是我的设置图片:

任何见解或建议都将非常感谢!

提前感谢!

Daniel

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

    是否有人在 MSPM0 上使用过比较器触发的 ADC? 我正在寻找一个使用的实际示例:

    转换模式:单路
    触发源:事件(通过比较器)
    非常感谢任何代码片段或工程引用!

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

    您好  Daniel、

    只有一件事需要确认,因为你提到 会有某种互动或干扰, 它有多大? 换句话说、正常的 ADC 采集与使用您的比较器触发方法进行的采集之间存在多大的误差?

    此致、
    彼得

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

    尊敬的 Peter:

    感谢您的答复。 由于 ADC 本身的限制、我们没有执行正常的 ADC 采集。 可能、可以使用窗口比较器 ADC 来完成、但我们没有尝试过。 但是、我们预计一些具有特定高度的快速脉冲(持续时间 500ns)没有正确记录。 我们应设置足够快的 ADC 和触发器来避免延迟。 请在下面找到我们的代码的部分摘录。 如果您发现需要改进的方面、请告知我们。


    这是 ADC IRQ 处理程序:
    void ADC_SENSOR_INST_IRQHandler (void)

    如果 (DL_ADC12_getPendingInterrupt (ADC_SENSOR_INST)= DL_ADC12_IIDX_MEM0_RESULT_LOADED){
    gADCResult = DL_ADC12_getMemResult (ADC_SENSOR_INST、DL_ADC12_MEM_IDX_0);
    gCheckADC = true;
    }
    }

    我们使用这个循环来处理 ADC 事件:

    while (1)

    while(!gCheckADC){//等待 ADC 事件
    __ WFE ();
    }

    if (gCheckADC){
    //禁用 ADC
    DL_ADC12_disableConversions (ADC_SENSOR_INST);

    //我们的逻辑就在这里!

    gCheckADC = false;
    //再次启用 ADC
    DL_ADC12_enableConversions (ADC_SENSOR_INST);
    }
    }

    在每次采集之前、我们可能需要更改比较器的 DAC 值。 我想知道这是否是最佳方法:

    //步骤 1:断开发布通道以避免过早触发。
    DL_COMP_setPublisherChanID (COMP_INST、0);
    //步骤 2:暂时禁用事件
    DL_COMP_disableEvent (COMP_INST、DL_COMP_EVENT_OUTPUT_EDGE);
    //步骤 3:更新比较器的内部 DAC 值
    DL_COMP_setDACCode0 (COMP_INST、dacComp);
    //步骤 4:重新连接发布通道
    DL_COMP_setPublisherChanID (COMP_INST、COMP_0_INST_PUB_CH);
    //步骤 5:Re 启用事件
    DL_COMP_enableEvent (COMP_INST、DL_COMP_EVENT_OUTPUT_EDGE);
    //第 6 级:启用比较器
    DL_COMP_ENABLE (COMP_INST);

    这是用于 ADC 的 SysConfig

    这就是为什么呢?

    具体来说:

    1 — 我们可以为 ADC 使用更高的时钟吗?

    2 — 是否有其他方法可加快脉冲处理?

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

    让我检查一下、稍后再回复您。

    此致、
    彼得

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

    尊敬的 Peter:  

    在这种情况下、我们是否也会禁用比较器:

    void ADC_SENSOR_INST_IRQHandler (void)

    如果 (DL_ADC12_getPendingInterrupt (ADC_SENSOR_INST)= DL_ADC12_IIDX_MEM0_RESULT_LOADED){
    gADCResult = DL_ADC12_getMemResult (ADC_SENSOR_INST、DL_ADC12_MEM_IDX_0);
    gCheckADC = true;

    //在此处输入一个命令以禁用比较器?
    }
    }

    然后在 gCheckADC 为 false 时再次启用呢?