运动控制编程参考 通过51单片机控制mpc014运动控制模块的程序,完整电路图和程序工程可到官网下载。
void main(void) { initial(); init_uart(); //ES = 1; //EA = 1; P_SW2 = 0x80; XOSCCR = 0xc0; //启动外部晶振 while (!(XOSCCR & 1)); //等待时钟稳定 CKDIV = 0x00; //时钟不分频 CKSEL = 0x01; //选择外部晶振 P_SW2 = 0x00; led=0; delay_nms(10) ; /*独立运行轴1,2,3轴回原点,更多方式回原点可自由组合。mpc013专用 set_inp_speed(1 ,200,300,100); //设加速度50000Hz/s2, 运行速度30000Hz pmove(1,1,-1000000,1); // 1轴多脉冲负方向运动,碰到原点限位自动停止 pmove(1,2,-1000000,1); // 2轴多脉冲负方向运动,碰到原点限位自动停止 pmove(1,3,-1000000,1); // 2轴多脉冲负方向运动,碰到原点限位自动停止 do { get_inp_state( 1, 2,inbuf); //只需读出2个字节来判断轴状态 } while(inbuf[1]); //inbuf[1]数据为0表示所有轴都停 set_command_pos(1 ,1,0); //设1轴坐标 set_command_pos(1 ,2,0); //设2轴坐标 set_command_pos(1 ,3,0); //设3轴坐标 */ /*插补运行轴1,2,3,4轴回原点,更多方式回原点可自由组合。mpc014专用 set_inp_speed(1 ,200,300,100); //设加速度50000Hz/s2, 运行速度30000Hz inp_move4(1,1,2,3,4,-1000000,-1000000,-1000000,-1000000 ,1); // 多轴多脉冲插补负方向运动,碰到原点限位自动停止 do { get_inp_state( 1, 2,inbuf); //只需读出2个字节来判断轴状态 } while(inbuf[1]); //inbuf[1]数据为0表示所有轴都停 set_command_pos(1 ,1,0); //设1轴坐标 set_command_pos(1 ,2,0); //设2轴坐标 set_command_pos(1 ,3,0); //设3轴坐标 set_command_pos(1 ,4,0); //设3轴坐标 */ while(1) { if((!b1)&&(!b1_state)) { delay_nms(10); if((!b1)&&(!b1_state)) { led=0; b1_state=1; // set_inp_speed(1 ,500,500,100); /*下面的指令会直接发到缓存区自动排队运行。mpc014专用*/ inp_move2(1,2 ,3 ,5000 ,5000 ,1); inp_move2(1,2 ,3 ,5000 ,5000 ,1); inp_move3(1,2,3,1 ,500,1000 ,2000 ,1); wait_delay(1 ,1000); inp_move2(1,1 ,2 ,1000 ,1000 ,1); write_bit(1 , 0, 1); inp_move1(1,2,10000 ,1 ) ; inp_move1(1,1 ,1000 ,1) ; inp_arc(1,2,3, -200, 200, -200, 0,0,1) ; /*上面的指令会直接发到缓存区自动排队运行。mpc014专用*/ // set_inp_speed(1 ,5000,5000,100); // pmove(1,1,1000, 1); // pmove只有mpc013能用 // wait_stop(1 ,1); // pmove(1,2,-100, 1); while(!b1); } } else led=1; if((!b1)&&(b1_state)) { delay_nms(10) ; if((!b1)&&(b1_state)) { led=0; //sudden_stop(1,1); // 立即停止独立轴1轴 ,只适用于mpc013 //sudden_stop(1,6); // 立即停止所有插补轴 get_inp_state( 1, 20,inbuf); //读出20个字节数据放入数组 USRAT_transmit(inbuf,20); // 串口将数组数据发送出去查看 if(inbuf[1]==0) //inbuf[1]数据为0表示所有轴都停 b1_state=0; while(!b1); } } } } 串口G代码控制 Mpc014g模块可通过串口G代码控制模块,串口通讯速率为115200bps,数据位为8位,停止位1位,无校验。 模块通讯协议完全兼容标准G代码,G代码详细的格式与用法请参考标准文档。上电芯片会主动发送字符“>”,工作时上位机每发送一条指令,会回复字符“ok”,发 M114会回复坐标。上位机只有当收到回复后,才可发送下一条指令。目前支持如下指令: G0-快速定位 坐标,单位mm。速度F表示mm/s。 如:G0 X10 Y10 F30000 G1 - 直线插补 世界坐标,单位mm。 如:G1 X10 Y10 F30000 G2 - 正圆插补 X,Y为终点坐标,I,J为圆心相对起点坐标。 如:G2 X-20 Y20 I-20 J0 F30000 G3 - 逆圆插补 如:G2 X-20 Y20 I-20 J0 F30000 G90 - 绝对坐标 如:G90 G91 - 相对坐标 如:G91 G92 - 设置坐标 如:G92 X0 Y0 M92 - 脉冲系数 每MM多少脉冲,模块默认系数为1。 如:M92 X200 Y200 Z200 E200 M109 - 等待延时,单位MS 如:M109 S2000 M110 - 端口输出 ,T为端口号,Z为值 如:M110 T6 Z1 M112 -急停 ,停所有轴,并清空缓存 如:M112 M114 -读取当前坐标 ,返回轴坐标 如:M114 M115返回轴状态 如:M115 M116返回剩余缓存数量 如:M116 M204 - 设置加速度S,单位mm/s2。 如:M204 S5000
|