Atomic Stepmotor Base

支持以下产品:

Atomic Stepmotor Base

UiFlow2 应用示例

方向控制

在 UiFlow2 上打开 atoms3r_stepmotor_direction_control_example.m5f2 项目。

示例程序演示电机旋转方向控制,按下屏幕按键,切换旋转方向

UiFlow2 代码块:

atoms3r_stepmotor_direction_control_example.png

示例输出:

旋转控制

在 UiFlow2 上打开 atoms3r_stepmotor_rotate_control_example.m5f2 项目。

示例程序演示电机连续旋转控制多圈,再反向旋转多圈,等待2秒后重复。

UiFlow2 代码块:

atoms3r_stepmotor_rotate_control_example.png

示例输出:

MicroPython 应用示例

方向控制

示例程序演示电机旋转方向控制,按下屏幕按键,切换旋转方向

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from base import AtomicStepmotorBase
 9import time
10
11
12title0 = None
13label0 = None
14label_vol = None
15base_stepmotor = None
16direction = None
17
18
19def btna_cliked_cb(state):
20    global title0, label0, label_vol, base_stepmotor, direction
21    direction = not direction
22    base_stepmotor.set_direction(direction)
23
24
25def setup():
26    global title0, label0, label_vol, base_stepmotor, direction
27    M5.begin()
28    title0 = Widgets.Title("Steps Ctrl", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
29    label0 = Widgets.Label("vol:", 5, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
30    label_vol = Widgets.Label("12.0V", 43, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
31    BtnA.setCallback(type=BtnA.CB_TYPE.WAS_CLICKED, cb=btna_cliked_cb)
32    base_stepmotor = AtomicStepmotorBase(5, 7, 6, 38, 39, 8)
33    label_vol.setText(str((str((base_stepmotor.get_voltage())) + str("V"))))
34    direction = True
35
36
37def loop():
38    global title0, label0, label_vol, base_stepmotor, direction
39    M5.update()
40    base_stepmotor.step()
41    time.sleep_ms(1)
42
43
44if __name__ == "__main__":
45    try:
46        setup()
47        while True:
48            loop()
49    except (Exception, KeyboardInterrupt) as e:
50        try:
51            from utility import print_error_msg
52
53            print_error_msg(e)
54        except ImportError:
55            print("please update to latest firmware")

示例输出:

旋转控制

示例程序演示电机连续旋转控制多圈,再反向旋转多圈,等待2秒后重复。

MicroPython 代码块:

 1# SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
 2#
 3# SPDX-License-Identifier: MIT
 4
 5import os, sys, io
 6import M5
 7from M5 import *
 8from base import AtomicStepmotorBase
 9import time
10
11
12title0 = None
13label0 = None
14label_vol = None
15base_stepmotor = None
16step_per_rev = None
17microstep = None
18rotate_circle = None
19total_steps = None
20
21
22def setup():
23    global \
24        title0, \
25        label0, \
26        label_vol, \
27        base_stepmotor, \
28        step_per_rev, \
29        microstep, \
30        rotate_circle, \
31        total_steps
32    M5.begin()
33    title0 = Widgets.Title("Steps Ctrl", 3, 0xFFFFFF, 0x0000FF, Widgets.FONTS.DejaVu18)
34    label0 = Widgets.Label("vol:", 5, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
35    label_vol = Widgets.Label("12.0V", 43, 35, 1.0, 0xFFFFFF, 0x000000, Widgets.FONTS.DejaVu18)
36    step_per_rev = 200
37    microstep = 1 / 2
38    rotate_circle = 5
39    total_steps = (step_per_rev / microstep) * rotate_circle
40    base_stepmotor = AtomicStepmotorBase(5, 7, 6, 38, 39, 8)
41    label_vol.setText(str((str((base_stepmotor.get_voltage())) + str("V"))))
42
43
44def loop():
45    global \
46        title0, \
47        label0, \
48        label_vol, \
49        base_stepmotor, \
50        step_per_rev, \
51        microstep, \
52        rotate_circle, \
53        total_steps
54    M5.update()
55    print(base_stepmotor.get_voltage())
56    base_stepmotor.rotate(total_steps, 1, True)
57    time.sleep_ms(100)
58    base_stepmotor.rotate(total_steps, 1, False)
59    time.sleep_ms(100)
60    label_vol.setText(str((str((base_stepmotor.get_voltage())) + str("V"))))
61    time.sleep_ms(2000)
62
63
64if __name__ == "__main__":
65    try:
66        setup()
67        while True:
68            loop()
69    except (Exception, KeyboardInterrupt) as e:
70        try:
71            from utility import print_error_msg
72
73            print_error_msg(e)
74        except ImportError:
75            print("please update to latest firmware")

示例输出:

API应用

AtomicStepmotorBase

class base.stepmotor.AtomicStepmotorBase(en=5, dir=7, stp=6, flt=38, rst=39, pwr_adc=8)

基类:object

创建一个 AtomicStepmotorBase 对象。

参数:
  • en (int) – 使能引脚,用于启用或禁用步进电机。

  • dir (int) – 方向引脚,用于控制电机的旋转方向。

  • stp (int) – 步进引脚,用于步进控制。

  • flt (int) – 故障引脚,用于监控电机故障状态。

  • rst (int) – 复位引脚,用于复位电机驱动器。

  • pwr_adc (int) – 电源ADC监测引脚,用于测量输入电源电压。

UiFlow2 代码块:

init.png

MicroPython 代码块:

from base import AtomicStepmotorBase

base_stepmotor = AtomicStepmotorBase(en=5, dir=7, stp=6, flt=38, rst=39, pwr_adc=8)
enable()

启用电机驱动。

UiFlow2 代码块:

enable.png

MicroPython 代码块:

base_stepmotor.enable()
返回类型:

None

disable()

禁用电机驱动。

UiFlow2 代码块:

disable.png

MicroPython 代码块:

base_stepmotor.disable()
set_direction(direction=True)

设置方向。

参数:

direction (bool) – 旋转方向 True 或 False。

返回类型:

None

UiFlow2 代码块:

set_direction.png

MicroPython 代码块:

base_stepmotor.set_direction(direction)
step()

电机步进一步

UiFlow2 代码块:

step.png

MicroPython 代码块:

base_stepmotor.step()
返回类型:

None

rotate(steps, delay_ms=0, direction=True)

旋转步进电机一定的步数。

参数:
  • steps (int) – 转动步数。

  • delay_ms (int) – 步间延时(ms),默认为 0 ms。

  • direction (bool) – 旋转方向

返回类型:

None

实际旋转方向(顺时针或逆时针)取决于电机的接线方式。

UiFlow2 代码块:

rotate.png

MicroPython 代码块:

base_stepmotor.rotate(steps, delay_ms, direction)
stop()

停止电机。

UiFlow2 代码块:

stop.png

MicroPython 代码块:

base_stepmotor.stop()
返回类型:

None

get_status()

获取电机驱动状态

返回:

正常工作时返回 True,故障时返回 False。

返回类型:

bool

UiFlow2 代码块:

get_status.png

MicroPython 代码块:

base_stepmotor.get_status()
reset()

复位电机驱动。

UiFlow2 代码块:

reset.png

MicroPython 代码块:

base_stepmotor.reset()
返回类型:

None

get_voltage()

获取电压

返回:

驱动输入电压,单位:V。

返回类型:

float

UiFlow2 代码块:

get_voltage.png

MicroPython 代码块:

base_stepmotor.get_voltage()