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/MSP430F5152:MSP40F51x2高分辨率计时器 D0 / D1未与 TEC 清除命令(TEC1XCTL2 |= TECAXCLREN)同步

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/782359/ccs-msp430f5152-msp40f51x2-high-resolution-timer-d0-d1-is-not-synchronized-with-tec-clear-command-tec1xctl2-tecaxclren

器件型号:MSP430F5152
主题中讨论的其他器件: MSP430WARE

工具/软件:Code Composer Studio

MSP430专家、您好!  

 我一直通过使用 MSP430F5152 MCU 参考 PMP7605参考软件来设计 MPPT 控制器。   

由于计时器 D0/D1被记录为在高分辨率模式中使用向上/向下计数模式来建立适当死区时间有问题,

我尝试使用 TEC 清除命令 TEC1XCTL2 |=TECAXCLREN & TD0CTL0 |= TDCLR 来同步计时器 D1/D1。

尽管使用了与 TD0CCTL0/1/2和 TD1CCTL0/1/2相同的值、但生成的 PWM 波形不同步。

但随附的示波器捕获会产生大约800nsec 的时间差。  还连接了 S/W 例程。

您能不能建议出什么问题吗?

unsigned int Duty =304、duttime =25;

       get_TLV_Info (TLV_TIMER_D_CAL、0、&bTD0CAL_bytes、(无符号整型**)&pTD0CAL);

                                                     //Get TimerD0校准值(实例0)

       if (bTD0CAL_bytes = 0x0)

       {

         //未找到 TimerD 自由运行校准数据

         while (1);                            //此处循环

       }

       //配置主计时器实例- TimerD0、高分辨率校准模式

       TD0CTL0 = MC_1 + TDSSEL_2;                      // TDCLK = SMCLK = 25MHz =高分辨率输入时钟选择

       TD0CTL1 |= TD2CMB + TDCLKM_1;                    //选择高分辨率本地时钟

       TD1CTL0 |= MC_1 + TDSSEL_2;   //向上计数模式、

       TD1CTL1 = TD2CMB + TDCLKM_2;// TD1时钟=主定时器实例的辅助时钟源

 

       TD0HCTL1 = pTD0CAL->TDH0CTL1_128;        //读取128Mhz TimerD TLV 数据

       TD0HCTL0 = TDHEN + TDHM_0;              // calen=0 =>自由运行模式;启用高分辨率模式

       TD1HCTL0 = TDHEN + TDHM_0;              // calen=0 =>自由运行模式;启用高分辨率模式                                        

       //此处、Timer D 配置为以128Mhz 运行

 

       TD0CCR0 = 696;                          //针对非交错运行1通道 TimerD

       TD0CCR1 =占空比-死区时间;              //高侧 PW_H1 >> PW_H2

       TD0CCR2 = 696 -死区时间;                //低侧 PW_L1 >> PW_L2

       TD0CCTL2 |= OUTMOD_7;                    // TD1CCR2、设置/复位

 

       TD1CCR0 = 696;                 // 128M/696 = 182.xxKhz 是降压级的工作频率

       TD1CCR1 =占空比-死区时间;              //

       TD1CCR2 = 696 -死区时间;

       TD1CCTL2 |= OUTMOD_7;//+ CLLD_1;                   // TD0CCR2、设置/复位

 

       //同步主控(TD0)和受控(TD1)定时器实例

//

       TEC1XCTL2 |= TECAXCLREN;       //通过启用从机计时器的辅助清零来启用同步清零

//     TEC0XCTL2 = TECAXCLREN;        //通过启用从机计时器的辅助清零来启用同步清零

       TD0CTL0 |= TDCLR;//+ TDCLGRP_1;清除 TDR、启动计时器启动

//     TD1CTL0 |= TDCLR;//+ TDCLGRP_1;     TD1CCTL2 = OUTMOD_7;//+ CLLD_1;

      TD0CCTL2 = OUTMOD_7;//+ CLLD_1;  TD1CCTL1 = OUTMOD_7 + CLLD_1;

       init_ios ();

  

 

Init_IOS ()

  P2SEL |= BIT0 + BIT3;// BIT0 // P2.0/TD0.2、P2.2/TD1.1、P2.3/TD1.2、选项选择

  P2DIR |= BIT0 + BIT3 + BIT6 + BIT4;  //、

谢谢、

YS Kim   

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

    您好,Yongsung,

    第一步-在深入了解代码之前。 您能否查看  《MSP430x5xx 和 MSP430x6xx 系列用户指南》第552页的第20.2.5节。

    本节详细介绍了该器件 Timer_D 实例之间的同步机制。

    请告诉我、您是否有机会先查看此内容、以及它是否有助于解决您的问题。

    谢谢、

    Chris

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

    尊敬的 Chris:  

     谢谢你们的建议!  

    即使我使用的代码与用户指南 p552完全相同、  但仍然观察到相同的问题。   

    为了验证时序、  我在 TD0CCR0和 TD1CCR1上使用了相同的值200、 在 TD0CCR1和 TD1CCR1上使用了相同的40、  

    在 TD0CCR2和 TD1CCR2上为相同的80。    然后、PWM 频率变为854KHz、TD0 - TD2延迟变为大约180nsec。  

    meas里 格点为 TD0.2和 TD1.2。   永远不会同步。      

    根据数据表、即使 MSP430F5152中有 TEC1XCTL2 SFR、  CCS 也不会在寄存器观察屏幕中显示 TEC1XCTL2。  

     仅显示 TEC0X... 寄存器。  。      

    为了仅关注 timerD 计时问题、  我 删除 了所有其他与并行的 代码 ADC、DMA、 WDT、UART 等

    仅保留  主()代码,其中包括时钟初始 化、tmerD 初始化和 IO 初始化或测试。  

     问题出在哪呢?        

    --------------------------------------------  

    空 Init_Timer (空)

     TD0CTL0 = TDSSEL_2;                      // TDCLK = SMCLK = 25MHz =高分辨率输入时钟选择
     TD0CTL1 |= TDCLKM_1;                     //选择高分辨率本地时钟
     TD0HCTL0 = TDHEN + TDHREGEN + TDHM_0;

     // TD1HCTL0 = TDHEN + TDHM_0;               // calen=0 =>自由运行模式;启用高分辨率模式                                          // TDHM_0 => 128Mhz、TDHM_1 =>256Mhz
     //此处、Timer D 配置为以128Mhz 运行
     TD1CTL1 = TDCLKM_2;                      // TD1时钟=主定时器实例的辅助时钟源

     TEC1XCTL2 |= TECAXCLREN;     //通过启用从机计时器的辅助清零来启用同步清零

     TD0CTL0 |= TDCLR;//+ TDCLGRP_1;

     TD0CCR0 = 200;                           //                             针对非交错运行1通道 TimerD
     TD0CCR1 = 40;               //高侧 PW_H1 >> PW_H2
     TD0CCTL1 |= OUTMOD_7;                    // TD1CCR1、复位/置位
     TD0CCR2 = 80;                 //低侧 PW_L1 >> PW_L2
     TD0CCTL2 |= OUTMOD_7;                    // TD1CCR2、设置/复位

     TD1CCR0 = 200;                           // 128M/700 = 182.8Khz 是降压级的工作频率
     TD1CCR1 = 40;               //高侧 PW_H1 >> PW_H2
     TD1CCTL1 |= OUTMOD_7;//+ CLLD_1;                    // TD0CCR1,复位/设置(outmode2->切换&reset?)
     TD1CCR2 = 80;
     TD1CCTL2 |= OUTMOD_7;//+ CLLD_1;                    // TD0CCR2、设置/复位

     TD0CTL0 |= MC_1 + TDCLR;//+ TDCLGRP_1;                 //向上/向下计数模式、清除 TDR、启动计时器向上/向下-由 YSK 修改

    YS Kim

     

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

    Yongsung、

    感谢您提供的有用信息。 您是否在 TD0开始计数后尝试将其清零?

    请参阅 《MSP430x5xx 和 MSP430x6xx 系列用户指南》第554页第19.3-1节的注释图片。

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

    尊敬的 Chris:  

     通过  参考 MSP430ware 示例、我已修复了使用 Timer D 调节模式(TDHREGEN = 1)时的 TD0/TD1异步问题。      

    由于  它可以通过设置 TDHLKIE = 1来引起中断、    所以我 在   TDHKIFG 中断 矢量服务例程上放置'TD0CTL0 |= MC_1 + TDCLR'。   

    当    TD0CCTL0中断发生时、还会清除计数器'TD0CTL0 |= MC_1 + TDCLR'。   当我改变时、再次清零计数器

    TDxCCRx 值。   

    但不确定非稳压自由运行时钟模式、因为它无法生成高分辨率频率锁定中断。   仅当 TD0CCTL1/TD0CCTL2 = CCIE 时。  

    感谢大家对这个问题的关注!  

    YS Kim