STM32
直播中

席毖庸

7年用户 1013经验值
擅长:596874
私信 关注
[问答]

怎么实现基于stm32的grbl写字机器人的设计?

怎么实现基于STM32的grbl写字机器人的设计?

回帖(1)

戴双宝

2021-11-26 09:18:52
背景:

在移植grbl到stm32的时候,源代码在Z轴抬笔控制支持使用的是步进电机,但是我手头上只有一个9G舵机,并且网上售卖的步进电机体积偏大不宜安装在Z轴笔架上,所以需要阅读代码,在了解Z轴的控制基础上,修改添加舵机支持。
基本信息:

正点原子战舰stm32f103zet6,Grbl Controller 3.6.1,写字机架构CoreXY,grbl库版本0.9j,CNC SHIELD V3电机扩展板,
A4988模块*2。
相关源码解析:

先来看一下函数大概的调用过程,
1)在main函数中调用protocol_main_loop函数进入死循环接收读取串口的G代码指令,当读取到回车换行符的时候,说明一行的G代码指令字符串信息已经被读取保存在line数组中。
2)调用protocol_execute_line函数里的gc_execute_line执行该条G代码指令。

  main
    protocol_main_loop
        protocol_execute_line
            gc_execute_line
在gc_execute_line函数里,会根据保存在line数组里的G代码指令信息,解析并设置各种标志变量,其中Z轴相关的设置代码如下图,把读取到的Z轴方位信息存放在对应的变量中,再对其进行下一步的处理运算。





当一切准备就绪之后,会填充好对应的buffer段信息,里面包含了各个执行线段的重要信息,并调用st_wake_up函数开定时器3。





然后在定时器3中断里,根据读取相应buffer信息,去修改定时器3下一个执行线段的arr和psc,配合另一个定时器4中断,控制引脚的高低电平,就可以输出pwm脉冲波,控制电机运转。整个定时器3中断程序如下:





其中舵机控制部分需要自行添加,修改相应CCR值即可。本修改方法有一定的限制,bit_istrue(st.dir_outbits,bit(Z_DIRECTION_BIT))的方位值在代码中是表示一个相对位置,比如说:第一次输入G01 X0 Y0 Z10 ,z方向为1,第二次输入G01 X0 Y0 Z5,z方向为0。所以,需要对输入的G代码指令有一定的要求,Z值最好是正值表示抬笔,负值表示落笔。比如说G01 X0 Y0 Z10表示抬笔,G01 X0 Y0 Z-10表示落笔。
测试结果:






实物图:



  

举报

更多回帖

发帖
×
20
完善资料,
赚取积分