首页资源分类应用技术汽车电子 > 51单片机智能小车

51单片机智能小车

已有 445023个资源

下载专区

上传者其他资源

    文档信息举报收藏

    标    签:51单片机多功能智能小车

    分    享:

    文档简介

    多功能智能小车, 学习资料值得一看

    文档预览

     南 京 理 工 大 学 毕业设计说明书(论文) 作 者: 陈小东 学 号: 104911252090 教学点: 扬州市职业大学 专 业: 电子工程 题 目: 基于51单片机的智能小车 ——无线定时变速小车 指导者: 评阅者: 2013年5月 南 京 理 工 大 学 毕业设计(论文)评语 学生姓名: 陈小东 准考证号: 104911252090 题 目: 基于单片机的智能小车——无线定时变速小车 综合成绩: 指导者评语: 在为期12周的毕业设计中,该同学能在老师的严格要求下顺利完成整个毕业设计工作、任务书和论文的撰写。任务书完成情况良好。 该论文选题为目前自动控制方向的热门课题,是大学生电子竞赛的选题之一,能够提供大学生一个创新的平台。该同学在此次设计中,主动提高设计难度,加强综合性,将自动识别、判断并自动躲避障碍等设计与无线遥控实现前进后退和转向行驶等相结合,提高了设计的复杂性。 程序能正确的运行,界面安排合理,论文的规范化符合要求,论文的逻辑性和科学性基本合理。在设计过程中,该同学表现出良好的学习作风,比较扎实的基本理论。课题有一定的实用价值和现实意义,设计的基本任务和要求初步达到。 建议成绩为良好。 可以提交答辩。 指导者(签字): 年 月 日 毕业设计(论文)评语 评阅者评语: 该论文选题为目前自动控制方向的热门课题,是大学生电子竞赛的选题之一,能够提供大学生一个创新的平台。该同学在此次设计中,主动提高设计难度,加强综合性,将自动识别、判断并自动躲避障碍等设计与无线遥控实现前进后退和转向行驶等相结合,提高了设计的复杂性。 程序能正确的运行,界面安排合理,论文的规范化符合要求,论文的逻辑性和科学性基本合理。在设计过程中,该同学表现出良好的学习作风,比较扎实的基本理论。课题有一定的实用价值和现实意义,设计的基本任务和要求初步达到。 建议成绩为良好。 可以提交答辩。 评阅者(签字): 年 月 日 答辩委员会(小组)评语: 答辩委员会(小组)负责人(签字): 年 月 日 毕业设计说明书(论文)中文摘要 本文介绍的是具有多功能的智能小车设计,设计的产品采用AT89S51单片机为检测和控制的核心,通过无线遥控实现停止后退和转向行驶。无线摇控使用PT2262和PT2272模块,电机驱动使用的是L298n模块驱动。本设计综合应用了智能技术和遥控技术,具有一定的实用性,设计的方案与创新点可以为自动化或智能化机器人的设计与普及提供一定的参考。编写程序采用了C语言,程序简洁易懂。设计的产品结构简单,具有一定的智能性、趣味性,可以推广到智能玩具等领域。 关键词 智能技术 无线遥控 PT2262 PT2272 L298n 毕业设计说明书(论文)外文摘要 Title Intelligent Car Based on SCM —— Wireless Remote Control and Motor Drive Abstract This paper describes the design is smart car with multiple functions ,The core design of the products using AT89S51 chip for detection and control. Realization of the car through the wireless remote control to stop the retreat and steering. Wireless remote control using PT2262 and PT2272, Motor driver using L298n drive. The design of integrated application of intelligent technology and remote control technology, has a certain practicality. Design using C language, the program simple and easy to understand. The simple product structure design. Intelligent, interesting some, can be extended to the field of intelligent toys. Keywords Intelligent technology Wireless remote control PT2262 PT2272 L298n 目 次 1 引言 智能技术作为现代科技的新产物,是科技和生活的发展方向。智能产品可以按照预先设定的模式在一个特定的环境里自动的运作,无需人为管理,便可以完成预期所要达到的或是更高的目标。 1.1 课题背景 智能技术作为现代科技的新产物,是很多领域科技发展的重要方向之一。在一个智能化的时代,各种智能化设备正在逐步替代人为的操作。在汽车行业,因疲劳驾驶,驾车精神不集中而引发的车祸屡见不鲜,所以研发汽车自动驾驶和无线遥控驾驶有广泛的市场前景。很多环境下,人类都无法顺利到达,并在那里开展工作,而使用智能汽车,可以在保证人类自身安全的情况下顺利的运送设备到达严酷的环境,并在那里开展工作。这些应用领域表明,通过对智能小车的研究,可以有助于汽车自动化技术的发展。 随着电子技术的飞速发展,新型大规模遥控集成电路的不断出现,使得遥控技术有了日新月异的发展。遥控装置的中心控制部件已从早期的分立元件、集成电路逐步发展到现在的单片微型计算机,模块化技术等,使得智能化程度大大提高。 在无线遥控领域,目前常用的遥控方式主要有超声波遥控、红外线遥控、无线电遥控等。由于无线电波是由发射点向四面八方传播,可以穿过阻挡物,而且可以传播到很远的距离,因此它的控制可以在很大区域和空间内实现,成为遥控的主要方式,在国防、军事、生产、建设和日常生活中有极广泛的应用。 扬州是毛绒玩具之乡,然而,许多玩具企业的产品科技含量低,缺乏智能技术开发能力,缺乏市场竞争力。因此玩具行业需要更多的年轻人投入到智能化等高科技研发中。 本课题正是在这样的背景下选择的。 1.2 设计的主要目标 本课题的主要目标是设计出一种基于单片机控制的多功能智能小车,小车具有以下几个功能:无线遥控、变速、定时、转向等功能;产品可以通过对程序的改变,提高智能化的程度。小车以AT89S5单片机为控制核心,用两个直流电机为主驱动,用L298N电机驱动驱动小车的两个直流电动机,用以实现小车的前进后退变速等功能。本模块采用的无线遥控是市场上现成的带有PT2272解码的TDL-9915接收模块和带有PT2262编码的TDL9988-4发送模块,用以实现小车在无线状况下的遥控行驶。数码管采用四位一体的共阳极数码管,连接单片机,用以显示小车在定时和功能状态的显示作用。最后由控制单元处理数据后通过C语言程序有序合理的将各模块整合在一起并完成动作,实现了智能控制,相当于简易机器人。 本设计主要体现多功能小车的智能模式,设计中的理论方案、分析方法,对于自动运输机器人、采矿勘探机器人、家用自动清洁机器人等自动半自动机器人的设计与普及有一定的参考意义。同时小车可以开发应用于玩具行业,为中国玩具市场智能产品提供参考,实现经济收益,形成商业价值。 2 方案设计与论证 本课题设计主要是制作一款多功能的智能小车。小车具有以下几个功能:无线遥控功能,变速功能,定时功能,转向功能。设计方案首先要对无线遥控模块和电机驱动模块进行分析与设计。 2.1 遥控单元方案论证与选择 方案一,由发射和接收两大部分组成红外遥控系统,应用编/解码专用集成电路芯片来进行控制操作,发射部分包括键盘矩阵、编码调制、LED红外发送器;接收部分包括光、电转换放大器和解调、解码电路等。相对结构比较复杂,而且使用的时候必须将遥控器前的红外发射孔对准接收管才可以。 方案二,无线电遥控也由发射和接收两大部分组成,由于无线电遥控模块在市场上非常普及,加上无线电遥控有传输距离远、抗干扰能力强、无方向性等优点,对于小车的控制是一个不错的选择。 方案三,超声波遥控是利用超声波来传送指令的遥控,可以应用于需要遥控、遥测的场合。采用AX5326与AX5327等构成的遥控系统具有体积小、功耗低、功能强大、抗干扰能力强等优点。但由于超声波遥控价格相对上面两种价格较贵,而且对于小车的遥控也太过于夸大化。 通过三种方案的分析,最终选择用电量、发射、接受功率都不大,一般的小障碍也可以穿越,而且遥控无方向性的无线电遥控。采用带有PT2272解码的TDL-9915接收模块和带有PT2262编码的TDL9988-4发送模块完成。 2.2 小车驱动方式方案论证与选择 方案一,玩具小车上的两个电机均为一般的玩具直流电动机,前轮用一个电机控制方向,后轮的电机用来驱动小车,这就是传统的控制小车方向的方式,缺点是转向过于灵敏。 方案二,另外一种常见驱动方式为两电机四驱,差速转向,其优点是转向性能好,能实现原地360度转向,且在行走的时候能比较稳定的行驶,但是这种驱动方式的硬件制作比较有难度。 方案三,还有一种驱动方案是采用三轮方案,即前面或后面安装一个万向轮,然后两电机分别控制两驱动轮,这种驱动方式具有两电机四驱的优点,而且硬件制作简单多了。 比较上面三种方案,首先排除了第三种方案,因为一开始的定位是要做四轮车。对于第二种驱动方式虽然有制作的经验,但是制作过于麻烦,而且由于小车采用单片机控,可以通过单片机自动校正来克服第一种转向过于灵敏的缺点,能达到运行平稳、安全高效的要求。所以,小设计亦采用此种驱动方式。 2.3 主控单元方案论证与选择 方案一,采用各类数字电路来组成小车的控制系统,对电机驱动,无线遥控信号,数码管显示进行处理。本方案电路复杂,灵活性不高,效率低,不利于小车智能化的扩展,对各路信号处理比较困难。 方案二,采用AT89S51单片机来作为整机的控制单元。AT89S51单片机是一款低功耗,高性能8位单片机,32个I/O,2个可编程16位定时器/计数器和5个中断源。此系统比较灵活,采用软件方法来解决复杂的硬件电路部分,使系统硬件简洁化,各类功能易于实现,能很好地满足题目的要求。 比较以上两种方案的优缺点,方案二简洁、灵活、可扩展性好,更能达到题目的设计要求,因此采用方案二来实现。 2.4 总体设计框图 为实现小车的预定功能,初步确定如下设计思路:在现有玩具电动车的基础上将其进行改装,通过无线电接收装置接将数据传送至单片机进行处理,然后由单片机根据所检测的各种数据实现对电动车的多种控制。这种方案能实现对电动车的运动状态进行实时控制,控制灵活、可靠,精度高,可满足对系统的各项要求。本设计采用AT89S51单片机为控制核心,利用小车的电动机驱动芯片是L298N,通过I/O口传送到L298N的接收端口,达到对两台电动机的正反转以及停止的控制。 小车还可以人工控制,通过无线控制技术里面的无线电控制,当小车在行驶过程中,只要人为的按下控制按钮,小车可满足所需要的基本行驶要求。总体设计框图如2.1所示: 3 硬件设计 本系统硬件主要有四大模块组成:无线遥控模块、电机控制模块、单片机控制模块和数码管显示模块。 3.1 无线遥控模块设计 此模块实现了无线电远距离控制小车的停启、方向行驶的功能,在整个小车系统中起到不可忽视的作用。 3.1.1 无线遥控工作原理 图3.1是无线电遥控设备方框图,由发射机、接收机及执行机构三部分组成。发射机主要包括编码电路和发射电路。编码电路由操纵器(操纵开关或电位器等)控制,操纵者通过操纵器;使编码电路产生所需要的控制指令。这些控制指令是具有某些特征的、相互间易于区分的电信号,例如:用频率为270Hz的正弦信号作为控制左舵的指令,用频率为350Hz的正弦信号作为控制右舵的指令,即不同频率的正弦信号代表不同的控制指令。除了可利用频率特征外,还可用正弦信号的幅度及相位特征、脉冲信号的幅度、宽度及相位特征以及码组特征等表示各种指令。如图3.1所示: 图3.1 无线电遥控接收设备框图 编码电路产生的指令信号都是频率较低的电信号,无法直接传送到遥控目标上去,还要将指令信号送到发射电路,使它载在高频信号(载波)上,才能由发射天线发送出去。我们把指令信号载到载波上去的过程叫调制,调制作用由发射电路的调制器完成。发射电路的主要作用是产生载波,并由调制器将指令信号调制在载波上,经天线将已调载波发送出去。接收机由接收电路及译码电路组成。接收电路又包括高频部分及解调器部分。由接收天线送来的微弱信号经接收机高频部分的选择和放大后,送到解调器。由于“卸”下来的各种指令信号是混杂在一起的、还要送到译码电路译码。译码电路的工作就象把卸下来的货物鉴别分类,再分别送到使用场地一样,它对各种指令信号进行鉴别,送到相应的执行放大电路。执行放大电路把指令信号放大到具有一定的功率,用以驱动执行机构。执行机构将电能转变为机械动作,例如电机的转动、电磁铁的吸动等,带动被控的调节机构,从而实现对被控目标的控制。 本模块采用的无线遥控是市场上现成的带有PT2272解码的TDL-9915接收模块和带有PT2262编码的TDL9988-4发送模块,如图3.2所示: 图3.2 TDL-9915和TDL9988-4 3.1.2 PT2262/2272的芯片介绍 编码芯片PT2262发出的编码信号由:地址码、数据码、同步码组成一个完整的码字,解码芯片PT2272接收到信号后,其地址码经过两次比较核对后,VT脚才输出高电平,与此同时相应的数据脚也输出高电平,如果发送端一直按住按键,编码芯片也会连续发射。当发射机没有按键按下时,PT2262不接通电源,其17脚为低电平,所以315MHz的高频发射电路不工作,当有按键按下时, PT2262得电工作,其第17脚输出经调制的串行数据信号,当17脚为高电平期间315MHz的高频发射电路起振并发射等幅高频信号,当l7脚为低平期间315MHz的高频发射电路停止振荡,所以高频发射电路完全收控于PT2262的17脚输出的数字信号,从而对高频电路完成幅度键控(SK调制)当于调制度为100%的调幅。 对于编码器PT2262,A0~A5共6根线为地址线,而A6~A11共6根线可以作为地址线,也可以作为数据线,这要取决于所配合使用的解码器。若解码器没有数据线,则A6~A11作为地址线使用,这种情况下,A0~A11共12根地址线,每线都可以设置成“1”、“O”、“开路”三种状态之一,因此共有编码数312=531441种;但若配对使用的解码器的A6~A11是数据线,例如PT2272,那么这时PT2262的A6~A11也作为数据线用,并只可设置为“1”和“0”两种状态之一,而地址线只剩下A0~A5共6根,编码数降为36=729种。PT2262的引脚图及引脚说明如图3.3和表3.1所示: 图3.3 PT2262引脚图 表3.1 PT2262管脚说明 名 称 管 脚 说  明 A0-A11 1-8、10-13 地址管脚,用于进行地址编码,可置为“0”,“1”,“f”(悬空) D0-D5 7-8、10-13 数据输入端,有一个为“1”即有编码发出,内部下拉 Vcc 18 电源正端(+) Vss 9 电源负端(-) TE 14 编码启动端,用于多数据的编码发射,低电平有效 OSC1 16 振荡电阻输入端,与OSC2所接电阻决定振荡频率 OSC2 15 振荡电阻振荡器输出端 Dout 17 编码输出端(正常为低电平) PT2262的极限参数和电气参数如表3.2和3.3所示: 表3.2 PT2262极限参数 参 数 符号 参数范围 单位 电源电压 Vcc 2~15.0 V 输入电压 Vi -0.3~Vcc+0.3 V 输出电压 Vo -0.3~Vcc-0.3 V 最大功耗(Vcc=12V) Pa 300 Mw 工作温度 Topr -20~+70 ℃ 储存温度 Tstg -40~+125 ℃ 表3.3 电气参数 参数 符号 测试条件 最小值 典型值 最大值 单位 电源电压 Vcc 2 12 V 电源电流 Icc Vcc=12V 振荡器停真振 A0~A11 开路 0.02 0.3 μA Dout 输出驱动电流 IOH Vcc=5V, VOH=3V -3 mA Vcc=8V, VOH=4V -6 mA Vcc=12V, VOH=6V -10 mA Dout 输出陷电流 IOL Vcc=5V, VOH=3V 2 mA Vcc=8V, VOH=4V 5 mA Vcc=12V, VOH=6V 9 mA PT2272解码芯片有不同的后缀,表示不同的功能,有L4/M4/L6/M6之分,其中L表示锁存输出,数据只要成功接收就能一直保持对应的电平状态,直到下次遥控数据发生变化时改变。M表示非锁存输出,数据脚输出的电平是瞬时的而且和发射端是否发射相对应,可以用于类似点动的控制。后缀的6和4表示有几路并行的控制通道,当采用4路并行数据时(PT2272-M4),对应的地址编码应该是8位,如果采用6路的并行数据时(PT2272-M6),对应的地址编码应该是6位。PT2272的引脚及引脚说明如图3.4和表3.4所示: 图3.4 PT2272引脚图 表3.4 PT2272引脚图 名称 管脚 说 明 A0-A11 1-8、10-13 地址管脚,用于进行地址编码,可置为“0”,“1”,“f”(悬空),必须与2262一致,否则不解码 D0-D5 7-8、10-13 地址或数据管脚,当做为数据管脚时,只有在地址码与2262一致,数据管脚才能输出与2262数据端对应的高电平,否则输出为低电平,锁存型只有在接收到下一数据才能转换 Vcc 18 电源正端(+) Vss 9 电源负端(-) DIN 14 数据信号输入端,来自接收模块输出端 OSC1 16 振荡电阻输入端,与OSC2所接电阻决定振荡频率 OSC2 15 振荡电阻振荡器输出端 VT 17 解码有效确认输出端(常低)解码有效变成高电平(瞬态) PT2262/PT2272 特点有CMOS 工艺制造,低功耗,外部元器件少,RC 振荡电阻,工作电压范围宽为2.6-15v,数据最多可达6位,地址码最多可达531441种。 PT2262/PT2272 可以应用在车辆防盗系统,家庭防盗系统,遥控玩具和其他电器遥控等场合。 3.1.3 基于PT2262的无线编码模块 编码发射模块外形小巧、美观,与很多车辆防盗系统中的遥控器一样。根据功能的多少按键数也不一样,我们本章所用的发射模块为A、B、C、D四个按键。编码发射模块主要由PT2262编码IC和高频调制、功率放大电路组成,常用的编码发射模块实物和内部框图如图3.5所示: 图3.5 内部框图 遥控发射器工作电压为DC 12V(电池供电),尺寸(mm)为58*39*14 ,工作频率为315MHz ,工作电流(mA)为13 编码类型为固定码(板上焊盘跳接设置),可以与各类型带解码功能的接收模块联合使用,解码输出后进行相应控制,如采用单片机进行读取接收并解码数据然后控制相应的灯或电源开关。 其中编码部分电路由5PT2262编码IC来组成,具体电路见图3.6所示: 图3.6 编码电路原理图 3.1.4 基于PT2272的无线解码模块 解码接收模块包括接收头和解码芯片PT2272两部分组成。接收头将收到的信号输入PT2272的14脚(DIN),PT2272再将收到的信号解码。解码接收模块和电路原理图如图3.7所示: 图3.7 解码接收模块和电路原理图 接收板工作电压为DC 5V,接收灵敏度为 -103dBm ,尺寸(mm)为49*20*7 ,工作频率为315MHz,工作电流为5mA ,编码类型为固定码(板上焊盘跳接设置),可以与各类型遥控器配合使用,解码输出后进行相应控制,如采用单片机进行读取接收并解码数据然后控制相应的灯或电源开关。 3.1.5 PT2262-SC2262-PT2272等的电阻配置及使用参数 振荡频率f=2*1000*16/Rosc(kΩ) kHz ,其中Rosc为振荡电阻。 PT2262和PT2272除地址编码必须完全一致外,振荡电阻还必须匹配,一般要求译码器振荡频率要高于编码器振荡频率的2.5~8倍,否则接收距离会变近甚至无法接收,随着技术的发展市场上出现一批兼容芯片,在实际使用中只要对振荡电阻稍做改动就能配套使用。在具体的应用中,外接振荡电阻可根据需要进行适当的调节,阻值越大振荡频率越慢,编码的宽度越大,发码一帧的时间越长。市场上大部分产品都是用2262/1.2M=2272/200K组合的,少量产品用2262/4.7M=2272/820K。根据实际使用经验,它们的匹配参数如表3.5所示: 表3.5 编码接收与发送匹配图 编码发射芯片 编码接收芯片 PT2262 PT2260 SC2260 SC2262 CS5211 PT2272/SC2272/CS5212 1.2M 无 3.3M 1.1M 1.3M 200K 1.5M 无 4.3M 1.4M 1.6M 270K 2.2M 无 6.2M 2M 2.4M 390K 3.3M 无 9.1M 3M 3.6M 680K 4.7M 1.2M 12M 4.3M 5.1M 820K 3.1.6 PT2262/2272 芯片的地址编码设定和修改 在通常使用中,我们一般采用8位地址码和4位数据码,这时编码电路PT2262和解码PT2272 的第1~8 脚为地址设定脚,有三种状态可供选择:悬空、接正电源、接地三种状态,3的8次方为6561,所以地址编码不重复度为6561组,只有发射端PT2262和接收端PT2272的地址编码完全相同,才能配对使用,遥控模块的生产厂家为了便于生产管理,出厂时遥控模块的PT2262和PT2272的八位地址编码端全部悬空,这样用户可以很方便选择各种编码状态,用户如果想改变地址编码,只要将PT2262和PT2272的 1~8 脚设置相同即可,例如将发射机的PT2262的第1脚接地第5脚接正电源,其它引脚悬空,那么接收机的PT2272第1脚接地,第5脚接正电源,其它引脚悬空就能实现配对接收。当两者地址编码完全一致时,接收机对应的D1~D4端输出约4V互锁高电平控制信号,同时VT端也输出解码有效高电平信号。它的实验演示图如图3.8所示: O O O O O O O O。。。。。 L - - - - - - - - 1 1 1 1 1 1 1 1。。。。。 H  图3.8 无线遥控实验演示图 3.2 电机驱动模块 3.2.1 L298N电机简介 图3.9 L298N电机驱动 图3.9是本设计中电机驱动模块。 L298N是ST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V;输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。 3.2.2 电机转速控制信号(PWM信号) 主要采用L298N,通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,输入引脚与输出引脚的逻辑关系表为: 表3.6 L298N功能模块 ENa IN1 IN2 运行状态 0 × × 停止 1 1 0 正转 1 0 1 反转 1 1 1 刹停 1 0 0 停止 3.2.3 L298N电机驱动原理 L298N是SGS公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内含二个H桥的高电压大电流双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。其引脚排列如下图所示: 图3.10 电机驱动原理图 OUT1、OUT2和OUT3、OUT4之间分别接2个电动机。IN1、IN2 、IN3、 IN4引脚从单片机接触入控制电平,控制电机的正反转,ENA,ENB接控制使能端,控制电机的停转。L298N逻辑功能表如下图所示: 表3.7 电机转动状态编码 对于电机的调速,我们采用PWM调速方法。其原理就是开关管在一个周期内的导通时间为t,周期为T,则电机两端的平均电压U=Vcc*(t/T)=a Vcc。其中,a=t/T(占空比),Vcc是电源电压。电机的转速与电机两端的电压成比例,而电机两端的电压与控制波形的占空比成正比,因此电机的速度与占空比成比例,占空比越大,电机转得越快。在硬件电路的连接上,我们将单片机的P1.0~P1.3口分别连接到L298的IN1~IN4上,通过改变P1.0~P1.3口上的高低电平变化以控制小车的前进方向,通过改变P1.0~P1.3口上的高低电平的占空比以控制电机的转速。 PWM配合桥式驱动电路L298N,实现直流电机调速,非常简单,且调速范围大。另外我们特别在直流电机的电枢两端并联一个磁片电容104,以稳定电机的电压不致对单片机造成干扰。实际的使用效果也不错,省掉了通过光耦隔离TPL521实现单片机输出信号与电机驱动信号隔离的环节,节约了成本。 3.3 单片机控制模块 3.3.1 AT89S51简介 AT89S51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。 AT89S51单片机的封装形式有双列直插封装(PDIP)方式。其引脚如图3.11所示: 图3.11 AT89S51引脚图 对其引脚的主要功能简要说明如下: (1)主电源引脚 (a)VCC:电源端; (b)GND:接地端。 (2)外接晶体引脚XTAL1和XTAL2 (a)XTAL1:接外部晶体一个引脚; (b)XTAL2:接外部晶体管的另一个引脚。 (3)控制信号引脚 (a)ALE/PROG:地址锁存允许/编程信号端。当访问片外存储器时,该引脚信号为地址锁存信号ALE。ALE的输出用于锁存地址的低8位字节。即使不访问片外存储器,ALE端仍以不变的频率(此频率为振荡器频率的确良1/6)周期性地出现正脉冲信号。因此,ALE也可用作对外输出时钟,或用于定时等目的; (b)/PSEN:外部程序存储器读选通信号。当单片机访问外部程序存储器时(取指令或常数),每个机器周期PSEN两次有效(即输出2个脉冲)。当访问外部数据存储器时,将不出现PSEN信号; (c)EA/Vpp:外部程序存储器访问允许/编程电压输入端。要使CPU只访问外部程序存储器(地址范围为0000H~FFFFH),则EA端必须保持低电平(接地)。当EA端保持高电平(接Vcc端)时,CPU则执行内部程序存储器中的程序; (d)RST:复位信号输入端。当振荡器运行时,若在该引脚上出现两个机器周期的高电平信号,将使单片机复位。 (4)输入/输出引脚(I/O口线) (a)P0端口(P0.0~P0.7):P0口是一个8位漏极开路型双向I/O端口; (b)P1端口(P1.0~P1.7):P1口是一个带有内部上拉电阻的8位双向I/O端口; (c)P2端口(P2.0~P2.7):P2口是一个带有内部上拉电阻的8位双向I/O端口。P2口的输出缓冲器可驱动(吸收或输出电流方式)4个LSTTL负载; (d)P3端口(P3.0~P3.7):P3口是一个带内部上拉电阻的8位双向I/O端口。P3口的输出缓冲器可驱动(吸收或输出电流方式)4个LSTTL负载。 在AT89S51中,P3端口可作一般的通用I/O使用,也可用于第二功能。第二功能如表3.8所示: 表3.8 P3各端口的复用功能表 P3口 第二功能 P3.0 RXD 串行输入口 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 TXD INT0 INT1 T0 T1 WR RD 串行输出口 外部中断0输入端 外部中断1输入端 定时/计数器0的外部输入端 定时/计数器1的部输入端 外部数据存储器写选通 外部数据存储器读选通 AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写l000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP FLash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。其应用范围广,性能良好,可用于解决复杂的控制问题。利用AT89S51的I/O端口对传感器信号进行实时判断监控来控制步进电机做出相应的反映。如图3.12是较为常见的单片机最小系统图: 图3.12 单片机最小系统图 3.3.2 时钟电路 时钟电路用于产生单片机工作所产生的时钟信号,单片机在时钟信号控制下,各部件之间协调一致地工作,时钟信号控制着计算机的工作节奏。单片机内部有一个时钟振荡电路,只需要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,为整个系统提供一个时间基准,根据硬件电路的不同,连接方式分为内部时钟方式和外部时钟方式,本设计采用内部时钟方式。 引脚XTAL1和XTAL2之间跨接晶体振荡器和微调电容,可以和芯片内部的振荡构成一个稳定的自激振荡器,这就是单片机的时钟电路,这种也称内部时钟源方式,选用石英晶体振荡器,其振荡频率主要由石英晶振的频率决定,范围可取1.2—12MHz, 电路中两个电容C1、C2主要作用是帮助振荡器起振荡,而电容还能起微调作用,电容值可取5—30pF,如图3.13所示: 图3.13 时钟电路 3.3.3 复位电路 复位是单片机进入工作方式状态的初始化操作,是使CPU和系统中其它部件都处于一个确定的初始状态,并从这个状态开始工作。另外,当程序运行错误或者由于错误的操作而使单片机进入死锁状态时,也可以复位进行重新启动,复位后,单片机内部寄存器的值被初始化。 MCS-51系列单片机RST引脚是复位信号的引入端,复位信号高电平有效,只要将该引脚连续保持两个机器周期以上的高电平即可实现复位,复位方式有上电复位和按键手动复位。复位电路如图3.14所示: 图3.14复位电路 3.4 数码管显示模块 3.4.1 4位一体数码管简介 小车系统的定时功能模块是使用4位一体的共阳极数码管,其公共端接高电平,其它端接低电平。其内部段已经连好,a、b、c、d、e、f、g、dP为段引脚,1、2、3、4分别表示四个数码管的位选。引脚如图3.15所示:(正面朝自己,小数点在下方)。 图3.15引脚图 3.4.2 数码管显示原理 数码管有一位、双位、四位等几种。而不管将几位数码管连在一起,数码管和显示原理都是一样的,都是靠点亮内部的发光二极管来发光。数码管的内部电路结构如下页图所示:从(a)可看出,一位数码管的引脚数是10个,显示一个8字需要7个小段,另外还有一个小数点,所以其内部一共有8个小的发光二极管,最后还有一个公共端,生产商为了封装统一,单位数码管都封装10个引脚。而它们的公共端又分为共阳极和共阴极。本小车的数码管采用的是4位一体共阳极数码管。所谓“共阳”就是指其内部的8个发光二极管的阳极全部接在一起,而它们的阴极是独立的,通常在设计电路时一般把阳极接VCC,当我们给数码管的任一个阴极加低电平时,对应的那个发光二极管就点亮了。 当使用多位一体数码管时,它们内部的公共端是独立的,而负责显示什么数字的段线全部都是连在一起的,独立的公共端可以控制多位数码管中哪一位点亮。通常我们把公共端叫做“位选线”,连在一起的段线叫做“段选线 。下面图3.16分别为共阳极和共阴极数码管的内部原理图: 图3.16数码管内部原理图 4 软件设计 软件设计是实现小车各种运转的关键所在,相当于人类大脑思维活动,通过软件设计可将各个变化信号数据有效的结合处理,产生相应的动作反应。 4.1 软件设计框图 本系统中小车电源键开启,小车上的数码管显示1-03,此时小车处于调速状态(调速可通过按键的加减设置),最前面的1表示可用无线电遥控使其制动;当数码管显示2-xx时小车是处于定时状态,定时时间为01~99s之间(定时可通过按键的加减来设置);当小车数码管显示3-xx时小车是处于定时后退状态,小车后退走动多长时间就停多长时间;当小车数码管显示4-xx时小车是处于定时前进状态,小车前进多长时间就停多长时间。其主流程如图4.1所示: : 图4.1系统整体流程图 4.2 模块设计框图 小车通电以后,各模块在控制单元单片机的控制作用下分别完成各模块的功能,下面介绍模块流程图。 4.2.1 无线模块设计框图 小车在在电源开启时,数码管显示1-03,(最前面1表明小车在无线状态下行驶),我们可以直接通过加按键和减按键来设置小车速度。图4.2为小车无线模块流程图: 4.3 软件程序设计 本程序以C语言的形式进行编辑,结合硬件实现小车整个系统功能。本设计以AT89S51单片机为控制中心,实现小车具有无线遥控、变速、定时、转向等功能,通过遥控功能按键实现小车的前进后退转向等功能。 5 系统硬件调试与软件仿真 5.1 系统硬件调试 无线遥控模块的功能实现:通过四个按键控制方向, 按下“A”,小车前进,“B”对应向后,“C"对应向右转弯,“D”则实现向左转弯的功能,。经过多次的测试与数据记录,得出相应的结果,如表4.1所示: 表4.1 遥控测试记录分析 次数 第1次 第2次 第3次 第4次 第5次 第6次 第7次 按键 B D C B C A D 驶向 后 左 右 后 右 前 左 距离 1M 0.9M 1M 0.5M 1.5M 3M 2.5M 次数 第8次 第9次 第10次 第11次 第12次 第13次 第14次 按键 B A C D B C A 驶向 后 前 右 左 后 右 前 距离 0.5M 2M 2M 1M 0.5M 1M 0.3M 由测试得最佳距离在1.5M以内,成功率为10/14=71.4%。 电机控制模块调试实现的功能是结合软件共同实现,当连接单片机与电机控制芯片的I/O加上一定的电平可以实现电机左右转向,前后转向以及停止等功能,同时通过程序延时降低电机转速。如表4.2为电机测试记录: 表4.2 电机测试记录 P1.0 P1.2 P1.3 P1.4 小车行驶状态 1 0 0 0 小车向前行驶 0 1 0 0 小车向后行驶 1 0 1 0 小车向前左转 1 0 0 1 小车向前右转 0 0 0 0 小车停在行驶 5.2 软件仿真 软件调试采用单片机仿真器Proteus,将编好的程序进行调试,主要是检查语法错误并确认硬件完整无误。由于本系统是分模块进行程序设计的,所以调试时先分模块进行调试。如小车的变速程序,在调试时将它放在一个子程序里单独测试,看其是否能够完成预定的功能,如能,测试通过,否则,修改并反复测试直到通过。仿真测试如图5.1所示: 虽然在软件的调试过程中,综合利用了设定断点、单步、跟踪等调试,使得调试工作更易进行。但是也出现了一定的问题,如电机在低压变速时没有起到预期效果。通过了多次分离合并,修改测试语句等方法得以解决,达到综合效果。 5.3 联合调试 各模块都调试通过之后,将各个模块连接起来与硬件结合进行联合调试。在进行联合调试时,经过反复的实验,不断的来修改参数来完善结果。使程序按照要求的设计进行。 结 论 经过几个月的努力,我的毕业设计终于完成了,但是现在回想起来做毕业设计的整个过程,颇有心得。其中有苦也有甜。艰辛同时又充满乐趣,不过乐趣尽在其中!通过本次毕业设计,没有接受毕业设计之前,觉得毕业设计只是针对这几年来所学知识的单纯总结,但是通过做这次毕业设计发现毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。 这次毕业设计我的主要目的是设计一个基于单片机的多功能的智能小车,针对一个课题自行设计,这对我设计过程中增长了浓厚的主动性。这也是我对自己的考验增长了一定的挑战性。本次设计过程中我完全按照自己的设计步骤进行,从课题分析开始,再进行总体设计,详细设计,最后到系统实现,每一步都让我将理论学习的知识运用到实践中去。 这次毕业设计让我学到了很多,虽然结束了,但这只是一个开始。单片机设计还有很多。在微型计算机控制领域,要学的实在太多,仅在大学生涯所学实在太少。我们只有对自己有了更高的要求,才会不断进步。 由于时间不足以及客观多方面的困难,整个小车相比任务书中的要求已经简化的比较多,伴随着也出现多个地方的不足:如在无线遥控模块上,由于多种信号的干扰,小车的左转右转功能不是很灵敏,电机转速在低压时转速分辨不灵敏等等。不过,这些一定的不足有利于激发我的兴趣,不断改进完善小车:遥控达到以上功能以外还可以将加入小车花样式走路方式的控制和停启等;同时也可以加入里程计算显示或则其他温度、湿度、气压的控制检测等多方面的功能,达到智能机器人的效果。这些也需从工作中学习实现,让自己更上一个台阶。 致 谢 在此次的设计过程中,我要感谢朱海星老师对我的悉心教导,正是由于老师的细心指导,才让我在遇到很多问题时能豁然开朗,能够找到解决问题的办法,让我不气馁,最终走向成功。在我的学业和论文的研究工作中无不倾注着老师们辛勤的汗水和心血。老师的严谨治学态度、渊博的知识、无私的奉献精神使我深受启迪。从尊敬的导师身上,我不仅学到了扎实、宽广的专业知识,也学到了做人的道理。在此我要向我的导师致以最衷心的感谢和深深的敬意。 另外我还要感谢周晨亮学长对我的支持和帮助,在遇到问题时能够第一时间给予我解决问题的建议,为我找到另一条设计方法的出路。和他接触及沟通不仅使我树立了远大的学术目标,掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。 在此我还要深深地感谢那些关心和帮助我的同学和朋友,感谢你们在我困境的时候提供给我无私的帮助,还要感谢大学学习期间所有任课老师,是他们的孜孜不倦的教学引导,使我奠定了较好的理论和实践经验,更要感谢南理工的领导和老师提供给我们读本科的机会,因为这一机会,圆了我的本科梦。 参 考 文 献 1 张毅刚,彭喜元,彭宇.单片机原理及应用.北京:高等教育出版社,2010 2 郭天祥.新概念51单片机C语言教程.北京:电子工业出版社,2009 3 童诗白,华成英.模拟电子技术基础.北京:高等教育出版社,2006 4 李朝青.无线发送/接收IC芯片及其数据通信技术选编. 北京:航空航天大学出 版社,2003 5 罗志增.机器人感觉与多信息融合.北京:机械工业出版社,2002 6 贾伯年,俞朴,宋爱国.传感器技术.南京:东南大学出版社,2007 7 罗志增.简易红外接近觉传感器. 北京:全国青年第三届机器人学研讨会论文集,1990 8 刘光斌著.单片机系统实用抗干扰技术.北京:人民邮电出版社,2003 9 黄智伟.全国大学生电子设计竞赛系统设计.北京:航空航天大学出版社,2007 10 沙占友,孟志强,王彦朋.单片机外围电路设计.北京:电子工业出版社,2006 11 李东生,张勇,许四毛.Protel99SE电路设计技术入门于应用.北京:电子工业 出版社,2006 12 高国富,谢少荣,罗均.机器人传感器及其应用.北京:化学工业出版社,2005 13 (美)丹尼斯·克拉克(Dennis Clark),(美)迈克尔·欧文斯(Michael Owings).机器人设计与控制.北京:科学出版社,2004 14 梅丽凤.单片机原理及接口技术.北京:清华大学出版社,2005 15 (日)铃木泰博.机器人竞赛指南.北京:科学出版社,2002 16 彭为,黄科.单片机典型系统设计实例精讲.北京:电子工业出版社,2006 附录A 元器件清单 元件名称 参数值 个数 AT89S51 1 L298N 1 晶振 12Mhz 1 三极管9012 4 电机 2 陶瓷电容 103pF 1 104μF 4 104ρF 2 30ρF 1 30ρF 1 极性电容 10μF 1 按钮 4 电阻 1KΩ 1 100KΩ 1 10KΩ 1 4.7KΩ 4 120Ω 2 100Ω 2 2KΩ 2 300Ω 8 200Ω 1 PT2262 1 PT2272 1 发光二极管 若干 附录B 系统程序 按照预定的功能,系统实现预定的功能的程序如下所示: #include #define uchar unsigned char #define uint unsigned int #define smgdata P0 #define smgwx P2 sbit set = P3^7; //设置 sbit yes = P3^6; //确认 sbit no = P3^5; //取消 bit setflag=0; bit yesflag=0; bit noflag=0; sbit up = P3^4; //A 无线端口设置 sbit down = P3^3; //B sbit left = P3^2; //C sbit right = P3^1; //D sbit qla=P1^2; //前轮电机引脚 sbit qlb=P1^3; sbit hla=P1^0; //后轮电机引脚 sbit hlb=P1^1; unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf}; //0123456789- unsigned char code bit_table[]={0xef,0xdf,0xbf,0x7f}; uchar num=0; uchar alldata[4]={1,10,0,3};//全局数据 uchar keyflagset=0; bit pwm; uchar pwmtime=0; //pwm时间0-10ms uchar pwmzkb=0;//pwm占空比 uchar zfzflag=0;//正反转标志位 停止0 前进1 后退2 左转3 右转4 bit tdqhflag=0;//停止0 动作1 切换 struct _time { uint ms; uchar s; }time; //时间 struct _set { uchar time;//设置时间 uchar sddw;//速度档位 1--5 }keyset; void InitTimer0(void) { TMOD = 0x01; TH0 = 0x0FE; TL0 = 0x0C; EA = 1; ET0 = 1; TR0 = 1; } void der(void) //电机驱动 { switch(zfzflag) { case 0: //停止 qla=0; qlb=0; hla=0; hlb=0; break; case 1: //前进1 qla=0; qlb=0; if(pwm==1) { hla=1; } else { hla=0; } hlb=0; break; case 2: //后退2 qla=0; qlb=0; if(pwm==1) { hlb=1; } else { hlb=0; } hla=0; break; case 3: //左转3 qla=1; qlb=0; if(pwm==1) { hla=1; } else { hla=0; } hlb=0; break; case 4: //右转4 qla=0; qlb=1; if(pwm==1) { hla=1; } else { hla=0; } hlb=0; break; default : //停止 qla=0; qlb=0; hla=0; hlb=0; break; } } void display(void)//数码管显示内容设置 { switch(keyflagset) { case 0: alldata[0]=1; alldata[1]=10; //- alldata[2]=keyset.sddw/10; //s速度档位 alldata[3]=keyset.sddw%10; pwmzkb=0;//pwm占空比 if(keyset.sddw==1) { pwmzkb=3;//pwm占空比 } else if(keyset.sddw==2) { pwmzkb=5;//pwm占空比 } else if(keyset.sddw==3) { pwmzkb=7;//pwm占空比 } else if(keyset.sddw==4) { pwmzkb=8;//pwm占空比 } else if(keyset.sddw==5) { pwmzkb=10;//pwm占空比 } if(yesflag) { keyset.sddw++; if(keyset.sddw>5) keyset.sddw=5; while(yesflag); } if(noflag) { keyset.sddw--; if(keyset.sddw==0) keyset.sddw=1; while(noflag); } break; case 1: alldata[0]=2; alldata[1]=10; alldata[2]=keyset.time/10; //调节的时间 alldata[3]=keyset.time%10; zfzflag=0;//停止 if(yesflag) { keyset.time++; if(keyset.time>99) keyset.time=99; while(yesflag); } if(noflag) { keyset.time--; if(keyset.time==0) keyset.time=3; while(noflag); } break; case 2: //定时功能 alldata[0]=3; alldata[1]=10; alldata[2]=time.s/10; alldata[3]=time.s%10; if(tdqhflag) { zfzflag=0; //停止 } else { zfzflag=1; //前进 } break; case 3: alldata[0]=4; alldata[1]=10; alldata[2]=time.s/10; alldata[3]=time.s%10; if(tdqhflag) { zfzflag=0; //停止 } else { zfzflag=2; //后退 } break; } } void main(void) { InitTimer0(); keyflagset=0;//0--3 zfzflag=0;//停止 keyset.time=10;//10秒 keyset.sddw=3;//默认为3 pwmzkb=0;//pwm占空比 while(1) { display();//数码管显示内容设置 der();//电机驱动 if(keyflagset==0) { if(up) { zfzflag=1; } else if(down) { zfzflag=2; } else if(left) { zfzflag=3; } else if(right) { zfzflag=4; } else { zfzflag=0;//停止 } } } } void Timer0Interrupt(void) interrupt 1 //1ms { TH0 = 0x0FE; TL0 = 0x0C; //在这里添加你的代码 每一次中断1个ms ////////////////////////////////////////////////////////////// if(set==0 && setflag==0) //按键处理 { setflag=1; keyflagset++; if(keyflagset>3) keyflagset=0; if(keyflagset==2 || keyflagset==3) { time.s=0; tdqhflag=1; } } else if(set==1 && setflag==1) { setflag=0; zfzflag=0; //停止 } if(no==0 && noflag==0) { noflag=1; } else if(no==1 && noflag==1) { noflag=0; } if(yes==0 && yesflag==0) { yesflag=1; } else if(yes==1 && yesflag==1) { yesflag=0; } ////////////////////////////////////////////////////////////// pwmtime++; //pwm占空比处理 if(pwmtime>=10) pwmtime=0; if(pwmtime<=pwmzkb)//占空比比较 { pwm=1; } else if(pwmtime>pwmzkb) { pwm=0; } ////////////////////////////////////////////////// P0=0xff; smgwx = bit_table[num]; //位选 switch(num) { case 0: P0=table[alldata[0]]; //段选 break; case 1: P0=table[alldata[1]]; //段选 break; case 2: P0=table[alldata[2]]; //段选 break; case 3: P0=table[alldata[3]]; //段选 break; } num++; //每一次进来加一次 一共加了4次 if(num>=4) num=0; /////////////////////////////// time.ms++; if(time.ms>=1000) //1000ms=1s { time.ms=0; //毫秒 time.s++; if(time.s>keyset.time) { time.s=0; //秒 tdqhflag=~tdqhflag; } } ///////////////////////////////// } 附录C 系统原理图

    Top_arrow
    回到顶部
    EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高员外,我们会尽快处理。