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:CPU 定时器0频率不正确

Guru**** 2551110 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1064115/tms320f28069-cpu-timer-0-frequency-not-correct

器件型号:TMS320F28069

你(们)好  

我一直在项目中使用 CPU 定时器0 ISR 来生成正弦波。  
我使用带有20kHz ISR 的 rampgen 库生成了50Hz 正弦波。 但是、当我使用精密功率分析仪观察到它时、它显示为50.2Hz。  
因此、我使用49.8Hz 作为斜升频率、得到50Hz 输出。
但我还注意到、功率测量正弦分析器库还检测到频率为49.8Hz 、而实际频率为50Hz。

已使用 GPIO 切换和示波器检查 ISR 运行频率。 输出显示为20.16kHz。  


因此、我使用 CPU 定时器0周期配置值、发现50.2微秒可提供我想要的准确输出。 一切都和预期的一样。  

对于20kHz、正确的周期值应为50。 但工作值为50.2。  为什么会这样。  

ConfigCpuTimer (&CpuTimer0、90、50.2);

此致
Damith

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

    尊敬的 Damith:

    从 CPU 计时器过期到生成 ISR 并切换 GPIO 的时间、始终存在内部硬件延迟。 您会看到预期的~200ns (如果您配置了 SYSCLK=90MHz、则为~20个周期)延迟。 同样、该内部延迟可能会随电压和温度的变化而变化几个周期。

    此致、

    Nirav

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

    你好 Nirav

    非常感谢您的回复。
    请注意、问题不仅在于 GPIO。  正如我在问题中所说的、Rampgen 库和正弦分析器库也给出了错误的值、49.8Hz 而不是50Hz。

    使用 SPWM 生成的正弦波和为 ADC 提供50Hz 输入时的精密功率分析仪对此进行了检查。  它仅在我输入 CPUTIMER 周期值50.2后才提供正确的值。

    让我说明一下我所做的事情、这可能会澄清问题。


    生成50Hz 信号、且斜坡以20Khz 运行、并使用该信号通过 SPWM 逆变器生成50Hz 正弦波。
    已使用精密功率分析仪检查它。 结果为50.2Hz。  
    因此、我给出了49.8Hz 的频率、得到的频率恰好是50Hz。

    为 ADC 提供50Hz 正弦波信号。 在以20k 运行的 TI 正弦分析器库中对其进行了测量。
    频率显示为49.8Hz。

    因此、我试验并发现50.2作为 CPU 定时器周期值给出了预期结果。
    已尝试使用多个320F28069 MCU。 结果相同

    系统配置/初始化问题是否可能导致此问题?

    此致
    达米赫

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

    Nirav、您好!

    我注意到、当我将时钟源从内部振荡器更改为外部晶振时、问题似乎可以解决。  
    使用内部 OSC 的原因。  

    此致
    Damith

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

    尊敬的 Damith:

    INTOSC 精度为+/-3%(请参阅数据表)、这就是您从预期50Hz 看到增量的原因。  

    此致、

    Nirav

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

    你好 Nirav

    如果是这种情况、则不同 MCU 的频率值应该改变。 例如,一个 MCU 显示50.1Hz,另一个 MCU 显示49.9Hz,就像这样。 但我在多个28069M MCU 中使用了相同的代码、但每次仍能获得相同的50.2Hz 值。

    因此、这与该频率漂移无关。 所有 MCU 的漂移值不应相同。

    此致

    Damith

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

    尊敬的 Damith:

    您拥有的所有 MCU 都可能显示相同的 INTOSC 频率、该频率在10MHz 以下。 我之所以说这是可能的、是因为+/-3%的漂移是在整个温度范围内发生的。 我假设您在多个 MCU 上的温度相同。 为了补偿温度漂移并将容差限制为+/-3%、INTOSC 目标频率将从10MHz 稍微偏离、因此假设 INTOSC 为10MHz 可能不正确、因此您会看到50.2Hz。

    检查这一点的一种方法是在 XCLKOUT 上输出 INTOSC 时钟、并测量频率以检查它是否以10MHz 为中心或是否关闭。

    此致、

    Nirav

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

    你好 Nirav

    感谢您的解释。  

    此致  
    Damith