资源描述
循迹小车设计报告基于单片机C
21
2020年4月19日
文档仅供参考,不当之处,请联系改正。
循迹小车
组员;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<reg51.h>
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<zkb1)
ENA=1;
else
ENA=0;
if (t<zkb2)
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;
default :break;
}
}
//**********主函数*********//
void main()
{
init();
zkb1=15;
zkb2=15;
while(1)
{
IN1=0;
IN2=1;//*******给电机加启动*****//
IN3=0;
IN4=1;
ENA=1;
ENB=1;
while (1)
{
xunji();//***********循迹************//
}
}
}
5.参考资料
教科书,百度。
展开阅读全文