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

当一切准备就绪之后,会填充好对应的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表示落笔。

测试结果:

实物图:

  

参考资源链接:[Grbl主函数详解:初学者入门指南](https://wenku.youkuaiyun.com/doc/4sk7hmsn4h?utm_source=wenku_answer2doc_content) 要通过Grbl的主函数进行串口通信和初始化设置,首先需要理解主函数(main())在Grbl系统中承担的核心角色。主函数负责整个系统的初始化流程,包括串口通信的设置、步进电的配置、系统状态的检查与初始化等关键步骤。 串口初始化(serial_init())是整个通信设置的起点。你需要设定正确的波特率,以便与控制面板或电脑进行通信。例如,在Arduino平台上,通常会使用Serial.begin(波特率)来初始化串口通信。 接下来,设置加载(settings_init())将从存储设备(如EEPROM)中读取GRBL的配置参数,这些参数包括运动速度、加速度、步进电分辨率等。确保这些参数根据你的硬件配置进行了适当设置。 在步进电初始化(stepper_init())环节,你需要配置步进电的驱动方式和定时器中断。这一步骤确保了电可以响应来自Grbl的指令,并以精确的步长进行运动。 最后,系统初始化(system_init())环节包含了硬件的全局设置,例如引脚配置、中断设置、系统变量初始化以及系统中止标志的设置。这些都为后续的主循环运行提供了必要的前提条件。 在完成初始化后,系统将进入主循环(main_loop),这是一个无限循环,负责监听串口输入并根据接收到的G-code指令执行相应的动作。在这个循环中,系统会不断检查是否有新的数据到达,以及是否有新的指令需要处理。 为了更深入地理解和应用这些步骤,建议查阅《Grbl主函数详解:初学者入门指南》。这份资料详细解析了Grbl主函数中的关键代码和逻辑,帮助初学者从零开始构建对Grbl系统的全面理解。通过学习这些知识,你可以更好地控制步进电,实现精确的床控制和操作。 参考资源链接:[Grbl主函数详解:初学者入门指南](https://wenku.youkuaiyun.com/doc/4sk7hmsn4h?utm_source=wenku_answer2doc_content)
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值