42HS48步进电机实验

举报
tsinghuazhuoqing 发表于 2021/12/26 23:36:47 2021/12/26
【摘要】 ■ 前言 在 42HS48EIS步进闭环电机最大转速 中给出了一款带有驱动器的步进电机的测量结果。为了进一步减少实验室机械臂设计重量,购置了更小的一款电机进行测。 ▲ 实验电机的外观以及旋转...

■ 前言


42HS48EIS步进闭环电机最大转速 中给出了一款带有驱动器的步进电机的测量结果。为了进一步减少实验室机械臂设计重量,购置了更小的一款电机进行测。

▲ 实验电机的外观以及旋转光电编码器

▲ 实验电机的外观以及旋转光电编码器

用于测量步进电机旋转精度的搞定度绝对位置旋转编码器BH38 也在 写文章-CSDN博客 进行了测试。在本实验中,将根据 使用高精度旋转编码器BH60测量步进电机转动角度 文章中的方法对本款测试步进电机的旋转精度进行测量。

 

01初步运动测试


1.实验方案1

实验方案采用 42HS48EIS步进闭环电机最大转速测量方案,采用 STC8K28步进电机ULC2003触发器 完成对电机控制信号的驱动。

为了便于在面包板上进行实验,将步进电机控制引线中制作两组四芯的插头。

▲ 制作两个4芯插头便于在面包板上实验

▲ 制作两个4芯插头便于在面包板上实验

2.测试最大速度

通过单片机dp命令,设置输出PWM的定时器1的周期,从而测试输出脉冲的最大速度。

根据实际测试,当设置 dp 55时,不仅电机能够运行,dp 54时,步进电机不再运行。

根据输出频率公式:

可以计算测到此时输出PWM的最大频率为625kHz。通过示波器测量脉冲频率为624kHz左右。

▲ 测试最大脉冲速度

▲ 测试最大脉冲速度

3.测试一周的脉冲数量

(1) 测试脉冲周期

在单片机程序serialtxt中提供如下命令;其中通过_nop_语句完成延迟。调整适当的循环次数,实测输出脉冲的能够满足在第二步测试的最短速率的要求。

else IFARG0("pulse") {
    sscanf(SDA(1), "%d", &nNumber);
    for(i = 0; i < nNumber; i ++) {
        ON(IO1_PIN);
        for(j = 0; j < 100; j ++) 
            _nop_();
        OFF(IO1_PIN);
        for(j = 0; j < 100; j ++) 
            _nop_();
    }

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

最终确认设置:

for(j=0; j < 20; j++)

可以满足输出驱动的需要。

(2) 测试细分步数

通过设置步进电机的拨码开关(Sw2,3,4,5:OFF,OFF,OFF,ON),使得步进电机每周的步进次数为51200。

通过上面 pulse 命令,输出51200脉冲,可以测量步进电机正好旋转一周。这与对步进电机细分次数设定是相符的。

▲ 测试一周步进电机步数

▲ 测试一周步进电机步数

▲ 输出51200个脉冲后步进电机旋转一周

▲ 输出51200个脉冲后步进电机旋转一周

 

02测量输出角度精度


1.测量方案2

测试的方案仍然采用在 使用高精度旋转编码器BH60测量步进电机转动角度 中的方法,只是将其中的角度传感器改成 BH38旋转编码器

实验的机械装置如下图所示:

▲ 将步进电机的输入与旋转角度传感器连接在一起

▲ 将步进电机的输入与旋转角度传感器连接在一起

使用 ISPHUB基于STC8H1K28的BH60的角度读写模块STC8K28步进电机ULC2003触发器 模块连接在一起。然后通过编程发送步进指令和角度读取指令。

2.测量PYTHON程序

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST1.PY                     -- by Dr. ZhuoQing 2020-07-15
#
# Note:
#============================================================

from headm import *
from tsmodule.tsstm32       import *

stm32cmd('bh60clear')

time.sleep(.5)
stm32cmd('CLEAR')

stm32cmd('ps 20000 1')

while True:
    key = stm32val()
    if key[12] != 0: break
    time.sleep(.5)

stm32cmd('COPY')

angle = [int(t) for t in clipboard.paste().strip('\r\n').split(' ') if len(t) > 0]

tspsavenew('angle', angle=angle)
plt.plot(angle)
plt.xlabel("Steps")
plt.ylabel("Angle")
plt.grid(True)
plt.tight_layout()
plt.show()

#------------------------------------------------------------
#        END OF FILE : TEST1.PY
#============================================================

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

3.测量结果分析

(1) 测量运动与步数之间的角度关系

下面是行走1000步,读取的角度与步数之间的曲线。
▲ 行走1000步,步长为1,角度与步数之间的关系

▲ 行走1000步,步长为1,角度与步数之间的关系

▲ 行走5000步,步长为1,角度与步数之间的关系

▲ 行走5000步,步长为1,角度与步数之间的关系

▲ 行走5000步,步长为1,角度与步数之间的关系

▲ 行走5000步,步长为1,角度与步数之间的关系

▲ 行走600步,步长为100,角度与步数之间的关系

▲ 行走600步,步长为100,角度与步数之间的关系

(2) 结果分析

通过前两个实验(1000步,5000步)可以看到行进步数与读出角度之间并非严格的线性关系,这其中原因:

  • 有可能来自于步进电机与角度传感器之间的软连接的蠕动引起的;
  • 有可能来自于步进电机本水的细分呈现非线性;

对比中间两个实验(5000步,5000步)连续测量两次5000步对应的角度曲线,第二次的角度曲线呈现更好的线性性。这说明前面关于运行非线性的问题主要来自于测量软连接的关系;

第四个时间是通过600步、每步100个脉冲,测试了角度输出。由于BH38输出的角度范围是14bit(16834范围),可以看到角度呈现了一个轮回。由于输出步进电机的每周细分步数为51200步,上述交过也间接证明了电机的细分步数。

 

※ 结论


通过实验对步进电机的运行控制硬件方案,最快速运行脉冲频率,以及输出角度测量做了初步的实验。

通过实验测量了电机的每周细分步数。

相关应用


  1. 单片机C51工程文件:C51\STC\Test\2020\Tools\ULC2003STC8H1K28\ULC2003STC8H1K28.uvproj ↩︎

  2. ISPHUB的STC8H1K28单片机工程文件:C51\STC\Test\2020\Tools\ISPHUBALLSELSTC8H1K28\ISPHUBALLSELSTC8H1K28.uvproj ↩︎

文章来源: zhuoqing.blog.csdn.net,作者:卓晴,版权归原作者所有,如需转载,请联系作者。

原文链接:zhuoqing.blog.csdn.net/article/details/107445204

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。