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.

[参考译文] MSP430G2453:自动速度校准故障

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/716550/msp430g2453-auto-speed-calibration-fault

器件型号:MSP430G2453

在加载16MHz 运行的出厂校准后、我预计看到 RSELx=15、其中 s DCOCTL 值处于中等范围。  RSELx=14且 DCOCTL 接近最大值时发现两个微秒、以实现16MHz。  我想如果我们不进一步校准,这是可以的–但我们现在要达到 DCOCTL 的最大值。

我想我们有解决方案(见下文)、但我想知道我可以预期的工厂校准范围以及 RSELx=14是否有意这样做。 (对我来说看起来像是一个过程错误)。

系统使用30秒内采样的60Hz 线路频率来调整微控制器时钟。 该过程是连续的、并将针对温度引起的 DCO 源变化进行自动调整。

该器件的寄存器 RSELx 可选择基频范围。 通常、RSELx 的值为15。

寄存器 DCOx 和 MODx 是校准值、用于微调 RSELx 定义范围内的工作频率

BCSCTL1中的 RSELx、DCO 中的 DCO 和 DCOCTL 中的 MODx 在加电时从制造商预编程的校准数据空间加载。 每隔30秒将捕获的60Hz 频率与理想值进行比较、DCOCTL 寄存器会递增或递减、以使时钟频率保持一致。

 

上电时的典型值:

RSELx = 0x0F (根据数据表、该值应始终为0x0F)

DCOCTL = 0xAA

 

故障样本的值:

RSELx = 0x0E

DCOCTL = 0xE0

当控制器升温时、必须增大 DCOCTL 的值以补偿因温度引起的时钟漂移。   在故障单元中、DCOCTL 递增、直到它绕回0x00、从而导致时钟和电机速度下降。 DCOCTL 的低位对高于0xE0值的时钟频率没有影响、因此代码会不断调整、直到寄存器换至0。

现在对 DCOCTL 的值进行了简单的限制、以防止绕回。 但是、这不能解决调整问题。 由于 DCOCTL 的值为最大值、因此故障电机现在将在控制加热时释放少量速度。

解决方案:

添加了代码来检测 RESEL 值何时为14以及 DCOCTL 值何时复用(0xE0)。 如果这种情况持续60秒、软件会写入 RSEL=15并将 DCOCTL 复位为中间范围值。 然后继续正常进行连续校准。

谢谢

Viktorija

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

    我怀疑此行为是由 BCL12勘误表引起的。 我建议针对此勘误表实施勘误表中提到的权变措施。

    此致、

    James

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

    James、

    这不是客户看到的。

    它们可以看到校准值在工厂调整范围的最末。

    请告诉我您的想法。

    谢谢

    Viktorija

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

    [引用用户="Viktorija Cecil"]

    在加载16MHz 运行的出厂校准后、我预计看到 RSELx=15、其中 s DCOCTL 值处于中等范围。  RSELx=14且 DCOCTL 接近最大值时发现两个微秒、以实现16MHz。  我想如果我们不进一步校准,这是可以的–但我们现在要达到 DCOCTL 的最大值。

    我想我们有解决方案(见下文)、但我想知道我可以预期的工厂校准范围以及 RSELx=14是否有意这样做。 (对我来说看起来像是一个过程错误)。

    [/报价]

    根据数据表的第14页、"由 RSELx 选择的所有范围都与下一个范围 RSELx + 1重叠"。 因此 、RSELx = 14与 RSELx = 15重叠。 鉴于器件间的差异、有必要将其中一些参数设置为 RSELx = 14、其他参数设置为 RSELx = 15。  您观察到的不是过程错误、而是正常运行。

    [引用用户="Viktorija Cecil"]

    上电时的典型值:

    RSELx = 0x0F (根据数据表、该值应始终为0x0F)

    DCOCTL = 0xAA

    [/报价]

    实际上、根据 用户指南中的第5.2.5.2节、一个 PUC 后的缺省值为 RSELx = 7和 DCOx = 3。

    [引用用户="Viktorija Cecil"]

    故障样本的值:

    RSELx = 0x0E

    DCOCTL = 0xE0

    [/报价]

    我不会将其视为故障样本。 RSELx = 14和 DCOx = 7是某些器件上16MHz 的有效配置。 请记住、工厂提供的校准系数是在3V 电源电压和30C 温度下完成的。

    [引用用户="Viktorija Cecil"]

    当控制器升温时、必须增大 DCOCTL 的值以补偿因温度引起的时钟漂移。   在故障单元中、DCOCTL 递增、直到它绕回0x00、从而导致时钟和电机速度下降。 DCOCTL 的低位对高于0xE0值的时钟频率没有影响、因此代码会不断调整、直到寄存器换至0。

    现在对 DCOCTL 的值进行了简单的限制、以防止绕回。 但是、这不能解决调整问题。 由于 DCOCTL 的值为最大值、因此故障电机现在将在控制加热时释放少量速度。

    解决方案:

    添加了代码来检测 RESEL 值何时为14以及 DCOCTL 值何时复用(0xE0)。 如果这种情况持续60秒、软件会写入 RSEL=15并将 DCOCTL 复位为中间范围值。 然后继续正常进行连续校准。

    [/报价]

    同样、您所描述的是完全正常的、您的解决方案遵循了应根据数据表和用户指南中所述的操作执行的操作。 正如您所看到的、您需要在整个温度范围内调整频率、使其接近16MHz。 您正在正确执行该操作。

    当 DCOx=7时、MODx 位无效、因为 DCO 已经处于所选 RSELx 范围的最高设置。 这意味着您需要像之前那样手动将 RSELx 增加1。 当 DCOx = 7时、其他 MSP430可能支持自动增加 RSELx、但超值系列 G2xx 不支持。

    但愿这对您有所帮助。 如果您有任何问题、请告诉我。

    此致、

    James

    MSP 客户应用

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

    您好 Viktorija、

    现在、让我返回并讨论 BCL12勘误表。 客户可能未观察到勘误表说明中解释的问题、但需要注意。

    根据说明、当将 RSELx 位的值从<12切换到>13时、产生的时钟会在应用新时钟频率之前停止的问题。 一个 PUC 后、RSELx 的默认值为7、然后在 RSELx = 14或 RSELx = 15时加载出厂校准系数、以便时钟可以停止。 现在、很明显、当它们稍后进行动态校准时、它们可能不会将 RSELx 从14或15更改为小于12的值、因此这是可以的。

    对于权变措施、客户应注意两个方面。

    1) 1)在加载16MHz 校准系数之前、应先将 RSELx 设置为默认值7、然后再使用 RSELx = 14或15切换到16MHz 频率。

    2) 2)此外、当 RSELx = 15时、建议在访问 DCOCTL 寄存器以修改 DCOx 和 MODx 位之前将 RSELx 设置为默认值7。 然后、在他们完成对 DCOCTL 寄存器的修改后、在一个额外的步骤中将 RSELx 改回14或15。

    此致、

    James

    MSP 客户应用

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

    James、这不是我的话题、但我认为我有一个相关的问题。  我使用的固件可为仅具有1MHz 工厂校准的 G2231等器件开发缺少的8MHz、12MHz 和16MHz 校准条目、而无需使用晶体。  基本上、它只在校准的1MHz 时钟上对 VLO 进行一段时间的计数、然后在8MHz 设置(范围13)上切换到猜测值、将分频器设置为8、并查看它是否得到相同的计数。  如果不是、它会在适当的方向上调整 DCOCTL、直到计数 相同或交叉。  与时钟、分频器和计数类似的调整会产生12MHz 和16MHz。  当然、这并不是非常精确、但只要 VLO 稳定、它就能很好地工作、并且可以说它的精度与1MHz 校准的精度一样。  不到 一秒的时间。

    我的问题是、在频率为16MHz 的范围15时、需要进行 DCOCTL 调整。  如果我正确理解您的帖子、则在15范围内我根本不应更改 DCOCTL。  对吗?  您必须先转到7、进行更改、然后返回到15。  我的例行程序完全违反了该规则、但似乎可以正常工作。  对 DCOCTL 的单个更改很小、并且在不断增加、因此这可能是它正常工作的原因、但我已经在许多 G2231上尝试过固件、  只要我在两次运行之间留出一点时间冷却、它就会在重复运行时产生一致的结果。  据我所知、我从未统计过 DCO 停止。

    我是否误解了您所说的内容、或者我真的违反了解决方法?  看起来我是这样。  如果是、为什么它仍然有效?

    就范围的变化而言、我首先将其设置为校准后的1MHz 值、到目前为止始终是范围6、而不是7、然后直接转到13、再转到14、再转到15、然后再回到14、再转到13、 这是我将其保留在程序其余部分的位置。  我认为这符合变通办法。

    似乎 Viktorija 开发了一种适用于14 16 MHz 器件的权变措施。  但另一种方法 是使用我的方法开发距离15值、提供与距离14校准值生成的时钟相同的时钟、并将现有值替换为新值。

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

    [引用用户="George Hug"]

    我的问题是、在频率为16MHz 的范围15时、需要进行 DCOCTL 调整。  如果我正确理解您的帖子、则在15范围内我根本不应更改 DCOCTL。  对吗?  您必须先转到7、进行更改、然后返回到15。  我的例行程序完全违反了该规则、但似乎可以正常工作。  对 DCOCTL 的单个更改很小、并且在不断增加、因此这可能是它正常工作的原因、但我已经在许多 G2231上尝试过固件、  只要我在两次运行之间留出一点时间冷却、它就会在重复运行时产生一致的结果。  据我所知、我从未统计过 DCO 停止。

    我是否误解了您所说的内容、或者我真的违反了解决方法?  看起来我是这样。  如果是、为什么它仍然有效?

    [/报价]

    没错。 DCOCTL 的增量更改可能会阻止出现勘误表、但总体而言、某些用户可能不会执行这些增量更改、这可能是我们建议在访问 DCOCTL 之前将 RSELx 设置为默认值的原因。 无论采用哪种方法、我都建议解决方法完全安全。 在您的情况下、DCO 可能有一些死区时间、但不会完全停止。 此外、勘误表可能仅适用于许多器件中的少数器件。

    [引用 user="George Hug"]就范围的变化而言、我首先将其设置为校准后的1MHz 值、到目前为止始终是范围6、而不是7、然后直接转到13、再转到14、再转到15、然后再转到14、再转到13、 这是我将其保留在程序其余部分的位置。  我认为这符合变通办法。

    是的、这似乎符合变通办法。

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

    非常感谢、James。  我将更改我的代码以符合变通办法。