文章目录
1.前言
1.1.上位机安装
下载地址
根据github上的readme.md
文件安装即可。其实需要做一件事,就是进如下载的文件夹,运行pip install -r "requirements.txt"
命令,要安装的文件作者已经全部去写在里面了,一键安装即可。
1.2.注意事项
这个上位机是使用串口实时打印的,并且处于主循环中,其优先级与motor.loopFOC
函数相同,所以会很大程度上影响电机的控制,控制应用中一定不能用,调参可以用。
2.SimpleFOC硬件端程序
以位置控制程序为例,程序实例如下:
#include <SimpleFOC.h>
// magnetic sensor instance - SPI
MagneticSensorSPI sensor = MagneticSensorSPI(AS5147_SPI, 10); //SPI编码器,AS5047,AS5048A是一样的
// BLDC motor & driver instance
BLDCMotor motor = BLDCMotor(14); // 电机极对数
BLDCDriver3PWM driver = BLDCDriver3PWM(9, 5, 6, 8); // 电机ABC相PWM引脚,使能引脚
float target_angle = 0; // 初始目标角度为0
Commander command = Commander(Serial);
void doTarget(char* cmd) { command.scalar(&target_angle, cmd); } // 串口控制指令:目标值
void onMotor(char* cmd){ command.motor(&motor,cmd); } // 串口控制指令:电机
void setup() {
// 编码器设置
sensor.init();
motor.linkSensor(&sensor);
// 驱动设置
driver.voltage_power_supply = 12;
driver.init();
motor.linkDriver(&driver);
// 选择调制方式为SVPWM
motor.foc_modulation = FOCModulationType::SpaceVectorPWM;
// 控制模式为角度模式
motor.controller = MotionControlType::angle;
// PID参数
motor.PID_velocity.P = 0.3;
motor.PID_velocity.I = 10;
motor.PID_velocity.D = 0;
motor.P_angle.P = 0.5;
//其他参数
motor.voltage_limit = 6; //最大电压
motor.velocity_limit = 20; //最大速度,rad/s
motor.LPF_velocity.Tf = 0.01; //速度的滤波时间常数
// 串口设置
Serial.begin(115200);
motor.useMonitoring(Serial); //使用串口监视器
//初始化
motor.init();
motor.initFOC();
// 添加串口命令
command.add('T', doTarget, "target angle");
command.add('M',onMotor,"my motor");
Serial.println(F("Motor ready."));
Serial.println(F("Set the target angle using serial terminal:"));
_delay(1000);
}
void loop() {
// main FOC algorithm function
// the faster you run this function the better
// Arduino UNO loop ~1kHz
// Bluepill loop ~10kHz
motor.loopFOC();
// Motion control function
// velocity, position or voltage (defined in motor.controller)
// this function can be run at much lower frequency than loopFOC() function
// You can also use motor.move() and set the motor.target in the code
motor.move(target_angle);
// function intended to be used with serial plotter to monitor motor variables
// significantly slowing the execution down!!!!
motor.monitor(); //使用simpleFOC Studio上位机设置的时候,这句一定要打开。但是会影响程序执行速度
// user communication
command.run();
}
3.软件操作
3.1.打开软件
进入下载的文件夹,运行python simpleFOCStudio.py
启动上位机
3.2.添加页面
3.3.连接电机
以tree view
页面布局为例:
3.4.功能使用
3.5.参数配置生成代码
基本上就这些功能。最关键的是最开始的连接下位机SimpleFOC的操作,连接上了剩下的就很简单了。
4.中间遇到的问题
一开始能连上,串口数据也有回传,但是发送目标位置指令电机就是没有反应,发热还很大。当时很懵逼,搞了好久也没弄好。
直到我直接使用Arduino IDE的串口,才发现电机PP校准失败了,因为我的电机14极对数,而示例是11极对数,我忘了改。
因此,使用这个上位机连接上SimpleFOC后,一定要检查一下串口回传的初始化信息是否正常!