4966|21

54

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

前辈 前辈们 快来救救我吧 都一周多了 [复制链接]

小弟 我卡住了
好几天了 
希望前辈们指教啊
我这个程序是产生相位互差90度 
出来的波形是 一样的 怎么回事啊

#include <msp430x14x.h>
unsigned int flag1=0,flag2=0,num=0; 全局变量
void Init_Clock(void)      
{
   int i=0;
   BCSCTL1 &= ~XT2OFF;                       // XT2on
  do
  {
  IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  for (i = 0xFF; i > 0; i--);               // Time for flag to set
  }
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?
  BCSCTL2 |= SELM_2 + SELS;                 // MCLK = SMCLK = XT2 (safe)
  // _EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句
}
void main(void)
{
   WDTCTL = WDTPW + WDTHOLD;
   Init_Clock();
   //定时器B的初始化
   P4DIR |= BIT1+BIT2; // P4.1 - P4.2output
   P4SEL |= BIT1+BIT2; // P4.1 - P4.2 TBx options
   P2DIR |= BIT6+BIT7; //
   TBCTL =TBSSEL_2+TBCLR;   //SMCLK
   TBCCR0 = 19999-1;  20ms
   TBCTL |=MC_1+ID_3; 增加模式 1/8分频
   //定时器A初始化
   TACTL=TASSEL_2+TACLR;//SMCLK
   TACCTL0=CCIE;//CCR0中断允许
   TACCR0=5000-1; 5ms
   TACTL |= MC_1+ID_3+TAIE; 增加模式 1/8分频 开中断
   _EINT();    开中断
   while(1)
  {
   if(flag1==1)
    {
     TBCCR0 = 19999-1;
     TBCCTL1 = OUTMOD_7; // CCR1 reset/set  
     TBCCR1 = 9999; // CCR1 PWM duty cycle 占空比为50%
    // TBCCTL1 = CCIE; 
     flag1=0;
    }
   if(flag2==1)
    {
     TBCCR0 = 19999-1;
     TBCCTL2 = OUTMOD_7;
     TBCCR2 = 9999;    占空比为50%
     //TBCCTL2 = CCIE; 
     flag2=0;
    }
  }
}

#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)         定时器A 中断
   {  
   
     num++;
 switch(TAIV)
 {
   case 2:break;
   case 4:break;
   case 10:
      switch(num)
      {      case 0:break;
             case 1:flag1=1;   num=1,置位flag1
                    P2OUT&=~BIT6;      p2.6灯亮
                    break;
             case 2:flag2=1;               置位flag2
                    P2OUT&=~BIT7;     p2.7灯亮
                    TACTL&=~TAIE;     关定时器A中断
                    TACTL=MC_0;       定时器A 停止模式 

                    num=0;

                    break;
            } 
  }}

 

[ 本帖最后由 t_shaojun126 于 2012-3-21 10:20 编辑 ]

最新回复

我头晕还是没太明白CCR2是怎么实现和CCR1同样的占空比又能实现相位比CCR1例如滞后90度呢?  详情 回复 发表于 2012-3-22 10:22
 
点赞 关注

回复
举报

70

帖子

0

TA的资源

一粒金砂(高级)

沙发
 
啥意思啊,实现什么功能,用一个定时器不行嘛,再者就是在中断中修改的标志符在主循环中最好不要再修改,尤其是单纯的置位清零,判断最好不要用==,用逻辑判断,程序复杂了,这样容易出问题的。还有用定时器AB出中断时清一下中断标志。
 
 

回复

54

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发 问路者 的帖子

就是产生两路PWM 相位差90度 请问前辈怎么用一个定时器啊 还有定时器AB 中断怎么清中断标志啊 TAIV吗/
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

4
 
把注释之类的写清楚呀
不然人家没耐心看下去呀

num在哪里复位清零的?

http://e2e.ti.com/support/microc ... /112214.aspx#398899
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

355

帖子

0

TA的资源

纯净的硅(初级)

5
 
首先看看是不是测试方法有问题,其实你还可以通过在线调试一步步跟踪,测试外部输出。
其实你可以简单点做:控制一路输出,同时另一路取反就可以了。
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(中级)

6
 

回复 5楼 zch_genius 的帖子

要是一路输出 一路取反就差180度了 而不是90°了
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(高级)

7
 

回复 楼主 t_shaojun126 的帖子

很简单的,用一个定时器就行了,CCR0来控制周期,两个捕获模块CCR1,CCR2来设置输出信号占空比及相位,输出模式应该是2吧,翻转/置位,忘了是哪个了,你可以再查查。这样你就可以在两个输出脚上得到90度相位的信号,不只90度,其他也可以得到。430定时器一个亮点就是pwm输出,能产生各种各样的信号供你选择。实际应用中很好用。
 
 
 

回复

735

帖子

4

TA的资源

纯净的硅(初级)

8
 

回复 7楼 问路者 的帖子

原来如此,谢谢分享·
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 7楼 问路者 的帖子

前辈  前辈  CCR1 CCR2 怎么设置相位啊? 是不是两个输出模式 不同啊? 怎么改变输出的PWM相位
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(中级)

10
 
谢谢分享
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 7楼 问路者 的帖子

前辈 别嫌我麻烦啊 CCR1 CCR2 用同一种模式 怎么能让他们产生 占空比相同 相位不同啊
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 5楼 zch_genius 的帖子

我做过跟踪了 有时候观测的不太明白
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(高级)

13
 

回复 9楼 t_shaojun126 的帖子

晕,CCR1,CCR2是触发比较中断的比较值,你设置一个大点一个小点不就形成相位差了吗,这样做都不用中断,很简单的几条配置指令就完成任务了!再看看资料吧,其实很简单的!
 
 
 

回复

447

帖子

30

TA的资源

五彩晶圆(初级)

14
 
我不是前辈,还很嫩。

1. 是不是你的周期太长, 你没有测量完全。
2. 不要再中断里加太多东西。
3. 可不可以使用这种方法。
timer-interrput()
{
    state2 = state1;
    state1 = ~state1;
}
 
个人签名www.ctdisk.com/u/1283024
个人书库,持续更新中。
 
 

回复

54

帖子

0

TA的资源

一粒金砂(中级)

15
 

回复 13楼 问路者 的帖子

前辈  可是我想得到两相占空比相同 相位相差90度的PWM波
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

16
 
去http://www.deyisupport.com
问问吧
好像看到过类似的,忘了有没有

笨办法不要用输出模式,直接用中断操作I/O,可能要3个CCR,而且要注意中断中执行时间
用输出模式,还是不熟悉那么多模式,没那个脑筋去琢磨到底能不能做到
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

424

帖子

0

TA的资源

纯净的硅(高级)

17
 
如果是固定占空比的话,还是可以实现的。
我的想法是:
两个Timer采用相同的时钟源。
一路:TimerA,正常PWM输出。参考Output Example, Timer in Up Mode,Out Mode2
另一路:用TimerB做定时反转IO功能。在TimerA CCR0中断中设置TimerB延时(产生相位差),TimerB中断中反转IO,并且重新设置TBCCR0的计数值(高电平),再计数设置GPIO低电平。

只有这样了,你可以试试。
 
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

18
 
原帖由 鸵鸟蝈蝈 于 2012-3-21 22:57 发表 如果是固定占空比的话,还是可以实现的。 我的想法是: 两个Timer采用相同的时钟源。 一路:TimerA,正常PWM输出。参考Output Example, Timer in Up Mode,Out Mode2 另一路:用TimerB做定时反转IO功能。在Timer ...

那么两个TImer还是有可能存在时间差问题导致相位差的计算需要仔细?
能不能就用一个定时器,一路不用中断,另一路用CCR2中断操作IO,这个这样计算也可能比较复杂,能不能那么精确,我没仔细想
没仔细想,随便问问
[ 本帖最后由 wangfuchong 于 2012-3-22 08:55 编辑 ]
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

5276

帖子

5

TA的资源

裸片初长成(中级)

19
 
原帖由 问路者 于 2012-3-21 12:17 发表 很简单的,用一个定时器就行了,CCR0来控制周期,两个捕获模块CCR1,CCR2来设置输出信号占空比及相位,输出模式应该是2吧,翻转/置位,忘了是哪个了,你可以再查查。这样你就可以在两个输出脚上得到90度相位的信号, ...

能不能稍微详细一点呢?那个CCR2用什么模式?
 
个人签名没工作,没女人老婆,没宽带 ,  没钱
 
 

回复

70

帖子

0

TA的资源

一粒金砂(高级)

20
 

回复 15楼 t_shaojun126 的帖子

如果占空比是一样的,输出模式应该是翻转模式,这个你一看那7种输出模式就明白了,CCR0控制周期,翻转模式,然后设置CCR1,CCR2,很容易就得到你要的信号了。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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