18150|36

26

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

G2553 TA0能输出两路PWM波形么?? [复制链接]

用的是MSP430G2553  管脚上没有TA0.2,不像TA1那样。但是貌似论坛上有人说每路TA都能产生两路PWM波,好奇之余试试···结果没成功。以下是程序:
#include


void main( void )

{

  // Stop watchdog timer to prevent time out reset

  WDTCTL = WDTPW + WDTHOLD;


  
//时钟设置为1MHz mclk=smclk=dco

BCSCTL1 = CALBC1_1MHZ;

DCOCTL = CALDCO_1MHZ;

BCSCTL3 |= LFXT1S_2;
BCSCTL2 |=SELM_1 + DIVM_0;

  //初始化TA0为两通道pwm,smclk

  P1DIR |= (BIT1+BIT2);

  P1SEL |= (BIT1+BIT2);

  TA0CCR2 = 2000;

  TA0CCTL0 = OUTMOD_7;

  TA0CCTL1 = OUTMOD_7;

  TA0CCR0 = 200;

  TA0CCR1 = 1000;

  TA0CTL = TASSEL_2 + MC_1;


_BIS_SR(LPM0_bits);    //进入LPM0低功耗模式

}


额··没出波形···是不是PWM波周期设置只认CCR0??对哦 没看到哪里可以设置说周期可以设置为CCR1或者CCR2·····那怎么过TA0输出两路PWM呢??膜拜高手解答·······阿弥陀佛····

最新回复

好的   详情 回复 发表于 2014-2-27 15:40

点评

输出模式有问题,你看一下我给的上面的一个PWM循迹的程序试试  详情 回复 发表于 2013-2-27 08:55
个人感觉是不行的,因为没有io口和ccr2对应:pleased:  详情 回复 发表于 2012-8-22 14:34
 
点赞 关注(1)

回复
举报

26

帖子

0

TA的资源

一粒金砂(中级)

推荐
 

回复 板凳 wuqingyou 的帖子

G2553只能产生一路PWM波  这句是错的,应该说G2553通过TA0只能产生一路PWM波,但是通过TA1可以产生两路,当然,用TA0和TA1一共同时可以产生三路PWM波····下面这个程序是一个用TA1产生两路PWM的简单例子,由P2.1和P2.4分别输出:
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;

//时钟设置为1MHz mclk=smclk=dco
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
BCSCTL3 |= LFXT1S_2;
BCSCTL2 |=SELM_1 + DIVM_0;

  //初始化TA0为两通道pwm,smclk,由P2.1和P2.4输出
  P2DIR |= (BIT1+BIT4);
  P2SEL |= (BIT1+BIT4);
  TA1CCR0 = 2000;  //周期为2000个时钟周期
  TA1CCTL1 = OUTMOD_7;
  TA1CCTL2 = OUTMOD_7;
  TA1CCR1 = 500;   //占空比500/2000=0.25
  TA1CCR2 = 1000; //占空比1000/2000=0.5
  TA1CTL = TASSEL_2 + MC_1;
  _BIS_SR(LPM0_bits);    //进入LPM3低功耗模式
}

点评

好的  详情 回复 发表于 2014-2-27 15:40
9楼正解  详情 回复 发表于 2012-8-14 12:15
shi de 是的 我也觉得是TA0只能一路 TA1可以 但是之前有网友说 TA0产生2路 但是没有给出例程 所以一直纠结  详情 回复 发表于 2012-7-25 22:19
 
 

回复

7172

帖子

195

TA的资源

五彩晶圆(高级)

沙发
 


应该只能CCRO设置周期

点评

嗯,确实只能由CCR0设定周期,看到图12-13输出模式4所示,我以为可以通过CCR1设定周期,就用TA1.1作为周期设定值,结果输出不对,这就说明PWM周期只能由CCR0设定了吧····暂且这么理解了。  详情 回复 发表于 2012-7-25 19:41
我不明白怎么周期是由CCR0决定的。。。明显系统频率确定后,定时器TA计数到0XFFFF,这才是PWM周期的一半,,,求解释  详情 回复 发表于 2012-7-24 20:42
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
CCR1和CCR2都可以产生PWM波,遗憾的是,CCR2的PWM中没有GPIO口引出来,所以只能当做定时器定时间用了。而CCR0是用来产生周期的。所以G2553只能产生一路PWM波,我之前用G2553写SPWM波,发现了这个问题。

点评

G2553只能产生一路PWM波 这句是错的,应该说G2553通过TA0只能产生一路PWM波,但是通过TA1可以产生两路,当然,用TA0和TA1一共同时可以产生三路PWM波····下面这个程序是一个用TA1产生两路PWM的简单例子,由P2.1  详情 回复 发表于 2012-7-25 19:48
我觉得是 但是之前有网友说可以产生 我问过他 他也没回我 只是说肯定可以  详情 回复 发表于 2012-7-24 09:02
 
 
 

回复

7172

帖子

195

TA的资源

五彩晶圆(高级)

4
 

回复 板凳 wuqingyou 的帖子

我觉得是 但是之前有网友说可以产生 我问过他 他也没回我 只是说肯定可以
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

5
 

问楼主一个问题

PWM输出的口怎么确定        为什么 设置P1SEL就可以了           P1SEL寄存器对应的=1,代表使用外部模块,但是外部模块有这么多。。 单片机是怎么识别是PWM输出

点评

你仔细看下芯片上的P1.0、P1.2和P1.6引脚的功能就知道了,只有这三个引脚上可以输出  详情 回复 发表于 2012-8-2 11:29
细节我也不过于深究,给不了你为什么的原因,但PWM输出是由定时器TA0或者TA1控制,你在G2553芯片手册上可以找到TA0.x和TA1.x的的管脚,PWM周期由TAx的CCR0控制,也就是在CCR0中你装入的必须是PWM周期,例如TA0.0有管  详情 回复 发表于 2012-7-25 19:59
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 沙发 常见泽1 的帖子

我不明白怎么周期是由CCR0决定的。。。明显系统频率确定后,定时器TA计数到0XFFFF,这才是PWM周期的一半,,,求解释
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(高级)

7
 
学习中。。。
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 沙发 常见泽1 的帖子

嗯,确实只能由CCR0设定周期,看到图12-13输出模式4所示,我以为可以通过CCR1设定周期,就用TA1.1作为周期设定值,结果输出不对,这就说明PWM周期只能由CCR0设定了吧····暂且这么理解了。
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 5楼 jiantaozzr 的帖子

细节我也不过于深究,给不了你为什么的原因,但PWM输出是由定时器TA0或者TA1控制,你在G2553芯片手册上可以找到TA0.x和TA1.x的的管脚,PWM周期由TAx的CCR0控制,也就是在CCR0中你装入的必须是PWM周期,例如TA0.0有管脚P1.1和P1.5,TA0.1有P1.2和P2.6,因此,如果用TA0控制PWM,输出的PWM只能由P1.2或者P2.6输出,定义其它管脚输出无效。至于P1SEL的设置是告诉系统 P1某个管脚使用的是它的第二功能,定义了P1SEL.2则表示P1.2这个管脚使用的是它的第二功能,可以是PWM输出,也可以是其它。
不知道这样理解对不对,请高手指教。
 
 
 

回复

7172

帖子

195

TA的资源

五彩晶圆(高级)

11
 

回复 9楼 wzw134 的帖子

shi de 是的 我也觉得是TA0只能一路 TA1可以
但是之前有网友说 TA0产生2路  但是没有给出例程 所以一直纠结

点评

补充一点啊,要想输出三路PWM时对输出频率(周期)是有限制的  详情 回复 发表于 2012-8-2 16:31
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(中级)

12
 
能产生两路啊
你用模式4试一下
或许还可以3路

点评

但这样占空比是不能改的 只能是0.5  详情 回复 发表于 2013-2-22 17:13
 
 
 

回复

25

帖子

0

TA的资源

一粒金砂(中级)

13
 
G2553哥的可以5路PWM输出!!!!
原则上讲是可以六路的,因为每个定时器都有三个独立的比较匹配寄存器,每个比较匹配寄存器都可以独立输出一路PWM,但是TA0.2的管脚没有引出来,所以最多只能是5路,在continue up mode下每个比较匹配控制寄存器的输出模式选择mode4,不解释,上代码!

//  ACLK = n/a, MCLK = SMCLK = TACLK = default DCO ~1MHz
//  As coded and assuming ~1MHz DCO, toggle rates are:
//output 5 different PWM in different IO
//timer is work on continue up mode
//open all timer_cap interrupt
#include


void main(void)
{
    DCO_init(1);
   
    WDTCTL=WDTPW+WDTHOLD;
   
    P1SEL|=BIT1+BIT2+BIT5;
    P1DIR|=BIT1+BIT2+BIT5;
   
    P2SEL|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;
    P2DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5;   
    P1OUT=0X00;

    TA0CCTL0|=OUTMOD_4+CCIE;
    TA0CCTL1|=OUTMOD_4+CCIE;
    //TA0CCTL2|=OUTMOD_7;
    TA0CTL|=MC_2+TASSEL_2;
    //TA0CCR0=100;
    //TA0CCR1=50;
    //TA0CCR2=2500;
   
    TA1CCTL0|=OUTMOD_4+CCIE;
    TA1CCTL1|=OUTMOD_4+CCIE;
    TA1CCTL2|=OUTMOD_4+CCIE;
    TA1CTL|=MC_2+TASSEL_2;
    //TA1CCR0=700;
    //TA1CCR1=100;
    //TA1CCR2=300;

    __enable_interrupt();
    //LPM0;
}


#pragma vector=TIMER0_A0_VECTOR
__interrupt void timer0_ov(void)
{
    TA0CCR0+=100;
}

#pragma vector=TIMER0_A1_VECTOR
__interrupt void timer0_cap1(void)
{
    switch(TA0IV)
    {
        case TA0IV_TACCR1:
        TA0CCR1+=150;
        break;
      case TA0IV_TACCR2:
        //TA0CCR2=200;
        break;
      case TA0IV_TAIFG:break;
      default: break;
    }
}


#pragma vector=TIMER1_A0_VECTOR
__interrupt void timer1_ov(void)
{
    TA1CCR0+=700;
}

#pragma vector=TIMER1_A1_VECTOR
__interrupt void timer1_cap1(void)
{
    switch(TA1IV)
    {
      case TA1IV_TACCR1:
        TA1CCR1+=100;
        break;
      case TA1IV_TACCR2:
        TA1CCR2+=300;
        break;
      case TA1IV_TAIFG:break;
      default: break;
    }
}

点评

嗯,听你这么一说,我重新看了一下芯片资料,貌似可以实现,也就是说TA0.0、TA0.1、TA1.0、TA1.1、TA1.2一共五路输出,当两个计数器分别计数到CCRx的时候 使用模式4,当达到CCRx时产生中断并翻转输出电平,进入中断  详情 回复 发表于 2012-7-28 22:45
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

14
 

回复 13楼 zenghao616 的帖子

嗯,听你这么一说,我重新看了一下芯片资料,貌似可以实现,也就是说TA0.0、TA0.1、TA1.0、TA1.1、TA1.2一共五路输出,当两个计数器分别计数到CCRx的时候 使用模式4,当达到CCRx时产生中断并翻转输出电平,进入中断给CCRx赋值,以便下次产生中断。但是你的程序我试过,没有PWM输出(按你程序所指,PWM应该从P1.1或P1.5、P1.2、P2.0或P2.3、P2.1或P2.2、P2.4或P2.5这五个管脚输出,xx或xx输出的波形一样,不知理解的对不对。)另外你把LPM0注释掉了,程序打开总中断后就结束了 这样还能产生中断??把CCRx的初值注释掉了,这样计数器怎么判断计数到何值产生中断??  带着疑问,把你的程序改了一改,结果还是没显示······我把你程序中DCO_init(1);换成BCSCTL1 = CALBC1_1MHZ;
    DCOCTL = CALDCO_1MHZ; 其它不变的情况下运行没有结果······································求指教········膜拜·····

点评

怎么会运行不了呢?我只把这句DCO_init(1);删除,就能产生PWM。另外我对他的程序做了小修改,如下: P1SEL|=BIT1+BIT2+BIT5+BIT6; P1DIR|=BIT1+BIT2+BIT5+BIT6; P2SEL|=BIT0+BIT1+BIT2+BIT3+BIT4+  详情 回复 发表于 2012-8-20 22:57
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(中级)

15
 
P1口也可以,甚至可以三路
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

16
 

TA0.0和TA0.1有什么区别呢?

TA0.0和TA0.1有什么区别呢?

点评

TA0.x是由CCRx决定计数 CCTLx控制  详情 回复 发表于 2012-8-1 12:51
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

17
 

为什么我在TA0.0对应的P1.1口处,没有输出呢?

为什么我在TA0.0对应的P1.1口处,没有输出呢?

点评

1.配置好TA0.0的相关设置,包括CCR0 CCTL CTL 打开中断等等···· 2.设置P1.1为输出 第二功能 3.进入休眠时切勿进入LPM3/4(针对时钟是SMCLK来说),LPM3/4是把SMCLK也关闭了的。 4.认真仔细检查。  详情 回复 发表于 2012-8-1 12:56
 
 
 

回复

21

帖子

0

TA的资源

一粒金砂(中级)

18
 
可以的,总共11路PWM输出。

点评

如果能写出程序,能否给出,分享分享??  详情 回复 发表于 2012-8-1 12:57
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

19
 

回复 16楼 guohao931223 的帖子

TA0.x是由CCRx决定计数 CCTLx控制
 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

20
 

回复 17楼 guohao931223 的帖子

1.配置好TA0.0的相关设置,包括CCR0 CCTL CTL 打开中断等等····
2.设置P1.1为输出  第二功能
3.进入休眠时切勿进入LPM3/4(针对时钟是SMCLK来说),LPM3/4是把SMCLK也关闭了的。
4.认真仔细检查。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表