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.

[参考译文] TMS320F280049C:TMS320F28004x FAST 估算器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/918443/tms320f280049c-tms320f28004x-fast-estimator

器件型号:TMS320F280049C
主题中讨论的其他器件:TMS320F28069MOTORWAREC2000WARE

您好!

我们有一些软件可以利用 Instaspin 对 TMS320F28069微控制器进行无传感器电机控制(基于旧的 Motorware 示例项目)。 由于新功能和安全库、我们最近已将所有固件移至更新的 TMS320F28049C。 到目前为止、我已经成功地使大部分代码正常工作、但是无传感器估算器似乎不想工作。 这不是正确估算的结果、只是当我取消注释函数"EST_run"时、微控制器崩溃并跳转到"Interrupt_illegalOperationHandler"。 为什么会发生这种情况? 您能否指定使 FAST 观测器运行所需的函数? 这是我们从 Instaspin 中使用的唯一部件(我们不需要电机识别等)。

我已包含库"f28004x_fast_rom_symbols_fpu32.lib"、并查看了 C2000ware_Motor_Control 示例项目、但我未能找到问题的根源。 另一个有趣的效果是、一旦我包含文件"est.h"并尝试编译、我就会在该文件"EST_setupTraj"和"EST_configureCtrl"的2个函  数中看到错误"identifier CTRL_handle is undefined"、尽管我在 include 中有:#include "ctrl_obj.h"。 如果我简单地注释掉这两个函数、那么我的编译就可以了、但如前所述、当我取消注释"EST_run"时、程序会崩溃。

有什么想法吗?

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

    这两个版本的 InstaSPIN 完全不同、因为大多数函数名称相似。 您可以参阅 motorControlSDK 中的示例实验、并将您自己的代码移植到这些实验。 如果您只需要旋转电机、则可以将 lab07用作启动项目、.cmd 文件必须为 instaSPIN 保留相关 RAM (RAMLS0和 RAMLS1)。

    EST_setupTraj()和 EST_configureCtrl()仅用于需要将 Ctrl 对象作为参数的电机识别。

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

    我知道它们非常不同、我花了相当多的时间将所有内容从_IQ 移到浮点等。 我一直在使用 lab07作为所需更改的参考、但我仍然遇到同样的问题。

    我为 InstaSPIN 保留了 RAMLS0和 RAMLS1、并添加了以下语句:

    部分

    SYSCTRL_DATA:> RAMM1 | RAMLS2_3,PAGE = 1
    CTRL_DATA:> RAMM1 | RAMLS2_3,PAGE = 1
    EST_DATA:> RAMGS0_A,PAGE = 1

    以与 lab07相同的方式加载到.cmd 文件、但不成功。

    当我汇编单步执行代码时、当它到达函数"EST_RUN"时、它会跳转到存储器位置 0x3ec9ee。 我使用内存浏览器查看该内存位置的内容、它都是零(整个内存块都是零)、这就是它触发 ITRAP 的原因。

    有什么想法吗? 它是否跳到错误的存储器位置? 我是否在某种程度上错误地链接了 FAST 库? 该存储器位置是否具有不同的零值?

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

    我还应该说、我已经成功地使用位置传感器(编码器)旋转了电机、因此我认为控制器能够正常工作。 我遇到的是无传感器问题。

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

    您好!

    我在这方面取得了一些进展。 事实证明、如果您在"EST_run"之前未调用"EST_setParams"、程序将完全崩溃并最终进入 ITRAP、这一点有点令人担忧(我本来期望出现某种错误、但并非如此)。

    现在、我将遇到另一个问题。 当我使用编码器运行电机并观察无传感器角度时、事实证明、如果我将"estInputData.speed_ref_Hz"和"estInputData.speed_int_Hz"设置为与电机速度相等、我只能获得正确的估算角度。 如果我将其设置为零、我将得到估计卡在零的值、如果我将其设置为任何其他值、我将得到一系列与  estInputData.speed_ref_Hz./Real_speed 相同的角度重复、  例如、如果我设置 estInputData.speed_ref_Hz = 200Hz 并且我运行电机 (使用编码器)在100Hz 时、我得到估计的无传感器角度在每个电转速的-PI 到+PI 之间变化两次(而不是像应该那样仅变化一个)。 这意味着、如果我首先知道电机速度、我只能运行电机、这有点愚蠢。 我成功地运行了无传感器电机、但是我不得不输入估算器("estInputData.speed_ref_Hz"和"estInputData.speed_int_Hz")根据编码器数据计算出的速度。

    我遇到的另一个可能与上一个问题相关的问题是、估算器似乎根本不会输出任何电气或机械速度值。

    输入数据如下所示:

    有什么想法吗?

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

    有人可以提供帮助?

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

    Javier -我不是 TI 专家,但我认为您的问题是,您需要查看 estOutputData 和 estInputData (而不是 ctrlHandle->estOutputData 等)。  ctrl 结构未在 lab7中使用。  

    Brett

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

    您好、Brett、

    感谢您的回答。 我尚未将 lab7用作模板。 我有一些正在工作的逆变器固件、我想将无传感器功能添加到中(我正在尝试从 lab7导入此功能)。 在另一个固件中、我有一个控制器结构。 我已将结构 estOutputData 和 estInputData 添加到此控制器结构中、只需将这些指针传递给无传感器函数、而不是单独定义它们。 但是、我看不出这会对无传感器有何影响、这些结构的定义位置无关紧要(我认为、可能我错了)。

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

    您是否正在使用 F280049C 器件? 还是仅 F280049没有"C"后缀?

    您能否发布初始化和调用 InstaSPIN-FOC 函数的相关代码?

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

    是的、我使用 的是 F280049C 器件。

    我将按照在固件中调用函数的相同顺序发布这些函数:

    初始化句柄。 一个不同之处在于、我已经在控制器结构中定义了 estHandle 和 estInputData/estOutputData、但我认为只要我正确初始化处理程序就应该可以。

    设置:

    主 ISR (从一个定时器中断以恒定20kHz 运行):

    从最后一个快照中、如果我取消注释两条注释代码行、则无传感器代码行会起作用。 它所做的是将通过其他方式(使用编码器)计算的速度信号馈送到 estInputData 结构。 这一点根本不是必需的、因为这意味着您需要一种读取角度/速度的外部方法来使估算器正常工作、这会使首先使用估算器的整个过程失败。

    链接器文件:

    链接的库:

    我在这一问题上有很长一段时间未能取得很大进展,我非常感谢你们的帮助。

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

    有人可以提供一些支持吗?

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

    请勿更改 USER_Params 和  CTRL_Obj 对象中的任何变量。

     estInputData.speed_ref_Hz 和 estInputData.speed_int_Hz 均设置为固定目标运行速度、而不是测量速度。

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

    我并不是想说什么意思,但我在这一问题上得到的支持是可怕的。 我已经用图片和所有内容对我的问题进行了全面的解释、对您的回复几乎立即做出了回应、但我在一周的晚些时候收到了一半的回复、但这些回复无法解决我的问题。 德州仪器有没有人对这种无传感器快速算法的工作原理有很好的了解? 我们之所以使用该处理器、主要是因为该算法、但它不起作用。

    是否有全面的文档、或者是否有人可以向我提供有关使该算法正常工作所需的最低限度的信息? 需要调用哪些函数? 顺序如何? 哪些结构无法更改? 我不使用任何电机估算功能、只需使角度/速度观测器工作即可。

    "estInputData.speed_ref_Hz 和 estInputData.speed_int_Hz 均设置为固定目标运行速度、而不是测量速度。" ->正如我在之前的帖子(包括图片和所有内容)中所说的、如果我没有将此值设置为编码器测量的速度、我就不会从角度/速度估算中获得任何值(我是通过 Lucky 试用发现的)。 无传感器算法应该能够自行估算速度。 如果我首先需要有一个良好的速度值来使其正常工作、那么使用它的重点是什么? 如果我将此值设置为目标速度、则它根本不起作用。 此外、如果在扭矩模式下运行、目标速度是多少?

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

    您可以在示例工程中添加自己的结构对象和变量、而不更改与 FAST 相关的对象。 所有结构对象都在 EST_ 无法更改函数、例如 lab07中不使用 CTRL_Obj 对象的 USER_Params。

    如果您只添加了自己的控制代码而不更改 lab07中的控制流、则 lab07应该是可行的、这就是我们提供了一些示例的原因、您必须调用所有 EST_ 如果您想从 FAST 估算器获取角度和速度、则可以使用 lab07中所用的 ISR 和主循环中的函数。  

    《InstaSPIN-FOCTm和 InstaSPIN-MOTIONTm用户指南 》http://www.ti.com/lit/ug/spruhj1h/spruhj1h.pdf 提供了 FAST 估算器的详细说明,尽管它不是启用了 InstaSPIN 的 F28004x 的最新文档。

    请发布您所做的代码、如果您仍有疑问、请告诉我们您希望实现的目标是什么。  

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

    Javier -好的。  我知道。  您可能已经浏览过此路径、但以下是我的看法:

    1.您是否正在调用 user_setParms 和 user_setParams_priv?  我不知道第二个函数在做什么、但我知道必须调用它。

    2.您是否设置了速度参考轨迹? 我认为需要这样做、以便您可以控制从0到所需速度的上升速度。

    3.在 ISR 中,TRAJ_RUN()用于将速度基准步至所需的值。  是否使用此函数设置 estInputData?

    查看 Lab7、您将看到 TI 如何设置速度参考轨迹以及它们如何调用 TRAJ_run ()。

    Brett