Link

SimpleFOCStudio 作者:@JorgeMaker

SimpleFOC的图形用户界面。该应用程序允许通过串口通信和Commander接口,对任何由SimpleFOC控制的BLDC/步进电机设备进行调谐和配置。

功能特点:

  • SimpleFOC2.1+版本即插即用
  • 电机的实时调谐和配置
  • 电机变量的实时绘图和监控
  • 代码生成功能,便于将调谐好的参数集成到你的代码中
  • 基于PyQt5构建,并采用标准化的SimpleFOCConnector接口,可作为从Python到SimpleFOC设备的网关。

安装

别担心,即使你从未使用过终端,SimpleFOCStudio的安装也很简单!😃 只需几个步骤:

  1. 如果尚未安装Python,请先安装
    • 我们建议使用Anaconda。安装方法如下
    • 当Anaconda安装完成后,打开终端(Windows系统用anaconda prompt)并运行:
       conda create -n simplefoc python=3.6.0
      
    • 完成后,以后就无需再运行该命令,只需执行:
       conda activate simplefoc
      
  2. 克隆此仓库或下载 zip 文件
  3. 使用终端进入包含仓库的文件夹
    • 命令大致如下:
       cd  some_path_on_disk/SimpleFOCStudio
      
  4. 安装的最后一步是安装SimpleFOCStudio所需的所有必要库:
     pip install -r "requirements.txt"
    

完成上述所有步骤后,无需重复操作。下次使用时,只需在终端中进入SimpleFOCStudio目录并运行以下命令:

python simpleFOCStudio.py

如果使用 Anaconda:

conda activate simplefoc
python simpleFOCStudio.py

SimpleFOCStudio的使用

SimpleFOCStudio 有几个实用功能:

  • 一种简单的电机设置调谐方法
    • 表单视图(Form view)用于快速进行运动控制 PID/LPF 调谐
    • 树状视图(TreeView)用于更深入的调谐和试验
  • 代码生成功能,用于将找到的参数传输到你的 Arduino 代码中
  • 集成了各种 commander 功能的串口终端

运动控制调谐窗口

应用程序运行后,点击工具栏中的电机按钮添加设备。你可以选择树状视图或表单视图。

  • 要连接设备,首先点击配置按钮配置串口
  • 输入串口信息并点击确定
  • 然后添加你在 commander 中设置的设备命令 ID,通常是M
    • 命令M对应的 Arduino 代码 command.add('M',doMotor,"my motor")
    • 命令A对应的 Arduino 代码 command.add('A',doMotor,"my motor")
  • 然后点击 连接按钮,就可以开始使用了!

代码生成

SimpleFOCStudio帮助你更轻松地将精心调谐的参数传输到 Arduino 代码中。当你对系统性能满意后,可以自动生成已调谐参数的 Arduino 代码。生成代码的步骤:

  • 点击工具栏中的Arduino 按钮。
  • 选择你想要生成代码的参数集,然后点击确定
  • 在新标签页中,你将看到已调谐参数的代码。

生成的代码可以直接复制粘贴到setup()函数中,放在调用motor.init()之前。

集成串口终端

SimpleFOCStudio 还集成了串口终端,方便调试和监控。

Arduino代码

基本上你需要做两件事:

  1. 使用 commander 接口并将电机添加到 commander 中
  2. 使用监控功能,并在循环中添加motor.monitor()

以下是代码示例:

#include <SimpleFOC.h>

....

// include commander interface
Commander command = Commander(Serial);
void doMotor(char* cmd) { command.motor(&motor, cmd); }

void setup(){
  ....
  // add the motor to the commander interface
  // The letter (here 'M') you will provide to the SimpleFOCStudio
  command.add('M',doMotor,'motor');
  // tell the motor to use the monitoring
  motor.useMonitoring(Serial);
  motor.monitor_downsample = 0; // disable monitor at first - optional
  ...

}
void loop(){
  ....

  ....
  // real-time monitoring calls
  motor.monitor();
  // real-time commander calls
  command.run();
}