【发布时间】:2021-09-11 04:14:32
【问题描述】:
我正在尝试用 Python 为树莓派(树莓派操作系统)制作通用步进电机驱动程序。当驱动器模块(连接到步进电机的物理设备)接收到脉冲时,步进器旋转一步(每转微步 1600 步)。脉冲由RPI.GPIO 模块控制)。为了控制速度,我使用内置的“时间”模块来设置脉冲之间的延迟。这是我的问题:速度不准确,高速是不可能的。我不认为它与溢出有任何关系。我的猜测是我达到了时间模块的限制,有人可以确认吗?这是我使用的代码:
def run(self, speed: float, rotations: float, direction: Direction = Direction.CLOCKWISE) -> None:
"""
Start stepper motor signal.
:param speed: Motor speed in RPM.
:param rotations: Amount of rotations motor turns.
:param direction: Set the direction of the motor ('CW' or 'CCW'), default='CW'.
:return: None
"""
steps: int = int(self.spr * rotations)
delay: float = 60/(self.spr*speed)
if delay <= 0:
raise ValueError('Speed cannot be zero or lower.')
elif delay < 0.0001:
raise ValueError(f'Maximum speed in this setup is: {60/(self.spr * 0.0001)} RPM.')
if not isinstance(direction, Stepper.Direction):
raise TypeError('direction must be an instance of Direction')
GPIO.output(self.dir, direction.value)
for _ in range(steps):
GPIO.output(self.pul, GPIO.HIGH)
sleep(delay / 2)
GPIO.output(self.pul, GPIO.LOW)
sleep(delay / 2)
【问题讨论】:
-
本页讨论了尝试将 Linux 设备用于“实时”任务的一些问题以及相关问题。 raspberrypi.org/forums/viewtopic.php?t=62820
-
通常你会想要一个微控制器设备(没有繁重的 Linux 操作系统)来执行实时任务(即电机步数),并且只需使用 raspberry-pi 来告诉微控制器移动到哪里。我知道这可能不是您的目标,但这就是通常这样做的原因。
标签: python time raspberry-pi stepper