89c51单片机智能小车

功能概述

智能小车采用前轮驱动,前轮左右两边各用一个电机驱动,分别控制两个轮子的转动从而达到转向的目的,后轮是万向轮,起支撑的作用。

避障部分,将3个红外线光电传感器分别装在车体的左中右,当车的左边的传感器检测到障碍物时,主控芯片控制右轮电机停止左轮转动,车向右方转向,当车的右边传感器检测到障碍物时,主控芯片控制左轮电机停止转动,车向左方转向,当前面有障碍物时规定车右转。而当小车同时有两个传感器接收到信号时,采用倒退方式转弯以避免碰到障碍物。

硬件设计

如下图所示,是本次设计智能小车的电路框图。

以STC89C52为电路的中央处理器,来处理传感器采集来的数据,处理完毕之后以便去控制电机驱动电路来驱动电机。电源部分是为整个电路模块提供电源,以便能正常工作。

避障电路

(1) 障碍物探测方案的选择

方案一:脉冲调制的反射式红外线发射接受器。由于采用该有交流分量的调制信号,则可大幅度减少外界干扰;另外红外线接受官的最大工作电流取决于平均电流。

如果采用占空比小的调制信号,再品均电流不变的情况下,顺势电流很大(50—100mA),则大大提高了信噪比。并且其反应灵敏,外围电路也很简单。它的优点是消除了外界光线的干扰提高了灵敏度。

方案二:采用超声波传感器,如果传感器接收到反射的超声波,则通知单片机前方有障碍物,如则通知单片机可以向前行驶。市场上很多红外光电探头也都是基于这个原理。这样不但能准确完成测量,而且能避免电路的复杂性

由以上两种方案比较可知。方案一要比方案二优势大,市场上很多红外观点探头也都基于这个原理。其电路简单,工作可靠,性能比较稳定。从而避免了电路的复杂性,因此我先用方案二作为小车的监测系统。

避障电路采用漫反射式光电开关进行避障。光电开关是集发射头和接收头于一体的检测开关,其工作原理是根据发射头发出的光束,被障碍物反射,接收头据此做出判断是否有障碍物。当有光线反射回来时,输出低电平;当没有光线反射回来时,输出高电平。单片机根据接收头电平的高低做出相应控制,避免小车碰到障碍物,由于接收管输出TTL电平,有利于单片机对信号的处理。

光电开关工作原理:

光电开关是通过把光强度的变化转换成电信号的变化来实现控制的。

光电开关在一般情况下,有三部分构成,它们分为:发送器、接收器和检测电路。

(2)信号检测模块

小车循迹原理是小车在画有黑线的白纸 “路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。笔者在该模块中利用了简单、应用也比较普遍的检测方法——红外探测法。

红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号,再通过LM324作比较器来采集高低电平,从而实现信号的检测。

避障亦是此原理。电路图如图3.4。

市面上有很多红外传感器,在这里我选用TCRT5000型光电对管。

单片机电路

本设计的主控芯片选择STC89C52,负责检测传感器的状态并向电机驱动电路发出动作命令。

复位电路采用手动复位。

单片机电路如下:

电机转速控制电路

转速控制采用基于PWM技术的脉冲调制技术,通过单片机输出两列PWM信号,经过l298N对电机进行速度调控。

电源电路

本系统所有芯片都需要+5V的工作电压,而干电池只能提供的电压为1.5V的倍数的电压,并且随着使用时间的延长,其电压会逐渐下降,故采用了一个12v蓄电池,再用LM7805稳压芯片。

L7805能提供最大1A的电流,足以满足芯片供电的要求。虽然微处理器和微控制器不需要支持电路,功耗也很低,但必须要加以考虑。

电源电路拟定为:

电机驱动电路

市场上用很多种类的小电压直流电动机,很方便的选择到。主要有普通电动机、和步进电动机。

方案一:采用步进电机,步进电动机的一个显著的特点就是具有快速启动和停止能力,能够达到我们所要求的标准。如果负荷不超过步进电机所能提供的动态转矩值,就能够立即是步进电机启动或反转。其转换灵敏度比较高。正转、反转控制灵活。但是步进电机的价格比较昂贵,对于我们的现状相差太远。

方案二:采用普通的直流电机。直流电机具有优良的调速特性,调速平滑、方便。调整范围广;过载能力强,能承受频繁的冲击负载,可实现频繁的无极快速启动、制动和反转。能满足各种不容的特殊运行要求。

由于普通直流电机价格适宜,更易于购买,并且电路相对简单,因此采用直流电机作为动力源

本设计采用L298N驱动使电机正反转从而做到前进,左转右转。

电机驱动一般采用H桥式驱动电路,L298N内部集成了H桥式驱动电路,从而可以采用L298N电路来驱动电机。通过单片机给予L298N电路PWM信号来控制小车的速度,起停。其引脚图如3.2,驱动原理图如图3.3。

源码

#include<reg52.h>

#include <intrins.h>

#include <string.h>

#define Busy 0x80 //用于检测LCM状态字中的Busy标识

#define LCM_Data P0

#define uchar unsigned char

sbit LCM_RS=P2^2;             //1602寄存器选择

sbit LCM_RW=P2^1;          //读/写控制

sbit LCM_E=P2^0;

sbit LLT=P1^7;//避障口

sbit RLT=P2^7;

sbit MLT=P3^4;

sbit S1=P1^0;   //传感器信号输入端口

sbit S2=P1^1;

sbit S3=P1^3;//INT

sbit S4=P1^5;//LLT

sbit S5=P1^6;//RLT

sbit S6=P1^2;

sbit S7=P1^4;//OUT

sbit LH=P2^3;    //电机1 左轮

sbit LL=P2^4;

sbit RH=P2^5;    //电机2 右轮

sbit RL=P2^6;

sbit ENA=P3^6;//电机左轮使能

sbit ENB=P3^7;//电机右轮使能

sbit key1=P3^0;

sbit key2=P3^1;   

sbit key3=P3^2;

sbit key4=P3^3;

/******************************************************

* 名    称:引脚定义

* 功    能:引脚定义

* 入口参数:无

* 出口参数:无

*******************************************************/

unsigned char

character1[][8]={ {0x2,0x02,0x2,0x02,0x1F,0x02,0x06,0x7},{0x00,0x0F,0x8,0x08,0xF,0x08,0x08,0x0F},

{0x00,0x1C,0x4,0x4,0x1C,0x4,0x4,0x1C},{0xA,0xA,0x2,0x02,0x02,0x02,0x02,0x2},{0x19,0x09,0x8,0x08,0x8,0x0A,0x0C,0x08},

{0x2,0x4,0x18,0x10,0x8,0x4,0x2,0x03}};

int C1=0,C2=0,C3;//计数单位

static int SU0=0,SU1=0,SU2=0,SU=0;

static int  SU3=0,V=0,V0=0,V1=0;

int tmp1=0,tmp2=0;//左右占空比调整tmp/T

int SPEED1,SPEED2;

uchar count=0; //初始化计数变量

uchar T=90; //pwm信号周期T*100us

/***********************************************************************

测距模块儿

***********************************************************************/

void delay10us() //延时,>10us

{

_nop_( );

_nop_( );

_nop_( );

_nop_( );

_nop_( );

_nop_( );

_nop_( );

_nop_( );

}

int mainceju()

{

char T;

int START,END,longth;

S3=0;S4=0;//初始化接口值

S4=1; //开始发射脉冲

delay10us(); //延时

while(!S3); //等待返回信号

START=(TH2*256+TL2);//开始计时

while(S3); //等待返回信号结束

END=(TH2*256+TL2);//关闭计时器

T=(TH0*256+TL0); //计算返回脉冲时间

longth=340*T/20000;//计算测距结果厘米

return(longth);

}

/*****************************************************************************************************

循迹模块儿

********

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值