本文参(zhao)考(chao)至官方文档https://docs.simplefoc.com/docs_chinese/monitoring

引言

在使用Simple FOC控制电机的过程中,尤其是对电机进行调试的时候,我们常常希望能在初始化和校准过程中显示电机的状态以及实时了解到电机每时每刻的状态参数。当然,强大的Simple FOC库早已为我们准备好了一切,那就是今天的主角(划重点):监控功能Commander接口。Simplefoc库实现了一个简单的通信方案,借此,我们可以快速方便地对所设置的参数进行测试、调试和监控。在使用官方的SimpleFOCStudio(推荐新手使用,中文版戳这SimpleFOCStudio中文版)图形化傻瓜式调参以及监控电机之余,我们不妨来深入了解一下这套通信方式~既能增长知识,还能方便我们二次开发。

监控功能

BLDCMotorStepperMotor 类支持使用 Serial 进行监控:

motor.useMonitoring(Serial);

监控有两个主要目标:

监控电机初始化过程

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

这是一个电机正常初始化监控输出实例:

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.

电机变量实时监控

监控的第二个作用是实时标签分离输出电机变量到串行终端。它是启用的,包括这行循环函数:

监控的第二个作用是将电机变量实时以选项卡分隔的方式输出到串行终端。 在loop()中执行以下函数来启动:

motor.monitor()

监控功能可输出7种不同的电机具体变量::

  • target - 当前目标值,具体到所使用的运动控制(电流、电压、速度或位置)
  • voltage.q - 设置 电压分量q
  • voltage.d - 设置电压分量d
  • current.q - 电流分量q的测量值(如果电流传感可用)
  • current.d - 电流分量d的测量值(如果电流传感可用)
  • shaft_velocity - 电机速度
  • shaft_angle - 电机位置

设置监视的首选值,可以在setup() 函数中更改 motor.monitoring_variables 参数。

motor.monitor_variables = _MON_TARGET | _MON_VEL | _MON_ANGLE; // 默认 _MON_TARGET | _MON_VOLT_Q | _MON_VEL | _MON_ANGLE

默认情况下,监控的变量为 target,voltage.q,velocity,angle。该参数是一个7bit值,其中每个位代表 bool 标志信号,来表示变量应该输出 (1) 还是不输出 (0),。因此,我们定义了一组帮助监控常量,可以组合起来更容易地处理监控:

#define _MON_TARGET 0b1000000 // 监视器目标值
#define _MON_VOLT_Q 0b0100000 // 监视器电压q值
#define _MON_VOLT_D 0b0010000 // 监视器电压d值
#define _MON_CURR_Q 0b0001000 // 监视器电流q值 - 如有测量
#define _MON_CURR_D 0b0000100 // 监视器电流d值 - 如有测量
#define _MON_VEL 0b0000010 // 监视器速度值
#define _MON_ANGLE 0b0000001 // 监视器角度值

此外,使用motor.monitor() 函数输出实时执行变量在许多情况下会对电机性能产生负面影响,因此,应该尽可能减少对该函数的调用,特别是在低波特率时输出很多变量。你可以通过参数motor.monitor_downsample来设置:

// 降采样
motor.monitor_downsample = 100; // 默认为10

这个变量告诉 motor.monitor() 直到计数到monitor_downsample时才将变量输出到串行。也就是说每到一次monitor_downsample循环才会输出一次变量。

下面是一个完整的配置代码实例:

...
void setup(){
... Serial.begin(115200); // 越高越好
motor.useMonitoring(Serial);
//显示变量
motor.monitor_variables = _MON_TARGET | _MON_VEL | _MON_ANGLE;
// 下采样
motor.monitor_downsample = 100; // 默认为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()和move()函数调用。因此,motor.monitor()将会影响执行性能,降低FOC算法的采样频率,因此在运行代码时要考虑这个因素。

自定义串行终端监控

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

// 电流目标值
float target;
// 当前电机角度
float shaft_angle;
// 当前电机速度
float shaft_velocity;
// 当前目标速度
float shaft_velocity_sp;
// 当前目标角度
float shaft_angle_sp; // 当前设置的电机电压 (voltage.q, voltage.d)
DQVoltage_s voltage;
// 当前电机电流 (current.q, current.d) - 如有测量
DQCurrent_s current;
// 相电压
float Ua, Ub, Uc;

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

Serial.println(motor.shaft_angle);// 打印当前电机位置至串口终端
// 或者
Serial.println(motor.Ua); // 打印相电压Ua至串口终端

监视只能在一个方向上工作,并且假设它实现用户通信。

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

为了在用户和电机之间进行双向通信, Arduino SimpleFOC库 为你提供了 电机命令接口

Simple FOC内置通信接口学习(一):实时监控电机状态的更多相关文章

  1. pythone函数基础(8)内置函数学习

    内置函数学习# sorted# map# filter# max# sum# round# chr# ord# dir# bool# eval# exec# zipimport mathres = m ...

  2. WebForm 内置对象、数据增删改、状态保持

    一.内置对象 1.Response对象:响应请求 Response.Write("<script>alert('添加成功!')</script>"); → ...

  3. AWS邮件通知服务:实时监控邮件状态

    以下为译文: 订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息! AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯.技术视 ...

  4. iOS实时监控网络状态的改变

    在网络应用中,有的时候需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行智能处理,节省用户流量,提高用户体 ...

  5. jsp内置对象学习记录

    1.session,是一个会话保留在服务器端的对象(默认保留时间为30分钟),所以我们可以在session里面放用户信息以便后续的访问便利(缺点:cookie劫持,导致用户数据泄露).案例:(1)同个 ...

  6. JS内置对象学习总结

    日期对象: 创建日期对象: var date=new Date();//创建日期对象 设置/返回年份方法: date.getFullYear(); date.setFullYear(); 返回星期的方 ...

  7. window内置对象学习

    1.location:本页面的location对象 对象属性图示: 对象属性: 对象方法: 2.history:是本页面的浏览历史 history对象记录了用户曾经浏览过的页面(URL),并可以实现浏 ...

  8. 蛙蛙推荐:如何实时监控MySql状态

    大多网站的性能瓶颈都会出在数据库上,所以想把Mysql监控起来,就搜索了下相关资料. 后来和同事讨论了下cacti和nagios有些老套和过时,graphite比较时尚,然后就搜了下相关的资料,最后搞 ...

  9. 实时监控MySql状态

    大多网站的性能瓶颈都会出在数据库上,所以想把Mysql监控起来,就搜索了下相关资料. 后来和同事讨论了下cacti和nagios有些老套和过时,graphite比较时尚,然后就搜了下相关的资料,最后搞 ...

  10. ngxtop实时监控nginx状态

    ngxtop实时解析nginx访问日志,并且将处理结果输出到终端,功能类似于系统命令top,所以这个软件起名ngxtop.有了ngxtop,你可以实时了解到当前nginx的访问状况,再也不需要tail ...

随机推荐

  1. 打开word报错“内存或磁盘空间不足,无法显示所请求的字体”

    起因: 有一个部门同学在打开服务器上的某个word文档时报错,但是打开本地word文档正常,经过网上查询资料后发现有可能是以下几种原因造成. 可能造成此报错的原因: 1. 文档被锁定 解决办法: 鼠标 ...

  2. 深入理解 Nuxt.js 中的 app:data:refresh 钩子

    title: 深入理解 Nuxt.js 中的 app:data:refresh 钩子 date: 2024/9/29 updated: 2024/9/29 author: cmdragon excer ...

  3. 2023年3月中国数据库行业分析报告正式发布,带你了解NL2SQL技术原理

    为了帮助大家及时了解中国数据库行业发展现状.梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新<中国数据库行业分析报告>,持 ...

  4. 墨天轮访谈 | Pika数据库陈磊:云时代下,键值数据库是否会被替代?

    分享嘉宾:陈磊 开源数据库Pika项目PMC核心人员 整理:墨天轮社区 导读 大家好,今天我分享的主题是:KV数据库,云时代的文件存储. 随着AI和机器学习等技术的发展,数据演变为了十分宝贵的资源,数 ...

  5. iOS生成ipa包的时候总是弹窗提示macOS想要使用系统钥匙串

    最近新换了一台苹果电脑,性能不错,不过证书和描述文件需要重新配置,遇到了一系列奇怪的问题.在这里整理记录下来,希望能给其他人提供一些帮助.iOS生成ipa包的时候总是弹窗提示[macOS想要使用系统钥 ...

  6. 小程序把html代码渲染到页面上 rich-text

    <rich-text nodes="<h1>html的代码显示再小程序使用rich-text组件</h1>"></rich-text> ...

  7. 000 通过 Pytorch 实现 Transformer 框架完整代码(带注释)

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  8. 云原生周刊:Kubernetes Grafana 看板更新 | 2024.5.13

    开源项目推荐 Chart Testing Chart Testing 是用于测试 Helm 图表的工具.它旨在用于对拉取请求进行 lint 和测试.它会自动检测针对目标分支更改的图表. Cluster ...

  9. 将NC栅格表示时间维度的数据提取出来的方法

      本文介绍基于Python语言,逐一读取大量.nc格式的多时相栅格文件,导出其中所具有的全部时间信息的方法.   .nc是NetCDF(Network Common Data Form)文件的扩展名 ...

  10. 什么是APP原生开发

    什么是APP原生开发?原生App实际上是一种基于智能手机本地操作系统如Android.IOS并且使用原生程序编写运行的第三方移动应用程序.开发原生App软件需要针对不同智能手机的操作系统来选择不同的A ...