■ 背景介绍


对于 一款用于化学实验室样品操作机械臂 的调试过程中,在博文 双轴机械臂调试:步进电机42HS348E,BH32角度传感器,MCU:STC8H1K28 可以看到初步的通过带有 闭环控制的步进电机42HS48EIS 存在以下缺点:

  • 由于手臂的转动惯量,运动具有很大的振荡现象;
  • 由于存在着摩擦力,运动位置具有一定的误差;

需要结合在肘关节、肩关节安装的 BH38绝对位置14bit角度传感器 来进行闭环角度控制,用于抑制以上两方面的控制缺点。

01控制问题分析


1.转动过冲振荡

下图显示的是肘关节步进电机施加阶跃命令之后出现的震动情况。肩关节的震动情况更加明显。详细可以查看双轴机械臂调试:步进电机42HS348E,BH32角度传感器,MCU:STC8H1K28中的数据,或者 机械臂建模分析 中的相关数据。

▲ 肘关节运动
▲ 肘关节运动对应角度变化

关于振荡过程,需要引入角度、角度速度,对于给定的步进电机的脉冲进行控制。

2.位置误差

根据在双轴机械臂调试:步进电机42HS348E,BH32角度传感器,MCU:STC8H1K28所得到的步进电机步数与转动角度之间的比值关系,可以测试在给定步进电机运动指令之后,对应的读取的位置数值与理论之间的误差。

(1) 实验基本参数

  • 步进电机细分设置:SW2345=0001,细分步数为51200。对应的脉冲数与角度之间的比值关系:AnglePulse=21451200=0.32{{Angle} \over {Pulse}} = {{2^{14} } \over {51200}} = 0.32\,\,\,PulseAngle​=51200214​=0.32

比值的倒数为:Pulse/Angle=3.128。

(2) 实验方案

对于肩关节和肘关节,分别给定运动步长step=6400step = 6400step=6400,对应移动角度Angle =90°。测量前后有角度传感器读出的数值与实际理论值之间的误差。

对于1/8周(π/4\pi /4π/4)角度传感器变化的理论值对应的角度变化:214−3=211=20482^{14 - 3} = 2^{11} = 2048214−3=211=2048。

测量100次,获得测量角度变化值的均值、方差。

▲ 肘关节运动重复性

(3) 实验数据

  • 肘部测量数据
    肘部往返45°运动角度变化数据。每次运动等待3秒钟。测量100次数据如下。

▲ 肘部往返45°角度数值变化

  • 均值:2041.62; 方差:0.5056
  • 肩部往返运动
  • 均值:2058.25, 方差:1.24

▲ 肩部往返45°角度数值变化

(3) 结果分析

  • 在肘关节的均值为2041.6,比起理论值2048少了6.4(0.141°)
  • 肩关节的均值为2058.25, 比起理论值2048多了10.25(0.2252°)

上述关节角度与运动之间的误差究竟来源是什么?现在还不知道。

对比肘关节和肩关节的位置关节标准差,肩关节更大一些。

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST3.PY                     -- by Dr. ZhuoQing 2020-08-22
#
# Note:
#============================================================
from headm import *
from tsmodule.tsstm32       import *
anglediff = []
for i in range(20):stm32cmd('CLEAR')stm32cmd('angle')time.sleep(.2)val = stm32memo(1)startangle = val[0]SLEEP_TIME = 15stm32cmd('step1 6400')time.sleep(SLEEP_TIME)stm32cmd('CLEAR')stm32cmd('angle')time.sleep(.2)val = stm32memo(1)endangle = val[0]dif = abs(startangle - endangle)printff(i, dif)anglediff.append(dif)stm32cmd('step1 -6400')time.sleep(SLEEP_TIME)stm32cmd('CLEAR')stm32cmd('angle')time.sleep(.2)val = stm32memo(1)dif = abs(val[0] - endangle)anglediff.append(dif)printff(i, dif)
tspsave('angle1', angle=anglediff)
printff(mean(anglediff), std(anglediff))
plt.plot(anglediff)
plt.xlabel("Sample")
plt.ylabel("Angle Difference")
plt.grid(True)
plt.tight_layout()
plt.show()
#------------------------------------------------------------
#        END OF FILE : TEST3.PY
#============================================================

02测试输出脉冲频率的影响


对于01节中的角度移动误差的猜测:

  • 上述均值误差和方差是否与 基于STC8H1K28的双轴机械臂驱动模块 给定步进电机脉冲频率有关系呢?
  • 验证:将驱动模块的脉冲降低10倍。修改其中的Delay(n)中的参数,验证上述肘关节的误差是否还存在。

1.设置主频率测量变量

在下位机控制程序1的主程序,增加关于主循环频率测量变量。

  • 在Delay()函数中,对于全局变量g_nDelayCount++, 并在100ms中断中保存g_nDelayCount值并将其清零。
  • 设置全局100ms定时变量。

使用串口命令“100ms”,可以获得回复: DelayCount:14272。由于这个数字是主循环在100ms内调用Delay的次数,也预示着主循环的频率为142.72kHz。

如果将Delay(10)修改成Delay(100),则返回的100ms命令的返回为:DelayCount:2699,对应主循环的频率为27kHz。这个数字比在一款用于化学实验室样品操作机械臂所测量的13.85kHz减少了很多。

2.测量肘关节往复运动角度变化

利用和 01.2中相同的程序重新测量肘关节往复运动对应的角度变化。

  • 均值::2042.025,方差:0.156

▲ 肘关节往复运动角度变化

通过上面数据可以看到,脉冲频率的变化,对于位置重复精度没有太大的影响。

03肘关节运动控制


肘关节,通过降低输出步进电机的频率来达到抑制震动的目标。

在主程序中,增加输出脉冲分频变量g_ucPulse2Count,来对脉冲2的输出进行分频。分频的倍率有main.h中的PULSE2_COUNT常数决定。

#define PULSE2_COUNT 20

通过对PULSE2_COUNT的试凑,获得最优的常数。

▲ 在机械臂前端增加机械爪(质量大约为560g)

在前臂增加金属机械爪(质量大约为560g),模拟前爪抓取试剂瓶时的质量。设置PULSE2_COUNT 为20左右的时候,可以大体确定前臂运动不在会有震动的产生。

▲ 带有机械爪的前臂运动

04肩关节运动调节


通过观察可以看到,对于肘关节的运动,只要控制输出频率,可以有效抑制它的震动。实际上,肩关节的振动抑制是控制中最为关节的部分。

  1. 肩部力矩太小,需要改动大力据电机:

大扭力的电机

■ 相关文献链接

  • 基于STC8H1K28的双轴机械臂驱动模块
  • 双轴机械臂调试:步进电机42HS348E,BH32角度传感器,MCU:STC8H1K28
  • 闭环控制的步进电机42HS48EIS
  • BH38绝对位置14bit角度传感器
  • 机械臂建模分析
  • 大扭力的电机

  1. 下位机控制程序:C51\STC\Project\XQWF\2020\STC8H2AXES\STC8H2AXES.uvproj ↩︎

双轴机械臂位置闭环控制:STC8H1K28,42HS48EIS,BH32相关推荐

  1. 双轴机械臂调试:步进电机42HS348E,BH32角度传感器,MCU:STC8H1K28

    ■ 前言 这款双轴机械臂是应用于实验室中进行自动样品转换的执行机构.为了能够在一定范围内将试剂瓶(试管) 完成自动搬运,需要完成对样品的抓取,提升和放下.水平移动(二维) 等功能.使用带有肘关节.肩关 ...

  2. 基于STC8H1K28的双轴机械臂驱动模块:步进电机42HS348E,BH32角度传感器

    作者:卓晴博士,清华大学自动化系 更新时间:2020-08-08 Saturday ■ 设计背景 这是一款用于化学实验室样品上样器的机械臂.设置有肘关节.肩关节以及上下移动关节. ▲ 双轴机械臂结构 ...

  3. 双轴机械臂串口控制命令开发与测试:STM32F103控制板,简易调试命令集合

    ▌01 底层串口控制命令 1.调试说明 本文是继 调试机械臂一体化控制电路 博文中对于 两轴机械臂+机械爪整体控制板设计与机械爪控制调试 在 基于STM32F103双轴机械臂完整电路板 控制下进行串口 ...

  4. 组装肩部带有减速器双轴机械臂组装与调试

    ➤ 00背景 在 增加了机械爪的双轴机械臂 安装调试之后, 发现进行平顺控制效果不好 ,因此在原来的基础上进行了如下的改动: 肩部和肘部的角度传感器采用了: 角度编码器 ST-3806-15-RS 读 ...

  5. 双轴机械臂建模分析数据

    作者:卓晴博士,清华大学自动化系 更新时间:2020-08-19 Wednesday ■ 背景 在 对于实验室双轴机械臂进行运动调试过程中,设计最后的控制器需要对运动对象进行力学建模分析.利用肩关节. ...

  6. 【机械】基于简化几何解法的六轴机械臂位置规划附matlab代码

    1 内容介绍 基于简化几何解法的六轴机械臂位置规划附matlab代码 2 部分代码 clc; clear; %载入数据 importfile('shuiping.mat'); theta_shuipi ...

  7. 【机械仿真】基于matlab简化几何解法六轴机械臂位置规划【含Matlab源码 2128期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab简化几何解法六轴机械臂位置规划[含Matlab源码 2128期] 点击上面蓝色字体,直接付费下载,即可. 获取 ...

  8. 双轴机械臂中的闭环步进电机平顺控制算法: 42HS48EIS,57HS

    ■ 实验背景 在 两轴机械臂+机械爪整体控制板设计与机械爪控制调试 的基础上对于机械臂各关节进行了 双关节机械臂+机械爪运动控制 ,其中存在的主要问题还是肩关节运动不平稳的情况. ▲ 机械臂肩部运动 ...

  9. 基于STM32F103双轴机械臂完整电路板设计

    ➤01 机械臂设计   在 基于STM32对于三轴机械臂控制器设计 设计了机械臂的控制电路板.采用了双板分开设计方式.并分别进行了如下的测试:   1. 对于STM32F103三轴机械臂控制器进行基本 ...

最新文章

  1. 【转载】知乎答案----孙志岗----Google 发布了程序员养成指南,国内互联网巨头是否也有类似的指南和课程推荐...
  2. 基于WINCE6.0下载multiple XIP镜像文件
  3. JavaScript 经常忽略的 7 个基础知识点
  4. htc资料和js和css的嵌套
  5. 联想B450系列安装XP且开启AHCI
  6. 你未必知道的49个CSS知识点
  7. linux操作系统之线程同步及互斥量
  8. oracle插入时间报错,Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法...
  9. 关于 asp.net 服务器控件几个 ID 的说明
  10. ubuntu14.04+CUDA7.5+cuDNN+caffe的超详细完整配置
  11. linux虚拟化技术 教程,Linux上实现虚拟化技术的优势
  12. 在C#中实现截获shell程序的输出
  13. 大篆汉字对照表_甲骨文汉字对照表大全_甲骨文数字象形字对照图
  14. 虚拟服务器 emule,emule服务器
  15. 小红书投放怎么变现?品牌做小红书的变现效果好吗
  16. 【奈茶君】STM32F407驱动WS2812
  17. Windows操作系统截屏快捷键
  18. 认识下中国最赚钱的服装公司的幕后老板
  19. weblogic修改控制台密码
  20. 记一次 idea 配置scala 和运行 IDEA 错误: 找不到或无法加载主类

热门文章

  1. USB学习笔记连载(八):FX2替换到FX2LP需要注意事项
  2. php 回收周期(Collecting Cycles)
  3. 携程二季度净利润降55% 促销被指“玩烟幕弹”
  4. OCS Inventory NG使用之在windows 2008 R2平台下安装服务器端(三)
  5. ASP.NET2.0轻松搞定统计图表
  6. JScript多语言语法加亮引擎显示(代码精简)
  7. Python之面向对象进阶
  8. Javadoc代码追踪记录
  9. [javascript] 看知乎学习js闭包
  10. SAP 画皮门 从白狐到超人的华丽转身