单片机小车课程设计

时间:2024.3.31

电气工程学院

一、课程设计任务书             

1.课程设计项目

寻迹小车设计

2.设计内容

1)        设计题目总体设计方案

2)        硬件电路设计

3)        C语言程序编制与调试

4)        电路系统的综合调试

5)        撰写课程设计论文

6)        完成课程设计论文答辩

3.设计要求

1)        设计一台自动寻电动小车。

2)        电动车能自动寻迹,按设定好的轨迹前进。

3)        寻迹由小车前端左右两个光电开关完成,通过调整RW2和RW4可以改变光电开关的灵敏度。

4)        设计结束学生应撰写课程设计报告一份,完成课程设计答辩;

5)        课程设计报告内容包括:课程设计题目;设计计划与方案论证;设计方案实现(含程序);课程设计心得。

6)课程设计报告的撰写格式应符合单片机实用技术课程设计报告格式要求。

4、参考资料

[1]李广弟,朱月秀,王秀山编著.单片机基础. 北京:北京航空航天大学出版社,2001

[2] 何立民编著.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社,1999

[3] 蔡美琴等编著.MCS-51 单片机系统及应用.北京:高等教育出版社.1992

5.设计进度(20##61320##624

6.设计地点

新实验楼323微机实验室


单片机原理及

应用课程设计

班    级:          

姓    名:    

学    号:    

指导教师:  

撰写日期:     


 

第一章 课程设计内容与要求分析. 1

1.1课程设计内容. 1

1.2课程设计要求分析. 1

1.3系统单元电路组成. 2

1.3.1循迹模块部分. 2

1.3.2电机驱动部分. 4

1.3.3 静态显示及按键. 6

第二章 控制系统程序设计. 7

单片机原理及应用课程设计. 8

参考文献. 9


第一章 课程设计内容与要求分析

1.1课程设计内容

本题目以89C51单片机为核心器件组成小车循迹控制系统,采用定时中断实现精确定时;利用提供的单元模块构成硬件系统。

循迹小车控制系统的设计要求:

1)基本功能:

循迹小车在不同区域速度不一样。沿着导航线,一次通过区域1(慢速区)、区域2(加速区)、区域3(慢速区)实现分段限速控制,到达终点后停下。循迹用小车前端左右两个光电开关完成,通过调整RW2和RW4可以改变光电开关的灵敏度。循迹小车路径如图1-1所示:

图1-1 循迹小车路径图

    2)扩展功能:

利用按键实现小车的运行控制,一个按键控制小车的前进,一个按键控制小车的停止,还有一个按键控制小车每一段区域所消耗时间及三段区域所消耗时间总和的控制。设置数码管时间显示模块:即当小车经过一个区域,显示出总时间。

1.2课程设计要求分析

  小车设计分析如下表1-1所示:

表1-1 循迹小车模块设计任务

1.3系统单元电路组成

基于题目要求实现的各项功能及难易程度,在车辆选择上,对模型车进行简单改装,车辆性能良好,易于控制,运行稳定。在处理器方面,智能小车采用STC10F04XE单片机作为核心的控制系统,结合STC10F04XE单片机实现小车沿各种不同黑线运行、显示等功能。循迹小车硬件部分可以分为三个模块:分别是驱动模块、循迹检测模块和显示模块。

1.3.1循迹模块部分

循迹模块是整个设计的关键部分,小车能够按照黑线运行到目的地位置是能够顺利完成的重要环节。循迹检测原理如图5-1所示,由光电开关和比较器组成,漫反射式光电开关能反映反射光的强弱,用比较器进行分辨,从而循迹。

小车首先能够按照黑线路径行驶,其次能够准确检测判断起点和终点。采用红外线发射接收一体管,当发出的红外线照射到白色的平面后反射,若红外接收管能接收到反射回的光线则检测出白线继而输出低电平,若接收不到发射管发出的光线则检测出黑线继而输出高电平。最后通过LM339把输出的电压信号转化为TTL电平信号送给单片机。为了屏蔽外界光的影响,使灵敏度大幅提升,可以在对管上套一塑料纸。这种设计应用简单,体积小,工作稳定,精度较高。

红外对管原理图如图1-2所示。

图1-2红外对管原理图

LM339集成块内部装有四个独立的电压比较器,该电压比较器的特点是:

1)失调电压小,典型值为2mV;

2)电源电压范围宽,单电源为2-36V,双电源电压为±1V-±18V;

3)对比较信号源的内阻限制较宽;

4)共模范围很大,为0~(Ucc-1.5V)Vo;

5)差动输入电压范围较大,大到可以等于电源电压;

6)输出端电位可灵活方便地选用。

LM339的功能:

输出负载电阻能衔接在可允许电源电压范围内的任何电源电压上,不受 Vcc端电压值的限制.此输出能作为一个简单的对地SPS开路(当不用负载电阻没被运用),输出部分的陷电流被可能得到的驱动和器件的β值所限制.当达到极限电流(16mA)时,输出晶体管将退出而且输出电压将很快上升.输出饱和电压被输出晶体管大约60ohm 的γSAT限制。当负载电流很小时,输出晶体管的低失调电压(约1.0mV)允许输出箝位在零电。

1.3.2电机驱动部分

电机驱动电路是单片机控制信号的数字信号和电机驱动信号的模拟信号相互衔接的地方,采用L293D芯片的驱动模块。L293D采用16引脚DIP封装,其内部集成了双极型H-桥电路,所有的开量都做成n型。这种双极型脉冲调宽方式具有很多优点,如电流连续;电机可四角限运行;电机停止时有微振电流,起到“动力润滑”作用,消除正反向时的静摩擦死区:低速平稳性好等。L293D通过内部逻辑生成使能信号。H-桥电路的输入量可以用来设置马达转动方向,使能信号可以用于脉宽调整(PWM)。另外,L293D将2个H-桥电路集成到1片芯片上,这就意味着用1片芯片可以同时控制2个电机。每1个电机需要3个控制信号EN12、IN1、IN2,其中EN12是使能信号,IN1、IN2为电机转动方向控制信号,IN1、IN2分别为1,0时,电机正转,反之,电机反转。选用一路PWM连接EN12引脚,通过调整PWM的占空比可以调整电机的转速。选择一路I/O口,经反向器74HC14分别接IN1和IN2引脚,控制电机的正反转。

L293D 是单块集成电路,高电压,高电流,四通道驱动, 设计用来接受DTL或者TTL逻辑电平,驱动感性负载(比如 继电器,直流和步近马达),和开关电源晶体管, 电机驱动原理图如图1-4所示。

简单的使用是作为2个桥,一对通道连接起来有一个使能输入。分离的输入引脚提供某种逻辑,允许用低电压操作,并且还包括内置的钳位二极管。

这个设备适用于高达5KHz的开关应用。 L293D是16引脚塑料封装,中间的4个引脚是短路的(为了散热)。 最高工作电压为36V,最低工作电压为7V.

图1-3 电机驱动原理图

L293D的逻辑控制见如下表1-2。其中C、D分别为IN1、IN2或IN3、IN4;L为低电平,H为高电平。

表1-2  L298对直流电机控制的逻辑真值表

1.3.3 静态显示及按键


第二章 控制系统程序设计

这次单片机课设主要就是检验我们的单片机程序设计编写能力。在老师给定元器件的基础上,了解各元器件的功能,按照课设要求编写程序,实现小车的分段速及及每段消耗时间的数码显示,并且利用按键来控制小车的前进与停止及时间的显示。

程序编写要分段进行调试,最后把所有的分段程序放在一起,实现最后的课设要求。首先进行的是小车循迹的编程调试,即对小车的前进,左转,右转,停止四个状态进行编程;其次是能实现变速分区域行驶和扫描到三条黑线后自停,分区域变速行驶,主要就是判断小车前面的两个对管同时扫描到黑线的次数,由于各段的速度不一样,致使一个扫描周期内小车所走过的路程也不一样,要保证小车无论通过以何种速度通过黑线时,小灯均能够及时的同时扫描到黑线并记录。因此,在进行测试的时候,尽可能使第二道黑线稍微宽一下,这样确保小车在第二段区域快速行驶时,能够扫描到黑线。但宽度不宜太宽,否则容易使小车扫描到两次,迫使小车在第二段区域便停车。最后是通过按键自动记录各段所消耗的时间以及利用令外两个按键控制小车的急停和启动。


单片机原理及应用课程设计

此次寻迹小车这个课程设计主要就是在老师提供现有元器件基础上,通过了解电路结构及原理设计一个程序,使小车满足按黑线寻迹的要求,并且在区域一缓慢行驶,当到达区域二时全速行驶,到达区域三时又变为缓慢行驶。此外,小车的速度控制主要是通过脉宽调速进行,将第一个区域和第三个区域设置成相同的较低速度,将区域二设置成全速前进。

最后老师要求修改程序利用按键控制小车的运行状态,即一个键按下时小车立即停止,另一个键按下时小车又能够按照原来的状态要求继续前进,还有一个键按下时显示小车每一段运行的时间以及最后显示消耗时间总和。

本设计主要用到了单片机的通用I/O口的读写功能,通过实际操作进一步掌握了51单片机的使用。同时,通过单片机外围电路的设计,更深入学习了51单片机在日常生活中的应用。通过编写程序,也进一步提高了我们的动手能力以及分析解决错误的能力,使我们能够更好的将所学知识应用到实际中来。

本系统虽然能够基本满足设计要求,能够较快较平稳的是小车沿黑带线行驶,但由于经验能力水平有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改进,最后感谢老师们的细心指,如果没有你们的帮助此次课程设计我应该不会那么顺利的完成。

                                         总结人:

                                         总结日期:


参考文献

[1]李广弟,朱月秀,王秀山编著.单片机基础. 北京:北京航空航天大学出版社,2001

[2]何立民编著.MCS-51系列单片机应用系统设计系统配置与接口技术.北京:北京航空航天大学出版社,1999

[3] 蔡美琴等编著.MCS-51 单片机系统及应用.北京:高等教育出版社.1992


附录

  本系统是以STC89S51单片机为控制器,在KEIL开发环境中,运用C语言对单片机进行编写。主程序主要起导向和决策作用,它控制整个系统协调稳定地运作。系统各种功能主要通过调用具体的子程序来实现。系统程序如下:

#include <reg51.h>

sbit en1= P0^0;                        //右边电机

sbit RIN1=P0^1;

sbit RIN2=P0^2;

                             

sbit LIN1=P0^3;                      //左边电机

sbit LIN2=P0^4;

sbit en2= P0^5;

sbit R_CQG=P0^6;                 //接收信号处理口

sbit L_CQG=P0^7;                 

unsigned char flag;

unsigned char t,t1,t2,t3;                  //定义总时间、一段时间、二段时间、三短时间

unsigned char LPWM,RPWM;                     //左、右PWM变量

unsigned char disp[4];                       //定义4个显示缓冲单元

unsigned char code dtab[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,

                                             0x01,0x09,0x91,0xfd,0xff};

                                                               //共阳极接法的数字0~9段码表

void Delayms(unsigned int x);             //定义xms延时函数,x就是形式参数

void  Disply164(void);                          //显示函数

/***************************************************

显示函数:用串行口方式0驱动74L164

***************************************************/

void  Disply164(void)                           //显示函数                                                                                                           

{

       unsigned char i;

       for(i=0;i<4;i++)                        //循环4次(4个数码管)

       {

          SBUF=dtab[disp[i]];           //查表取段码,串行送出

              Delayms(2);

        while(TI==0);

        TI=0;         

       }

}

void timer0(void) interrupt 1

       static unsigned char click=0;   //中断次数计数器变量

       static unsigned char num;

TH0=(65536-200)/256;

       TL0=(65536-200)%256;

       ++click;

       if (click>=100)

              click=0;

       if (click<=LPWM)             /*当小于占空比值时输出低电平,高于时是高电平,从而实现占空比的调整*/

         LIN1=0;

       else

         LIN1=1;

       if (click<=RPWM)                                                                                                                  

         RIN1=0;

       else

         RIN1=1;

       if(++num>=250)                                    //50ms送一次显示

       {

              num=0;

              Disply164();

       }

}

void timer1(void) interrupt 3

       static unsigned char num;       //中断次数计数器变量

       TH1=0X3c;                           //恢复定时器初始值

       TL1=0Xb0;

       if(++num>=20)

       {

              num=0;

              if(flag==0)

                     t1++;

              else if(flag==1)

                     t2++;

              else if(flag==2)

                     t3++;           

       }

       disp[2]=12;

       disp[3]=flag;

}

void init()

{

       SCON=0X00;                                          

TMOD=0X11;

       TH0=(65536-200)/256;

       TL0=(65536-200)%256;

       TH1=0X3c;                           //恢复定时器初始值

       TL1=0Xb0; 

       EA=1;

       ET0=1;

       TR0=1;

       ET1=1;

       TR1=1;

}

void main()

{

       init();

       en1=1;

       en2=1;

       LIN2=1;

       RIN2=1;

       disp[0]=0;

       disp[1]=0;

       disp[2]=0;

       disp[3]=0;

       while(1)

       {

              if(L_CQG==0&&R_CQG==0)

              {

                     Delayms(1050);

                     if(L_CQG==0&&R_CQG==0)

                     {

                            flag++;

                            if(flag>=3)

                                   flag=3;         

                     }

              }

              if(flag==0)

              {

                     disp[0]=t1%10;

                     disp[1]=t1/10;

                     if(L_CQG==1&&R_CQG==1)    

                            {LPWM=50;RPWM=60;}

                            else if(L_CQG==0&&R_CQG==1)

                                   {LPWM=15;RPWM=60;}

                            else if(L_CQG==1&&R_CQG==0)

                            {LPWM=50;RPWM=20;}     

              }

              else if(flag==1)

              {

                     disp[0]=t2%10;

                     disp[1]=t2/10;

                     if(L_CQG==1&&R_CQG==1)    

                     {LPWM=90;RPWM=100;}

                            else if(L_CQG==0&&R_CQG==1)

                                  {LPWM=20;RPWM=100;}

                                   else if(L_CQG==1&&R_CQG==0)

                                          {LPWM=90;RPWM=15;}     

              }

             

              else if(flag==2)

              {

                     disp[0]=t3%10;

                     disp[1]=t3/10;

                     if(L_CQG==1&&R_CQG==1)    

                            {LPWM=50;RPWM=60;}

                            else if(L_CQG==0&&R_CQG==1)

                                   {LPWM=15;RPWM=60;}

                            else if(L_CQG==1&&R_CQG==0)

                                   {LPWM=50;RPWM=20;}            

              }

              else if(flag==3)

              {    

                     t=t1+t2+t3;

                     en1=0;

                     en2=0;

                   Delayms(20000);

                     disp[0]=t%10;

                     disp[1]=t/10;

                     disp[2]=11;

                     disp[3]=10;

                     TR1=0;   

              }

       }           

}

/**************************************************************

函数功能:延时函数

**************************************************************/

void Delayms(unsigned int x)              //定义xms延时函数,x就是形式参数

{

       unsigned int i;

     unsigned char j;

     for(i=x;i>0; i--)

          for(j=110;j>0;j--);

}    

二、评语及成绩

更多相关推荐:
单片机课程设计总结

单片机课程设计心得体会这个学期的单片机课已经早早的上完了但是理论纯属理论没有与实践的结合总让我们学的不踏实感觉没有达到学以致用的效果所庆幸的是在课程介绍考试完之后老师给我们安排了这次单片机课程设计给了我们学以致...

单片机课程设计及个人心得感受

本科课程设计(论文)单片机控制流水灯的正常工作及外部中断控制灯的亮灭学院名称:汽车与交通工程学院专业:汽车服务工程班级:13汽服B学号:*************姓名:*******指导教师姓名:***二〇**…

单片机课程设计小结

单片机课程设计小结单片机课程设计小结一做了两周的课程设计有很多的gt心得体会有关于单片机方面的更多的是关于人与人之间关系方面的我们组一共有三个人但其他两个人是真的神龙见首不见尾除了在最后答辩的时候他们一起坐在了...

20xx单片机课程设计心得体会

20xx单片机课程设计心得体会单片机课程设计心得体会课程设计是大学课堂中常见的课堂模式该模式更好的培养学生的综合能力课程模式主要由选题到定稿从理论到实践组成以下由第一公文网整理关于单片机课程设计的心得单片机课程...

单片机课程设计总结

单片机基础知识单片机的外部结构:1、DIP40双列直插;2、P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平)3、电源VCC(PIN40)和地线GND(PIN20);4、高电平…

单片机课程设计

信息与电气工程学院课程设计说明书20xx20xx学年第2学期课程名称单片机应用课程设计题目简易数字计数器设计专业班级自动化1101学生姓名学号110410指导教师设计周数2周设计成绩20xx年7月10日单片机课...

单片机课程设计报告

JINGCHUUNIVERSITYOFTECHNOLOGY电子信息工程学院单片机原理与应用技术课程设计报告电子秒表系统专业班级11电气三班姓名学号指导教师邓鹏提交日期20xx年6月目录一前言311课程设计的目的...

60秒倒计时器-单片机课程设计报告

机电工程学院课程设计报告书题目制作60秒倒计时器专业机电一体化班级机电10307学号10023582学生姓名张洋指导教师黎老师20xx年12月12一设计要求由单片机接收小键盘阵列设定倒计时时间倒计时的范围最大为...

单片机课程设计报告

单片机课程设计报告简易频率计设计学院地信院班级生医1201班姓名刘柏林学号0402120xx6目录摘要第一章频率计设计概述第二章AT89C51单片机及其引脚说明第三章分频电路第四章显示电路第五章系统整体原理图第...

单片机课程设计报告

单片机课程设计报告数字温度计系别物理系专业班级电子信息工程1205班姓名赵晓晖学号20xx050650820xx年5月28日数字温度计摘要随着时代的进步和发展单片机技术已经普及到我们生活工作科研各个领域已经成为...

单片机课程设计报告

单片机课程设计报告姓名张磊学号20xx123345班级机制1413一实验课题微型直流电机调速控制二实验原理直流电机即将直流电能转换成机械能直流电动机或将机械能转换成直流电能直流发电机的旋转电机本设计主要是利用单...

单片机课程设计报告

江南大学课程名称设计题目基于单片机的步进电机控制器的设计班级姓名指导教师物联网工程学院课程设计报告单片机原理及应用自动化班学号评分20xx年6月29日一步进电机概述步进电动机又称脉冲电动机或阶跃电动机国外一般称...

单片机课程设计小结(42篇)