主题中讨论的其他器件:MOTORWARE、 DRV8301
工具与软件:
我将使用 Motorware 的示例、并想在不使用 GUI 方法的情况下运行电机。 如果可能、我想澄清一下如何在不依赖于 GUI 流程的情况下操作这些示例。 有人能指导我如何操作吗?
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.
工具与软件:
我将使用 Motorware 的示例、并想在不使用 GUI 方法的情况下运行电机。 如果可能、我想澄清一下如何在不依赖于 GUI 流程的情况下操作这些示例。 有人能指导我如何操作吗?
嗨、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
嗨、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)
嗨、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
如果您只想添加 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
是否有运行电机项目 zip 文件的 UART 命令?
我不完全理解您的问题。 您能解释一下吗?
您可以通过 UART 发送数据以设置目标速度、启动/停止电机、应使用示例实验将从 UART 接收到的数据转换为数据格式。 如上所述、HAL 指南提供了这方面的示例。
所有示例实验均使用 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
尊敬的 Kishor:
为什么不考虑升级非常有限的内存 X27 Launch Pad、其 CPU 速度更快、且闪存和 SRAM 代码容量大幅增加? 然后、您可以使用新的 SPV 驱动算法实现内置 TMU。 较新的通用 SDK 代码也支持具有霍尔传感器的 BLDC 电机。 或许启动 X39或 x25 MCU 类将支持 DRV8301、请查看 TI 兼容性图。 其他论坛用户可以更好地帮助您在较新的 LaunchPad 上运行 SCI 命令代码。
此致、
尊敬的 Kishor:
似乎回想起有人曾发布过关于让 DRV8301在 LaunchXL-39c 上运行的帖子。 您是否会浪费时间尝试较旧的 LaunchXL-27C? x39c MCU 类是一个很好的基础、120MHz CPU 适合使用 USB 隔离 XDS110调试探针。
尊敬的 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");