11311|9

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

使用MSP430产生PWM波形,抖动问题如何解决? [复制链接]

请教版主:
我使用MSP149芯片做控制,其中使用TIMEB定时器功能在引脚p4.1 p4.2 输出PWM波形,。目前存在的问题是产生波形的抖动问题,做了各种定时器的配置改变也无法解决,请教版主给看看程序,是那个地方出了问题,多谢!

主程序:
void main()
{
WDTCTL = WDTPW + WDTHOLD ; //关闭看门狗
_DINT(); //关闭中断

MSP430_Initial();
TimeAInit();
Varia××e_Initial();
TimeBInit();
_EINT(); //打开全局中断控制,若不打开,屏蔽本句

loop:
KeyScan();//使用TimeA中断检测按键。
goto loop;
}

定时器B的初始化程序:
void TimeBInit(void)
{
P4DIR |= (BIT2 + BIT1 + BIT0); //选择P4.0 P4.1 P4.2引脚为输出
P4SEL |= (BIT2 + BIT1+ BIT0); //选择输出端口的第二功能(PWM)
TBCTL = TBSSEL_2 + TBCLR + MC_3 ; //选择SMCLK 清除TBR 定时器溢出中断允许
TBCCTL0 = CCIE;// + CLLD1 + CLLD0;
TBCCTL1 = OUTMOD_2 ;//+ CLLD1 + CLLD0 ;// + CCIE; //CLLD0、1 =11 当TBR计数到TBCL0时 数据装载
TBCCTL2 = OUTMOD_2 ;//+ CLLD1 + CLLD0 ;//+ CCIE;
TBCCR0 = 80000 ; //PWM周期
}
定时器B的中断处理程序:
#pragma vector = TIMERB0_VECTOR
__interrupt void ISP_TimerB0 (void)
{
TBCCR1 = iTakeValue1[PwmFlag]; //改变占空比值 MODE2
TBCCR2 = iTakeValue2[PwmFlag];
PwmFlag++;
if(PwmFlag>=bNvalue)
{
PwmFlag = 0;
}
}

在定时器B的每次中断过程中,更新TBCCRx 以得到不同脉宽的PWM。

最新回复

有噪声不应该是程序的问题吧,在输出引脚加一个触发器,可以输出比较完美的波形  详情 回复 发表于 2012-8-2 21:32

点评

有噪声不应该是程序的问题吧,在输出引脚加一个触发器,可以输出比较完美的波形  详情 回复 发表于 2012-8-2 21:32
 
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
主程序:
void main()
{
WDTCTL = WDTPW + WDTHOLD ; //关闭看门狗
_DINT(); //关闭中断

MSP430_Initial();
TimeAInit();
Varia××e_Initial();
TimeBInit();
_EINT(); //打开全局中断控制,若不打开,屏蔽本句

loop:
KeyScan();//使用TimeA中断检测按键。
goto loop;
}

定时器B的初始化程序:
void TimeBInit(void)
{
P4DIR |= (BIT2 + BIT1 + BIT0); //选择P4.0 P4.1 P4.2引脚为输出
P4SEL |= (BIT2 + BIT1+ BIT0); //选择输出端口的第二功能(PWM)
TBCTL = TBSSEL_2 + TBCLR + MC_3 ; //选择SMCLK 清除TBR 定时器溢出中断允许?????????请问楼主干嘛使用UP/DOWN模式,建议使用continuous模式
TBCCTL0 = CCIE;// + CLLD1 + CLLD0;
TBCCTL1 = OUTMOD_2 ;//+ CLLD1 + CLLD0 ;// + CCIE; //CLLD0、1 =11 当TBR计数到TBCL0时 数据装载
TBCCTL2 = OUTMOD_2 ;//+ CLLD1 + CLLD0 ;//+ CCIE;
TBCCR0 = 80000 ; //PWM周期
}
定时器B的中断处理程序:
#pragma vector = TIMERB0_VECTOR
__interrupt void ISP_TimerB0 (void)
{
TBCCR1 = iTakeValue1[PwmFlag]; //改变占空比值 MODE2
TBCCR2 = iTakeValue2[PwmFlag];
PwmFlag++;
if(PwmFlag>=bNvalue)
{
PwmFlag = 0;
}
}TBCCR0是不应该改变的,PWM的周期是固定的,只要改变TBCCR1和TBCCR2寄存器的值就可以了,而且应该在TBCCR1和TBCCR2的中断中修改,而不是在TBCCR0的中断中
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
多谢回复!
我采用UP/DOWN的目的是为了产生对称的PWM,我产生的波形,主要是为了产生类似正弦波的PWM波形。P4.1生成的相当于正弦的上半周,P4.2引脚产生的相当于下半周,两个引脚的输出波形要相差180度,组合通过低通滤波器得到近似的全波正弦波,采用TBCCR0固定波形周期,通过改变TBCCR1 TBCCR2,获得上下半周的不同脉宽的PWM(其中要求在P4.1引脚输出上半周PWM的时候,P4.2引脚保持为低电平不输出,P4.2引脚输出下半周PWM的时候,P4.1引脚保持为低电平不输出),所以我的赋值数组采用的设计为:P4.1:前一半是有效脉宽数据,后一半为0;P4.2:后一半是有效脉宽数据,前一半为0。我上面的程序可产生出这种波形,可就是存在波形抖动。按照1楼上面的回复,是不是需要开放捕捉/比较中断,好像也不行。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主你这个spwm吗???现在做的怎么样了??
能发我一下 ,我看下!!
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主做好没有啊?
能发我一下 ,我看下!!ma-chang-an@163.com
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用:
作者: yuanxinghui 查看帖子
多谢回复!
我采用UP/DOWN的目的是为了产生对称的PWM,我产生的波形,主要是为了产生类似正弦波的PWM波形。P4.1甮..
抖动是什么意思?应该低电平时还有有高脉冲出现?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
加个电容试试
 
 
 

回复

312

帖子

0

TA的资源

纯净的硅(高级)

8
 
有实际的测试波行吗,发来分析分析
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

9
 

MSP430G2553多路PWM产生问题

P1DIR |= BIT6;                // 选择P1.6的第二功能,即TA0.1        
     P1SEL |= BIT6;      
     CCR0 = 7;                     // PWM 周期  = ACLK@32768/4KHz-1 = 8.192-1 = 7  
     CCTL1 = OUTMOD_6;             // CCR1 reset/set        
     CCR1 = 3;                     // CCR1 PWM 占空比50% =8.192*50% - 1 = 3        
     TACTL = TASSEL_2 + MC_1;      // MCLK, up mode
   
     P2DIR |= BIT2;                // 选择P2.2的第二功能,即TA1.0  
     P2SEL |= BIT2;      
     P2DIR |= BIT3;                // 选择P2.3的第二功能,即TA1.0  
     P2SEL |= BIT3;        
     TA1CCR0 = 15;                 // PWM 周期= ACLK@32768/2KHz-1 = 16-1 = 15     
     TA1CCTL1 = OUTMOD_4;          // CCR1 reset/set  
     TA1CCR1 = 3;                  // CCR1 PWM 占空比25% = 16*25% - 1 = 3     
     TA1CTL = TASSEL_2 + MC_1;     // MCLK, up mode

可以产生两路PWM,但是若是改了输出引脚就输出不了,求高手指导~~~万分感谢
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 楼主 lonelywolf 的帖子

有噪声不应该是程序的问题吧,在输出引脚加一个触发器,可以输出比较完美的波形
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表