42HS48步进电机实验

■ 前言


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_();
    }

最终确认设置:

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
#============================================================

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 ↩︎

猜你喜欢

转载自blog.csdn.net/zhuoqingjoking97298/article/details/107445204