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