找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6717|回复: 1
打印 上一主题 下一主题
收起左侧

自动循迹小车的设计制作(C题)论文

[复制链接]
跳转到指定楼层
楼主
ID:283194 发表于 2018-2-8 21:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
摘要
本次设计的自动循迹小车是以单片机STC89C52为主控制器。运用接近开关传感器来进行路径检测和速度监测模块。将检测数据传回单片机进行处理,同时,用单片机产生PWM波来控制小车的行进速度,并实时控制小车的行进状态。另外,在小车还扩展了LCD作为人机交互界面,以便于实时了解小车各监测器的状态,记录小车的实时数据。由于本次设计的是自动循迹小车,整个过程无需人工的任何干预,故而没有进行键盘及遥控等的人工操作设备。用传感器的实时监测和算法的紧密配合来保证小车的顺畅来完成任务。

目录

1 自动循迹小车的设计分析        1
1.1 设计要求        1
1.2 总体设计        1
1.3 方案论证        1
1.3.1 小车主体设计方案        1
1.3.2 电机驱动方案        2
1.3.3 传感器设计方案        2
1.3.4 显示模块设计方案        2
1.4 单片机资源分配        3
2 自动循迹小车硬件设计        3
2.1 理论分析与计算        3
2.2 驱动        3
2.3 信号采集系统        4
2.4 单片机最小系统        4
2.5 蜂鸣器        4
2.6 液晶显示        4
3 自动循迹小车软件设计        5
4 功能检测与调试        5
5 结与展望        6
参考文献        6
附录        7
附录1        7
附录2        7
附录3        7
附录4        7


1 自动循迹小车的设计分析
1.1 设计要求
本次比赛的首要任务是,设计制作一个自动循迹小车,能够沿着主办方提供的赛道,在规定的时间内跑完全程。赛道为一根直径0.6~0.9mm的细铁丝,发挥部分是在任意直线段铁丝上放置4个直径约19mm的镀镍钢芯硬币(第五套人民币的1角硬币),硬币边缘紧贴铁丝。小车路过硬币时能够发现并发出声音提示,尽量减少小车绕跑道跑完一圈运行时间。  
主办方提供的赛道参考示意图如附录1所示。
小车采用一片 TI公司LDC1314或LDC1000电感数字转换器作为循迹传感器,在规定的平面跑道自动按顺时针方向循迹前进。跑道的标识为一根直径0.6~0.9mm的细铁丝,按照附录1的示意尺寸,用透明胶带将其贴在跑道上。图中所有圆弧的半径均为为20cm±2cm。
1.2 总体设计   
根据大赛要求,设计总流程图如图所示。

设计主要有以下几个模块组成:
1.信息采集模块:信息采集部分是由光电检测和运算放大模块组成,光电检测有循迹检测和测速检测两个部分。将检测到的信号经运算放大模块lm324放大整形后送至单片机处理,其核心部分是几个光电传感器。
2.控制处理模块:控制处理模块是一片STC89C52单片机为核心,单片机将从采集到的信息进行判断后,按照预定的算法处理,把处理的结果送至电机驱动和液晶显示模块,使之做出相应的动作。
3.执行模块:执行模块由液晶显示、电动驱动及电机、蜂鸣器三部分组成。液晶显示主要是将单片机处理结果进行实时显示,方便用户及时了解当前的状态,电机驱动根据单片机的指令对两个电机进行动作,使之能够根据需要作出相应的加速、减速、转弯、停车等的动作,以达到预期目的,蜂鸣器主要是根据要求在特定的位置作出响应来报告位置。
1.3 方案论证
1.3.1 小车主体设计方案
(1)自己设计小车主体结构
自己设计制造小车主体结构,能够按照布局设计思路来完成小车主体结构的调整,保证电路部分和机械部分的全面协调,可以合理地安放传感器,但是自己设计的小车难免会表面粗糙费时费力,最后做出来的成品结果如何没法保证。
(2)购买玩具小车进行改装
按照大赛要求,可以用玩具车来改装加入控制系统来完成既定任务,小车整体布局也比较合理,可以较好地完成任务。但是小车的质量价格参差不齐,小车的电路布局易受到小车主体的限制。
综合考虑各种利弊,我们决定采用方案二。
1.3.2 电机驱动方案
方案一:直流电机。直流电机采用H型PWM驱动电路驱动,通过改变电机电源电压的极性来实现直流电机的正反转。电压极性的变化和运转时间的长短由单片机实现,由于电压调整范围很难达到很高的精确度,很难达到本系统的精确度。
方案二:步进电机。步进电机具有惯性小、响应频率高,因此具有瞬间启动与急速停止的优越特性,与其它驱动元器件相比,有明显优点;通常不需要反馈就能对位移或速度进行精确控制;输出的转角或位移精度高,误差不会积累,并且因为步进电机是根据脉冲个数决定旋转角度,单片机只需记下脉冲个数就能计算出电机的旋转角度,从而计算出小车的行驶距离,省去了距离检测模块,简化了设计。
通过直流电机与步进电机方案的比较,结合制作要求,我们选择方案二。   
1.3.3 传感器设计方案
(1)使用接近开关传感器来采集路面信息
接近开关传感器由于能以非接触方式进行检测,所以不会磨损和损伤检测对象物。 由于采用无接点输出方式,因此寿命延长(磁力式除外)采用半导体输出,对接点的寿命无影响。与光检测方式不同,它适合在水和油等环境下使用检测时几乎不受检测对象的污渍和油、水等的影响。此外,还包括特氟龙外壳型及耐药品良好的产品。与接触式开关相比,可实现高速响应。能对应广泛的温度范围。不受检测物体颜色的影响对检测对象的物理性质变化进行检测,所以几乎不受表面颜色等的影响。
(2)使用光电传感器来采集路面信息
使用红外传感器最大的优点就是结构简明,实现方便,成本低廉。免去了繁杂的图像处理工作,它所获取的信息是不完全的,只能对路面情况作简单的判断,检测距离有限,而且容易受到诸多扰动的影响,抗干扰能力差,背景光源,器件之间的差异,传感器高度位置的差异等都将对其造成干扰。
综合考虑,我们决定选择方案 (1)
1.3.4 显示模块设计方案
(1)LED数码管显示
LED数码管显示具有亮度高,色彩选择多的特点,但是数码管占用I/O接口资源多,控制复杂,功耗大,显示信息数少且单一。
(2)1602液晶显示
液晶显示驱动简单,易于控制,功耗小,且显示信息量大,可以直接观察到小车的位置及速度信息。
综合考虑,决定用1602液晶显示作为本次的显示模块。
1.4 单片机资源分配
ST89C52单片机是把那些作为控制应用所需的基本内容都集成在一个尺寸有限的集成电路芯片,它由如下功能部件组成,8位微处理器、128字节数据存储器、8K程序存储器、P1、P2、P3、P4四个8位并行I/O口、1个全双工的串行口,具有四种工作方式,可用来进行串行通讯,扩展并行I/O口,甚至与多个单片机相连构成多机系统,片内有2个16位的定时器/计数器,具有四种工作方式,具有5个中断源,二级中断优先权及特殊功能计数器,它们都是通过片内单——总线连接而成,其基本结构依旧是CPU加上外围芯片的传统结构模式。但对各种功能器件的控制是采用特殊功能寄存器的集中控制方式,为了合理调用单片机资源,对单片机的资源分配如附录2所示。            
2 自动循迹小车硬件设计
2.1 理论分析与计算
使用栅格圆盘和光电门组成测速系统。当直流电机通过传动部分带动栅格圆盘旋转时,测速光电门获得一系列脉冲信号。这些脉冲信号通过单片机两个定时/计数器配合,一个计数,一个定时。计算出单位时间内的脉冲数m,经过单位计算,就可以算得直流电机的旋转速度。
假设小车每秒走过n个栅格(使用20栅格圆盘),小车轮胎直径为d cm,那么小车轮胎周长为:C=Π*d cm。
则小车走过的距离即为:L=n/20*C  cm
2.2 驱动
步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的。
L298N是SGS公司的产品,内部包含4通道逻辑电路,是一种二相和四相电机的专用驱动器,即内含两个H桥的高电压大电流双桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。其电路原理图如下图所示。
2.3 信号采集系统
小车放置一个接近开关传感器来采集路面信息和小车行驶的距离,循迹传感器采集到的信息经LM324放大整形后传给单片机,最终达到控制小车循迹的目的。光电传感器的信号处理图见附录3。

2.4 单片机最小系统
单片机采用了ST89C52,该芯片的应用电路与其他51单片机完全一样,介于小车各部分功能均为模块实现,所以,将单片机最小系统布好后,其余各I/O口用排针引出。单片最小系统由复位电路、电源和时钟电路等组成。复位电路包括手动复位和自动上电复位,按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过使复位端经电阻与VCC电源接通而实现的。而按键脉冲复位则是利用RC微分电路产生的正脉冲来实现的。自动上电复位,是指计算机加电瞬间,要在RST引脚出现大于2个机器周期的正脉冲,使单片机进入复位状态。其单片机最小系统原理图如图所示。

2.5 蜂鸣器
蜂鸣器用于小车位置指示,用三极管驱动,由单片机P2.0口控制,小车遇到硬币后,单片机给蜂鸣器一个方波信号,蜂鸣器鸣叫提示。
2.6 液晶显示
液晶由单片机控制,实时显示小车形式的时间和路程,电路图如下。
3 自动循迹小车软件设计
软件设计是实现小车智能运转的关键所在,本系统软件包括主程序、检测循迹函数和控制函数。
主程序主要完成系统初始化、按键检测即子程序调用等功能,检测循迹函数负责稳定地判断各种信息,将信息值返回,以便主函数或别的函数调用处理,其流程图见图。控制函数主要负责小车的状态控制,根据传感器返回的信息准确地判定小车所处的位置,并作出相应的响应。其流程图如下所示。

4 功能检测与调试
对小车的整体来说其测试按照模块来进行,分为以下几个步骤:
① 首先测试电源的工作情况,各个模块能否得到良好供电。
② 检查单片机能否正常的烧写程序和工作。
③ 测试后轮电机的工作情况,并试验电机的驱动能力。
④ 编写程序控制小车运行,完成前进、后退一定距离,转90度等功能。
⑤ 反复测试各参数变化 对小车的影响,找出最有效的配置。
⑥ 对小车运行过程中各种可能出现的情况测试,发现问题,找出解决方法。
⑦ 整理数据,优化程序设计。
1、对小车直走位置测试 (用米尺测试)
测量次数        A设定值(cm)        B实际值(cm)        差值(cm)
1        90        91        1
2        90        90        0
3        90        91        1
2、预设置点与液晶显示坐标的测试
        X坐标(cm)        Y坐标(cm)
坐标设定值        100        80        60        40        20        30        50        70        90        110
坐标实际值        104.3        83.4        61.7        41.3        20.3        30.6        52.1        71.8        93.2        114.3
差   值        4.3        3.4        1.7        1.3        0.3        0.6        2.1        1.8        3.2        4.3
定位误差        4.30%        4.25%        2.83%        3.25%        1.50%        2.00%        4.20%        2.57%        3.56%        3.90%
经过多次调试,本系统能够基本满足设计要求,能够较快较平稳的沿路面按要求行驶。
5 结与展望
经过四天三夜的共同努力,我们奋斗过,拼搏过,也失望过,但我们不曾放弃过,终于我们看到了成果,感受到了成功的喜悦!经过电路设计,焊接调试,程序设计联调,最终完成了整个规定的设计过程,感谢全国大学生电子设计大赛的组委会给了我们这样一次难得的锻炼的机会,同时也深深地感谢几位辛勤指导我们工作和学习的老师!通过这次大学生电子设计大赛让我们感受到了实践出成果的喜悦,也深深地体会到理论联系实际的重要性。由于时间不足以及客观多方面的困难,小车在设计中难免还存在不足的地方,希望老师们提出宝贵的意见。在本次大赛中,我们将自己大学几年来所学的知识,能够学习致用,开括了我们的制作能力,激发了我们的创新思维,培养了我们勇于面对困难克服困难的坚强意志和不懈努力的精神,更增强了我们团队合作的能力,感受到知识的海洋是无尽的,需要我们去探索,去深入研究。
参考文献
[1]邢增平. Protel99SE设计专家指导. 中国铁道出版社,2004年
[2]康华光. 电子技术基础数字电路部分,高等教育车版社,2005年
[3]凌阳科技大学计划. 电子竞赛文集. 凌阳科技大学计划资料
[4]黄志伟. 全国大学生电子设计竞赛训练教程. 北京:电子工业出版社
[5]赵健领.  51系列单片机开发宝典.  北京,电子工业出版社,2007年
[6]郭天祥.51单片机C语言教程.北京:电子工业出版社, 2009年
[7]祁伟,杨婷. 单片机C51程序设计教程与实验. 北京:航天航空出版社,2006

附录
附录1.主办方提供的赛道参考示意图

附录2

附录3


附录4 部分软件程序
#include <reg52.h>             //包含52系统头文件
#include "bst_car.h"         //包含bst_car.h智能小车头文件
unsigned char pwm_val_left  =0;//变量定义
unsigned char pwm_val_right =0;
unsigned char push_val_left =0;// 左电机占空比N/20 //速度调节变量 0-20。。。0最小, unsigned char push_val_right=0;// 右电机占空比N/20
bit Right_PWM_ON=1;                   //右电机PWM开关
bit Left_PWM_ON =1;                           //左电机PWM开关
//主函数
void main(void)
{        
    P1=0X00;    //关电机        
    Key scan();        //按键启动检测
        delay(1000);//1s后启动*/

        TMOD=0X01;
    TH0= 0XFC;  //1ms定时
    TL0= 0X66;
    TR0= 1;
    ET0= 1;
        EA = 1;            //开总中断
        while(1)        //无限循环
        {
            //有信号为0  没有信号为1
        if(Left_1_led==1&&Right_1_led==1)
            run();   //调用前进函数
        else
                {                          
                    if(Left_1_led==1&&Right_1_led==0)            //左边检测到黑线
                        {
                             left run();                       //调用小车左转函数
                        }                           
                        if(Right_1_led==1&&Left_1_led==0)                //右边检测到黑线
                        {         
                                 Right run();                   //调用小车右转函数
                    }
                }         
         }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:339982 发表于 2018-5-28 17:48 | 只看该作者
有没有详细的程序代码和需要的材料啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表