📄 motor.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 + -