纵观网络上各位大神在数控方面的神作,却没有什么人做一些分享,那么,从我开始好了,这里只做了STC12C5A60S2这种51单片机成功对接Grbl上位机软件以及将接受到的G代码转换为float型坐标,验证这么一个功能,为以后深入编写电机控制,做一个基础铺垫。
这里所完成的功能很简单,所以代码也不难,主要是了解Grbl通信协议,以及G代码解析两个点,下面,我带大家来解读这两个点。
1、了解Grbl
在百度文库上,我上传了基本的协议,可以点击查看
这里我就不赘述了。
但是有一点,通信就是,你问我一句,我回你一句,所以是上位机先问下单片机:你是不是Grbl设备啊?,然后单片机得回答说:是啊,我是Grbl xx,然后上位机收到回复后才开始建立通信,这一点,在下面程序里的setup();完成
通信完全建立好后,就进入loop();函数里面,这时就等待上位机发送G代码了,上位机每次发送一行代码,单片机接受后,处理完成后,回复ok,上位机才会发送下一句。
基本就是这些了,其实很简单是不是。
2、将通信协议写入程序代码中,并完成G代码解析:
首先你应该有一点编程基础,然后应该就不难了。
其中动用的主要子函数是
Echo_Position(float x,float y, float z);
用来反馈当前坐标的
Analysis_Gcode(unsigned char *p_buffer);
用来解析G代码的
以下是函数的主体。
#include"STC12C5A60S2.h"
#include"UART.h"
#include"M_string.h"
#include"stdio.h"
enum axis{X_AXIS=0,Y_AXIS,Z_AXIS,E_AXIS};
xdata float Machine_Coordinates[4]