我们正在尝试使用 raspberry pi 3 和使用 Matlab 的数字步进驱动器 DM556 以特定步数旋转步进电机(Nema23 57HS22-A)。
我们设法使用以下 python 代码以特定步数(此代码中为 3000 步)旋转步进电机:
引脚 29 连接到 DM556 的 PUL+,每次步进电机从“低”变为“高”时,它都会旋转步进电机。引脚 31 连接到决定步进电机旋转方向的 DIR+。引脚 32 连接到 ENA+,使步进电机处于“低”状态。PUL-,DIR-,ENA- 连接到 GND(不在代码中)。此代码将在无限循环中将步进电机旋转 3000 步到一侧并旋转 3000 步到另一侧。
Import RPi.GPIO as GPIO
Import time
GPIO.setmode(GPIO.BOARD)
GPIO.setup(29,GPIO.out) // GPIO 5
GPIO.setup(31,GPIO.out) // GPIO 6
GPIO.setup(32,GPIO.out) // GPIO 12
GPIO.output(32.GPIO.LOW)
While True:
GPIO.output(31,GPIO.HIGH)
For i in range(0,3000):
GPIO.output(29,GPIO.HIGH)
Time.sleep(0.0005)
GPIO.output(29,GPIO.LOW)
Time.sleep(0.0005)
GPIO.output(31,GPIO.LOW)
For i in range(0,3000):
GPIO.output(29,GPIO.HIGH)
Time.sleep(0.0005)
GPIO.output(29,GPIO.LOW)
Time.sleep(0.0005)
我们尝试将此代码转换为 matlab,并编写了不旋转电机的代码:
clear all; close all; clc;
rpi1 = raspi('192.168.67.187','pi','raspberry');
pul_x = 5;
dir_x = 6;
ena_x = 12;
configurePin(rpi1,pul_x,'DigitalOutput');
configurePin(rpi1,dir_x,'DigitalOutput');
configurePin(rpi1,ena_x,'DigitalOutput');
writeDigitalPin(rpi1,pul_x,1);
writeDigitalPin(rpi1,dir_x,0);
writeDigitalPin(rpi1,ena_x,0);
for i = 1:200
writeDigitalPin(rpi1,pul_x,1);
pause(0.001);
writeDigitalPin(rpi1,pul_x,0);
pause(0.001);
end
我们成功地用这个 matlab 代码旋转了步进电机,但没有特定的步数:
clear all; close all; clc;
rpi1 = raspi('192.168.67.187','pi','raspberry');
pul_x = 5;
dir_x = 6;
ena_x = 12;
configurePin(rpi1,pul_x,'PWM');
configurePin(rpi1,dir_x,'DigitalOutput');
configurePin(rpi1,ena_x,'DigitalOutput');
writeDigitalPin(rpi1,dir_x,0);
writeDigitalPin(rpi1,ena_x,1);
writePWMDutyCycle(rpi1, pul_x, 0.5);
writePWMFrequency(rpi1, pul_x, 1000);
for i = 1:200
writeDigitalPin(rpi1,ena_x,0);
end
writeDigitalPin(rpi1,ena_x,1);
我们试图修复第二个代码以使步进电机移动,但我们很高兴听到任何其他建议以特定步数旋转步进电机。
提前致谢。
编辑:
我们发现我们发布的第二个代码确实有效,但问题是命令 writeDigitalPin 花费了太多时间(20 毫秒),因此步进电机移动太慢而无法看到。是否有任何其他功能或方法可以减少时间以使电机运行得更快?