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.

[参考译文] MSP430F6777A:MSP430F6777A测量信号,带或不带PWM,带ADC10 periph。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1100066/msp430f6777a-msp430f6777a-measuring-signal-with-or-without-pwm-with-adc10-periph

部件号:MSP430F6777A

你(们)好

有1 kHz,±12 V PWM信号,占空比10 %~53,3。 此信号在0和3.3 伏之间(用于使用ADC进行读数)。  此PWM也由MCU通过计时器生成。 我需要持续测量信号(无论是否使用PWM)。

读取ADC值的最佳方法是什么?  我需要读取ADC两端的电压(上升和下降边缘)当PWM信号处于活动状态时,我需要测量 上升和下降边缘。 但是Sametime,我需要在没有PWM的情况下继续测量信号。

(其EV的控制先导信号)

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

    您好,Fhiz:

    不确定我是否完全理解这里的内容,但您是否询问您是否可以使用PWM的上升和下降边缘来触发ADC读数?

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

    您好,Dennis,

    是的。  我在图片中标记了我需要阅读的位置

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

    感谢菲兹的澄清。

    有一个工作周期的PWM信号±3,~3,1个10 %。 此信号在0和3.3 伏之间(用于使用ADC进行读数)。  [/引述]

    好的,那么PWM @ 10 % 占空比的最小"接通"时间似乎是100usec。 不是在上升或下降边缘后立即执行测量,而是在50 usec (20kHz)速率下连续"过度采样"时会怎样?  这种情况的缺点是它将消耗CPU带宽的一大部分。

    所以,我想,为了减少CPU的工作量,ADC10有一个窗口比较器模式,它将根据测量值是高于ADC10HI还是低于ADC10LO阈值来生成单独的中断。  

    下面是一个图表,显示了我所描述的内容。

    下面 是一个代码示例,显示如何处理ADC窗口比较器中断。  然后,我将考虑以下问题。  由于您真正关心的是在每次转换后只进行一次测量,因此可以使用下面的方案将CPU中断数限制为每个转换只能进行一次。  完全披露-这只是一个想法,而不是我实际尝试过的。  您可能需要调整一些事项才能使其正常工作。

    设置

    • 确保设置了适当的HI和LO阈值
    • 清除所有中断标志并启用ADC10HIIE和ADC10LOIE
    • 我相信您会设置"重复单通道模式"并将ADC10MSC位设置为执行连续采样

    采样和ISR处理程序

    • 示例1 -电压> ADC10HI阈值
      • ADC10HIIFG现在设置为1。
      • ADC10 ISR的CPU矢量和ISR的ADC10HI部分执行以下操作:
        • 清除ADC10HIIFG
        • 读取ADC结果
        • 禁用ADC10HIIE以防止后续ADC10HI中断。
        • 启用ADC10LOIE
    • 示例2 -电压> ADC10HI阈值
      • ADC10HIIE = 0 SO,ADC10LOIFG和ADC10HIIFG = 0,CPU未中断
    • 示例#3-电压< ADC10LO阈值
      • ADC10LOIFG现在设置为1。
      • ADC10 ISR的CPU矢量和ISR的ADC10LO部分执行以下操作:
        • 清除ADC10LOIFG
        • 读取ADC结果
        • 禁用ADC10LOIE以防止后续ADC10LO中断
        • 启用ADC10HIIE
    • 示例4 -电压< ADC10LO阈值
      • ADC10LOIE =0 SO,ADC10LOIFG和ADC10HIIFG =0且CPU未中断
    • 样本#5... -重复此序列

    希望这能有所帮助。  请告诉我任何一种方法。