51控制4个步进电机

2020-01-16 18:29发布

看视频

STC12C5A60S2  T0、T1控制两个,T2的两个比较实现定时控制两个,目前最快速度1000RPM,再快就要堵转了。

想问一下如果用其他芯片,控制起来会不会方便一点。

http://v.youku.com/v_show/id_XMTY1MjYzMjEy.html
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
48条回答
liujing0146
2020-01-16 23:20

(原文件名:IO.jpg)


(原文件名:6560.jpg)

/*T0定时值装载*/
void ct0_rewrite()
{
        TH0=(WaitTable[now_speed_z]/256);    //重置初值
        TL0=(WaitTable[now_speed_z]%256);
}

/*================T0中断服务程序,Z轴定时输出脉冲================*/
void timer0Int(void) interrupt 1
{
        if( Z_CLK_NOW == 0 )  //如果Z轴脉冲没有输出
        {
                Z_CLK=1;            //Z轴脉冲输出
                Z_CLK_NOW = 1;
                TH0=0x0ff;       //脉冲宽度初值
                TL0=0xa3;
        }
        else   //Z轴脉冲正在输出
        {
                ct0_rewrite();    //重置初值
                Z_CLK=0;       //脉冲下降沿
                Z_CLK_NOW = 0;
          if(Z_CW_CCW==CW)
                  Z_nonce++;
          else
                  if(Z_nonce) Z_nonce--;
          if(up_down_z==UP)       //加速或匀速
          {
                  if(now_rate_z)     //加速运行
                  {
                          now_speed_z++;      //实时速度加一级
                    now_rate_z--;       //剩余变速等级减1
                  }
                  else                   //匀速运行
                  {
                          if(now_mov_z)
                            now_mov_z--;      //剩余脉冲减1
                          else                //匀速结束
                            if(manu_z==0)        //manu=0为非手动状态,转减速
                              up_down_z=DOWN;    //转减速
                  }
                  if (mac_a==2)  //如果是主加工程序状态2
                          if( (Z_nonce>=workbench[mac_b-1]-400) & (now_speed_z>Ttotal[5]*5) )   //如果Z轴值大于距离台面高4MM处,速度大于5倍设定速度
                          {
                                  now_speed_z--;     //减一个速度,直到等于Ttotal[5]*5
                                  now_rate_z=0;      //清零剩余变速等级
                          }
          }
          else                  //减速
          {
                  if(now_speed_z) //减速中
                          now_speed_z--;     //实时速度减一级
                  else                //减速结束
                          if(reset_z==0)
                          {
                      stop_z=STOP;
                      ET0 = 0;                                        // 关闭T0中断
                TR0 = 0;                                        // 停止T0
                    }
          }
  }
}



Z_nonce是绝对位置值

一周热门 更多>