关闭 OldETC 开启了这个issue 2015 年 1 月 12 日 · 2 条评论 关闭 步骤不成比例#566 OldETC 开启了这个issue 2015 年 1 月 12 日 · 2 条评论 注释 老ETC 评论了 2015 年 1 月 12 日 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 代码以查看是否可以隔离问题。 成员 香奈儿 评论了 2015 年 1 月 12 日 @OldETC: 我很难理解问题是什么。随着时间的推移,步长本身应该保持固定,这是由步进脉冲设置设置的,并且当电机速度增加时,脉冲的频率应该增加。 您帖子后半部分的代码在 Grbl 源代码中不存在,我不熟悉它的用途。猜测,它看起来像是 Seeed Motor Shield v2.0。Grbl 不支持此板。 作者 老ETC 评论了 2015 年 1 月 14 日 发现那个错误。这是我的步进驱动器将一个索引走得太远了。我将再看一看 SEED 软件。谢谢。 很抱歉打扰了。 OldETC已完成 关闭 2015 年 1 月 14 日 喜欢 (0) EDM 的 grbl #565 你能解决 HOMING_FORCE_SET_ORIGIN 与 PARKING_ENABLE 的不兼容问题吗? #465 v1.3.8-EDGE 重启后键盘快捷键消失 #427 关闭 无法在 gsender 1.2.0 中打开 .gcode 文件 #367 RaspberryPi 运行 gsender 时出现问题 #89 向 fluidnc 发送 $$ 会导致 gsender 崩溃 #473 v1.3.8-EDGE 重启后键盘快捷键消失 #427 关闭无法在 gsender 1.2.0 中打开 .gcode 文件 #367RaspberryPi 运行 gsender 时出现问题 #89向 fluidnc 发送 $$ 会导致 gsender 崩溃 #473功能请求:抑制发送到机器的 gcode 中的 gcode 注释。 #444 关闭通过网络连接进行连接 #171操纵杆运动的剩余问题 #204 关闭新版本认为我的机器一直处于锁定状态 #474 关闭
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 代码以查看是否可以隔离问题。