⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 motor.c

📁 小车自动寻迹代码,可以进行电子设计,设计电动小车
💻 C
字号:
/****************************************************************
** 文件名:motor.c   电机驱动函数
****************************************************************/
 #include "config.h"
 /*#define T0_EN TIMSK |= (1<<OCIE0)|(1<<TOIE0)
 #define T0_UEN TIMSK &=~ (1<<OCIE0)|(1<<TOIE0)
 #define T0_start TCCR0 |= (1<<WGM00)|(1<<WGM01)|(1<<COM01)|0x04;
 //0x04 0100B 代表256预分频
 #define T0_stop TCCR0 = 0x00
 
 #define T2_EN TIMSK |= (1<<OCIE2)|(1<<TOIE2)
 #define T2_UEN TIMSK &=~ (1<<OCIE2)|(1<<TOIE2)
 #define T2_start TCCR2 = (1<<WGM20)|(1<<WGM21)|(1<<COM21)|0x06
 #define T2_stop TCCR2 = 0x00
 
 
 
/************************左电机动作*****************************/
//左电机前进
void motor_left_forward(uint8 speed)
{
 motol_uen1;
 motol_en2;
 if(speed!=0) //加入调速指令
  {
   OCR0=speed;
  }
 T0_EN;
}
//左电机后退
void motor_left_backward(uint8 speed)
{
 motol_en1;
 motol_uen2;
 if(speed!=0) //加入调速指令
  {
   OCR0=speed;
  }
 T0_EN;
}
//左电机速度设定
void motor_left_speed_set(uint8 speed)
{
 if(speed!=0)
  {
   OCR0=speed;
  } 
}
//左电机滑行
void motor_left_stop(void)
{
 motol_uen1;
 motol_uen2;
 T0_UEN;
}
//左电机急停
void motor_left_quick_stop(void)
{
 motol_en1;
 motol_en2;
 T0_UEN;
}

/*************************右电机动作*****************************/
//右电机前进
void motor_right_forward(uint8 speed)
{
 motor_en1;
 motor_uen2;
  if(speed!=0) //加入调速指令
  {
   OCR2=speed;
   while(ASSR&(1<<TCR2UB)==1) ; //异步操作需要等待 OCR2写入完毕
  }
//T2_EN;
}
//右电机后退
void motor_right_backward(uint8 speed)
{
 motor_uen1;
 motor_en2;
 if(speed!=0) //加入调速指令
  {
   OCR2=speed;
   while(ASSR&(1<<TCR2UB)==1) ; //异步操作需要等待 OCR2写入完毕
  }
//T2_EN;
}
//右电机速度设定
void motor_right_speed_set(uint8 speed)
{
 if(speed!=0)
  {
   OCR0=speed;
   while(ASSR&(1<<TCR2UB)==1) ; //异步操作需要等待 OCR2写入完毕
  } 
}
//右电机滑行
void motor_right_stop(void)
{
 motor_uen1;
 motor_uen2;
T2_UEN;
}

//右电机急停
void motor_right_quick_stop(void)
{
 motor_en1;
 motor_en2;
 T2_UEN;
}

/**********************小车动作*****************************/

void straight(void) //直行
{//motor_right_quick_stop();
 motor_left_forward(0x01);
 motor_right_forward(0x01);

}

void turn_left(void) //左转
{
motor_left_forward(0xB0);
 motor_right_forward(0x05);
}

void turn_right(void) //右转
{
 motor_left_forward(0x05);
 motor_right_backward(0xB0);
}

void straight_back(void) //直回
{//motor_right_quick_stop();
 motor_left_backward(0x01);
motor_right_backward(0x01);
}

void stop(void)       //急停
{
 motor_left_quick_stop();
 motor_right_quick_stop();
}

void mic_turn_right(void) //向右微调
{
 motor_left_forward(0xa0);
 motor_right_backward(0x30);
}

void mic_turn_left(void) //向左微调
{
motor_left_forward(0xa0);
 motor_right_forward(0x30);
}

void flag_test(void)  //测试小车状态
{
 uint8 temp;
 temp = PINA&0x0f; //PINA的低四位
 switch(temp)
  {
   case 0x0f:
       flag = 0;  //未偏
	   break;
   case 0x01:
   case 0x06:
   case 0x07:
   case 0x08:
   case 0x0a:
   case 0x0e:
       flag = 1;  //左偏
	   break;
   case 0x02:
   case 0x04:
   case 0x05:
   case 0x09:
   case 0x0b:
   case 0x0d:
       flag = 2;  //右偏
	   break;
   case 0x0c:
       flag = 3;  //前两出线
	   break;
   case 0x03:
       flag = 4; //后两出线
	   break;
   case 0x00:
       flag = 5; //脱轨
	   break;
   default:
       break;
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -