循迹小车作品说明书

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档