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.

[参考译文] TMS320F28377S-Q1:提取并记录电机运行时的状态参数

Guru**** 2434370 points
Other Parts Discussed in Thread: CONTROLSUITE, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1168636/tms320f28377s-q1-extract-and-record-the-state-parameter-when-the-motor-runs

器件型号:TMS320F28377S-Q1
Thread 中讨论的其他器件:controlSUITEC2000WARE

大家好、  

你好。 我代表客户发布此查询。

"我正在使用状态控制 FOC 进行步进电机控制。 现在、我想提取并记录电机运行时的状态参数。 控制环路运行20微秒、我需要一个程序来每1或2微秒获取一组完整的参数。

现在我使用图形工具、但 采样率太低。   

电机位置由增量编码报告、C2000中的 QEP 模式计算转子位置、然后根据电机公式计算电坐标中的转子位置。 代码如下所示

StepsValue 通过 EQep1Regs.QPOSCNT 获取。然后通过常数(conv_rate)转换为微步进、

    StepsValue =(int32)(****(float32) conv_rate);

由于每转一圈需要1600微步进、因此转子物理角度的计算方法如下

    angle_mech =(Int16)(StepsValue % 1600);
 
因此、angle_mech 的波形应该是锯齿波形、但图形显示的是相反的波形。   采样率太低。
 
 和转子电角的计算方法如下
 
    angle_elec = angle_mech & 0x001F;

 波形也应该是锯齿波、但标量应该在0-31中。

电机逆时针运行、如图1所示。 图2按顺时针方向显示。

只有 StepsValue 是对的、但 角机械的方向是反向的、其他的则是混乱的"

请提供建议。 感谢您的帮助。

此致、  

Marvin

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

    您可以在某些示例项目中引用"Datalog"函数、以将数据存储到频率更高的 RAM 存储器中的缓冲区中、然后使用 CCS 中的"Graph Tool"来查看数据。

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

    您好、Yanming、  

    感谢您的及时响应。 请查看您的客户的反馈。

    "您能给我提供更多详细信息吗? 例如示例代码
    我对 MCU 程序的经验太少。

    如果 数据已存储、我可以使用 MATLAB 生成图形吗?"

    请提供建议。 感谢您的帮助。

    此致、  

    Marvin

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

    您可以查看以下链接、这些链接的问题与您的问题类似。

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/87856/observe-floating-data-using-datalog-module

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/469515/how-to-use-dlog-module-in-motorware#pi320995=1

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

    您好、Yanming、  

    感谢您的回答。 请参阅我们客户的反馈。

    "我还不知道如何初始化和配置数据记录模块、  
    是否有手册或官方示例代码?
     
    我使用 C2000微控制器 F28377S LaunchPad 实现 FOC 环路、位置传感器是增量编码器。  因此、eQEP 模块读取并报告电机位置。"

    请提供建议。 感谢您的帮助。

    此致、  

    Marvin

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

    客户使用的是哪一个示例电机控制项目? controlSUITE 中的示例项目? 或电机控制 SDK 中? 或者他们按自己设计了所有代码? 大多数电机控制示例代码在其项目中具有 datalog 函数。

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

    您好、Yanming、  

    请参阅客户的反馈。

    我自己设计代码。 我使用的驱动板不是 TI 的产品。  

    在 TMS320F2837xS 微控制器的技术参考手册中、我找到了另一个模块、我需要它。 但没有数据记录模块。
    我创建了许多变量来记录电机运行时的状态。 它们可在控制环路中使用。 我不知道如何在不影响主进程的情况下提取它们。
     
    当记录功能是并行的时、这会更好。
     
    我应该自己设计一个数据记录功能吗?  

    请提供建议。 感谢您的帮助。

    此致、  

    Marvin

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

    您可以参阅示例以在 controlSUITE 中使用目录。 Datalog 将变量存储在 RAM 中的缓冲区中、然后使用 CCS 中的图形工具来显示波形中的数据。

    controlSUITE: http://www.ti.com/tool/CONTROLSUITE

    示例项目:C:\ti\controlSUITE\development_kits\TIDM-SERVO-LAUNCHXs\MonoMtrServo_377s_v1_00_00_00

    文档:  

    PMSM_XL_BP.pdf 中的含传感器 FOC、位于 C:\ti\controlSUITE\development_kits\TIDM-SERVO-LAUNCHXs\MonoMtrServo_377s_v1_00_00_00\~Docs

    data_log.pdf、位于 C:\ti\controlSUITE\libs\app_libs\motor_control\drivers\F2803x_v1.1\~docs 中

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

    您好、Yanming、  

    非常感谢您的帮助。 请参阅客户的反馈。

    "新 的反馈非常有用。
    但我仍然有很多问题。
     
    首先、 data_log.pdf 中的示例代码与 示例项目:MonoMtrServo_377s_v1_00_00_00不相同、这会使我感到困惑。

    我在 PDF 或 Project 中找不到这两个函数。
          void DLOG_4ch_init (DLOG_4CH *);
          void DLOG_4ch_update (DLOG_4CH *);    

     示例项目中的代码:MonoMtrServo_377s_v1_00_00_00
     
    typedef 结构{
        float32 * input_ptr1;
        float32 * input_ptr2;
        float32 * input_ptr3;
        float32 * input_ptr4;
        float32 * output_ptr1;
        float32 * output_ptr2;
        float32 * output_ptr3;
        float32 * output_ptr4;
        float32 prev_value;
        float32 trig_value;
        Int16状态;
        int16 pre_scalar;
        int16 skip_count;
        int16大小;
        int16计数;
    }DLOG_4CH_F;
     
    //
    //初始化数据记录模块
    //
        DLOG_4ch_F_init (&dlog_4ch1);
        dlog_4ch1.input_ptr1 = DlogCh1;    //数据值
        dlog_4ch1.input_ptr2 = DlogCh2;
        dlog_4ch1.input_ptr3 = DlogCh3;
        dlog_4ch1.input_ptr4 = DlogCh4;
        dlog_4ch1.output_ptr1 =&DBUFF_4CH1[0];
        dlog_4ch1.output_ptr2 =&DBUFF_4CH2[0];
        dlog_4ch1.output_ptr3 =&DBUFF_4CH3[0];
        dlog_4ch1.output_ptr4 =&DBUFF_4Ch4[0];
        dlog_4ch1.size = 200;
        dlog_4ch1.pre_scalar = 5;
        dlog_4ch1.trig_value = 0.01;
        dlog_4ch1.status = 2;

     我不理解变量: Previ_value、 status、以及为什么 status=2、
     
    我想 每1微秒记录一次电机参数、应该更改哪个变量?  
     
     
     
     
    我已经在 controlSUITE 中阅读了另一个示例项目;代码是相同的。
     
    在另一个项目中找到
     
    //初始化数据记录模块
        dlog.iptr1 =&DlogCh1;
        dlog.iptr2 =&DlogCh2;
        dlog.iptr3 =&DlogCh3;
        dlog.iptr4 =&DlogCh4;
        dlog.trig_value = 0x1;
        dlog.size = 0x00c8;
        dlog.prescalar = 5;
        dlog.init(&dlog);
    //----------------------------------
    //   调用数据记录更新功能。
    //----------------------------------
       dlog.update (&dlog);
     
    但我无法找到初始化和更新函数。  
     
     
    在初始化模型后
    我应该在 main()中将输入连接到数据记录模块  
        DlogCh1 =(Int16)_IQtoIQ15 (Param1);
        DlogCh2 =(Int16)_IQtoIQ15 (Param2);
        DlogCh3 =(Int16)_IQtoIQ15 (Param3);
        DlogCh4 =(Int16)_IQtoIQ15 (PARAM4);
     
     
    对吗?

    我可以将其作为子函数写入吗?
     
    很抱歉、有很多问题"

    请提供建议。 感谢您的帮助。

    此致、  

    Marvin

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

    技术背景应该相似、只需添加几个附加变量即可提高使用灵活性。 该功能为开源代码、请查看易于理解的代码。 您无需更改将自动更新的"状态"。  

    [引用 userid="522868" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1168636/tms320f28377s-q1-extract-and-record-the-state-parameter-when-the-motor-runs/4407175 #4407175]\n 我想每 1微秒记录一次电机参数、应该更改哪个变量?  [/报价]

      1微秒的时间中断中调用数据记录函数(DLOG_4CH_F_FUNC)。

    如下所 示更改数据记录模块的输入、这些输入可在示例项目中找到。

    //----------------------------------
    //连接数据记录模块的输入
    //----------------------------------
    DlogCh1 =电机->Rg.out;
    DlogCh2 =电机->svgen.Ta;
    DlogCh3 =电机->svgen.TB;
    DlogCh4 =电机->svgen.TC;

    请参阅示例项目中的示例、如下所示。

      1.初始化数据记录模块

    //
    //初始化数据记录模块
    //
    DLOG_4ch_F_init (&dlog_4ch1);
    dlog_4ch1.input_ptr1 = DlogCh1;//数据值
    dlog_4ch1.input_ptr2 = DlogCh2;
    dlog_4ch1.input_ptr3 = DlogCh3;
    dlog_4ch1.input_ptr4 = DlogCh4;
    dlog_4ch1.output_ptr1 =&DBUFF_4CH1[0];
    dlog_4ch1.output_ptr2 =&DBUFF_4CH2[0];
    dlog_4ch1.output_ptr3 =&DBUFF_4CH3[0];
    dlog_4ch1.output_ptr4 =&DBUFF_4Ch4[0];
    dlog_4ch1.size = 200;
    dlog_4ch1.pre_scalar = 5;
    dlog_4ch1.trig_value = 0.01;
    dlog_4ch1.status = 2;

    2. 连接数据记录模块的输入(要监视/存储的变量)

    //----------------------------------
    //连接数据记录模块的输入
    //----------------------------------
    DlogCh1 =电机->Rg.out;
    DlogCh2 =电机->svgen.Ta;
    DlogCh3 =电机->svgen.TB;
    DlogCh4 =电机->svgen.TC;

    3.根据 需要间隔时间,在计时器中断中调用 DLOG_4ch_F_FUNC()。

    //----------------------------------
    //调用数据记录更新功能。
    //----------------------------------
    DLOG_4ch_F_FUNC (&dlog_4ch1);

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

    您好、Yanming、  

    感谢您的回答。 请参阅客户的反馈。

    我已经根据您的工程师提供的建议尝试设置数据记录功能。
     
    步骤  3.根据 需要间隔时间,在计时器中断中调用 DLOG_4ch_F_FUNC()。
    如何设置计时器中断 功能?  我在 F2837xS_DefaultISR.c 中找到了"dataalog_isr"、是否使用此 ISR 函数?  
     
    还有另一个问题。
    请参阅示例代码、我创建了一个包含变量的头文件。
    因为我的"main"函数和子函数是分开的、所以变量包含在主文件和子函数文件中、但出现错误:变量被重新定义。
     
    #ifndef DLOG_4ch_F_H
    #define DLOG_4CH_F_H
      " typedef 结构.."
    #endif /* DLOG_4ch_F_H_*
     
    此错误仅针对"struct()"发生、如果普通 变量包含两次、则不会发生。
     
    最后、我应该使用哪个 RAM_LINK?  generic_RAM_lnk.cmd 也错误。

    请提供建议。 感谢您的帮助。

    此致、  

    Marvin

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="522868" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1168636/tms320f28377s-q1-extract-and-record-the-state-parameter-when-the-motor-runs/4411486 #4411486"]如何设置计时器中断 函数?  我在 F2837xS_DefaultISR.c 中找到了"dataalog_isr"、是否使用此 ISR 函数?  [/报价]

    是的、您可以在 ISR 函数中调用此数据记录函数。

    [引用 userid="522868" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1168636/tms320f28377s-q1-extract-and-record-the-state-parameter-when-the-motor-runs/4411486 #4411486"]最后、我应该使用哪个 RAM_LINK?  generic_RAM_lnk.cmd 也错误。

    您应该根据器件直接更改.cmd 文件、或者您可以为此器件使用 C2000Ware 中的示例.cmd 文件。 只需更改示例.cmd 即可支持数据记录。 如果任何 RAM 的大小足以容纳数据记录缓冲区、则可以使用该 RAM。

    如果您没有机会查看技术讲座材料、我认为这将有助于 您开始使用 C2000器件。

    [常见问题解答]在哪里可以找到 C2000器件的培训内容?

    [常见问题解答] C28x 软件提示:查找软件示例? 文档?