步骤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;
}
}
}
}
-
步进电机
+关注
关注
150文章
3112浏览量
147558 -
限位开关
+关注
关注
0文章
46浏览量
4804
发布评论请先 登录
相关推荐
评论