栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Arduino SimpleFOC库-009-监控功能

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Arduino SimpleFOC库-009-监控功能

BLDCMotor和StepperMotor类支持通过串行端口进行监控:

motor.useMonitoring(Serial);

监控有两个主要目标:

  • 在初始化和校准过程中显示电机状态
  • 实时监控电机变量

监控电机初始化

在初始化 motor.init() 时,电机会向串口输出它的状态,和对齐程序 motor.initFOC()。启用此功能不会直接影响实时性能,因为在函数 motor.loopFOC() 和 motor.move() 中没有预定义的实时循环监控。

这是motor初始化监控输出运行良好的示例:

MOT: Monitor enabled!
MOT: Init
MOT: Enable driver.
MOT: Align sensor.
MOT: sensor direction==CW
MOT: PP check: OK!
MOT: Zero elec. angle: 4.28
MOT: Align current sense.
MOT: Success: 2
MOT: Ready.

由于位置传感器,电机初始化失败:

MOT: Monitor enabled!
MOT: Init
MOT: Enable driver.
MOT: Align sensor.
MOT: Failed to notice movement
MOT: Init FOC failed.

由于电流感应,电机初始化失败:

MOT: Monitor enabled!
MOT: Init
MOT: Enable driver.
MOT: Align sensor.
MOT: sensor direction==CW
MOT: PP check: OK!
MOT: Zero elec. angle: 4.28
MOT: Align current sense.
MOT: Fail!
MOT: Init FOC failed.

实时电机变量监控

 监控的第二个作用是将电机变量实时以选项卡分隔的方式输出到串行终端。使能他,包括这一行到循环函数

motor.monitor()

监控功能可以输出 7 个不同的电机特定变量:

  • target - 当前目标值,特定于所使用的运动控制(电流、电压、速度或位置)
  • voltage.q - 在 q 方向设置电压
  • voltage.d - 在 d 方向设置电压
  • current.q - q 方向的测量电流(如果电流检测可用)
  • current.d - d 方向的测量电流(如果电流检测可用)
  • shaft_velocity - 电机速度
  • shaft_angle - 电机位置

要设置要监视的首选值,您只需更改函数中的motor.monitoring_variables参数即可。setup():

motor.monitor_variables = _MON_TARGET | _MON_VEL | _MON_ANGLE; // default _MON_TARGET | _MON_VOLT_Q | _MON_VEL | _MON_ANGLE

默认情况下,监控变量为target、voltage.q、velocity、angle。此参数是一个具有七位数字的位图,其中每一位表示bool是否应输出变量 ( 1) 或不 ( 0) 的标志信号。因此,我们定义了一组帮助监控常量,您可以结合使用以更轻松地处理监控:

#define   _MON_TARGET 0b1000000  // monitor target value
#define   _MON_VOLT_Q 0b0100000  // monitor voltage q value
#define   _MON_VOLT_D 0b0010000  // monitor voltage d value
#define   _MON_CURR_Q 0b0001000  // monitor current q value - if measured
#define   _MON_CURR_D 0b0000100  // monitor current d value - if measured
#define   _MON_VEL    0b0000010  // monitor velocity value
#define   _MON_ANGLE  0b0000001  // monitor angle value

此外,使用motor.monitor()函数输出实时执行变量在许多情况下会对电机性能产生负面影响,因此尽可能减少此函数的调用次数非常重要,尤其是在显示许多具有较低波特率的变量时。这可以通过设置参数轻松完成motor.monitor_downsample:

// downsampling
motor.monitor_downsample = 100; // default 10

该变量告诉motor.monitor()将变量输出到每个monitor_downsample调用次数的序列中。简而言之,它会将变量输出到每个monitor_downsample循环调用的串行。

以下是完整配置代码的示例:

...
void setup(){
    ...

    Serial.begin(115200); // the higher the better
    motor.useMonitoring(Serial);
    //display variables
    motor.monitor_variables = _MON_TARGET | _MON_VEL | _MON_ANGLE; 
    // downsampling
    motor.monitor_downsample = 100; // default 10
    
    ...
}
void loop(){
    ....

    motor.monitor();
}

 

实时监控功能旨在用于实时可视化,特别适用于Arduino IDE Serial Plotter

或者在 Serial Terminal

...
voltage,target,velocity
1.17	2.00	2.29
1.23	2.00	1.96
1.30	2.00	1.65
1.28	2.00	1.80
1.20	2.00	2.20
1.07	2.00	2.70
0.91	2.00	3.22
0.69	2.00	3.74
0.40	2.00	4.34
0.18	2.00	4.57
0.09	2.00	4.38
0.06	2.00	4.04
0.08	2.00	3.58
0.11	2.00	3.14
0.18	2.00	2.65
0.27	2.00	2.13
0.37	2.00	1.65
0.47	2.00	1.26
0.55	2.00	0.99
0.64	2.00	0.77
0.71	2.00	0.67
...

执行时间减损

这个方法的目的是在主循环函数中沿着loopFOC()andmove()函数调用。因此,motor.monitor()会影响执行性能并降低 FOC 算法的采样频率,因此在运行代码时要考虑到这一点。

自定义串口终端监控

如果您希望实现自己的监控功能或只是将电机变量输出到Serial终端,这里是您可以随时访问的BLDCMotor和StepperMotor类的公共变量。

// current target value
float target;
// current motor angle
float shaft_angle;
// current motor velocity 
float shaft_velocity;
// current target velocity
float shaft_velocity_sp;
// current target angle
float shaft_angle_sp;

// current voltage set to the motor (voltage.q, voltage.d)
DQVoltage_s voltage;
// current (if) measured on the motor (current.q, current.d)
DQCurrent_s current;
// phase voltages 
float Ua, Ub, Uc;

您可以通过motor.在它们之前添加来访问这些变量中的任何一个。例如:

Serial.println(motor.shaft_angle);// print current motor position to the serial terminal
// or
Serial.println(motor.Ua); // print phase voltage Ua to the serial terminal

如您所见,监控仅在一个方向上起作用,并且假设您将自行实施用户通信。

使用电机命令的实时用户通信

对于用户和电机之间的双向通信,Arduino Simple FOC库为您提供了电机命令接口。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/296243.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号