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.

[参考译文] UCD3138:UCD3138逐次逼近模式问题

Guru**** 2553260 points
Other Parts Discussed in Thread: UCD3138

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

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/746133/ucd3138-ucd3138-successive-approximation-mode-issue

器件型号:UCD3138

您好、先生:

我们在逐次逼近模式下使用前端0 (EADC 和 DAC 一起)、同时我们发现了一些时序问题;

当在 V33上升之前或期间 EAP0/EAN0上存在偏置电压(大约1V)时、最终 的 SAR 计算始终为零、您知道原因吗? 如果偏置电压不可避免、如何在这种情况下使用 SAR? 非常感谢;

已连接波形;CH1:V33、CH2:EAP0/EAN0;

非常感谢;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    此处提供更多信息
    1\当我们将 V33更改为上升更快、例如在2ms 至3.3V 范围内、同时保持 EAP0/EAN0相同的上升时间和电压电平、读数仍然为零;

    2\while 如果我们将 EAP0/EAN0电压电平降低一点、读数是正确的;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当 UCD V33为零时、在引脚上施加电压非常危险。  它超出了器件规格。  您最终可以为各种电路供电。  幸运的是、处理器启动后、只有 SAR 未正确初始化。  也许可以尝试使用钳位二极管和小型串联电阻器来使电压更接近 V33?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这对于启动前具有预偏置输出电压的直流/直流转换器而言是正常的;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    它看起来像是某种启动问题。  要进行调试、您能否尝试将 RESET 拉低并在 V33为高电平后重新启动 UCD、然后查看问题是否消失?  

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

    我们尝试过、问题仍然存在;

    这应该是因为 SAR 不收敛;虽然我们不知道如何设置 SAR 控制参数以避免已知裕度出现此问题;

    非常感谢;

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

    e2e.ti.com/.../LAB-EADC0-20181128.zip

    附加了源代码、您可以使用开环板上的 UCD3138进行尝试、EAP0/EAN0=1.033V;

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

    你好、Jun

    我可以在开环板上重复这个问题。 感谢您的关注。

    即使前端输入电压在3.3V 达到标称值几毫秒后从0升至1.0V、也会发生这种情况、因此这似乎是一个真正的问题。

    我对前端 SAR 模式的理解不够、无法为您提供可行的解决方案。

    除此之外、遗憾的是、我们的大多数设计人员目前正在旅行或度假(由于圣诞节假期)、这似乎是一个需要一些时间才能理解的问题、因此我不能保证很快就能解决任何问题。

    有一种解决方案肯定会起作用、但它涉及在固件中运行逐次逼近算法。 它可以在标准中断中定期运行。 我们以前使用过这种解决方案、它非常可靠。 如果这对您有效、我建议您选择这条路线。  

    这种方法的缺点是

    -它受带宽限制(如果您每100us 调用一次标准中断、则有效采样率将为1ms)

    -它使用 MIPS 和程序闪存,因为它基于固件

    无论如何、请参阅下面的内容。 目标是移动 EADCDAC、直到它处于输入电压范围内、然后获取 ABS_VALUE。

    我只是测试了这个、以确保它正常工作、您看到的问题不存在。

    首先删除 main.c 文件中与前端0相关的所有代码。  

    然后将下面的代码添加到后台循环之前的 main.c 中(作为初始化的一部分)。 我已将其设置为平均值计算、如果您需要更高的带宽、请将 EADC_MODE 设置为0、将 AFE_GAIN 设置为0、并删除 AVG_MODE_SEL 设置。

    FeCtrl0Regs.EADCDAC.bit.DAC_value = 16384>>>1;   //将 DAC 初始值设置为 DAC 范围的一半

    FeCtrl0Regs.EADCCTRL.bit.AFE_GAIN = 3;            //增益=功率(2、AFE_GAIN)

    FeCtrl0Regs.EADCCTRL.bit.SCFE_GAIN_FILTER_SEL = 1; //启用开关电容噪声滤波器

    FeCtrl0Regs.EADCCTRL.bit.SCFE_CLK_DIV_2=0;        // 0 =采样@ 8MHz、1 =采样@ 16MHz

    // EADC_MODE

    // 0 =标准模式、基于 DPWM 模块采样触发器的 EADC 采样(默认)

    // 1 =平均模式、由 AVG_MODE_SEL 配置

    // 2 =非连续 SAR 模式

    // 3 =连续 SAR 模式

    FeCtrl0Regs.EADCCTRL.bit.EADC_MODE = 1;

    FeCtrl0Regs.EADCCTRL.bit.AVG_MODE_SEL = 2;//为每个 EADC 触发器选择要平均的2^(AVG_MODE_SEL+1)样本


    我假设您已经设置了代码来定期调用 IRQ、比如100us? 您需要执行此操作才能使算法正常工作(实际上、您还可以在后台循环中运行它、我没有尝试过、但它应该可以正常运行)。

    接下来、将以下函数添加到 standard_interrupt.c 中

    内联 void front_end0_SAR (void)

      //逐次逼近搜索输出电压预偏置电平
      //此测量可用于设置 EADC 斜坡的启动代码

      //请注意、我们将 EADCDAC 视为14位 DAC、即使它实际上是具有4个抖动位的10位 DAC
      //将其视为14位 DAC 意味着我们可以将字直接写入整个 EADCDAC 寄存器

      //在中标度代码(14位 DAC、因此2^14 = 16384个代码)处开始搜索

      //将搜索步骤初始化为四分之一量程代码
      静态 uint32 eadcdac_step = 16384>>2;

      // eadcvalue:用于提高效率的 EADCVAUE 本地副本
      易失性联合 EADCVALUE_REG eadcvalue;
      eadcvalue = FeCtrl0Regs.EADCVAUE;

      // eADC_Value = Veadcdac - V (EAP - EAN)、其中 Veadcdac 是 EADCDAC 的输出电压
      //如果 eADC_SAT_HIGH =1:V (EAP - EAN)< Veadcdac:通过减少 DAC 代码来减少 Veadcdac
      //如果 eADC_SAT_LOW = 1:V (EAP - EAN)> Veadcdac:通过增加 DAC 代码来增加 Veadcdac
      //如果 eADC_SAT_HIGH =0且 eADC_SAT_LOW =0:取绝对值并从该值计算 EADCDAC 斜坡启动值
      如果((eadcvalue.bit.eADC_SAT_HIGH =0)&&(eadcvalue.bit.eADC_SAT_LOW ==0))
      {
        // EADC 未饱和、因此 ABS_VALUE 有效
        //将结果放置在 fe0_SAR_READING 中,这是一个全局变量
        fe0_SAR_reading = eadcvalue.bit.abs_value;
        eadcdac_step = 16384>>2;//重置搜索步骤
      }
      其他
      {
        // EADC 为高饱和或低饱和
        //首先检查搜索步骤是否已减小到 LSB 大小,如果是这样,搜索已结束,因此我们需要重新开始搜索
        if (eadcdac_step == 0x8)
        {
          // EADCDAC 寄存器:10位 DAC 字被4位偏移。 4 LSB =抖动位、因此我们将其视为14位 DAC、然后可以执行寄存器大小写入
          //因此、当 eadcdac_step = 0x8时、连续逼近型搜索的结论是10位 DAC 的 LSB 已经被使用
          //在本例中,再次开始搜索
          FeCtrl0Regs.EADCDAC.ALL = 16384>>1;//将 DAC 值重置为中标度代码
          eadcdac_step = 16384>>2;//将搜索步骤重置为四分之一标度代码
        }
        否则// EADC 已饱和,且连续逼近搜索尚未结束
        {
          if (eadcvalue.bit.eADC_SAT_HIGH)
          {
            // EADC 饱和高,因此 V (EAP - EAN)< Veadcdac:减少 veadcdac
            FeCtrl0Regs.EADCDAC.ALL = FeCtrl0Regs.EADCDAC.ALL - eadcdac_step;
          }
          否则// eadcvalue.bit.eADC_SAT_LOW = 1.
          {
            // EADC 饱和低,因此 V (EAP - EAN)> Veadcdac:增加 veadcdac
            FeCtrl0Regs.EADCDAC.ALL = FeCtrl0Regs.EADCDAC.ALL + eadcdac_step;
          }
          eadcdac_step = eadcdac_step>>>1;// step = step /2
        }
      }

    将以下全局变量添加到 variables.h 它用于存储 SAR 结果、因此从内存调试器上的该变量中读取结果。

    extern uint32 fe0_SAR_reading;

    最后、调用函数  FRONT_end0_SAR 作为标准中断 ISR 的一部分、如下所示

    #pragma INTERRUPT (standard_interrupt、IRQ)
    #pragma CODE_STATE (STANDARD_INTERRUPT、32)// 16 = Thumb 模式、32 = ARM 模式
    void standard_interrupt (void)

      FRONT_end0_SAR ();

    您可以根据需要将其从逐次逼近更改为线性搜索、采样率将会更低、但固件将更简单、更小。

    如果您有疑问或意见、请告诉我。

    此致

    Cormac

     

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

    您好、Cormac:

    非常感谢; 对于当前应用、我们需要对输入信号进行快速响应、因此我们使用 SAR 模式; 我们尝试以固件方式执行此操作、延迟时间无法满足我们的要求;

    非常感谢;

    肖恩

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

    你好 Sean

    遗憾的是、固件路由不合适。 我想您不可能使用 ADC 输入引脚?

    我将向团队做这件事、但正如我在上一篇文章中所说、遗憾的是、现在的响应速度非常慢。

    此致

    Cormac

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好 Sean
    我刚刚注意到、您已通过电子邮件与达拉斯的团队就此问题进行了相应沟通。

    根据他们的理解、您找到了一个解决方案、这对您来说不再是问题。

    是否正确? 如果不是、您能否共享您的最新代码、让我知道您尝试了哪些实验(如从默认更改 SAR_时序)、并列出哪些实验有所不同、哪些没有不同。

    如果这不再是问题、您是否对我关闭此帖子感到满意?

    或者、如果您希望通过电子邮件回复、我也会关闭此帖子、请告知我。

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

    您好、 Cormac:

    是的,Yitzhak 发送了我们需要的所有信息;非常感谢;

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

    你好 Sean

    没问题、很高兴您能找到解决方案。

    我将关闭帖子。 如果您需要进一步的帮助、只需打开新帖子。

    此致

    Cormac