pdf-icon

UIFlow Guide

UIFlow 1.0 Blockly

Event

Unit

UIFlow 1.0 Project

Module Stepmotor Driver

案例程序

初始化步进电机的I2C地址和频率设置,设置电机X和电机Y的方向,读取设备的固件版本和I2C地址。然后在循环中执行重置电机X和Y、启用/禁用电机,并在一定时间间隔内进行状态的切换。

from m5stack import *
from m5ui import *
from uiflow import *
import module

import time

setScreenColor(0x000000)

stepmotor = module.get(module.STEPMOTORDRIVER)

stepmotor.initDevice(0x27)
stepmotor.setStepPulse(500, 0)
stepmotor.setStepPulse(500, 1)
stepmotor.setStepPulse(500, 2)
stepmotor.setStepDir(0, 1)
stepmotor.setStepDir(1, 1)
stepmotor.enableMotor(1)
print(stepmotor.readStatus(0XFE))
print(stepmotor.readStatus(0XFF))
while True:
  stepmotor.resetMotor(0, 1)
  wait(2)
  stepmotor.resetMotor(1, 1)
  wait(2)
  stepmotor.enableMotor(0)
  wait(2)
  stepmotor.enableMotor(1)
  wait(2)
  stepmotor.resetMotor(0, 0)
  wait(2)
  stepmotor.resetMotor(1, 0)
  wait(2)
  wait_ms(2)

功能说明

stepmotor.enableMotor(0)
  • 该语句用于禁用所有步进电机的运行状态。通过该配置块,用户可以启用或禁用与驱动器连接的所有电机。
stepmotor.initDevice(0x27)
  • 此语句初始化步进电机驱动器的I2C地址为0x27,用于设置与电机驱动器的I2C通信地址。在系统中,I2C地址用于唯一识别设备,确保主机能够正确通信。
stepmotor.modbus_init(26, 34, 115200, 1, 1)
  • 该语句通过Modbus协议初始化步进电机驱动器的通信。其具体参数如下:
    • Tx 26:指定用于发送数据的引脚编号。
    • Rx 34:指定用于接收数据的引脚编号。
    • baudrate 115200:设定Modbus通信的波特率为115200bps。
    • mode Master:设置通信模式为主模式(Master),即当前设备控制从设备。
    • slave addr 1:指定从设备的地址为1。
stepmotor.readStatus(0XFE)
  • 该语句用于读取步进电机驱动器的固件版本号(Firmware Version)。通过获取固件版本号,可以验证驱动器固件是否符合预期,便于进行版本管理与更新。
stepmotor.readFaultPinStatus(0)
  • 该语句用于读取指定电机(如电机X)的故障状态。通过该命令,用户可以检查电机是否存在异常情况,如过流、过温或通信故障。
stepmotor.readIOstatus()
  • 该语句用于读取所有限位开关的输入输出(IO)状态。限位开关通常用于确保电机在运动到极限位置时停止运行,通过该命令,用户可以监控多个限位开关的状态。
stepmotor.readPinStatus(0)
  • 该语句用于读取特定限位开关(如IO 0)的状态,判断该限位开关是否被触发。限位开关触发时,通常表示电机已达到物理限制位置,系统可根据此信息采取保护措施。
stepmotor.resetMotor(0, 1)
  • 该语句用于复位电机X,并将其状态设为TRUE。复位操作会将电机恢复到初始状态,清除任何错误或警告状态,使其可以正常运行。
stepmotor.setI2cAddress(0x27)
  • 此语句用于为步进电机驱动器设定I2C通信地址为0x27。通过设置I2C地址,主机可以与驱动器进行数据通信,确保通信双方能够正确识别对方。
stepmotor.setMicroStepSelect(0)
  • 该语句用于将步进电机的微步模式设置为“全步”模式。在全步模式下,电机的每一步旋转将是一个完整的步进。这一设置影响电机的精度和速度。
stepmotor.singleMotorCtrl(0, 0)
  • 此语句用于将单个电机X的状态设置为暂停(Pause)。暂停操作会临时停止电机的运动,但不会影响其当前的位置,电机可以在稍后继续运行。
stepmotor.setStepDir(0, 0)
  • 该语句用于设置电机X的运行方向为“反向”(Reverse)。电机的方向决定了其旋转方向,通过改变该设置可以控制电机的旋转方向。
stepmotor.setStepPulse(500, 0)
  • 此语句用于将电机X的脉冲频率设置为500Hz。脉冲频率影响步进电机的运行速度,频率越高,电机的旋转速度越快。
modbus.read_coils(1, 1, 0)
  • 该语句用于读取从设备地址为1的线圈状态,起始地址为1,线圈数量为0。此操作可以监控电机驱动器的状态,确保电机的运行安全。
modbus.read_discrete_inputs(1, 1, 0)
  • 该语句用于从Modbus从设备地址1开始读取离散输入,起始地址为1,读取的输入数量为0。这是Modbus协议中常用的操作,通常用于读取开关、按钮等数字输入状态。
modbus.read_holding_registers(1, 1, 0, True)
  • 此语句用于从从设备地址1读取保持寄存器,起始地址为1,读取寄存器数量为0。signed True表示读取的值是有符号的。这种寄存器通常用于存储设备参数或状态。
modbus.read_input_registers(1, 1, 0, True)
  • 该语句用于从Modbus从设备地址1读取输入寄存器,起始地址为1,读取寄存器数量为0,并且读取的值是有符号的。输入寄存器通常用于存储来自传感器的数据。
modbus.write_multiple_coils(1, 1, 0)
  • 该语句用于向从设备地址1的多个线圈写入输出值。起始地址为1,输出值为0。线圈通常用于控制设备的启停或某些开关状态。
modbus.write_multiple_registers(1, 1, 0, True)
  • 此语句用于向从设备地址1的多个寄存器写入值。起始地址为1,寄存器值为0,并且该值是有符号的。这用于更新设备中的配置或状态。
modbus.write_single_coil(1, 1, 0)
  • 该语句用于向从设备地址1的单个线圈写入值。输出地址为1,输出值为0。此操作通常用于控制某个单一设备或功能。
modbus.write_single_register(1, 1, 0, True)
  • 此语句用于向从设备地址1的单个寄存器写入值,寄存器地址为1,寄存器值为0,该值是有符号的。此操作通常用于写入配置参数或控制设备。
1~6,15,16
  • 该语句用于定义Modbus通信中使用的功能码,此处设置为READ_COILS_STATUS,表示读取线圈状态。此功能码通常用于读取数字输出的状态。
    • READ_COILS_STATUS:读取线圈状态,通常用于读取数字输出的状态。
    • READ_INPUT_STATUS:读取输入状态,通常用于读取数字输入的状态。
    • READ_HOLDING_REGISTERS:读取保持寄存器,通常用于读取可写入的数据寄存器。
    • READ_INPUT_REGISTERS:读取输入寄存器,通常用于读取只读的模拟输入数据。
    • WRITE_SINGLE_COIL:写入单个线圈,通常用于设置数字输出的状态。
    • WRITE_SINGLE_REGISTER:写入单个保持寄存器,通常用于写入数据到寄存器中。
    • WRITE_MULTIPLE_COILS:写入多个线圈,通常用于同时设置多个数字输出的状态。
    • WRITE_MULTIPLE_REGISTERS:写入多个保持寄存器,通常用于写入一系列寄存器。
modbus.find_address
  • 该语句用于获取Modbus从设备的地址。这个操作对于从多个设备中获取数据时很关键,可以确保指令发送到正确的设备。
modbus.find_function
  • 该语句用于获取当前Modbus请求中所使用的功能码。这对调试和验证设备操作是否正确非常重要。
modbus.find_quantity
  • 该语句用于获取要读取或写入的寄存器或线圈的数量。此参数决定了当前Modbus命令涉及多少数据。
modbus.function_init(1, 0, 0)
  • 该语句初始化Modbus从设备的功能码操作,设置起始地址为0,读取线圈的数量为0。此命令用于开始执行读取线圈状态的操作。
modbus.receive_req_create_pdu()
  • 该语句用于接收应用数据单元(ADU)请求,这是Modbus协议传输的数据帧。设备通过此请求了解接收到的数据。
modbus.create_slave_response(0)
  • 该语句用于发送ADU响应,其中包含Modbus从设备的响应数据。此操作通常在设备处理完成请求后执行,将结果返回给主设备。
modbus.update_process(1, 0, 0, [0, 0, 0])
  • 该语句用于更新Modbus从设备的READ_COILS_STATUS功能代码。它设置了起始地址为0,读取数量为0,并且使用一个列表来存储从设备返回的数据。此命令通常用于从设备接收数据请求后,更新设备的线圈状态。
modbus._mdbus_uart.any()
  • 该语句用于检查UART缓存区中是否有数据。这在串行通信中非常重要,确保设备可以处理和读取未处理的数据。
modbus._mdbus_uart.read()
  • 该语句用于读取UART缓存区中的所有可用数据。这通常用于在串口通信中清空缓存并处理所有收到的数据。
modbus._mdbus_uart.readline()
  • 该语句用于从UART中读取一行数据,直到遇到换行符。它通常用于以行格式传输的数据,例如传感器读取或日志记录。
modbus._mdbus_uart.read(10)
  • 该语句从UART中读取指定数量的字符(此处为10个字符)。它对于固定长度的数据传输非常有用,例如读取特定格式的传感器数据。
modbus._mdbus_uart.write('')
  • 该语句通过UART写入数据,具体写入内容为双引号内的内容。用于串口通信中的数据发送。
modbus._mdbus_uart.write(''+"\r\n")
  • 该语句通过UART写入一行数据并自动加上换行符。它通常用于发送一行格式的数据,便于接收端按行处理。
modbus._mdbus_uart.write(bytes([0, 0, 0]))
  • 此语句用于通过UART发送原始数据。在此示例中,原始数据通过一个列表构建,包含三个元素 [0, 0, 0],表示发送三个字节的原始数据。该指令常用于串口通信中,当需要精确控制发送的字节数据时使用,例如控制外部设备或传输低级协议数据。
On This Page