开源改变世界

步骤不成比例 #566

推推 grbl 3年前 (2023-01-22) 69次浏览

关闭
OldETC 开启了这个issue 2015 年 1 月 12 日 · 2 条评论
关闭

步骤不成比例#566

OldETC 开启了这个issue 2015 年 1 月 12 日 · 2 条评论

注释

步骤不成比例 #566

Grbl 0.9 Arduino R3。步骤不成比例…即在步进驱动程序中运行 1/2 步进算法。
我正在运行的代码是 G91 x100,100 到 1000 不等,看看我是否能看到任何变化。

GRBL 设置:
$0=100(步进脉冲,usec)
$1=100(步进空闲延迟,毫秒)
$2=0(步进端口反转掩码:00000000)
$3=7(dir 端口反转掩码:00000111)
$4=0(步进启用反转,布尔)
$5=0(限制引脚反转,布尔)
$6=0(探针反转,布尔)
$10=3(状态报告掩码:00000011)
$11=0.020(结点偏差,mm)
$12=0.002(电弧公差,毫米)
$13=0(报告英寸,布尔)
$14=1(自动启动,布尔)
$20=0(软限制,布尔)
$21=0(硬限制,布尔)
$22=0(归位周期,布尔)
$23=0 (归位方向反转掩码:00000000)
$24=100.000(归位进给,mm/min)
$25=150.000(归位搜索,mm/min)
$26=250(归位去抖,毫秒)
$27=5.000(归位牵引,mm)
$100=157.840(x,步长/mm)
$101=157.840(y,步长/mm)
$102=157.840(z,步长/mm)
$110=152.400(x 最大速率,毫米/分钟)
$111=152.400(y 最大速率,毫米/分钟)
$112=152.400(z 最大速率,毫米/分钟)
$120=100.000(x 加速度,毫米/秒^2)
$121 =100.000(y 加速度,mm/sec^2)
$122=100.000(z 加速度,mm/sec^2)
$130=200.000(x 最大行程,mm)
$131=200.000(y 最大行程,mm)
$132=200.000(z最大行程,毫米)

在示波器上,步进的正侧始终为 5.45ms,负侧始终为 7.25ms。开环运行,电机无负载,从两个线圈都通电 1 和 3 的位置开始。使用 SEED 电机驱动器为来自 Arduino UNO R3s 的步进电机提供驱动器。
步进驱动代码:
// 演示功能:驱动步进电机的应用方法。

// 硬件:步进电机 – 24BYJ48,Seeed’s Motor Shield v2.0

// 作者:Frankie.Chu

// 日期:2012 年 11 月 20 日
// 由 HLHowell 修改,使用引脚 2,3 直接控制 GRBL

定义 MOTOR_CLOCKWISE 1

定义 MOTOR_COUNTER_CLOCKWISE -1

/*** _引脚定义_**********/

定义 MOTORSHIELD_IN1 8

定义 MOTORSHIELD_IN2 11

定义 MOTORSHIELD_IN3 12

定义 MOTORSHIELD_IN4 13

定义 CTRLPIN_A 9

定义 CTRLPIN_B 10

定义 STEP_IN 2

定义 DIR_IN 3

定义电流表 A0 // 读取 Ir 的顶部

定义 Imax 2 // 最大 2A

define Ir 0.62 // 电流监测电阻

const unsigned char stepper_ctrl[]={0x27,0x17,0x1e,0x2e};

int stepperMaxSpeed=300; /* 最大转速/
int StepperDirection=1; /
 1=顺时针,-1=逆时针/
int number_of_steps = 200; /
每转步数/
int Idrive=255;
内部步骤;/
由步进表的大小设置。/
unsigned int micros_delay=100; /
保持step高的时间/
int step_number;
/
 **************************************************** *********_/
/_功能:获取步进电机旋转_/
/_参数:int steps,总步数和//电机旋转的方向,垂直于驱动端观察
/
/轴 //
如果 DIR > 0,则顺时针旋转, //
如果DIR < 0 , 则逆时针旋转。*/
/*************************************************** ************ /
void step(void)
{
/
此处时,已接收到步骤输入。将
电机按指定方向步进一步。*/
step_number=step_number+StepperDirection;
如果(步数<0)步数=4;
如果(步数>4)步数=0;
// Serial.println(step_number);
PORTB = stepper_ctrl[step_number];
}

无效初始化()

{
//中断();
//序列号.begin(9600);
//延迟(20000);

无中断();

pinMode(MOTORSHIELD_IN1,输出);/* 设置驱动位方向 */
pinMode(MOTORSHIELD_IN2,OUTPUT);
pinMode(MOTORSHIELD_IN3,输出);
pinMode(MOTORSHIELD_IN4,输出);

引脚模式(CTRLPIN_A,输出);/* 设置控制位方向 */
pinMode(CTRLPIN_B,OUTPUT);
数字写入(CTRLPIN_A,高);
数字写入(CTRLPIN_B,高);

pinMode(STEP_IN,INPUT); /* GRBL 输入控制引脚 */
pinMode(DIR_IN,INPUT);

停止(); /* 通过禁用驱动器来停止电机 */

StepperDirection = MOTOR_CLOCKWISE;
steptblct=sizeof(stepper_ctrl);
}

/**********************************************/

void stop()
{
/*将所有电机引脚接地,以停止电机。*/

端口=端口&0x06;/* 强制所有输入接地 */

}

void setup()
{
initialize();//步进电机的初始化。
步进方向=1;
}

无效循环()
{

// 调试检查
digitalWrite(CTRLPIN_A,HIGH);
如果 (digitalRead(STEP_IN))
{
while (digitalRead(STEP_IN)); // 等待步骤释放
if (digitalRead(DIR_IN))
{
StepperDirection=MOTOR_CLOCKWISE;
}
else
{
StepperDirection=MOTOR_COUNTER_CLOCKWISE;
}
step();//步进电机移动1步
}
}

按顺时针方向行驶。

电机每秒最多 394 步。这些设置得到 324.64,所以应该可以正常工作。尝试了更快和更慢,但脉冲的关系没有改变,尽管频率改变了。

如果我以这种方式将它放在机器上,它会产生共振,并在机械装置中产生额外的驱动噪音。

经过检查,只有一个我无法解释的工件,步进驱动器 UNO 的 PIN 9 显示 10us 宽的 PWM 负脉冲。我一直在追逐这个几个星期。找不到来源。
没有示波器相机,但如果你想要的话,我可以尝试用手机拍摄图像。

我现在正在检查 GRBL 代码以查看是否可以隔离问题。

步骤不成比例 #566
成员

@OldETC: 我很难理解问题是什么。随着时间的推移,步长本身应该保持固定,这是由步进脉冲设置设置的,并且当电机速度增加时,脉冲的频率应该增加。

您帖子后半部分的代码在 Grbl 源代码中不存在,我不熟悉它的用途。猜测,它看起来像是 Seeed Motor Shield v2.0。Grbl 不支持此板。

步骤不成比例 #566
作者

发现那个错误。这是我的步进驱动器将一个索引走得太远了。我将再看一看 SEED 软件。谢谢。
很抱歉打扰了。

喜欢 (0)