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.

[参考译文] TMS320F28027F:TMS320F28027、使用 DRV8301运行 BLDC 电机

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1471763/tms320f28027f-tms320f28027with-drv8301-to-run-bldc-motor

器件型号:TMS320F28027F
主题中讨论的其他器件:MOTORWAREDRV8301

工具与软件:

我将使用 Motorware 的示例、并想在不使用 GUI 方法的情况下运行电机。 如果可能、我想澄清一下如何在不依赖于 GUI 流程的情况下操作这些示例。 有人能指导我如何操作吗?

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

    请查看 motorWare 文件夹中的 InstaSPIN 实验指南(instaspin_labs.pdf)、按照操作在 CCS 内运行相关实验、并且不使用 GUI。

    C:\ti\motorware\motorware_1_01_00_18\docs\labs

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

    嗨、Yanming Luo

    "我从 motorware_1_01_00_18中导入了工程实验11、但遇到了一些 CMD 错误。 如何解决此问题?"

    Description	Resource	Path	Location	Type
    #10010 errors encountered during linking; "proj_lab11.out" not built	proj_lab11		 	C/C++ Problem
    #10099-D program will not fit into available	F28027.cmd	/proj_lab11	line 124	C/C++ Problem
    #10099-D program will not fit into available	F28027.cmd	/proj_lab11	line 159	C/C++ Problem
    gmake: *** [proj_lab11.out] Error 1	proj_lab11		 	C/C++ Problem
    gmake: Target 'all' not remade because of errors.	proj_lab11		 	C/C++ Problem
    #10210-D creating ".esysmem" section with default size of 0x400; use	proj_lab11		 	C/C++ Problem
    #10247-D creating output section ".cio" without a SECTIONS	proj_lab11		 	C/C++ Problem
    #10247-D creating output section "ramfuncs" without a SECTIONS	proj_lab11		 	C/C++ Problem
    #10247-D creating output section "rom_accessed_data" without a	proj_lab11		 	C/C++ Problem
    

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

    请查看实验用户指南、并尝试其他实验。 如果您不知道电机参数、则应运行 lab02b 或 lab02c 首先识别这些参数。 在了解如何更改之前、请确保您使用的是原始示例实验而不做任何更改。

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

    嗨、Yanming Luo

    我使用了实验2b 示例并输入了电机参数。 电机正在运行、但当我使用 GUI 方法时、电机突然停止。 之后、我尝试在不使用 GUI 方法的情况下运行电机、但仍然无法启动。

    #define USER_MOTOR_RES_EST_CURRENT (3.0)
    #define USER_MOTOR_IND_EST_CURRENT (-0.5)
    #define USER_MOTOR_MAX_CURRENT (20.0)
    #define USER_MOTOR_FLUX_EST_FREQ_Hz (20.0)

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

    如果您想识别和旋转新电机、请按照实验用户指南在 CCS 中运行示例实验。

    请查看 motorWare 文件夹中的 InstaSPIN 实验指南(instaspin_labs.pdf)、按照操作运行相关实验。

    C:\ti\motorware\motorware_1_01_00_18\docs\labs

    必须在不增加负载的情况下识别电机。

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

    嗨、Yanming Luo

    我将使用 Lab11示例来通过命令控制电机。 我已按照的第6.7节中的说明添加了 SCI 函数motorware_1_01_00_18/docs/tutorials。 我写入了电机启动和停止的逻辑、但出现了一些错误。 如何解决这些问题?

    Description	Resource	Path	Location	Type
    #10010 errors encountered during linking; "proj_lab11.out" not built	proj_lab11		 	C/C++ Problem
    #10099-D program will not fit into available	F28027.cmd	/proj_lab11	line 124	C/C++ Problem
    #10099-D program will not fit into available	F28027.cmd	/proj_lab11	line 159	C/C++ Problem
    gmake: *** [proj_lab11.out] Error 1	proj_lab11		 	C/C++ Problem
    gmake: Target 'all' not remade because of errors.	proj_lab11		 	C/C++ Problem
    #10210-D creating ".esysmem" section with default size of 0x400; use	proj_lab11		 	C/C++ Problem
    #10247-D creating output section ".cio" without a SECTIONS	proj_lab11		 	C/C++ Problem
    #10247-D creating output section "ramfuncs" without a SECTIONS	proj_lab11		 	C/C++ Problem
    #10247-D creating output section "rom_accessed_data" without a	proj_lab11		 	C/C++ Problem

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

    如果您不在示例实验中进行任何更改、是否会出现任何错误? 您是否尝试过运行 lab11a?

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

    嗨、Yanming Luo

    我仅运行了示例实验5b、因为 SCI 现在仅支持实验11。 因此、我编写了逻辑、但无法运行实验11a 示例。

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

    如果您只想添加 SCI、则任何示例实验都无关紧要。 请查看以下指南。

    您可以查看以下 MotorWare 文件夹中的 HAL 用户指南、并参阅第"6.7"章。 通过 Motorware 中的 InstaSPIN 向项目添加 SCI/UART 功能。

    motorware_hal_tutorial.pdf、位于"\ti\motorware\motorware_1_01_00_18\docs\tutorware\hal_tutorial.pdf"

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

    嗨、Yanming Luo

    //Added
    
    // Function to handle motor commands
    void handleMotorCommands(HAL_Handle handle)
    {
       // HAL_Obj *obj = (HAL_Obj *)handle;
    
        // Start/Stop the motor based on isMotorOn flag
        if (isMotorOn)
        {
            gMotorVars.Flag_Run_Identify = true;
            printf("Motor is ON\n"); // Debug: Print motor state
        }
        else
        {
            gMotorVars.Flag_Run_Identify = false;
            printf("Motor is OFF\n"); // Debug: Print motor state
        }
    
        // Set the target running speed
        gMotorVars.SpeedRef_krpm = targetSpeed;
        printf("Target speed set to %ld krpm\n", gMotorVars.SpeedRef_krpm); // Debug: Print target speed
    }
    
    
    // UART Receive Interrupt Service Routine
    // UART Receive Interrupt Service Routine
    void sciARxISR(void)
    {
       HAL_Obj *obj = (HAL_Obj *)halHandle;
    
        while (SCI_rxDataReady(obj->sciAHandle))
        {
            char c = SCI_read(obj->sciAHandle);
    
            if (counter < BUF_SIZE - 1) // -1 to leave space for null terminator
            {
                buf[counter++] = c;
    
                if (c == '>') // End of command
                {
                    buf[counter] = '\0'; // Null-terminate the command string
                    processCommand(buf);
                    counter = 0; // Reset buffer index
                }
            }
            else
            {
                // Buffer overflow, reset counter
                counter = 0;
            }
        }
    
        // Clear SCI interrupt flag
        PIE_clearInt(obj->pieHandle, PIE_GroupNumber_9);
    }
    
    // Process received command
    void processCommand(char *command)
    {
        if (strcmp(command, CMD_RX_ON) == 0)
        {
            isMotorOn = true;
            sendResponse("Motor ON");
            handleMotorCommands(halHandle); // Handle the command
        }
        else if (strcmp(command, CMD_RX_OFF) == 0)
        {
            isMotorOn = false;
            sendResponse("Motor OFF");
            handleMotorCommands(halHandle); // Handle the command
        }
        else
        {
            sendResponse("Unknown Command");
        }
    }
    
    // Send response to UART
    void sendResponse(const char *message)
    {
        int length = strlen(message);
        returnBuf[0] = '<';
        strncpy(&returnBuf[1], message, length);
        returnBuf[length + 1] = '>';
        serialWrite(returnBuf, length + 2);
    }
    
    // Write data to UART
    void serialWrite(const char *sendData, int length)
    {
        int i = 0;
        HAL_Obj *obj = (HAL_Obj *)halHandle; // Ensure halHandle is accessible
    
        GPIO_setHigh(obj->gpioHandle, GPIO_Number_12);
        while (i < length)
        {
            if (SCI_txReady(obj->sciAHandle))
            {
                SCI_write(obj->sciAHandle, sendData[i]);
                i++;
            }
        }
        isWaitingTxFifoEmpty = true;
    }
    


    "我添加了 UART 命令来控制电机。 我已经编写了逻辑并将其放在上面、但我需要说明该逻辑是否会使用命令运行电机。 但是、我在 F28027.cmd 文件中遇到错误。 下面列出了这些错误。 你能帮我弄清楚如何解决这些问题吗?"

    Description	Resource	Path	Location	Type
    #10010 errors encountered during linking; "proj_lab11.out" not built	proj_lab11		 	C/C++ Problem
    #10099-D program will not fit into available	F28027.cmd	/proj_lab11	line 124	C/C++ Problem
    gmake: *** [proj_lab11.out] Error 1	proj_lab11		 	C/C++ Problem
    gmake: Target 'all' not remade because of errors.	proj_lab11		 	C/C++ Problem
    #10247-D creating output section ".cio" without a SECTIONS	proj_lab11		 	C/C++ Problem
    #10247-D creating output section "ramfuncs" without a SECTIONS	proj_lab11		 	C/C++ Problem
    #10247-D creating output section "rom_accessed_data" without a	proj_lab11		 	C/C++ Problem
    
     

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

    如果您不对原始示例实验进行任何更改、会出现任何错误?

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

    嗨、Yanming Luo

    我从 CCS 中导入了实验示例、但它们仍然显示相同的错误。 即使增加堆大小、错误仍然未解析。

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

    请尝试使用前面提到的其他实验、如 lab05b 或 lab10a。

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

    嗨、Yanming Luo

    是否有用于运行电机工程 zip 文件的 UART 命令?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有运行电机项目 zip 文件的 UART 命令?

    我不完全理解您的问题。 您能解释一下吗?  

    您可以通过 UART 发送数据以设置目标速度、启动/停止电机、应使用示例实验将从 UART 接收到的数据转换为数据格式。 如上所述、HAL 指南提供了这方面的示例。

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

    "罗艳明您好

    "我可以通过 UART 发送数据来设置目标速度并控制电机。 例如、如果您发送命令 RX_ON、电机将启动、如果您发送 RX_OFF、电机将停止。 我 需要将从 UART 接收的数据转换为正确的数据格式。"
    哪个实验示例?

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

    所有示例实验均使用 IQ24格式、应将速度命令转换为 IQ24格式。

    如果您想了解有关 IQ 格式的更多详细信息、请查看以下用户指南

    您可以通过查看以下链接来了解_IQmath 和_iq 格式。

    C28x IQmath 库 (https://www.ti.com/lit/sw/sprc990/sprc990.pdf)

     

    或者、如果您愿意、也看看下面有关 IQMath 的链接。

     

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/832121/3077993

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/596505/2199304

     

     

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/t/539864

    https://e2e.ti.com/support/microcontrollers/c2000/f/171/p/798297/2961406

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

    嗨、Yanming Luo


    已经在那里。  

    仍然出现错误。 我可以将我的项目文件以 ZIP 格式发送给您吗?  

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

    尊敬的 Kishor:

    为什么不考虑升级非常有限的内存 X27 Launch Pad、其 CPU 速度更快、且闪存和 SRAM 代码容量大幅增加? 然后、您可以使用新的 SPV 驱动算法实现内置 TMU。 较新的通用 SDK 代码也支持具有霍尔传感器的 BLDC 电机。 或许启动 X39或 x25 MCU 类将支持 DRV8301、请查看 TI 兼容性图。 其他论坛用户可以更好地帮助您在较新的 LaunchPad 上运行 SCI 命令代码。

    此致、  

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

    您好、Genatco

    "能否指导我如何解决这些错误并实施 SCI 命令代码? 非常感谢您的帮助。"

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

    尊敬的 Kishor:

    似乎回想起有人曾发布过关于让 DRV8301在 LaunchXL-39c 上运行的帖子。 您是否会浪费时间尝试较旧的 LaunchXL-27C? x39c MCU 类是一个很好的基础、120MHz CPU 适合使用 USB 隔离 XDS110调试探针。

    LAUNCHXL-F280039C 开发套件|德州仪器 TI.com

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

    您好、Genatco

    是否有使用 SCI 命令操作电机的代码?

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

    尊敬的 Kishor:

    只需添加 Bool 控制标志设置 (true/false)、即可在 MCSDK 调试 JScript 监控器选项卡中使用相同的标志。 向项目添加虚拟链接(scistdio.c/h ),不要使用 clib printf()。 调用命令 SCIprintf()在 SCIA 上使用带有 Putty 的调试虚拟 COM 端口串行视图。 在 TX/RX 中断内部使用 SCIB FIFO 级别(非阻塞) R/W、每个 FIFO 级别中断有两个 INT 源。 根据 TX[char*]数据的多少、可能必须在两个 SCI 函数中授予 main.c 快速中断优先级、而 RX[char*]在单个 ISR 调用中仅缓冲15-16个字。 简单方式添加;EINT、DINT 两个中断。 不要忘记在每个 ISR 调用结束时首先清除 ISR (停止 ISR 重新进入)并分组 ACK。

    示例:SCIprintf ("UserParmsLoaded %c\n");