基于51单片机的舞蹈机器人四路步进电机控制仿真

资料编号:091  下面是相关功能视频演示:

91-基于51单片机的舞蹈机器人四路步进电机控制仿真(源码+仿真+全套资料)

功能介绍:通过51单片机控制4个步进电机旋转,模拟出机器人的四肢动作,全套资料齐全:程序采用C语言,并且有中文注释,新手容易看懂,仿真采用Proteus,编程工具采用keil5

基于51单片机的舞蹈机器人四路步进电机控制仿真_第1张图片

 下面是部分程序展示:

void InitTimer(void) //初始化计数器
{
  TH0 = 0xFA;  //设置触发周期:1000次
  TL0 = 0x24;
  TMOD = TMOD |0x01;  //select mode 1
  TR0 = 1; //start timer0
  ET0 = 1; //enable timer 0 interrupt
  EA =1; //global interrupt enable
}

void SetAllSpeeds(void)  //设置各电机的速度,并让它运动起来
{
  char delta;  //旋转方向 1:正 -1:反  0:停
  for(i=0;i<8;i++)
  {
    P2=pin[i]; //发送锁存信号
    speed_tickers[i] += speeds[i]; //计数值增加 speed[i]越高,增加得越多
    if(speed_tickers[i] >= MAX_SPEED_TICKER) //如果计数值超过预定最大值,就发送脉冲
    {
      speed_tickers[i] = 0;
      delta = 1;
    }
    else if(speed_tickers[i] <= -MAX_SPEED_TICKER) //同上,反响旋转
    {
      speed_tickers[i] = 0;
      delta = -1;
    }
    else delta = 0;
    cur_step[i] += delta;
    cur_step[i] &= 0x07; //计算当前应发脉冲
    P0 = steps[cur_step[i]];
    P2 = 0;
  }
}

void OnTimer(void) interrupt 1 using 2
{
  unsigned char j;
  SetAllSpeeds();
  InitTimer();
  time_t++;
  if(time_t==200) //每200次触发读取一次新舞步数据
  {
    for(j=0;j<8;j++)
      speeds[j] = dancedata[data_pointer+j];
    data_pointer += 8;
    time_t = 0;
  }
}

基于51单片机的舞蹈机器人四路步进电机控制仿真_第2张图片

下面是该资料的分享下载链接:

https://pan.baidu.com/s/12GXiNAanLcw5hcnR2XlMfQ?pwd=m7h6 icon-default.png?t=M85Bhttps://pan.baidu.com/s/12GXiNAanLcw5hcnR2XlMfQ?pwd=m7h6  

你可能感兴趣的:(51单片机,机器人,单片机)