步进电机和限位开关的加速度

电子说

1.3w人已加入

描述

步骤1:使用的资源

今天我们将使用以下组件列表进行组装:

•直径8mm,间距2mm的梯形主轴

•直径8mm间距8mm的梯形主轴

•8x2主轴的法兰螺母

•8x8主轴的法兰螺母

•8毫米直径主轴的轴承

•10mm直径圆柱线性导轨

•10mm导轨的圆柱滚子轴承

•10mm圆柱导轨的支架

•NEMA 17电机

•轴联轴器

•Arduino Mega

•驱动程序DRV8825

•4x4矩阵键盘

•显示诺基亚5110

•各种各样塑料零件

•螺栓和螺母

•木底座

•外部电源12V

•红外传感器

第2步:演示

我们今天的大会非常简单类似于带有主轴和步进电机的Arduino Uno视频。

我需要更改什么?这次,我选择了Arduino Mega来使用路线终点开关,您可以在项目的右侧看到该路线终点开关,因为行程终点开关用于最快的主轴中。每个菜单都在ATmega中该程序的源代码中进行了说明。在视频中的演示中,我们使引擎移动了5厘米,以显示加速和减速情况。然后,它返回15厘米并触摸行程开关的终点,从而停止发动机。

步骤3:航向开关的终点

它是做什么用的?限位开关是通过停止发动机运动来限制路线的机械元件。它们用于机器组装中以保护机械性能。在CNC机床中,键还用作参考点,例如,将坐标轴归零。市场上有几种类型的键,其中包括:按钮,红外传感器,电容传感器等。

在我们的组装件中,我们使用红外传感器,如上图所示。

步骤4:示例代码

在arduino上有一个源代码,其中显示了Setup(设置)以及如何在行程开关和加速结束时移动步进电机。这是lib StepMotor,它是我制作的一个库,可以操纵8825、4988和TB6600驱动程序,并允许您播放更大的引擎,例如Nema 23或34。

然后,我们配置驱动器引脚,每毫米及周围的步距以及微速。我还以最大和最小速度配置节气门运动,并激活发动机动力输出端口。最后,限位开关销被激活。

#include

DRV8825 d1;

void setup() {

//Configuracao dos pinos do driver

d1.pinConfig(2,3,4,5,6,7,8,9);

//configuracao de passos por milimetro

d1.stepPerMm(100);

//configuracao de passos por volta

d1.stepPerRound(200);

//configuracao de micropasso

d1.stepConfig(1);

//configuracao do movimento (aceleracao, velocidade maxima, velocidade minima)

// tempos em uSegundos

// Aceleração é o decremento de tempo a cada novo passo

d1.motionConfig(20,1500,5000);

//reseta o driver

d1.reset();

//ativa as portas saídas de potencia do motor

d1.enable(HIGH);

//Pinos das chaves de fim de curso e se ativam em nivel alto ou baixo

// d1.endstopConfig(min,max,HIGH ou LOW);

d1.endstopConfig(10,11,HIGH);

}

下面是发动机代码示例。

void loop() {

//move o motor 100mm em direcao crescente

d1.motorMoveTo(100, HIGH);

//aguarda 1 segundo

delay(1000);

//move o motor 100mm em direcao decrescente

d1.motorMoveTo(100, LOW);

//aguarda 1 segundo

delay(1000);

}

步骤5:课程切换结束

代码:在我们的代码中,我们将采取行动

bool DRV8825::canGo(bool direction)

{

if(LVL) // se: as chaves de fim de curso ativam em nível alto

{

if(direction && !digitalRead(EMAX)) //se: move positivamente E o fim de curso máximo NÃO está ativado

return true;

if(!direction && !digitalRead(EMIN)) //se: NÃO move positivamente E o fim de curso mínimo NÃO está ativado

return true;

}

else //senão: as chaves de fim de curso ativam em nível baixo

{

if(direction && digitalRead(EMAX)) //se: move positivamente E o fim de curso máximo está ativado

return true;

if(!direction && digitalRead(EMIN)) //se: NÃO move positivamente E o fim de curso mínimo está ativado

return true;

}

return false;

}

步骤6:加速

步进电机

在一定的时间间隔内,通过高低脉冲控制电动机的步进。

为了使发动机不以最大速度直接启动,我们使用加速度。

加速会改变每一步的脉冲时间以改变发动机转速,然后逐渐增加到最大速度以加速,然后逐渐减小直到停止减速。

加速可以通过多种方式实现。

我们创建的代码示例了步进电机中加速度的使用。

步骤7:加速度-代码

简单的加速度代码示例。

在此代码中,脉冲时间在每一步都由用户选择的值减少,直到中途或连续l发动机达到最大速度,即设置的最短脉冲时间。

void DRV8825::motorMoveTo(double distance, bool direction) //(distância, direção, tempo da largura do pulso em microssegundos (metade do tempo em nível alto, metade em nível baixo))

{

digitalWrite(DIR, direction);

long accSpeed = SMIN;

long steps = distance*SPM;

long stepsToStop;

bool flag = true;

for(long i = 0; i 《 steps; i++){

if(i 《 (steps)/2){

if(accSpeed》SMAX){

if(canGo(direction)){

digitalWrite(STP, HIGH);

delayMicroseconds(accSpeed/2);

digitalWrite(STP, LOW);

delayMicroseconds(accSpeed/2);

}

else{

delayMicroseconds(accSpeed);

}

accSpeed = accSpeed - ACC;

}

这时,将存储电动机为达到该路径的最大速度而执行的脉冲量。

else

{

if(flag){

stepsToStop = i;

flag = false;

}

if(canGo(direction)){

digitalWrite(STP, HIGH);

delayMicroseconds(SMAX/2);

digitalWrite(STP, LOW);

delayMicroseconds(SMAX/2);

}

else{

delayMicroseconds(SMAX);

}

}

}

此数量将与达到行程结束之前用于发动机减速的量相同。

要使发动机减速,脉冲时间会增加

else

{

if(i 《 steps-stepsToStop){

if(canGo(direction)){

digitalWrite(STP, HIGH);

delayMicroseconds(SMAX/2);

digitalWrite(STP, LOW);

delayMicroseconds(SMAX/2);

}

else{

delayMicroseconds(SMAX);

}

}

else

{

if(canGo(direction)){

digitalWrite(STP, HIGH);

delayMicroseconds(accSpeed/2);

digitalWrite(STP, LOW);

delayMicroseconds(accSpeed/2);

}

else{

delayMicroseconds(accSpeed);

}

accSpeed = accSpeed + ACC;

}

}

}

}

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分