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/MSP430G2553:MSP430G2553

Guru**** 2589275 points
Other Parts Discussed in Thread: MSP430G2553

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/625204/ccs-msp430g2553-msp430g2553

器件型号:MSP430G2553
#include 


#define pwmPeriod 1000 //载波为1kHz,基准为50Hz。 PWM 周期为1ms。

//const unsigned int phalfcycle[25]={200、223、245、266、287、 306、323、339、352、363、 371、377、380、380、377、 371、363、352、339、323、 306、287、266、245、223};
//const unsigned int phalfcycle[25]={100、123、145、166、187、206、 232、239、252、263、271、277、 280、280、277、271、263、 252、239、223、206、187、 16、145、123};
// const unsigned int phalfcycle[108]={312、328、344、360、372、340、356、372、304、320、336、368、384、400、416、432、448、464、464、462、
150、150、340、340、340、340、340、340、360、340、360、360、360、360、360、360、360、360、








//停止 WDT

//针对1MHz 运行校准 DCO
BCSCTL1 = CALBC1_1MHz;
DCOCTL = CALDCO_1MHz;

P1OUT &= 0x00; //将所有引脚设置为低
P2OUT &= 0x00;

P1DIR |= BIT2 + BIT6; // PWM 输出引脚1.2和1.6已选择
P2DIR |= BIT1 + BIT2;

P1SEL |= BIT2;
P2SEL |= BIT1;

TACCR0 = pwmPeriod - 1; //将 PWM 周期设置为400us、SMCLK
TA1CCR0的400-1个时钟周期= pwmPeriod - 1;

TACCTL0 = CCIE; //为 CCR0
TA1CCTL0 = CCIE 启用计时器 A0中断;

TACCTL1 = OUTMOD_2; //针对计时器 A0 CCR1
TA1CCTL1 = OUTMOD_6进行复位/设置;


TACTL = tassel_2 + MC_1 + TACLR; // Timer_A0控制寄存器(上变模式)正在启动定时器
TA1CTL = tassel_2 + MC_1 + TACLR;

_BIS_SR (LPM0_Bits + GIE); //输入带中断
的 LPM0 }

//计时器 A0中断服务例程
//#pragma 是一个包罗万象的预处理器指令,用于扩展预定义指令尚未涵盖的编译器功能。
//在此代码中,编译器(和链接器)被告知我们将为 TIMER0_A0_VECTOR 创建 ISR。
#pragma vector=TIMER0_A0_VECTOR
__INTERRUPT void Timer_A0 (void)
{
//TACCTL1 = OUTMOD_7;

IF (pulsecounterA0 < 25)
{

TACCR1 = phalfcycle[pulsecounterA0];
pulsecounterA0 = pulsecounterA0 + 1;
}
其他
{
P1SEL ^=(BIT2 + BIT6);
pulsecounterA0 = 0;
}

}


//计时器 A1中断服务例程
//#pragma 是一个包罗万象的预处理器指令,用于扩展预定义指令尚未涵盖的编译器功能。
//在此代码中,编译器(和链接器)被告知我们将为 Timer1_A0_vector 创建 ISR。
#pragma vector=Timer1_A0_vector
__interrupt void Timer_A1 (void)
{

IF (pulsecounterA1 < 25)
{

TA1CCR1 = phalfcycle[pulsecounterA1];
pulsecounterA1 = pulsecounterA1 + 1;
}
其他
{
P2SEL ^=(BIT1 + BIT2);
pulsecounterA1 = 0;
}
}

工具/软件:Code Composer Studio

大家好、我是 MSP430G2553和 CCSV5编码的初学者。 我尝试通过比较硬编码的正弦波和载波来生成 SPWM。 但是、根据我的代码、我无法在负周期内获得开关。

我是否可以提供特定的命令/语法来对载波进行电平转换,以便在比较这些值时也对正弦波的负半部分进行比较?

我编写了上述代码。

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

    切换 PxSEL 位只会将引脚从计时器控制改回 GPIO。 有多种硬件和软件资源可用于在线生成 MSP430正弦波:

    www.msp430launchpad.com/.../simple-launchpad-dac.html
    e2e.ti.com/.../545730
    e2e.ti.com/.../222699
    e2e.ti.com/.../84558

    如果您正在寻找真正的负电源轨、则必须考虑另一条线路、因为 MSP430不是能够输出负电压值的双电源轨器件。 因此、您需要使用具有单位增益的外部反相运算放大器来实现您的正弦波应用。 如果连接输出引脚以完成此操作、则应确保只有一个引脚设置为输出模式(PxDIR 设置)、而另一个引脚是输入(PxDIR 复位)、以避免电压冲突、并在两者之间使用限流电阻器。

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

    尊敬的 Ryan Brown1:

    感谢您的回复、但我的查询不是要颠倒我正在获取的现有信号。

    我想在 MSP430G2553的帮助下生成正弦和载波、而无需使用任何外部电路。 我只能看到半个正弦波而不是另一个正弦波发生开关、因此我想知道我是否移动载波的振幅级别、那么对另一半的正弦波也会发生比较? 为此、我可能不知道特定的命令/语法、因为我刚刚开始使用 CCSV5接口和 MSP430G2。

    我将在微控制器本身中生成正弦和载波、用于后续比较的逻辑应在引脚1.2或引脚1.6上生成完整的 SPWM

    Image result for PWM generation with a triangular wave

    [在图像中:在周期的负半部分也生成的脉冲]

    您能指导我朝这个方向前进吗?

    谢谢、
    Shubhangi

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

    如果 TACCR0 = pwmPeriod = 1000、则所需的 phalfcycle 值均不小于512、以使负周期的占空比小于50%、如图所示。 我们还讨论了如何通过切换 P1SEL 位在一半时间内关闭 P1.2/P1.6输出、因此我仍然不确定您要实现的目标。

    此致、
    Ryan