TI中文支持网
TI专业的中文技术问题搜集分享网站

关于MSP430f5172 HPWM的疑问

   我在使用MSP430f5172 HPWM的过程中,//  SMCLK = MCLK = DCOclock = default DCO; TDCLK(TLV Cal Data)= 64Mhz

也就是我现在我把PWM模块的频率变为了64M,

  TD0CCR0 = 581;                          // PWM Period/2
  TD0CCTL1 = OUTMOD_6;                      // CCR1 toggle/set
  TD0CCR1 = TD0CCR0/2;                             // CCR1 PWM duty cycle

打算输出113.8KHz的频率,发现,我不断变化TD0CCR0的值从581变为576,在变化过程频率基本都没变化,但是当我把TD0CCR0的值变为575时,频率突然变为115KhZ左右了,整个过程我是用示波器查看的,怎么感觉和不是高分辨率一样呢

Bruce Wei:

两个问题请帮确认:

1)楼主手上有没有计数器/频率计,能否使用频率计重新测量一次?

2)另外Timer D的时钟源是怎么获得的?

hua liu:

回复 Bruce Wei:

我们这里没有计数器/频率计,#include "msp430f5172.h"#include "hal_tlv.h"void main(void){  struct s_TLV_Timer_D_Cal_Data * pTD0CAL;  // Structure initialized in tlv.h  unsigned char bTD0CAL_bytes;                    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT  Get_TLV_Info(TLV_TIMER_D_CAL, 0, &bTD0CAL_bytes, (unsigned int **) &pTD0CAL);                                             //Get TimerD0 Cal Values (instance 0)  if(bTD0CAL_bytes == 0x0)  {      while(1);                             // Loop here  }    TD0HCTL1 = pTD0CAL->TDH0CTL1_64;          // Read the 64Mhz TimerD TLV Data                   TD0CTL1 |= TDCLKM_1;                      // Select Hi-res local clock  TD0HCTL0 = TDHEN + TDHM_0;                // CALEN=0 => free running mode; enable Hi-res mode   P1SEL |= BIT6 + BIT7;                     // P1.6,7 option select  P1DIR |= BIT6 + BIT7;                     // P1.6,7 output                         // P2.0 output     P2SEL |= BIT0;                            // P2.0 options select  P2DIR |= BIT0;                            // P2.0 output   TD0CCR0 = 576;                          // PWM Period/2  TD0CCTL1 = OUTMOD_6;                      // CCR1 toggle/set  TD0CCR1 = TD0CCR0/2;                             // CCR1 PWM duty cycle  TD0CCTL2 = OUTMOD_6;                      // CCR2 toggle/set  TD0CCR2 = TD0CCR0/2;                             // CCR2 PWM duty cycle  TD0CTL0 |= MC_1 + TDCLR;                  // up-mode, clear TDR, Start timer   __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0  __no_operation();                         // For debugger  }其实就是在你们给的例程里面修改的

Bruce Wei:

回复 hua liu:

因为时间有限,只有在必要的时候才会阅读客户的代码。为了提高效率,建议楼主按照TI技术支持工程师引导提出的问题点,参考用户指南进行问题查找。

解释一下两个问题:

1)大多数示波器的频率测量功能,仅仅是示意性质的,精度并不高;建议楼主使用频率计/计数器测量;

2)时钟的频率精度直接和频率基准源相关,建议使用外部的晶体振荡器作为频率基准源;

hua liu:

回复 Bruce Wei:

我看了用户手册,对照了你们给的历程,实在没办法了才找你们帮忙解决的,说句真心话,也许我愚钝,但是真的没办法解决,我对比过用C2000跑60M的主频去看示波器的频率,基本感觉示波器是没有问题的

Liu Kissn:

回复 Bruce Wei:

我也遇到同样的问题:

      使用F5132的TimerD做高精度的PWM输出,使用Freerunning/regulator 模式,TimerD的时钟频率为256M,CCR0 = 255,当CCR1 <16 or CCR1 > 247时,PWM波无输出,怎么解决的?????

Liu Kissn:

回复 Liu Kissn:

  Hi-res对CCRx的值是有限制的,即PWM波不可能到达100% 或 0%,只能无限接近

Liu Kissn:

回复 Liu Kissn:

已找到答案

赞(0)
未经允许不得转载:TI中文支持网 » 关于MSP430f5172 HPWM的疑问
分享到: 更多 (0)