完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
背景:
在移植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在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表示落笔。 测试结果: 实物图: |
|
|
|
只有小组成员才能发言,加入小组>>
609 浏览 0 评论
6122 浏览 1 评论
3731 浏览 7 评论
TIM3定时器输出PWM波控制LED灯的亮暗程度,PWM输出的高电平还有不同的值吗?
2333 浏览 11 评论
1685 浏览 5 评论
1163浏览 8评论
4028浏览 6评论
582浏览 6评论
613浏览 6评论
1211浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 粤ICP备14022951号 )
GMT+8, 2023-7-28 06:35 , Processed in 0.744208 second(s), Total 67, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:粤 B2-20160233 工商网监 粤ICP备 14022951 号