智能机器人制作【全过程】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
智能机器人制
#include
#define uchar unsigned char
#define uint unsigned int
/********************端口定义*****************************/
sbit IN1=P1^0; //电机控制端口//
sbit IN2=P1^1; //电机控制端口//
sbit IN3=P1^2; //电机控制端口//
sbit IN4=P1^3; //电机控制端口//
sbit LN=P2^0; //红外探测端口//
sbit LW=P2^1; //红外探测端口// sbit RW=P2^2; //红外探测端口//
sbit RN=P2^3; //红外探测端口//
/*****************子函数声明****************************/
void ahead(void); //前进
void left(void); //左转
void right(void); //右转
void stop(void); //停止
main() {
while(1)
{
if(RN==1&&LN==1&&RW==1&&LW==1)
{ahead(); continue;}
if((RN==0||LN==0)&&RW==1&&LW==1)
{right(); continue;}
if(RN==1&&LN==1&&(RW==0||LW==0))
{left(); continue;}
if(RN==0&&LN==0&&RW==0&&LW==0)
stop();
} } void ahead()
{
IN2=1;
IN3=0;
IN4=1;
}
void left()
{
IN1=0;
IN2=0;
IN3=0;
IN4=1;
} void right()
{
IN1=0; IN2=1;
IN3=0;
IN4=0;
void stop()
{
IN1=0;
IN2=0; IN3=0;
IN4=0;
}
5.功能模块介绍
5.1电源模块
供电系统的原理图如下
7805的5V输出给单片机以及各个功能模块供电,在实际应用过程中我
们可能需要好几块7805,但是我们要注意的是:各个7805之间的输出绝对不能
够并联。7806的6V输出给点击供电作为动力电源。7805与7806要公地。
5.2 电机驱动模块的原理及驱动程序
5.2.1 电机驱动模块的原理
L298内部的原理图如下
OUT1与OUT2与小车的一个电机的正负极相连,OUT3与OUT4与小车的另一个电机的正负极相连,单片机通过控制IN1与IN2,IN3与IN4分别控制电机的正反转。ENA与ENB分别控制两个电机的使能。
L298控制表
注意:X表示状态不定电机驱动模块原理图
L298有两路电源分别为逻辑电源和动力电源,上图中6V为逻辑电源,12V为动力电源。J4接入逻辑电源,J6接入动力电源,J1与J2分别为单片机控制两个电机的输入端,J3与J5分别与两个电极的正负极相连。ENA与ENB直接接入6V逻辑电源也就是说两个电机时刻都工作在使能状态,控制电机的运行状态只有通过J1与J2两个接口。由于我们使用的电机是线圈式的,在从运行状态突然转换到停止状态和从顺时针状态突然转换到逆时针状态时会形成很大的反向电流,在电路中加入二极管的作用就是在产生反向电流的时候进行泄流,保护芯片的安全。
L298的PCB安装图
5.2.2 电机驱动模块测试程序
程序清单1
/***************************************** 实现电机的方向控制
******************************************/
#include
#define uchar unsigned char
#define uint unsigned int
/*************************************** 端口定义
****************************************/ sbit IN1=P1^0; //P10与电机驱动IN1相连
sbit IN2=P1^1; //P11与电机驱动IN2相连
sbit IN3=P1^2; //P12与电机驱动IN3相连
sbit IN4=P1^3; //P13与电机驱动IN4相连
/*************************************** 各个子函数定义
****************************************/ void Turn_left(void) { IN1=0; IN2=1;
IN3=0;
IN4=1;
} void Turn_right(void) {
IN1=1; IN2=0; IN3=1;
}
void Go(void)
{
IN1=0; IN2=1;
IN3=1;
IN4=0;
}
void Back(void)
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void Delay(uchar dly)
{