首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >利用树莓派和Matlab实现步进电机的控制

利用树莓派和Matlab实现步进电机的控制
EN

Stack Overflow用户
提问于 2018-04-04 17:33:48
回答 1查看 1.1K关注 0票数 0

我们正在尝试旋转步进电机(Nema23 57HS22-A)在特定的步数使用树莓派3和数字步进驱动器DM556使用Matlab。

我们使用以下python代码成功地将步进电机旋转到特定的步数(在此代码中为3000步):

引脚29连接到DM556的PUL+,每当步进电机从“低”变为“高”时,它就会旋转步进电机。引脚31连接到决定步进电机旋转方向的DIR+。引脚32连接到ENA+,使步进电机处于“低”状态。PUL-、DIR-、ENA-连接到GND (不在代码中)。这段代码将步进电机旋转3000步到一边和3000步到另一边在无限循环中。

代码语言:javascript
复制
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,然后我们写了这段不旋转电机的代码:

代码语言:javascript
复制
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代码成功地旋转了步进电机,但没有特定的步数:

代码语言:javascript
复制
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毫秒),因此步进电机移动得太慢而看不见。有没有其他功能或方法来减少时间,以使电机运行得更快?

EN

回答 1

Stack Overflow用户

发布于 2018-05-18 12:56:35

要控制伺服电机,您可以使用伺服obj和Raspberry Pi支持包中提供的writePosition()函数。

代码语言:javascript
复制
r = raspi;
servoControlPin = 29;
s = servo(r,servoControlPin);
for i = 1:3000
    position = (180*i)/3000
    writePosition(s,position);
end

有关如何配置最小/最大脉冲持续时间的更多信息,请参阅doc page of servo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49647528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档