打印
[控制方法]

spi串口4轴插补程序

[复制链接]
644|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ww75815895|  楼主 | 2019-9-30 12:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
运动控制编程参考
通过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

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

24

帖子

0

粉丝