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.

[参考译文] TMS320F28035:使用单次触发模式来从连续的外部脉冲流触发

Guru**** 2534260 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/603682/tms320f28035-using-one-shot-mode-to-trigger-from-continuous-stream-of-external-pulses

器件型号:TMS320F28035

您好!

我正在使用不同的时序信号测量多个 PWM 电流、因此我需要 ADC 在每次触发时仅转换一个通道。 我有一个 FPGA 提供所有必需的 ADC 触发器、我需要对如何使用 ADC 的一次性模式进行一些澄清。

如果我配置 ADC、使 SoC 1通过 extint1触发、SoC 2通过 extint2触发、并在同一个时钟周期上拉两个相应的 IO、ADC 触发器是否确认这两个、还是只转换更高优先级的 IO? 触发器转换 a/b 通道是否重要、因为它们具有单独的 s/h 电路?

2.在可能的15个 SoC 中,我只需要10个 SoC,但如果我不使用所有可用的 SoC,我无法找到使系统正常运行的方法。 否则、在 SoC 10之后、指针会在 SoC 11上设置、该指针不会触发、因为未配置该指针、因此系统会在10次转换后停止。 目前、我已通过将所有 SoC 配置为多个 SoC 来转换单个通道来规避该问题、但与系统仅为一个 AD 通道配置一个 SoC 相比、时序要困难得多。

此致、

Jari

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

    您能更详细地描述一下您的系统吗? 您是否使用 F28035生成 PWM 控制信号? MCU 和 FPGA 各自扮演什么角色?

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

    FPGA 执行 F28035的 PWM 和时序脉冲。 ADC 触发和 GPIO 的配置为

      GpioCtrlRegs.GPADIR.ALL = 0x3F0FFF;//将 GPIO 0-21设置为输出

      GpioIntRegs.GPIOXINT2SEL.bit.GPIOSEL = 30;// GPIO30设置为外部 INT2的源
      XIntertRegs.XINT2CR.bit.ENABLE = 1;//启用 XINT2来触发 AD 转换

    AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN0 = 1;
       AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN2 = 1;
       AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN4 = 1;
       AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN6 = 1;
       AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN8 = 1;
       AdcRegs.ADCSAMPLEMODE.BIT.SIMULEN10 = 0;


       AdcRegs.SOCPRICTL.bit.OneShot = 1;//每个外部事件只触发 AD 转换器一次
       //虚拟 ADC
       AdcRegs.ADCSOC0CTL.bit.CHSEL   = 0;   //将 SOC0/1通道选择设置为 ADCIN A0/B0
       AdcRegs.ADCSOC0CTL.bit.TRIGSEL   = 0x04; //外部中断启动转换
       AdcRegs.ADCSOC0CTL.bit.ACQPS   = 6;   //将 SOC0/1 S/H 窗口设置为7个 ADC 时钟周期、(6个 ACQPS 加1)

       //PFC 电流 ADC
       AdcRegs.ADCSOC2CTL.bit.CHSEL   = 3;   //将 SOC2/3通道选择设置为 ADCIN A3/B3
       AdcRegs.ADCSOC2CTL.bit.TRIGSEL   = 0x04;   //外部中断启动转换
       AdcRegs.ADCSOC2CTL.bit.ACQPS   = 6;   //将 SOC2/3 S/H 窗口设置为7个 ADC 时钟周期、(6个 ACQPS 加1)

       //加热器 ADC
       AdcRegs.ADCSOC4CTL.bit.CHSEL   = 7;   //将 SOC4通道选择设置为 ADCIN A7/B7
       AdcRegs.ADCSOC4CTL.bit.TRIGSEL   = 0x04;   //外部中断启动转换
       AdcRegs.ADCSOC4CTL.bit.ACQPS   = 6;   //将 SOC4 S/H 窗口设置为7个 ADC 时钟周期、(6个 ACQPS 加1)

    等等

    其余通道的配置相同、只是 AD 多路复用器通道不同。 我有3个通过开关电流测量测量的不同电流、因此需要准确定位这些电流、因此需要 FPGA 提供单独的 SoC 脉冲。 FPGA 负责所有控制、MCU 用于内部管理、并通过用作并行端口的 GPIO 0-11发送 ADC 测量值。

    问题是、我只希望使用 SoC 2-10中的测量值、但目前我总共使用16次转换、只是为了使 AD SoC 状态机溢出、以便系统在头10次 AD 转换后不会停止

    -Jari

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

    您是否希望在 ADC 采样应进行的时间内有固定的时间? 例如、FPGA 在 PWM 之间是否具有固定的相位延迟、这种延迟不会改变、并且您将始终在 PWM 周期中的特定点对电流进行采样?

    Tommy
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tommy、
    该系统的设计方式是 AD 转换序列相同、并保证转换之间的最短时间、但转换触发器之间的时间会波动。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jari、

    感谢您的澄清。  我希望建议一种更简单的方法、但外部触发看起来毕竟是一个好的起点。

    [引用用户="Jari Honkanen"]

    如果我配置 ADC、使 SoC 1通过 extint1触发、SoC 2通过 extint2触发、并在同一个时钟周期上拉两个相应的 IO、ADC 触发器是否确认这两个、还是只转换更高优先级的 IO? 触发器转换 a/b 通道是否重要、因为它们具有单独的 s/h 电路?

    [/报价]

    事件触发器将启动配置为使用事件的所有 SOC。  它们的执行顺序取决于 SOC 序列发生器设置(如轮询或优先级)。

    [引用用户="Jari Honkanen"]

    2.在可能的15个 SoC 中,我只需要10个 SoC,但如果我不使用所有可用的 SoC,我无法找到使系统正常运行的方法。 否则、在 SoC 10之后、指针会在 SoC 11上设置、该指针不会触发、因为未配置该指针、因此系统会在10次转换后停止。 目前、我已通过将所有 SoC 配置为多个 SoC 来转换单个通道来规避该问题、但与系统仅为一个 AD 通道配置一个 SoC 相比、时序要困难得多。

    [/报价]

    无需配置所有 SOC;序列发生器能够跳过未激活/挂起的 SOC。  如果连续的 SOC 未触发、可能是因为中断标志未被应答。

    Tommy

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

    Jari、

    更正/详细说明:

    [引用 user="tlee"]

    事件触发器将启动配置为使用事件的所有 SOC。  它们的执行顺序取决于 SOC 序列发生器设置(如轮询或优先级)。

    [/报价]

    在单次触发模式下、事件一次只会触发一个 SOC。  对于同步采样 SOC、A 和 B 通道都将进行转换。

    Tommy

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我可能已经解决了这个问题。 我需要进一步测试、但如果我在 SoC 0-11具有高优先级的情况下使用优先级设置、则系统在上次配置 SoC 后不会占用该优先级。

    正在添加

    AdcRegs.SOCPRICTL.bit.SOCPRIORITY = 0xb;

    可能解决了该问题。 我还注意到、我发送的触发脉冲快于 ADC 可以转换的速度、那么系统不会转换所有通道。 这是否意味着每次我在外部输入中发送脉冲时、无论电流是否已开始转换、SoC 指针都将提前指向下一个优先级转换?

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

    如果您发出的触发器速度快于 ADC 可以处理的速度、则会设置 SOC 标志(已按顺序处理)、序列发生器将继续。 您仍需要确保没有中断或 SOC 溢出情况、否则活动可能会停止。

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

    使用优先级模式并确保在上一个配置的 SoC 启动之前不会发送新的一组 SoC 触发器、系统似乎正常工作。 我没有弄清楚如果不使用优先级模式、为什么系统会暂停、但由于一切都是在优先级模式下工作、所以我认为问题已经解决了。 感谢你的帮助。

    -Jari

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

    Jari、

    很高兴您现在可以使用它。

    根据我自己的经验、我发现当我异步停止执行时、SOC 服务有时会中断。  如果我在不复位器件的情况下加载并执行程序、我会发现自己处于溢出错误状态。

    Tommy