基于stm32的grbl写字机器人(添加舵机支持)

背景:

在移植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轴方位信息存放在对应的变量中,再对其进行下一步的处理运算。

基于stm32的grbl写字机器人(添加舵机支持)

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

基于stm32的grbl写字机器人(添加舵机支持)

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

基于stm32的grbl写字机器人(添加舵机支持)

其中舵机控制部分需要自行添加,修改相应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表示落笔。

测试结果:

基于stm32的grbl写字机器人(添加舵机支持)

实物图:

基于stm32的grbl写字机器人(添加舵机支持)  基于stm32的grbl写字机器人(添加舵机支持)