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.

[参考译文] MSP430F6779:MSP430F6779测量 PWM 信号的电压

Guru**** 1959305 points
Other Parts Discussed in Thread: TIDM-THREEPHASEMETER-F6779
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1208935/msp430f6779-msp430f6779-measuring-voltage-of-pwm-signal

器件型号:MSP430F6779
主题中讨论的其他器件:TIDM-THREEPHASEMETER-F6779

我正在开发2级电动汽车充电器的代码。 我正在使用三相功率计(TIDM-THREEPHASEMETER-F6779)中的示例代码。

我正在使用计时器2生成 PWM 信号、如下面的代码所示。 我正在尝试以5%的占空比测量 PWM 信号的电压。 下图顶部显示了 PWM 信号、底部显示了一个引脚、我将进行切换以显示 ADC 何时对 PWM 信号进行采样。  

为什么  每次计时器到达 TA2CCR0时 TIMER2_A0中断不会触发?  当 PWM 信号从低电平变为高电平时、TIMER2_A0中断是否不应该立即触发?

是否有更好的方法可以测量 PWM 信号的电压?  

/*设置初始 PWM 周期1kHz */
TA2CCR0 = 16685 - 1;//32786Hz 时钟除以2、并具有一些失调电压。 -1来自计时器从0开始计数、而不是1。

/* CCR0复位/置位*/
TA2CCTL1 = OUTMOD_7;

TA2CCTL0 = CCIE;// CCR0中断被启用

电流额定值= 5.0;
CURRENT_RA定值= CURRENT_RA定值/ 100.0;
TA2CCR1 = 16685.0 * CURRENT_RA定值;

/* SMCLK、向上计数模式、清除 TAR */
TA2CTL = TASSEL_2 | MC_1 | TACLR | TAIE;

/***** 启用导线 PWM **** /
P11DIR |= BIT3;
P11SEL0 |= BIT3;
P11OUT &=~BIT3;

#pragma vector=TIMER2_A0_vector
__interrupt void Timer2_ISR (空)

P9OUT ^= BIT0;//切换引脚
ADC10CTL0 |= ADC10ENC + ADC10SC;
}

感谢您的帮助。

Mike

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

    您的 TIMER2_A1_VECTOR 正在做什么? 我想知道它是否阻止/延迟 CCR0中断。

    我不确定"测量 PWM 的电压"是什么意思、因为 PWM 信号是数字的。 您是否对测量占空比感兴趣?

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

    感谢布鲁斯的忏悔。 下面是 Timer2_A1_vector。 不过、我只是将代码从 TIMER2_A0_VECTOR 移到了 TA2IV_TA2IFG 用例、以得到下面的图片。 它看起来稍微好一点、但您可以看到、在某些情况下、P9.0在 PWM 信号为高电平时之外进行转换。 我尝试在 PWM 信号为高电平时读取 PWM 信号的模拟输入来测量电压。   

    对于电动汽车充电、当插入车载充电器时、电动汽车会将 PWM 信号从3.3V 下拉至2.7V。 当汽车准备好充电时、 PWM 信号会被下拉至2.1V。 该 PWM 信号将传输到模拟输入引脚。 明白了吗? 我正在生成占空比、因此我已经知道占空比是多少。 占空比决定了电动汽车可以从充电器中拉取的电流大小。   

    // Timer2_A1中断矢量(TAIV)处理程序
    #if defined (__TI_Compiler_version__)|| defined (__IAR_SYSTEMS_ICC__)
    #pragma vector=TIMER2_A1_vector
    __interrupt void TIMER2_A1_ISR (void)
    #Elif 已定义(_ GNU _)
    void __attribute__((interrupt (TIMER2_A1_vector)) TIMER2_A1_ISR (void)
    #else
    #错误编译器不受支持!
    #endif

    开关(__even_in_range (TA2IV、14))

      TA2IV_NONE:break;//无中断
      案例 TA2IV_TA2CCR1:break;// TA0CCR1_CCIFG
      情形4:中止;//保留
      案例6:break;//保留
      案例8:break;//保留
      案例10:中断;//保留
      案例12:中断;//保留
      TA2IV_TA2IFG 案例:
       P9OUT ^= BIT0;//切换引脚
       ADC10CTL0 |= ADC10ENC + ADC10SC;
       break;// TA0IFG
      默认值:中断;
    }
    }

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

    哦、好的、听起来您确实需要测量 PWM 的(高侧)电压。 (我以前没见过。)

    由于其他系统活动和进入 ISR 所需的时间、这个新跟踪似乎显示了(或多或少) TAIFG 中断的正常延迟。 (区别在于有抖动、但没有明显的漂移。) 该延迟是 ADC 使用基于软件的启动时的危险之一。

    跳到最后:如果可以的话、我建议使用 TA3而不是 TA2。 TA3.0 (即 CCR0)可以通过 ADC10SHS=2 (参考数据表(SLAS768E)表6-20)为 ADC 提供硬件触发、以便您避免所有软件/ISR 延迟。

    背景:看起来您的采样/PWM 周期大约为1ms、因此5%的占空比大约为50usec。 即使降低延迟、您仍必须确保 ADC 启动+采样/保持可以在这段时间内完成。 这将考虑 ISR 延迟(最大值)和 ADC10SHT/ADC10SSEL。 这有点紧凑、而可变延迟使其更加困难。 如果您可以使用 ADC10SHS 将延迟减小到0 (最大值)、您只需调整 ADC10SHT/ADC10SSEL (静态)即可在50us 内完成。

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

    是的、我尝试测量 PWM 信号的高侧电压、该高侧电压将在整个汽车充电过程中发生变化。  PWM 信号是1kHz 信号。  

    我是否可以将该 PWM 信号输入到端口1引脚中并使用上升沿触发 ADC? 或者尝试这样做是否会有太多延迟?

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

    当您说  TA3.0 (即 CCR0)可以为 ADC 提供硬件触发时、ADC 将在 TA3达到 CCR0时自动触发?

    所以我不需要做这个 ADC10CTL0 |= ADC10ENC + ADC10SC; 在软件中??

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

    可以。 您将需要将您的 PWM 从 P11.3 (TA2.1)移动到 P11.1 (TA3.1)并设置 ADC10SH=2。 并将您的 TA2配置代码更改为 TA3。 (您不需要 ISR。)

    在 ADC10 ISR 中、您将需要在每次转换后切换 ADC10ENC (=0、然后=1)[参考 UG (SLAU208Q)第二27.2.7.1]。

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

    我完全不能通过使用  ADC10SH=2来使 ADC10 ISR 触发。 下面是 Timer3代码和 ADC10 设置代码。 我在 ADC ISR 中放了一个断点、但它从不会触发。  

    TA3CCR0 = 16685 - 1;//32786Hz 时钟除以2、并具有一些失调电压。 -1来自计时器从0开始计数、而不是1。

    /* CCR0复位/置位*/
    TA3CCTL1 = OUTMOD_7;

    //TA3CCTL0 = CCIE;// CCR0中断被启用

    电流额定值= 5.0;
    CURRENT_RA定值= CURRENT_RA定值/ 100.0;
    TA3CCR1 = 16685.0 * CURRENT_RA定值;

    /* SMCLK、向上计数模式、清除 TAR */
    TA3CTL = TASSEL_2 | MC_1 | TACLR;//| TAIE;

    ADC10CTL0 &=~ADC10ENC;
    /*清除挂起的中断以确保 DMA 的触发*/
    ADC10IFG = 0;

    /* ADC 打开、ADC10等待来自 SD24的触发、采样时间2us 8xADCclk、自动下一个转换 */
    ADC10CTL0 = ADC10SHT0 | ADC10ON | ADC10MSC;

    //*由 SD24触发,SMCLK/6 = 4MHz,脉冲采样模式*/
    ADC10CTL1 = ADC10SHP | ADC10SHS_2 | ADC10DIV_0 | ADC10SSEL_0 | ADC10CONSEQ_0;/*单通道、单次转换*/

    /* 10位转换结果*/
    ADC10CTL2 |= ADC10RES;

    /*启用 ADC 转换完成中断*/
    ADC10IE |= ADC10IE0;

    /* A3 ADC 输入选择;Vref=AVCC */
    ADC10MCTL0 |= ADC10INCH_3 | ADC10SREF_0;

    /*启用 ADC10中断*/
    //ADC10IE = ADC10IE0 | ADC10OVIE | ADC10TOVIE;

    /*启动 ADC 并等待软件启动转换触发器*/
    ADC10CTL0 |= ADC10ENC;//+ ADC10SC;

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

    抱歉、我暂时忘记了 TA3.0触发器依赖于 TA3.0信号、而不是 IFG。 CCR0信号实际上只能以一半的频率切换、但诀窍是每次反转触发感应、以便触发每个 CCR0事件。  

    因此、添加到配置序列中:

    > TA3CCTL0 = OUTMOD_4;  //在半频率切换;ISSH 反转(请参阅 ISR)提供完整频率

    然后、当您在 ISR 中切换 ENC 时:

    > ADC10CTL0 &=~ADC10ENC;  //根据 UG 部分27.2.7.1切换 ENC
    > ADC10CTL1 ^= ADC10ISSH;    //切换 ISSH 以在每个周期提供触发(EQU0)
    > ADC10CTL0 |= ADC10ENC;

    我没有 F6779、但我刚刚使用 TB0.0在 F5529 (ADC12)上完成了该组合。

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

     添加该代码后、ADC10 ISR 仍不会被触发。 现在、我还没有任何用于 TA3的 ISR 代码、不确定这是否重要。 下面是 ADC10 ISR 代码、供您参考。 请告诉我、您是否希望我检查任何 TA3寄存器、或添加断点或任何内容来帮助解决此问题。  

    ISR (ADC10、ADC10_INTERRUPT)

      开关(__even_in_range (ADC10IV、ADC10IV_ADC10IFG)
      {
       案例 ADC10IV_NONE:
         中断;
       案例 ADC10IV_ADC10OVIFG:
         中断;
        案例 ADC10IV_ADC10TOVIFG:
          中断;
        案例 ADC10IV_ADC10HIIFG:
          中断;
        案例 ADC10IV_ADC10LOIFG:
          中断;
        案例 ADC10IV_ADC10INIFG:
          中断;
       案例 ADC10IV_ADC10IFG:
          ADC10CTL0 &=~ADC10ENC;
          ADC_RESULT = ADC10MEM0;//存储 ADC10通道0结果
          ADC10CTL1 ^= ADC10ISSH;//切换 ISSH 以在每个周期提供触发(EQU0)
          ADC10CTL0 |= ADC10ENC;
          中断;
       }
    }

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

    通常的怀疑:

    1) 1)您是否在某处启用 GIE? (__enable_interrupt())

    2) 2)您是否可以监控 TA3.0 (已按照数据表表表6-76配置 P4.7)? 它应该看起来像一个1/2kHz 的方波。

    3) 3)如果您暂停程序、它在哪里执行(在某个地方意外产生错误转弯)?

    4) 4)在程序启动时、使用调试器将 ADC10MEM0设置为有区别的东西(例如0x123)、然后运行、然后查看它是否发生变化。 这将把触发器- ADC 阶跃与完成-中断阶跃分开。

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

    该代码来自这里的三相电表示例代码、我已针对我的应用进行了修改。  www.ti.com/.../TIDM-THREEPHASEMETER-F6779

    1.我搜索的,找不到这个,但 IAR 出于某种原因不搜索所有的文件。 我还将此添加到了代码中、但 ADC ISR 仍未被 TA3触发。  

    2.我昨天焊接了一根导线到 TA3.1,然后看到它上面的 PWM 信号。 因为我的焊铁很大、我需要很长时间才能做到这一点、并且我不断地在其旁边短接引脚。 如果您愿意、我可以这样做。  

    3.当我暂停程序时,它看起来很正常。 当我运行并暂停几次时、它不会在一行代码上卡住。  

    4.我做了这个,但当我暂停程序,这个值永远不会改变。 我在 ADC ISR 中也有断点、这些断点永远不会被触发。   

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

    1) 1)听起来您正在修改更大的代码库。 我想知道其他一些代码是否在使用 TA3。 尝试搜索、例如 TA3CTL。

    2)看一下 SLAA577G 中的原理图、我认为您将能够看到 R59低侧 LED4旁边的 P4.7。 (它也会使 LED 闪烁、但速度太快以至于看不到。)

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

    我没意识到在您的平台上访问引脚非常困难。 另一种选择是将 TA0.1 (AD10SHS=1)用于 PWM。 该信号从引脚 P2.1发出、该引脚连接到射频子卡接头之一(RF_CS、引脚 RF2.14)。 这些微型引脚工作起来有点痛苦、但可能不如 MCU 引脚痛。 [编辑:您的程序中是否有使用 TA0的内容?]

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

    我们通过此参考设计制作了自己的自定义功率计电路板、因此很多引脚没有连接到电路板上的任何位置、我们也不使用您提到的射频子卡、LCD 或 LED4。 我们将对已经投产几年的功率计电路板进行修改、使其成为带有集成式功率计的主系统控制器电路板。 希望这有助于澄清问题。  

    我订购了一台显微镜,因为我浪费了很多时间。 我要将一根导线焊接到 TA3.0、让您知道它是什么样的。  

    没有任何其他使用 TA3的代码。 我在 将 TA2代码更改为 TA3之前进行了检查。  

    是的、TA0用于驱动 Σ-Δ ADC 模块以测量用于功耗计算的电压和电流。  

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

    我 在 接近 system_setup ()末尾的地方看到了一个"_EINT ()"。

    ADC10MEM0没有变化这一事实表明触发的确没有发生。 如果实用的话、我可以将运行的程序发布在 F5529上(只有72行)。 我没有一个 F5系列器件与 ADC10、但 F5系列 ADC10和 ADC12有许多相似之处。

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

    我已将一根导线焊接到 TA3.0 P4.7、但在该引脚上看不到任何内容。  

    它看起来 TA3正在计数、因为我看到 TA3R 改变。  

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

    1) 1) TA3CCTL0是否设置 OUTMOD=4?

    > TA3CCTL0 = OUTMOD_4;

    2) 2)您是否根据表6-76配置了 P4.7? 再次看,它声称 P4DIR.7是不在乎,但我不相信。

    > P4SEL0 |= BIT7; // P4.7作为 PM_TA3.0

    > P4DIR |= BIT7;   //输出(尽管表6-76中有"无关"的规定)

    步骤(2)仅用于诊断-它不影响触发。

    [编辑:固定的 CCTL goof]

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

    是的、我配置了 P4.7。 我一开始没有看到任何内容、因此我将其切换为数字引脚、能够将其切换为高电平并查看其工作情况、只是为了验证我已将导线焊接到正确的引脚。 以下是我的当前代码。 很棒您可以编辑回复。 我看到您更改了 TA3CCTL0 = outmod4。  

    请注意、我没有在 TA3上启用中断、不确定这是否重要。  

    TA3CCR0 = 16685 - 1;//32786Hz 时钟除以2、并具有一些失调电压。 -1来自计时器从0开始计数、而不是1。
    /* CCR0复位/置位*/
    TA3CCTL1 = OUTMOD_4;//在半频率切换;ISSH 反转(请参阅 ISR)可以提供完整频率
    //TA3CCTL0 = CCIE;// CCR0中断被启用
    电流额定值= 5.0;
    CURRENT_RA定值= CURRENT_RA定值/ 100.0;
    TA3CCR1 = 16685.0 * CURRENT_RA定值;
    /* SMCLK、向上计数模式、清除 TAR */
    TA3CTL = TASSEL_2 | MC_1 | TACLR;//| TAIE;

    /***** 设置 P4.7 TA3.0引脚**** /
    P4SEL0 |= BIT7;// PxSEL -外设功能= 1、I/O = 0
    P4DIR |= BIT7;// PxDIR -输出= 1、输入= 0

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

    TA3CCTL1 = OUTMOD_4;//在半频率切换;ISSH 反转(请参阅 ISR)提供完整频率

    应为:

    > TA3CCTL0 = OUTMOD_4;//在 ADC 的半频率切换;ISSH 反转(请参阅 ISR)提供全频率

    > TA3CCTL1 = OUTMOD_7;// PWM 复位/置位

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

    现在 ADC10 ISR 触发!! :)哇!

    下面是计时示意图。 顶部是占空比、底部是在 ADC10 ISR 中切换的引脚。 看起来就像每11到15个样本一样、时序关闭、ADC ISR 不会恰好在 PWM 信号的高侧触发、这很奇怪、现在我们使用的是硬件触发器而不是软件触发器。 有办法解决这个问题吗?

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

    ADC ISR 容易受到与早期计时器 ISR 相同延迟的影响、因此在 ISR 中摆动 GPIO 并不是真正确定的。

    ADC 是确定性的(提供或采用一个 ADC 时钟(200ns)进行同步):触发后、它将 ADC 时钟(在您的情况下为8个)的采样/保持时间花费 ADC10SHT 节拍(在您的情况下为5MHz)、然后12个 ADC 时钟进行转换、因此约为(8+12)/5=4usec。 您实际上只关心采样/保持、所以关键时刻是在中断触发前12个 ADC 时钟、但这是 ISR 实际执行前的未知时间。

    由于确定性的行为,我想你最感兴趣的是频道3最早触发的情况--这会给你一个关于转换所需时间的上限。

    通过监控引脚(P1.3、不幸的是它也是 A3)上的 ADC10CLK 可以看到更多细节。 我在 F2系列器件上执行过一次该操作、可以看到运行 ADC 时钟的开始和停止。 (我模糊地记得它在 ADC 完成后继续运行2-3个周期。) 不过我不知道这个实验是否值得这个麻烦。

    您是否看到了合适的样本数据? 我仍然想知道您的源阻抗、因为 SHT=1非常短。

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

    我不太确定下面的代码现在发生了什么情况。 现在、我完全无法像以前那样更改 PWM 信号的占空比。 我必须更改  TA3CCR0 和 TA3CCR1的值、以便使 PWM 信号恢复到1kHz、这是电动汽车充电所必需的。 当我尝试将 TA3CCR1更 改为不同的占空比时、它不会改变、它始终卡在50%占空比。 我需要能够在5%到96%的占空比之间改变占空比。  

    TA3CCR0 = 8350 - 1;
    //TA3CCR0 = 16685 - 1;//32786Hz 时钟除以2、并具有一些偏移。 -1来自计时器从0开始计数、而不是1。
    /* CCR0复位/置位*/
    TA3CCTL0 = OUTMOD_4;//在半频率切换;ISSH 反转(请参阅 ISR)可以提供完整频率
    TA3CCTL1 = OUTMOD_7;//在半频率切换;ISSH 反转(请参阅 ISR)可以提供完整频率
    额定电流= 95.0;
    CURRENT_RA定值= CURRENT_RA定值/ 100.0;
    TA3CCR1 = 8350.0 * CURRENT_RA定值;
    TA3CTL = TASSEL_2 | MC_1 | TACLR;/* SMCLK、向上计数模式、清除 TAR */

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

    "50%占空比"观察结果听起来像是在探测 TA3.0 (P4.7)、而不是 TA3.1 (P11.1)。 上面(顶行)的示波器轨迹线适用于 TA3.1。

    PWM 在 TA3.1 (P11.1)上。 TA3.0 (P4.7)探针仅用于诊断。

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

    是的、您的权利。 我被他的鸡巴深深地含进了嘴里。 哈哈,我在 P11.1上看不到任何东西,所以昨晚我探测了 P4.7。 我只是将 P11.1设置为数字 I/O、并将其设置为高电平、看不到任何内容、因此需要再次将导线重新转插至芯片。   

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

    [附带说明:我 不知道我在下周左右的日程安排。 这里有很多聪明的人可以提供帮助、但您可能会发现您必须启动新的主题来吸引他们的注意力。]

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

    无需担心 Bruce。 我将导线解析为 P11.1、看起来一切现在都正常运行! 等了一分钟。 测量现在看起来也非常稳定。 我需要做一些更多的测试、但我已经测试了5%的占空比、50%和96%的占空比、结果看起来非常好! :)

    还有一个问题。 我还需要测量 PWM 信号的低侧、TA3是否有任何东西可以在 PWM 信号的下降沿触发 ADC?  

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

    您已经在使用两个 TA3.0边沿(ISSH 技巧就是这么做的)、因此我没有看到另一种触发机制。 使用 TA0.1作为触发器、您可以使用 PWM 的两个边沿(使用 ISSH 技巧、尽管是通过赛跑)、但看起来这不是一个选择。

    也许可以使用 DMA 技术(使用 DMA 将一些内容复制到 ADC10CTL0中)、但我不确定 自己能否从头开始设计它。

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

    好的、这是有道理的。  

    我还需要读取更多的模拟通道。 在某处有一个很好的例子吗?  

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

    示例 MSP430F677x_ADC10_10.c 将从 A2向下采样至 A0。 当 CONSEQ=1时、采样从英寸下降到 A0。 该示例使用 DMA、因为否则样本(通常)到达得太快、ADC ISR 无法及时收集它们。

    https://dev.ti.com/tirex/explore/node?node=A__AJYbjTaJ3i6izwfAKTplkg__msp430ware__IOGqZri__LATEST

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

    太棒了、感谢您的帮助。 在对多条通道进行采样时、ADC ISR 会消失吗?我只需要使用 DMA ISR、并将下面的代码放入 DMA ISR 中?

    ADC10CTL0 &=~ADC10ENC;
    ADC10CTL1 ^= ADC10ISSH;//切换 ISSH 以在每个周期提供触发(EQU0)
    ADC10CTL0 |= ADC10ENC;

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

    是的、在这种情况下、DMA ISR 会指示完成、所以你需要在那里执行 ADC 任务。

x 出现错误。请重试或与管理员联系。