循迹小车设计报告-基于单片机C

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

循迹小车设计报告-基于单片机C

循迹小车

组员;09机电2班,陈海韬,吴顺全

目录

目录 0

摘要; (1)

1.任务及要求 (1)

1.1任务 (1)

2.系统设计方案 (1)

2.1小车循迹原理 (1)

2.2控制系统总体设计 (2)

3.系统方案 (2)

3.1 循迹传感器模块 (2)

3.1.1红外线传感器ST188简介 (3)

3.1.2比较器LM324简

介 (3)

3.1.3具体电路 (3)

3.1.4传感器安装 (4)

3.2控制器模块 (5)

3.3电源模块 (6)

3.4电机及驱动模块 (6)

3.4.1电机 (6)

3.4.2驱动…………………………………………………

(6)

4.软件设计 (7)

4.1PWM控制 (7)

4.2总体软件流程图 (7)

4.3。小车循迹流程图 (8)

4.4中断程序流程图 (8)

4.5单片机测序 (9)

5.参考资料 (9)

自动循迹小车

摘要;

3.3电源模块

两节3.7伏点离子电池和7808的稳压芯片。VI是7.4输入端,VO是5输出。

3.4.1电机

电机型号:GA12YN20

该款电机适用条件:

直径:12mm,

机身不含轴长度:26mm

电压工作范围:DC1.5- 12.0V

6V的空载转速有: 120rpm

轴长:10mm

4.软件设计

4.1 PWM控制

是通过设计编程ENA,ENB等于0或1的占空比来调速。

4.2总软件流程图

4.3小车循迹流程图

4.4中断程序流程图

4.5程序

#include

unsigned char zkb1=0;//左占空比

unsigned char zkb2=0; //右占空比

unsigned char t=0;//定时器中断计数器

sbit LSEN1=P1^0;

sbit LSEN2=P1^1;

sbit RSEN1=P1^2;

sbit RSEN2=P1^3;

sbit IN1=P2^0;

sbit IN2=P2^1;

sbit IN3=P2^2;

sbit IN4=P2^3;

sbit ENA=P2^4;

sbit ENB=P2^5;

//************初始化定时器,中断************** void init()

{

TMOD=0x01;

TH0=0XF8;

TL0=0X30;

EA=1;

ET0=1;

TR0=1;

}

//***********中断函数+脉宽调制************* void timer() interrupt 1

{

if (t

ENA=1;

else

ENA=0;

if (t

ENB=1;

else

ENB=0;

t++;

if (t>=30)

{t=0;}

}

//**************直走***************//

void qianjin()

{

zkb1=15;

zkb2=15;

}

//**************左走函数1***************//

void turn_left1()

{ zkb1=25;

zkb2=0;

}

//**************左走函数2***************//

void turn_left2()

{

zkb1=25;

zkb2=0;

}

//**************右走函数1***************//

void turn_right1()

{ zkb1=0;

zkb2=25;

}

//**************右走函数2***************//

void turn_right2()

{ zkb1=0;

zkb2=25;

}

//**************循迹函数***************//

void xunji()

{

unsigned char flag;

if ((RSEN1==0)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==0))

{flag=0;} //**************直走***************//

else if ((RSEN1==1)&&(RSEN2==0)&&(LSEN1==0)&&(LSEN2==0)) {flag=1;} //**************右走函数1***************//

else if ((RSEN2==1)&&(RSEN1==0)&&(LSEN1==0)&&(LSEN2==0)) {flag=2;} //**************右走函数2***************//

else if ((LSEN1==1)&&(LSEN2==0)&&(RSEN1==0)&&(RSEN2==0)) {flag=3;} //**************左走函数1***************//

else if ((LSEN2==1)&&(LSEN1==0)&&(RSEN1==0)&&(RSEN2==0)) {flag=4;} //**************左走函数2***************//

else if ((RSEN1==1)&&(RSEN2==1)&&(LSEN1==1)&&(LSEN2==1)) {flag=5;} //**************直走***************//

switch (flag)

{

case 0:qianjin();

break;

case 1: turn_right1();

break;

case 2:turn_right2();

break ;

case 3:turn_left1();

break;

case 4:turn_left2();

break ;

case 5:qianjin();

break;

相关文档
最新文档