完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
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库为您提供了电机命令接口。 |
|
|
|
只有小组成员才能发言,加入小组>>
3284 浏览 9 评论
2960 浏览 16 评论
3464 浏览 1 评论
9008 浏览 16 评论
4054 浏览 18 评论
1124浏览 3评论
578浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
572浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2306浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1863浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 04:08 , Processed in 1.233430 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号