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.

TMS320F28069 时钟问题



大家好!

我遇到一个奇怪的问题,用Internal Oscillator 1 ,调用F2806x_SysCtrl.c中 IntOsc1Sel()函数,定时器0的100ms中断里面有个PID调节,最后PID能调节稳定,PID可以使用。但是我用示波器测定时器中断,发现有100多us的误差,即设置的是100ms定时器中断,用示波器实测的话是99.9ms。

我通过外部10M 的有源时钟源给DSP提供时钟,如下图,调用F2806x_SysCtrl.c中的   ExtOscSel();函数,最后发现PID不能稳定下来,震荡,用的是和内部时钟源一样的参数,我用示波器测定时器中断,也是我设置的100ms。

请各位专家分析一下,我就修改一句话,把   ExtOscSel();修改为IntOsc1Sel();系统最后又PID稳定下来,把IntOsc1Sel();修改为ExtOscSel();后PID调节的系统又震荡。我觉得可能是我设置的不对,或者是初始化不对,现在没有找到解决的办法

  • http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/47218.aspx有回复。

    可能还可以建议你将GPIO18设置为XCLKOUT看看两种情况下的系统时钟到底有没有不同先,因为其它所有时钟都来自于这个系统时钟,也许是它的不准确导致定时器的差别。

  • 10#您好!

    1、我把系统时钟除以4通过GPIO18/XCLKOUT输出后,用内部晶振测得波形图如下图,波形图不是想象的方波,不知道对不?还有测得的方波频率23MHz


    用外部时钟源输入到DSP 的GPIO19/XCLKIN 晶振测得波形图如下图,还有测得的方波频率22.5MHz


    2、我调节变频器是在100ms定时器中断,每次进入中断,把一个引脚电平翻转,分别采样内部晶振如下图:


    采样外部时钟源输入时钟,每次进入100ms中断翻转的电平如下:

    可以看出,还是有差别的,但是差别不是很大。


    3、硬件上布局如下

    4、软件上设置

    用DSP内部的晶振调用的函数

    void IntOsc1Sel (void) {
    EALLOW;
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0;
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL=0; // Clk Src = INTOSC1
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF=1; // Turn off XCLKIN
    SysCtrlRegs.CLKCTL.bit.XTALOSCOFF=1; // Turn off XTALOSC
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF=1; // Turn off INTOSC2
    EDIS;
    },调用这个函数,系统如上贴所述,最后PID能够达到稳定。

    用外部时钟源输入时钟调用如下函数

    void ExtOscSel (void) {
    EALLOW;
    SysCtrlRegs.XCLK.bit.XCLKINSEL = 1; // 1-GPIO19 = XCLKIN, 0-GPIO38 = XCLKIN
    SysCtrlRegs.CLKCTL.bit.XTALOSCOFF = 1; // Turn off XTALOSC(External Crystal Oscillator )
    SysCtrlRegs.CLKCTL.bit.XCLKINOFF = 0; // Turn on XCLKIN
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRC2SEL = 0; // Switch to external clock
    SysCtrlRegs.CLKCTL.bit.OSCCLKSRCSEL = 1; // Switch from INTOSC1 to INTOSC2/ext clk
    SysCtrlRegs.CLKCTL.bit.WDCLKSRCSEL = 0; // Clock Watchdog off of INTOSC1 always
    SysCtrlRegs.CLKCTL.bit.INTOSC2OFF = 1; // Turn off INTOSC2
    SysCtrlRegs.CLKCTL.bit.INTOSC1OFF = 0; // Leave INTOSC1 on
    EDIS;
    }最后系统中断里面的PID输出不能稳定,呈现正弦波形式的波动,波动周期有20多秒,

    使用DSP内部晶振和外部的晶振唯一的区别就在于如下:

    使用外部晶振程序:

    // IntOsc1Sel();
    // IntOsc2Sel();
    ExtOscSel();

    使用内部晶振程序:

     IntOsc1Sel();
    // IntOsc2Sel();
    //ExtOscSel();

    我使用的外部时钟源是10Mhz的。

    现在问题依然存在,使用内部晶振和外部时钟源,最后的效果不一样。应该说外部有源时钟输入比内部晶振精度更高,但是为什么使用内部晶振可以稳定,使用外部有源时钟源就不稳定。

  • 比较明显,是XCLKOUT不准确,如果你确定使用的倍频和分频是相同的,那问题应该在输入的外部时钟上。

    建议你再量一下XCLKIN的频率,看看它是不是准确的10Mhz?

  • 10#,您好

    您是根据什么判断我外部时钟输入不准确那,从波形上看,我使用外部时钟时,XCLKOUT=22.5MHz,是准确的啊。我用示波器量了外部时钟输入端,是10MHz,有时候有点波动,但是和我PID输出不稳定的周期是不一致的。

    我是通过调节ePWM的占空比调节变频器的转速,通过eCAP模块测转速,达到控制转速稳定目的。

    昨天通过和TI的工程师郑义先生沟通,郑工提供一个思路,把PID关掉,给一个固定的输出,结果发现用外部时钟源输入到XCLKIN给一个固定的占空比,电机的速度也不稳定,来回波动(速度来回波动是使用频闪测速仪测得的)。而用内部时钟源电机速度则很稳定。

     

  • 10#您好!

    就这个标题来说,您的回答是详细的,谢谢。

    今天下午找到问题所在了,我PWM的频率为1K,通过调节占空比来调节变频器速度。

    问题的关键在于这个1K,我用外部有源时钟源输出10M的频率进入DSP的XCLKIN,经过PLL得到系统时钟为90M,通过ePWM模块输出的频率为1.0000K

    而我使用内部晶振,内部的晶振频率和温度有关系,随着温度的升高而升高(我还没有做内部晶振频率的补偿),所以我按90M的系统时钟设置ePWM模块,输出的PWM频率为1.0043K,问题就差在这4.3Hz,我把通过调节EPwm3Regs.TBPRD这个寄存器,把输出PWM时钟凑到1.0000K时,出现了和使用外部时钟一样的问题,变频器调速不稳定了,即时我给定一个固定的占空比,变频器调速也不稳定了,来回波动。

    我又尝试调节PWM的频率,只要避开1K这个频率,我使用内外时钟效果都是一样的。问题在于变频器在1K不稳定、有可能出现谐振。

  • ok,找到问题原因就好。

    你也给我们提供了一个思路,当时钟有异常时,可以尝试别的频率测试。

    关于内部晶振的补偿,你可以参考osc_comp例程。

  • yanhui fu:

    您好。我的28069系统在使用外部时钟时也碰到问题。主要是GPIO19脚接入时钟不行,只能从GPIO38脚接入。具体情况请看下帖。

    http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/52185.aspx

    看您的帖子,应该是用GPIO19脚做通了。请问:

    我在ExtOscSel()中运行了SysCtrlRegs.XCLK.bit.XCLKINSEL = 1; // 1-GPIO19 = XCLKIN, 0-GPIO38 = XCLKIN

    外部时钟输入线默认为GPIO38,要切换到GPIO19除了上述的这行代码,还需要其他的软件或者硬件设置吗?

    从现在的情况来看,好像是时钟切换没有生效,系统仍然在在使用GPIO38脚进来的时钟。

    谢谢!