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.

[参考译文] TMS320F28069M:位置控制中的 SPINTAC 状态问题

Guru**** 2535750 points
Other Parts Discussed in Thread: TMS320F28069M

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/996108/tms320f28069m-spintac-status-problem-in-position-control

器件型号:TMS320F28069M

尊敬的团队:

我的客户添加了一些代码、以根据 F28069M 的例程 Proj_lab13b 实现位置环路和速度环路控制。

速度环路正常运行、电路板由自己设计、硬件也没问题、因为基于增量编码器的速度环路控制可以正常运行。

但是、随着他自己的代码的增加、位置环路不再工作。  具体情况是,在“伺服打开”之后,您可以听到与电机中的电流类似的噪声,但电机的实际性能是没有“伺服打开”,即电机轴上没有扭矩, 它可以轻松地用手转动。

观察 gmotorVars.spintac.posctlstate 是否空闲、而不是繁忙状态。  由于电机位置控制在该变量的状态在原始例程中处于繁忙状态时有效、他认为这部分代码现在不起作用。  他按照原来的程序检查了他的程序,但没有发现问题。

下图是当电机有电流噪声但在“伺服打开”后实际上没有扭矩时的“spintac”屏幕截图。 请帮助分析。 可能出了什么问题?

此致

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

    器件型号:TMS320F28069M

    您好!

    我将28069M 与我的定制 PCB 板配合使用。  最初、我根据 TI 示例 proj_lab13b 编写我的源代码。  此示例项目用于实现位置控制、最初它起作用。 但是、当我在其中添加越来越多的源代码时、位置控制在伺服打开时不起作用。 在位置控制模式下、当伺服打开时可以听到电机上的电流噪声、电机转子是自由的、看起来转子上没有生成任何扭矩、此时、当我检查 Spintac.posctlstatus 时、它是"st_ctl_didle"、而不是"st_ctl_busy"。  自从我最初在电路板上启动源代码编程以来、我已经检查过、当伺服打开时、Spintac.posctlstatus 为"st_ctl_busy"、电机在位置控制模式下工作。 因此、目前它是"st_ctl_didle"、我认为有问题。 但我已经浏览过整个源代码、其中大多数与 proj_lab13b 的原始源代码类似。 下图是伺服打开时的屏幕截图。

    我已经尝试了各种方法来解决这个问题、但我失败了。 我认为源代码中有问题、因为当我以速度模式运行电机时、它会起作用。  

    项目中使用了 CCS9.0和增量编码器。  

    期待您的回应、并感谢您的任何评论。

    谢谢你。

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

    您好!

    我已合并这两个线程、因为它们是同一个请求。

    此致、

    Vince

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

    谢谢你。 我在 这里停留了一个多星期。 希望 TI 专家能在这方面为我提供帮助。

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

    在运行 lab13b 之前、确保使用 lab02正确识别电机参数、并使用 lab12a 识别惯性和摩擦。

    1.根据系统调整控制带宽(USER_SYSTEM_BANTANGH)。

    2.调整轨迹曲线。

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

    谢谢你。 Yanming、

    实际上、我知道电机参数并直接在 user_j1.h 中定义它们、而无需识别它们、如下所示:

    #define USER_MOTOR_TYPE MOTOR_Type_PM
    #define USER_MOTOR_NUM_POLE_PAIRS (4)
    #define USER_MOTOR_RR (空)  
    #define USER_MOTOR_Rs (0.165)
    #define USER_MOTOR_LS_d (0.00045)
    #define USER_MOTOR_LS_q (0.00045)
    #define USER_MOTOR_Rated 磁通(0.081)  
    #define USER_MOTOR_磁 化电流(NULL)// PM 电机不需要、始终为 NULL。

    #define USER_MOTOR_RES_EST_CURRENT (1.5)  
    #define USER_MOTOR_IND_EST_CURRENT (-1.5)  

    #define USER_MOTOR_MAX_CURRENT (15.0)

    #define USER_MOTOR_RAGE_CURRENT (7.5)  


    #define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0)  
    #define USER_MOTOR_MAX_SPEED_KRPM (5.0)
    #define USER_MOTOR_RAGE_SPEED_KRPM (3.0)

    #define USER_MOTOR_FREQ_LOW (20.0)      // Hz -建议将电机额定频率设置为10%
    #define USER_MOTOR_FREQ_HIGH (200.0)    // Hz -建议设置为额定电机电频率的100%(3000rpm = 200 ElecHz)
    #define USER_MOTOR_FREQ_MAX (240.0)     // Hz -建议将电机额定频率设置为120%
    #define USER_MOTOR_VOLT_MIN (10.0)       //伏特-建议设置为额定电机电压的15%
    #define USER_MOTOR_VOLT_MAX (36.0)       //伏特-建议设置为额定电机电压的100%

    #define USER_MOTOR_ENCODER_LINESS(2500.0)
    #define USER_SYSTEM_INER惯性(0.00488)     //默认值0.01;单位:A/(krpm/s)
    #define USER_SYSTEM_FRIC滑动(0.01)       //默认值0.01;

    至于  USER_SYSTEM_BANLOADCING、是的、我已经尝试过、但对 问题毫无用处。

    对于 您提到的"调整轨迹曲线"、如何进行调优? 在原始 proj_lab13b exmaple 中、我在哪里可以找到它以便进行调优?  

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

    此外、我考虑了注释一些源代码、以便使项目与原始 proj_lab13b 类似、从而测试它是否可以在位置模式下工作、 但我发现很难做到这一点、因为我已经根据 proj_lab13b 示例添加和修改了大量代码和相关定义、包括.h 文件。 现在整个代码的大小太大、必须在闪存中实现。

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

    这是我修改的 F28069M.cmd:

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

    我在这里停留了很长时间、希望 TI 专家能帮我解决这个问题。

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

    继续请 TI 专家帮助我解决问题。

    目前、所有作业都滞留在此处。 包括固件编码、由于位置控制、下一版本的 PCB 布局不起作用。

    我已经尝试了各种方法来尝试解决这个问题。 例如、我尝试了不同的 CCS 版本、如 CCS8.0、CCS9.0等  我已经尝试在 CCS 中使用不同的编译工具版本、例如6.2版、15.2版、20.xx 版等 但都失败了。

    希望有人对此发表评论、也许您的单个词可以通知我做一些事情。

    谢谢你。   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="446019" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/996108/tms320f28069m-spintac-status-problem-in-position-control/3680762 #3680762"]我知道电机参数并直接在 user_j1.h 中定义、无需识别它们

    建议您在自己的电路板上更好地识别电机参数。

    [引用 userid="446019" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/996108/tms320f28069m-spintac-status-problem-in-position-control/3680765 #3680765"]现在整个代码大小太大、必须在闪存中实现。

    您是否将时间关键代码和闪存设置代码复制到 RAM?

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

    好的、谢谢。 要识别电路板上的电机参数、我需要运行 TI 提供的 proj_lab2。 我要运行它。

    对于时间关键型代码和闪存设置代码、我认为它被复制、因为我没有更改任何与它相关的代码。

    下面是 main()之前的代码:

    下面是 main()开头的代码

    下面是 F28069M.cmd 中的代码

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

    我已经使用 proj_lab2a 来识别电机参数。

    但结果看起来比电机数据表中的真实值大误差。

    确定的 Rs=0.38 Ω;真正的 Rs=0.165 Ω;

    识别的 Ls = 4.1*10^-6 H;真正的 Ls = 0.00045 H;

    识别的磁通= 0.39;实际磁通= 0.081V/Hz;

    有时、识别的 Ls = 1.2*10^-9 H;  

    有时、当磁通识别结束时 、会报告"CTRL_State_ERROR"和"EST_State_ERROR"、然后停止识别。

    我尝试提高 PWM 频率。 但识别结果看起来没有变化。

    识别过程是否正常?

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

    您可能会尝试使用 lab02c、因为电机是低电感电机。 并根据电机规格调整以下识别参数。

    #define USER_MOTOR_RES_EST_CURRENT    (1.0)                              // A -电机额定电流的10-30%

    #define USER_MOTOR_IND_EST_CURRENT    (-1.0)                            // A -电机额定电流的10-30%、足以实现旋转

    #define USER_MOTOR_MAX_CURRENT          (5.0)                              // A -电机额定电流的30~150%

    #define USER_MOTOR_FLUX_EST_FREQ_Hz    (20.0)                          // Hz -电机额定频率为10~30%

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

    好的,谢谢。 实际上、我昨天已经尝试使用 lab02c 来识别低电感电机。 今天、我将重试并调整参数。 任何结果都将让您知道。

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

    我有一个使用 lab02c 的测试、 PWM 频率=45kHz;

    识别的电机段落如下:

    RS= 0.09 Ω(数据表值为:0.165 Ω)

    Ls=0.0002 H (数据表值为0.00045 H)

    磁通量= 0.04 vPhz (数据表值为0.081)

    我在项目中使用识别的电机参数、位置控制环路不像以前那样工作。 "PosCtlStatus"仍然 为"ST_CTL_IDLE" 、但不是"ST_CTL_BUSY"。

    因此、位置控制环路故障的根本原因仍然未知。 现在、看起来至少不是由错误的电机参数设置引起的。

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

    我明白原因。

    今天、我发现 gmotorvars.spintac.error_id =2;错误 ID 有时是2  、但有时显示0;0表示无错误。 2表示 cfg.velmax 超过(0、1);  

    因此、我找到了设置:

    STPOSCTL_setVelocityMaximum (obj->posCtlHandle、_IQ24 (USER_MOTOR_MAX_SPEED_KRPM * ST_SPEED_pu_PER_KRPM));   

    对于术语"USER_MOTOR_MAX_SPEED_KRPM * ST_SPEED_pu_per_krpm",结果不应高于1.0;如果大于1.0,则错误 ID =2;

    因为在我的环境中、  

    USER_MOTOR_MAX_SPEED_KRPM =5;  

    ST_SPEED_pu_per_krpm = (USER_MOTOR_NUM_POLE_PAIRS /(0.001 * 60.0 * USER_IQ_FULL_SCALE_FREQ_Hz));

    USER_IQ_FULL_SCALE_FREQ_Hz= 300;

    因此、 ST_SPEED_pu_per_krpm= 0.222;

    然后、 USER_MOTOR_MAX_SPEED_KRPM * ST_SPEED_pu_PER_KRPM = 5*0.222 = 1.11 >1、这会导致 cfg.velmax >1;然后会发生错误。

    当设置  USER_IQ_FULL_SCALE_FREQ_Hz = 500 (或更高)时、位置环路可以正常工作。

    但是、现在、ERROR_id 始终在 CCS 监视窗口中显示为0。 今天、它 有时在 很短的时间内显示为"2";然后我捕获了这一时刻。 但为什么它不总是显示为“2”?  CCS 监视窗口 是连续刷新设置。

    无论如何、问题已经解决、我很高兴并感谢您的 TI 工程师的评论。 谢谢你。

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

    很棒!  如果您有任何疑问、敬请告知。  

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

    也谢谢。