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.

[参考译文] MSP430G2553:引脚 P2.0 MSP430G2553上的 PWM。

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1257244/msp430g2553-pwm-on-pin-p2-0-msp430g2553

器件型号:MSP430G2553

大家好、感谢您的阅读。

我正在尝试为一个项目制作一个 PWM 信号,该 PWM 只是系统的一部分,它只能在 P2.0引脚上完成(其他引脚忙),我用 TimerA0 (P1.6)做了示例,它很好, 但是、当我使用 TimerA1 (P2.0)进行测试时、程序不起作用。

这是代码、 这里、我使用连接到 P2.4的 LED、它只是活动的指示器、图片中的信号位于 P2.0引脚上。

#include <msp430G2553.h>

int main(void)
{
	WDTCTL = WDTPW | WDTHOLD;	// detengo el wdt
	BCSCTL1 = CALBC1_1MHZ;
	DCOCTL = CALDCO_1MHZ;       // DCO a 1 Mhz
	P2DIR |=BIT4;               // LED indicador
	P2DIR|=BIT0;                //P2.0 como salida
    P2SEL|=BIT0;                //Permite al pin 2.0 ser salida especial-> TA1.0
    P2SEL2 &=~BIT0;
    TA1CCR0  = 999;              //PWM de 1KHz, tiene un periodo de 1milisegundo.
    TA1CCR1 =500;                // ciclo de trabajo (tiempo que la señal está a nivel alto) del 50%, la señal
	                            //está a nivel alto 0.5milisegundos.
    TA1CCTL0 |= OUTMOD_7;
    TA1CTL = TASSEL_2 + MC_1;                  // SMCLK, up mode


	while (1)
	{
        P2OUT|=BIT4;
        __delay_cycles (100000);
        P2OUT&=~BIT4;
        __delay_cycles (100000);
	}
}

非常感谢您的观看。

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

    则可以选中多功能引脚。 您应该让计时器在连续模式下工作。 这意味着 PWM 信号只能是50%。 该计数器将与0xFFF 进行计数。

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

    要稍微扩展 ESON 的响应:CCR0唯一有用的 PWM 模式是"切换"、这将在向上计数模式下占空比限制在50%。

    可以结合使用连续模式和其他软件来在 CCR0上生成"实际"PWM。 概念是使用 Toggle (OUTMOD=4)但使用 ISR (Timer1_A0_vector)来及时将 CCR0向前推送。

    这在 TI 应用节点(SLAA513B)中进行了介绍:

    https://www.ti.com/lit/an/slaa513b/slaa513b.pdf

    从4.1.2节开始,注意 Timer_A0()函数,这是方法的核心。 您只需要将常量(50和150)添加到变量中并提供一种动态更改常量的方法。

    由于软件干预、接近0%或100%的占空比将很难/不可行;您可能希望强制实施人为限制。

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

    谢谢伊森、 我跳过了手册的这一部分、我将详细介绍所有内容并尝试可能的解决方案。

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

    谢谢 Bruce、 我将使用中断来生成信号。