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/MSP430FR2000:MSP430FR2000频率图形生成

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/647023/ccs-msp430fr2000-msp430fr2000-frequency-pattern-generation

器件型号:MSP430FR2000
主题中讨论的其他器件: MSP430FR2311MSP430WARE

工具/软件:Code Composer Studio

下面是旨在使用 MSP430FR2000生成 PWM 模式的程序。 我以16 MHz 的频率运行处理器。 由 SMCLK 供源的计时器0在 P2.0上输出 PWM、在连续模式下工作。 TBxCCR1位持续变化以生成不同的频率、从8KHz 开始。 但是,在660mS 的时间段开始时,产生的频率非常低,从100Hz 开始。 在 MSP430FR2311 LaunchPad 上测试的同一代码未显示此异常行为。 请告诉我这可能是什么原因。
void main (void)
{
WDTCTL = WDTPW + WDTHOLD; //停止 WDT
P1DIR = BIT0; //将1.0设置为输出
P1SEL1 = BIT0; //选择1.0所需的函数。此处选择辅助函数。

P2DIR = BIT0;
P2SEL0 = BIT0;
CSCTL1 = DCORSEL_5; // DCO 频率选择
CSCTL2 = FLLD_0; // FLL 环路分频器

PM5CTL0 &=~LOCKLPM5;

TB0CCTL1 = OUTMOD_4 | CCIE; // TACCR1切换,启用中断

TB0CTL = TBSSEL_2 | MC_2| CNTL_0| TBIE | ID_0 |TBCLR; // SMCLK、Cont 模式、int 启用


_bis_SR_register (GIE);
}
#pragma vector=TIMER0_B1_vector
__interrupt void Timer_B1 (void)
{
volatile unsigned int x=0;
volatile unsigned int y=0;
volatile unsigned int m=0;
X=BAKMEM0;
Y=BAKMEM1;
M=BAKMEM2;
switch (TB0IV)
{

案例2:Y++;
// P1OUT ^= 0x04;
if (((m%2)=0)
{
if ((y%2)=0)
{
X=x+0x40;
}
TB0CCR1 += 1000+x; //重新加载周期
if (x>1200)
{
M++;
//P1OUT ^= 0x02;
}
}
if (((m%2)!=0)
{
if ((y%2)=0)
{
X=x-0x40;
}
TB0CCR1 += 1000+x; //重新加载周期
if (x<80
)
{
M++;
X=0;
//P1OUT ^= 0x02;
}
}
BAKMEM0=x;
BAKMEM1=y;
BAKMEM2=m;
中断;
案例10:P2OUT ^= 0x01; //定时器溢出
中断;
默认值:break;
}

} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!
    您的问题最好由 MSP430论坛中的专家回答。 我将把这个线程移到这里。

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

    如需将来参考、在论坛中发布代码时、请使用插入代码、附加文件等... 文本窗口的正下方。 进入该菜单后、使用 用于插入代码的按钮。 这会将代码格式设置为可读格式、并帮助您更快地获得问题答案。 我已经编辑过您的帖子以执行此操作。

    通过查看代码、通过更改 CCR1、您不会更改 PWM 的频率。 就是脉宽。 通常、PWM 是在向上计数模式下完成的、有时也是在向上/向下计数模式下完成的。 通过这种方法、CCR0将控制 PWM 的频率、而输出 CCR (在您的情况下为 CCR1)将更改的脉冲宽度。 请参阅 MSP430Ware 中 MSP430FR2311和 MSP430FR2000的 PWM 示例。 MSP430Ware 可在 TI Resource Explorer 中找到,该资源浏览器可在 CCS 或 http://dev.ti.com 中找到
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Jace:

    感谢您的回复。 在 "slaa513a"应用手册中提到的多时基方法中、它 描述了针对多个频率的连续模式运行。 另请参阅 "表6-12。 Timer0_B3信号连接"在 MSP430FR2000的数据表中,提到了 TB1输出信号的 CCR1模块。  如果我已使用 CCR0进行频率变化、这将如何链接到 TB1输出?  

    提前感谢。

    此致、

    Riya

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

    当在增模式中使用定时器时、CCR0设置信号的周期。 它通过限制计时器可以计数到的值来实现此目的。 因此、计时器计数到 CCR0中设置的值、而不是计数到0xFFFF、然后再次从0开始。 然后、您可以设置小于 CCR0的 CCR1值。 此时、CCR1根据输出设置通过自动输出控制信号的脉冲宽度。 只要您所需的所有频率都是相同的时基(读取、您输入的定时器频率的倍数)、那么您只需更改 CCR0值即可更改频率。 这意味着、如果您希望保持相同的占空比输出、则必须根据 CCR0的变化对 CCR1进行适当调整。