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.

[参考译文] CCS/MSP430F5529:停止PWM

Guru**** 2539510 points
Other Parts Discussed in Thread: MSP430F5529

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/631557/ccs-msp430f5529-to-stop-pwm

部件号:MSP430F5529
主题中讨论的其他部件: MSP-TS430RGC64USB

工具/软件:Code Composer Studio

大家好,

我正在使用MSP430F5529进行步进电机控制。  我需要在指定的特定步数后完全停止电机。  我可以连续生成方波,但在完成特定的步数后却不能完全停止。  任何人都能帮助实现这一点。  提前感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好Dipu:
    您正在使用计时器生成PWM。 您可以中断计时器并计算PWM步骤数。 在所需的NO之后,您可以更改CCP的模式...

    此致,
    Vikas Chola
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Vikas Chola先生,您好!
    感谢您的回放和时间。 您能用示例代码帮助我吗?

    此致,
    Dipu。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的问题是:当我们按照您的上述建议实施时,产生了更多的PWM周期,而不是在指定的步骤数后停止步进电机。 ISR例程所需的时间似乎大于中断时间宽度。

    因此,需要帮助生成特定数目的PWM周期,而不检查计时器中断内的计数。 请帮助。

    此致,
    Dipu。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    向我们展示一些代码。 直到那时,我们都在猜测。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    一种可能是设置单独的计时器来控制PWM通道的运行时间。
    e,g PRF为500kHz,您需要37个脉冲。 设置一个计时器以运行74 Us。 启动计时器和PWM通道的时钟,计时器到期时终止PWM通道的时钟。

    另一种方法:将 PWM输出回绕 到计数器计时器通道,并配置所述通道以在达到所需脉冲数后生成ISR。

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

    您好,Jeff:

    感谢您的重播。  请向我发送您提到的第二个选项的示例代码。  第一个选项不适合我。

    此致,

    Dipu。

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

    e2e.ti.com/.../MyCode.txtHiBruce,

    感谢您的重播。  谨随函附上我的守则。

    此致,

    Dipu。

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

    这似乎缺少void_TerminateStepInput,那是点。 他说:

    停止PWM并将输出保持在0 (低)的最快方法是:"TB0CCTL2 &=~(OUTMOD_7|OUT);//OUTMOD=0,OUT=0。" [我不知道DriverLib的语言。]

    在CCR2中断中执行此操作(就像您所做的那样)可能会导致非常短的“毛刺”脉冲,这可能会被原谅,也可能不会被原谅。 我建议在TBCCR0 (或TBIFG)中断中执行此操作。 根据我的读数,当时的信号将是0,并将保持200个时钟的这种状态,所以你应该看不到任何故障。

    是否有任何机会让你看到的是脉冲列车突然停机而过冲?

    [编辑:注册名称中的固定GOof。 两次。]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是演示基本脉冲计数的代码;您可以轻松地更改此代码,以使用ISR处理CCIFG已设置的条件,而不是对其进行轮询。

    //原始开发:
    //'5528和MSP-TS430RGC64USB目标板
    //在WFP上计数负脉冲1.6 / pin24 -使用内部上拉,
    //因此,WFP的1.6 /pin24通常较高


    #include <MSP4S.h>


    void begin_counting(无符号target_count)


    //停止计数-清除MC字段的下位
    TA1CTL &=~BIT4;
    //设置当前计数
    TA1R = 0;
    //设置所需的脉冲计数
    TA1CCR0 = TARGET_COUNT;
    //清除CCIFG - SLAU208的表17-6
    TA1CCTL0 &=~CCIFG;
    //恢复计数-设置MC字段的下位
    TA1CTL |= BIT4;
    }


    Void主(void)

    WDTCTL = WDTPW | WDTHOLD; //停止看门狗计时器
    P1DIR |= 0x01; //将WFP 1.0 设置为输出(LED连接到插针)

    //启用Pull on pg 1.6
    P1REN |= BIT6;
    //将拉线设置为“向上”
    P1OUT || BIT6;

    // TA1CTL - MC是01二进制数,用于计数模式
    TA1CTL = 0x10;

    //设置P1SEL.6,使WFP 1.6 作为TA1CLK输入
    //见SLAS590表6-46
    P1SEL || BIT6;

    开始计数(20);

    对于(;;)


    //在每组脉冲后切换LED
    IF (TA1CCTL0和CCIFG)

    P1OUT ^= BIT0;
    开始计数(20);
    }


    }//结束于(以前)

    }//结束main()