循迹小车作品说明书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1 电路设计 (1)
1.1 总体方框图 (1)
1.2 工作原理 (1)
2 各主要电路及部件工作原理 (1)
2.1 三路循迹电路简要说明 (1)
2.2 电压比较电路简要说明 (2)
2.3 电机驱动电路简要说明 (3)
2.4 复位电路简要说明 (3)
2.5 电源电路简要说明 (4)
3 主要程序段 (4)
4 元器件清单 (7)
5 作品介绍 (7)
5.1 作品简介 (7)
5.2 流程图 (8)
6 设计总结 (9)
6.1 设计心得体会 (9)
6.2 改进意见 (9)
附录一循迹小车原理图 (10)
正文
1 电路设计
1.1 总体方框图
图1 总体方框图
1.2 工作原理
a)三路循迹电路:通过3个TCRT5000光电传感器,来循着黑色路线,从而通过单
片机控制电机驱动来控制电机的运行方式和方向。
b)电机驱动:通过单片机控制小车的左右两侧电机的运行方式(正转、反转、停止),
并对电机运行速度进行调节。
2 各主要电路及部件工作原理
2.1 三路循迹电路简要说明
三路循迹电路通过3个TCRT5000传感器来寻找黑色路径,当左侧传感器检测到黑线,单片机通过电机驱动控制右侧电机正转,左侧电机停转,小车左转。直到中间传感器检测到黑线此时两侧电机都正转,小车直线行走。当右侧传感器检测到黑线,单片机通过电机驱动控制左侧电机正转,右侧电机停转,小车右转,直到中间传感器检测到黑线此时两侧电机都正转,小车直线行走。
图2-1 循迹电路
2.2 电压比较电路简要说明
LM324N 简绍:简单地说,电压比较器是对两个模拟电压比较其大小(也有两个数字电压比较的,这里不介绍),并判断出其中哪一个电压高,如图2-2所示。图2-2(a)是比较器,它有两个输入端:同相输入端(“+” 端) 及反相输入端(“-”端),有一个输出端Vout(输出电平信号)。另外有电源V+及地(这是个单电源比较器),同相端输入电压VA,反相端输入VB。VA和VB的变化如图2-2(b)所示。在时间0~t1时,VA>VB;在t1~t2时,VB>VA;在t2~t3时,VA>VB。在这种情况下,Vout的输出如图2-2(c)所示:VA>VB时,Vout输出高电平(饱和输出);VB>VA时,Vout输出低电平。根据输出电平的高低便可知道哪个电压大。
图2-2 电压比较原理图
2.3 电机驱动电路简要说明
L298N简绍:L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便
图2-1-2-1 驱动电路
图2-3 电机驱动电路
2.4 复位电路简要说明
图2-4 复位电路
说明:只要保证复位位RST保持10ms以上的高电平,单片机就可以复位。
2.5 电源电路简要说明
单片机和电机电源供给采用单独供电方式,用三节干电池给单片机供电,用6v蓄电池给电机供电。
3 主要程序段
#include
#include"main.h"
uint16 n,a;
void main()
{
ENA=1;
ENB=1;
while(1)
{
car_straight();
delay_ms(500);
a=scan_TRCT();
if(a!=2)
switch(a)
{
case 1: {
car_left();
delay_ms(200);
break;
}
case 2: {
car_straight();
delay_ms(200);
break;
}
case 3: {
car_right();
delay_ms(200);
break;
}
default:break;
}
}
}
void car_straight()
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
delay_ms(5);
}
void car_left()
{
IN1=1;
IN2=0;
delay_ms(4);
IN1=0;
IN2=1;
delay_ms(1);
}
void car_right()
{
IN3=1;
IN4=0;
delay_ms(4);
IN3=0;
IN4=1;
delay_ms(1);
}
uint8 scan_TRCT()
{
uint8 b=2;
if(!TRCT2)
{
if(TRCT1&&TRCT3)b=2;
else
if(TRCT1)b=1;
else
if(TRCT3)b=3;
}
else b=2;
return b;
}
void delay_ms(uint16 t)
{
n=0;
TMOD|=0x01;