您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页基于单片机的智能电动小车控制系统

基于单片机的智能电动小车控制系统

来源:测品娱乐


毕 业 设 计 [论 文]

题 目:基于单片机的智能电动小车控制系统 学 院: 电气与信息工程学院 专 业: 姓 名: 学 号: 指导老师: 完成时间:

河南城建学院本科毕业设计(论文) 摘要

摘 要

基于单片机的智能电动小车作为实现无人驾驶小汽车的方案之一,以其智能、灵活、便携、智能等优点满足了玩具小汽车发展的需要。本文设计的智能电动小车控制系统有自动循迹的功能,能满足按预设轨道行走并完成给定任务的要求,单片机是实现电动智能小车控制系统的核心,其软硬件设计是实现循迹功能的基本要求和关键环节。

本智能电动小车在循迹方面做了相对系统化的设计,本文主要工作包括两个个方面:

1.硬件设计:用红外光电传感器检测路面的黑色轨迹物,确定小车的位置和运动状态并再将检测信号反馈给单片机,单片机对采集到的信号予以分析判断,及时控制直流电机调整小车转向与行车速度。

2.软件设计:通过对AD转换、电机和循迹等模块的编程,控制硬件电路工作,实现软硬件结合,完成判断控制功能。

本设计以STC12C5A60S2单片机为核心,通过合理软硬件设计、调试,获得了较好的测试效果,样品实际工作稳定,满足实际要求。

关键词 : 循迹小车,单片机,红外传感器

I

河南城建学院本科毕业设计(论文) Abstract

Abstract

MCU based electric car of smart program as one scheme of driverless cars with its advantages like smart ,flexible and portable made intelligent toys meeting the needs of car development. This design of smart electric car with automatic tracking control system functions is to meet the preset orbit by walking and complete the given tasks. STCC52 MCU is a core of electric smart car control system's ,its hardware and software design is to achieve the tracking function of the basic requirements and key links .

The smart electric tracking car has done some thing in a relatively systematic design, this paper includes two aspects:

1. Hardware design : Using infrared sensors to detect the black track pavement materials , determine the location and movement of the car and then the state detection signal feedback to the MCU, the MCU of the collected signals are analyzed to determine , in a timely manner to control a DC motor to adjust the car steering and driving speed .

2. Software design : By programming the AD converter , motor and tracking modules , can control the hardware circuit, to achieve a combination of hardware and software to complete the judgment control.

STC12C5A60S2 MCU is a core of the design , through reasonable hardware and software design , debugging , testing to get a better effect , sample real job stability, to meet the actual requirements.

Keywords: tracking car , MCU , infrared sensors

II

河南城建学院本科毕业设计(论文) 目录

目录

摘 要.............................................................. I Abstract........................................................... II 第一章 绪论......................................................... 1

1.1引言 ........................................................ 1 1.2智能小车的研究现状 .......................................... 1

1.2.1国外概况 .............................................. 1 1.2.2国内概况 .............................................. 2

第二章 方案设计与论证............................................... 5

2.1 控制系统.................................................... 5 2.2 电机驱动模块................................................ 6 2.3 循迹模块.................................................... 6 2.4 机械系统.................................................... 7 第三章 硬件设计..................................................... 8

3.1总体设计 .................................................... 8 3.2 STC12C5A60S2单片机控制电路 ................................. 9

3.2.1 STC12C5A60S2单片机的介绍 ............................. 9 3.2.2 时钟电路............................................. 12 3.2.3 复位电路............................................. 13 3.2.4 P0口外接上拉电阻 .................................... 14 3.3 TCRT5000黑色轨迹识别电路 .................................. 14

3.3.1 TCRT5000的介绍 ...................................... 16 3.4 TB6612FNG电机驱动电路 ..................................... 16

3.4.1 TB6612FNG的介绍 ..................................... 17 3.5 升降压模块................................................. 19

3.5.1 LM2577的介绍 ........................................ 19

第四章 软件设计.................................................... 21

4.1主程序流程 ................................................. 21 4.2循迹子程序流程图 ........................................... 23 第五章 设计安装与调试.............................................. 28

5.1 PCB的设计制作与安装 ....................................... 28 5.2 小车调试................................................... 31 结论............................................................... 32 参考文献........................................................... 33 致谢............................................................... 34 附录1:主程序 ..................................................... 35 附录2:PCB走线图.................................................. 48 附录3:小车实物图 ................................................. 50 总原理图........................................................... 51

河南城建学院本科毕业设计(论文) 1绪论

第一章 绪论

1.1引言

21世纪是高速发展的社会,是智能现代化的社会。智能机器人是一个多种高新技术的集成体,它融合了机械、电子、传感器、计算机硬件、软件、人工智能等许多学科的知识,涉及到当今许多前沿领域的技术。智能小车即轮式移动机器人,是一种集环境感知、决策规划、自动行驶等功能于一体的综合智能系统,智能小车集中地运用了自动控制、模式识别、传感器技术、汽车电子、电气、计算机、机械等多个学科的知识。随着控制技术、计算机技术和信息技术的发展,智能小车在工业生产和日常生活中已经扮演了非常重要的角色,近年来,智能车在野外、道路、现代物流及柔性制造系统中都有广泛运用,已成为人工智能领域研究和发展的热点。

目前,智能小车领域的研究已经能够在具有一定标记的道路上为司机提供辅助驾驶系统甚至实现无人驾驶,这些智能小车的设计通常依靠特定道路标记完成识别,通过推理判断模仿人工驾驶进行操作。本文所述智能车就是一种自动导引小车,能够在给定的区域内沿着轨迹自动进行行进。小车运行过程由方向检测和电机驱动两个部分控制,采用与白色地面颜色有较大差别的黑色线条作引导。智能车寻迹系统采用红外反射式光电管识别路径上的黑线,并以最短的时间完成寻迹,用单片机STC12C5A60S2控制光电传感器组,对采集到的信号进行分析处理并做出逻辑判断后,得到行进方向,再通过直流电机驱动前轮转向,实现智能小车的循迹行进。智能车的驱动采用直流电机,并采用PWM实现直流电机的调速,为了使智能车快速、平稳地行驶,系统必须把路径识别、相应的转向伺服电机控制以及直流驱动电机控制准确地结合在一起。本文对智能电动小车的寻迹及速度控制等进行了研究[1]。

1.2智能小车的研究现状 1.2.1国外概况

对智能汽车最为重视的国家当属美国了,美国交通部2000年投资3500万美元与通用公司进行长达五年的合作,开始筹划开发汽车的前后防撞系统。几乎同一时刻,美国的知名高校也开始了研发全自动汽车,并不断完善改进,很多研发团

1

河南城建学院本科毕业设计(论文) 1绪论

体也都陆续加入开展这项工作。

欧洲开发基金投入大量资金支持智能系统的研发,研究方向为驾驶人行为分析、增强行驶中的视觉效果、合理控制汽车的前后车距、自动感应道路和其他物体的等周边环境,以及感应红绿灯及其他方面的信号等等,通过GPRS或者汽车周边的环境以及导航系统对汽车进行导航,同时智能操控其方向与速度。多组数据证明,这种智能系统可以有效降低交通事故,减少接近 20%的事故发生。

视觉系统是智能车的一个重要的组成部分,道路和障碍物是视觉提取的最重要信息,需要对这两个目标体进行提取计算与跟踪处理,对此,德国慕尼黑联邦国防大学与奔驰公司进行了合作研制,将一辆500SEL的奔驰车改装成的一辆 VaMP 试验车,并进行多次试验。每一次的试验,改装后的试验车都行使了接近 2500公里,其中将近95%的路程是由智能控制系统自动完成的,试验的成功也促进了智能控制的进一步发展。

在智能车控制系统中,防撞警示系统也是不可或缺的一部分。欧洲调查发现:提前0.5s得到“预知警示”,那么汽车驾驶员就可以避免至少60%的碰撞危险的,减少追尾撞车的事故;“预知警示”时间提高到1s,则90%的碰撞事故将不会再发生。研究智能汽车不仅是对汽车的本身进行研究,还包括智能运输系统和智能交通系统的研究,这些研究的倘若成功可以促进国家经济的发展。美国一项研究表明,这种影响可能会超过覆盖全美的洲际高速公路。研究的目的与意义在于:可以大量降低公路交通拥挤、堵塞,甚至是汽车油耗,使城市减少 25%~40%左右的损失,这些损失都是由于交通拥挤和堵塞造成的。这样就可以大幅度提高公路的通行能力,至少使现有高速公路的交通量增加一倍,道路畅通也在很大程度上提高了公路交通的安全性。除此之外,智能系统不但提高运输效率还能带动交通运输行业的健康发展与繁荣。

在对智能汽车的研究中,日本和美国目前处在比较领先的地位,现在他们用高性能的专家控制系统开发智能车控制系统的推进器驱动,这种产品如果实现将帮助驾驶员对道路信息有一个更为全面的了解,使行车更为方便安全,例如对于抢道、超车等危险行为作出提醒或者警告,告知司机现在的前后车的安全距离,提醒司机是否疲劳驾驶,监查驾驶员的精神面貌等等,这些技术的完善对智能车控制系统的进一步提高作下了铺垫[2]。

1.2.2国内概况

早在1986年,清华大学就开始了关于我国智能汽车的研究(图1.1),一直发展至今天。其中,目前最先进的智能无人驾驶汽车由清华大学自主研制,它可以在各种复杂的路面上行驶,这个高端科技的无人驾驶汽车采用激光雷达和摄像头

2

河南城建学院本科毕业设计(论文) 1绪论

图1.1无人驾驶小车研究

[3]

作为外部传感器,运用现阶段最先进的图像处理技术对道路信息进行识别判断,来实现智能车的自动驾驶功能。为了不断地提高技术性能和完善该车的智能控制系统,工程师们一直都在不断地刻苦研究,以便该控制系统可以早日的运用到我们日常使用的小汽车上。另外,对智能车系统控制的研究在其他高校科研机构中也相继的展开了。如:由城市大学自主研发的自动导航车和服务机器人,“智能先锋号”由中科院合肥物质科学研究院主导研究开发,还有北京理工大学也不断地参与研发关于智能汽车控制系统等等,这些都极具现实意义。

要不断的完善汽车的动力性和各方面的控制性能,保证汽车在行驶的时候可以平稳、安全并且低功耗,那么通过不断地对智能控制的研究可以使其成为可能。通过不断开发新技术和完善车载控制系统,可以使行车更为方便、安全,使人类

3

河南城建学院本科毕业设计(论文) 1绪论

的生活更为舒适。智能汽车可以减少人为因素的失误,即使在复杂的路面上行驶也可以自动的避开阻挡物,寻求最佳路线行驶,平稳、安全的通过各种复杂的路面,能够轻易地做到人类手工操作很难做到的事情。

4

河南城建学院本科毕业设计(论文) 第二章 方案设计与论证

第二章 方案设计与论证

基于单片机的智能电动小车控制系统主要实现循迹功能,为实现对小车的运动状态进行实时控制,需要对小车设计进行软硬件方案的设计与论证,以使其满足控制灵活、可靠,精度高等性能。据此,确定如下方案:画出要设计小车的PCB原理图打成印制板,把印制板合理规划作为小车的底板,在底板上加装光电传感器和单片机控制系统以实现对小车的位置、运行状况等进行实时测量,并将测量数据传送至单片机进行处理,以便单片机根据所检测的各种数据实现对小车的智能控制。

2.1 控制系统

控制系统是智能电动小车控制系统的核心,主要功能是对传感器采集到的光电信息进行实时分析、判断,控制智能小车的驱动系统,随时调整小车的速度和位置。针对智能小车控制系统的特点,制定如下备选方案: 方案一:

选用一片CPLD(如EPM7128LC84-15)作为系统的核心部件,实现控制与处理的功能。CPLD具有速度快、编程容易、资源丰富、开发周期短等优点,可利用VHDL语言进行编写开发。但CPLD在控制上较单片机有较大的劣势。同时,CPLD的处理速度非常快,而小车的行进速度不可能太高,相对缓慢,那么对系统处理信息的要求也就不会太高,在这一点上,MCU就已经可以胜任了。若采用该方案,必将在控制上遇到许多不必要增加的难题,进而提出了第二种方案。 方案二:

采用单片机作为整个系统的核心,用其控制行进中的小车,以实现其既定的性能指标。充分分析设计的系统,其关键在于实现小车的自动控制,而在这一点上,单片机就显现出了它的优势——控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能、可位寻址操作功能以及价格低廉等优点。本设计采用方案二来完成智能小车的控制系统的设计。

针对本设计特点——多开关量输入的复杂程序控制系统,需要擅长处理多开关量的标准单片机,在小车运行过程中需实时控制小车的运动状态,控制智能小车运行程序比较复杂,因而所需的内存空间比较大。根据这些分析,我选定了STC12C5A60S2单片机作为本设计的主控装置。STC12C5A60S2单片机有内存空间大、高速、高可靠、宽电压、超强抗干扰等功能;具有功能强大的位操作指令;I/O口均可按位寻址,程序空间多达60K;有8路8位高速A/D转换器,速度可

5

河南城建学院本科毕业设计(论文) 第二章 方案设计与论证

达到300KHz,且STC12C5A60S2单片机具有A/D转换和PWM功能[4]。

2.2 电机驱动模块

电机驱动模块是智能电动小车前行的直接动力源,智能电动小车驱动电机的控制效果直接影响小车的速度以及前行的稳定性。针对小车的电机驱动模块确定如下方案: 方案一:

采用继电器对电动机的开或关进行控制,通过开关的切换对小车的方向进行调整。此方案的优点是电路较为简单,缺点是继电器的响应时间慢,易损坏,寿命较短,可靠性不高。 方案二:

采用电阻网络或数字电位器调节电动机的分压,从而达到分压的目的。但电阻网络只能实现有级调速,而数字电阻的元器件价格比较昂贵。更主要的问题在于一般的电动机电阻很小,但电流很大,分压不仅会降低效率,而且实现很困难。 方案三:

采用TB6612FNG电机驱动芯片输出控制直流电机。H型驱动的电路结构和原理简单,加速能力强。用单片机控制MOS管使之工作在占空比可调的开关状态下,精确调整电动机转速。这种电路由于工作在管子的饱和截止模式下,效率非常高,H型桥式电路保证了简单的实现转速和方向的控制,电子管的开关速度很快,稳定性也极强,是一种广泛采用的PWM调速技术。本设计采用方案三,用TB6612FNG作为整个系统的驱动器件。

TB6612FNG是一种直流电机驱动器件,具有点电流MOSFET-H桥结构,双通道电路输出,可同时驱动2个电机。设计使用TB6612FNG直流电机可以很好地实现对智能小车速度和位置的控制[4]。

2.3 循迹模块

循迹模块主要实现光电检测,即利用各种传感器对智能电动小车的位置和行车状态等进行实时测量。智能小车在给定的道路上能够自主识别道路并行使的关键问题是如何识别标志(探寻黑线)。因此,准确的寻线系统是智能小车设计的最重要的环节。现为循迹模块制定如下备选方案: 方案一:

采用简易光电传感器结合外围电路探测,但实际效果并不理想,对行驶过程中的稳定性要求很高,且误测几率较大、易受光线环境和路面介质影响。在使用

6

河南城建学院本科毕业设计(论文) 第二章 方案设计与论证

过程中极易出现问题,而且容易因为该部件造成整个系统的不稳定。故最终未采用该方案[5]。 方案二:

采用五只红外对管,置于小车车头前端,根据光电开关接受到白线与黑线的情况来控制小车转向来调整车向。若中间的光电传感器检测到黑线,则表明智能小车未偏离轨迹,单片机控制驱动电机使转向轮不偏转;若左(右)边的光电传感器检测到黑线,则表明智能车的右(左)边偏离轨迹,越靠近左(右)边的传感器检测到黑线,表示智能小车向右(左)偏离轨迹的程度越大,单片机控制驱动电机使转向轮向左(右)偏转,偏离程度越大,则偏转角度越大。若光电传感器没有检测到黑线或是其他的检测结果,则表明智能车已脱离轨迹,这时单片机应控制驱动电机使转向轮保持原有的角度不变,同时控制直流电机使速度下降。测试表明,只要合理安装好光电开关的位置就可以很好的实现循迹的功能。智能电动小车的设计采用方案二,用红外光电传感器来实现小车的循迹功能[6]。这种方案误差较小且不易受路面状况的,是比较理想的选择。

2.4 机械系统

智能电动小车的机械系统稳定、灵活、简单,可选用三轮和四轮式,基于单片机的智能电动小车要求小车具有较好的灵活性,采用三轮式设计可使智能电动小车在满足灵活性的同时又使设计简单、方便。小车的机械系统包括电源和驱动两部分。

驱动部分:采用TB6612FNG电机驱动芯片驱动直流电机,由TB6612FNG双通道马达驱动模块驱动两个电机,保证基于单片机的智能电动小车的驱动能较好的实现。

电源模块:将电池放置在车体的上面,可增加驱动轮的抓地力,减小轮子空转所引起的误差。用LM2577升压芯片将四节电池电压先升压到9V给直流电机的驱动模块,直流电机驱动芯片通过单片机的控制来驱动直流电机的前轮从而控制小车的运动状态,然后由AMS1117-5V降压芯片将电压降到5V给智能小车的控制系统。

7

河南城建学院本科毕业设计(论文) 第三章 硬件设计

第三章 硬件设计

基于单片机的智能电动小车控制系统具备自动循迹的功能,满足按预设轨道行走并完成给定任务的要求,其硬件设计是实现循迹功能的基本要求和关键环节,主要包括单片机控制电路、直流电机驱动电路、轨迹识别电路等。

3.1总体设计

智能电动小车实现循迹功能主要依靠轨迹识别模块、单片机控制模块和电机驱动模块完成。智能电动小车采用前轮驱动,后轮转换方向。循迹红外发射与接收管分别装在车头下的左中右。当车身下左边的传感器检测到超出黑线时,后轮右转,当车身下右边传感器检测到超出黑线时,后轮左转,直到小车完全回到黑线。如果转向过程中中间传感器也检测到超出黑线则说明小车以这个转向角度不能回到黑线,则改变后轮方向并后退。同样可以起到转向的作用,避免小车离线太远最终回不到黑线上。当小车完全回到黑线再继续向前,在检测到下一次出线后再进行同样的调整。整个过程实现数据的实时采集、判断、信号流程如图3.1所示。

红外轨迹识别 模块 单片机控制系统 马达驱动模块

图3.1 整体设计框图

8

河南城建学院本科毕业设计(论文) 第三章 硬件设计

3.2 STC12C5A60S2单片机控制电路

单片机控制电路由单片机最小系统组成,主要作用是接受红外光电传感器探头传来的电压信号,再通过程序设定的逻辑算法给出驱动电路指令驱动电机控制小车的运动状态。单片机最小系统包括主控STC12C5A60S2单片机,外部时钟电路,复位电路和电源组成[7]。

STC12C5A60S2单片机是增强型的8051单片机,即8051单片机的升级版,与8051单片机的管脚完全兼容。STC12C5A60S2单片机具有60K的超大内存,超强抗干扰性,整个芯片的抗静电能力较强;在系统可编程,无需编程器,无需仿真器,可远程升级;内部集成高可靠复位电路,外部复位电路可彻底省掉,超低功耗超快速度等优点。

本设计采用如图3.2所示的单片机最小系统。 VCCADC51ADC62C11ADC73105/08054TX5PWMA6R17RX7INT0810K0805INT19T010T111C15LED112LED21322P/080510VY1141516P4.017C17RS18RW1922PF/0805/10VEN20BUZZER21INPUT122U6MSI/AC5/P1.5P1.4/AC4/CP1/SSMS0/AC6/P1.6P1.3/AC3/CP0/TXD2SK/AC7/P1.7P1.2/AC2/ECI/RXD2P4.7/RSTP1.1/ADC1RXD/P3.0P1.0/ADC0/CO2SCLK/TXD2/CCP1/P4.3VCCTXD/P3.1P4.2/CCP0/RXD2/MIS0INT0/P3.2P0.0/AD0INT1/P3.3P0.1/AD1CO0/T0/P3.4P0./2AD2CO1/T1/P3.5P0.3/AD3WR/P3.6P0.4/AD4RD/P3.7P0.5/AD5X2P0.6/AD6X1P0.7/AD7GNDEL/P4.6/RST2SS/P4.0P4.1/ECI/MOSIA8/P2.0ALE/P4.5A9/P2.1NA/P4.4A10/P2.2A15/P2.7A11/P2.3A14/P2.6A12/P2.4A13/P2.5STC12C5A60S2/LQFP4444ADC443ADC342ADC241ADC140ADC03839PWMB37D036D135D234D333D432D531D630D729P4.628P4.127P4.526P4.425INPUT424INPUT323INPUT2[8]

C12C13VCC10UF/3528/10V104/0805/60VD0D1D2D3D4D5D6D7R195.1K182735R225.1K182735 STC12C5A60S2单片机最小系统

图3.2单片机主控电路

3.2.1 STC12C5A60S2单片机的介绍

STC12C5A60S2单片机的主要功能:

 高速:1个时钟/机器周期,增强型8051内核,速度比普通8051快8~12倍

 宽电压:5.5—3.3V,2.2—3.6V的宽电压

 增加第二引脚功能(高可靠复位,可调整复位门槛电压。频率小于12MHz时,无需此功能)

 增加外部掉电检测电路,可在掉电时及时将数据保存进EEPORM,正常工作时无需操作EEPORM

 低功耗设计:空闲模式(可由任意键唤醒),掉电模式(可由外部中断唤醒,可支持下降沿/上升沿远程唤醒)

9

22.1184M河南城建学院本科毕业设计(论文) 第三章 硬件设计

 时钟:外部晶体或RC振荡器可选,在ISP下载用户程序时设置  60K字节在系统可编程Flash存储器、 10万次以上擦写周期  1028字节片内RAM数据存储器

 ISP/IAP,在系统可编程/在应用可编程,无需编程器/仿真器  芯片内EEPORM功能,擦写次数十万次以上

 8通道,10位高速ADC,速度可达25万次/秒,2路PWM还可当2路D/A使用

 2通道捕获/比较单元,也可用来再实现2个定时器或2个外部中断(支持下降沿/上升沿中断)

 4个16位定时器,兼容8051的定时器T0/T1,2路PAC实现2个定时器  可编程时钟输出功能,T0在P3.4输出时钟,T1在P3.5输出时钟,BRT在P1.0输出时钟  硬件看门狗(WDT)  高速SPI串行通信端口

 全双工异步串行口(UART),兼容普通8051的串口

 先进的指令集结结构,兼容8051指令集,有硬件乘法/除法指令  通用I/O口,复位后为:准双向口/弱上拉(普通8051传统I/O口)  A/D转换, 10位精度ADC,共8路,转换速度可达250K/S(每秒钟25万次)18.通用全双工异步串行口(UART),由于STC12系列是高速的8051,可再用定时器或PCA软件实现多串口

 每个I/O口驱动能力均可达到20mA,但整个芯片最大不超过10mA  可设置成四种模式:准双向口/弱上拉,推免/强上拉,仅为输入/高阻,开漏

 时钟源:外部高精度晶体/时钟,内部R/C振荡器(温漂为+/-5%到+/-10%以内)1用户在下载用户程序时,可选择是使用内部R/C振荡器还是外部晶体/时钟,常温下内部R/C振荡器频率为:5.0V单片机为:11MHz~15.5MHz,3.3V单片机为:8MHz~12MHz,精度要求不高时,可选择使用内部时钟,但因为有制造误差和温漂,以实际测试为准 STC12C5A60S2单片机的引脚介绍:

STC12C5A60S2单片机有40个引脚,包括第二串口,A/D转换,PWM功能和内部EEPROM. STC12C5A60S2是一种低功耗、高性能CMOS 8位微控制器,使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得STC12C5A60S2为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。另外,STC12C5A60S2

10

河南城建学院本科毕业设计(论文) 第三章 硬件设计

可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

图3.3为STC12C5A60S2的引脚图。

123456710111213141516171819202122U6MSI/AC5/P1.5P1.4/AC4/CP1/SSMS0/AC6/P1.6P1.3/AC3/CP0/TXD2SK/AC7/P1.7P1.2/AC2/ECI/RXD2P4.7/RSTP1.1/ADC1RXD/P3.0P1.0/ADC0/CO2SCLK/TXD2/CCP1/P4.3VCCTXD/P3.1P4.2/CCP0/RXD2/MIS0INT0/P3.2P0.0/AD0INT1/P3.3P0.1/AD1CO0/T0/P3.4P0./2AD2CO1/T1/P3.5P0.3/AD3WR/P3.6P0.4/AD4RD/P3.7P0.5/AD5X2P0.6/AD6X1P0.7/AD7GNDEL/P4.6/RST2SS/P4.0P4.1/ECI/MOSIA8/P2.0ALE/P4.5A9/P2.1NA/P4.4A10/P2.2A15/P2.7A11/P2.3A14/P2.6A12/P2.4A13/P2.5STC12C5A60S2/LQFP4444434241403839373635343332313029282726252423

图3.3 STC12C5A60S2引脚示意图

各引脚功能简单介绍如下:

VCC:供电电压; GND:接地;

P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写“1”时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高;

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入“1”后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收;

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉的优

11

河南城建学院本科毕业设计(论文) 第三章 硬件设计

势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号;

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。P3口也可作为ATC51的一些特殊功能口:

P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0(外部中断0) P3.3 INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通)

P3口同时为闪烁编程和编程校验接收一些控制信号;

RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高平时间;

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效;

PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期PSEN两次有效;

EA/VPP:当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP);

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入; XTAL2:来自反向振荡器的输出;

3.2.2 时钟电路

STC12C5A60S2单片机各功能部件的运行都以时钟控制信号为基准,有条不

12

河南城建学院本科毕业设计(论文) 第三章 硬件设计

紊的工作,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。XTAL1和XTAL2是的输入和输出反相放大器,它们可以被配置为使用石英晶振的片内振荡器,或者是器件直接由外部时钟驱动。图中采用的是内时钟模式,即采用利用芯片内部的振荡电路,在XTAL1、XTAL2的引脚上外接定时元件(一个石英晶体和两个电容),内部振荡器便能产生自激振荡。一般来说晶振可以在1.2~12MHz之间任选,甚至可以达到24MHz或者更高,但是频率越高功耗也就越大,在本设计中采用的11.0592M的石英晶振。和晶振并联的两个电容的大小对振荡频率有微小影响,可以起到频率微调作用。当采用石英晶振时,电容可以在20~40pF之间选择;当采用陶瓷谐振器件时,电容要适当地增大一些,在30~50pF之间。通常选取33pF的陶瓷电容就可以了。另外,如果在设计单片机系统的印刷电路板(PCB)时,晶体和电容应尽可能与单片机芯片靠近,以减少引线的寄生电容,保证振荡器可靠工作。单片机的时钟电路如下所示:

图3.4时钟电路 图3.5 复位电路

3.2.3 复位电路

在单片机系统中,复位电路(图3.5)是非常关键的,当程序跑飞(运行不正常)或死机(停止运行)时,就需要进行复位。STC12C5A60S2系列单片机的复位引脚RST出现2个机器周期以上的高电平时,单片机就执行复位操作。如果RST持续为高电平,单片机就处于循环复位状态。复位操作通常有两种基本形式:上电自复位和开关复位。上电瞬间,电容两端电压不能突变,此时电容的负极和RESET相连,电压全部加在了电阻上,RESET的输入为高,芯片被复位。随之+5V电源给电容充电,电阻上的电压逐渐减小,最后约等于0,芯片正常工作。一般来说,只要RST管脚上保持10ms以上的高电平,就能使单片机复位。

13

河南城建学院本科毕业设计(论文) 第三章 硬件设计

3.2.4 P0口外接上拉电阻

STC12C5A60S2单片机的P0端口为开漏输出,内部无上拉电阻。所以在当做普通I/O输出数据时,由于V2截止,输出级是漏极开路电路,要使“1”信号(即高电平)正常输出,必须外接上拉电阻。另外,避免输入时读取数据出错,也需外接上拉电阻[5]。电路图如下所示:

图3.6 P0端口的1位结构

3.3 TCRT5000黑色轨迹识别电路

小车循迹原理是小车在贴有黑色胶布作为黑线的白纸“路面”上行驶,由于黑线和白纸对光线的反射系数不同,可根据接收到的反射光的强弱来判断“道路”—黑线。本次设计规定正常行驶时五个红外探头都在黑色轨迹之内,如果有探头检测到车体开始偏离轨道则由控制系统做出相应响应使车体回到轨道上。此电路模块就是用于检测车体是否超出轨道并反馈给单片机控制电路,这一方法经常被叫做红外探测法。红外探测法,即利用红外线在不同颜色的物理表面具有不同的反射性质的特点。

14

河南城建学院本科毕业设计(论文) 第三章 硬件设计

图3.7 TCRT5000黑色轨迹识别电路

在小车行驶过程中不断地向地面发射红外光,当红外光遇到白色地面时发生漫发射,反射光被装在小车上的接收管接收;如果遇到黑线则红外光被吸收,则小车上的接收管接收不到信号。循迹模块电路(如图3.7所示),发射管不断地发射红外线,接收管与阻值为220欧姆的电阻串联。在没有接收到反射光线时接收管截止呈高阻态,TX输出高电平。当接收管接收到反射光线时,接收管被导通,并且电阻远小于47K,TX输出低电平。

15

河南城建学院本科毕业设计(论文) 第三章 硬件设计

3.3.1 TCRT5000的介绍

TCRT5000探测器(如图3.8)由光电晶体管组成,具有结构紧凑建设发光光源和探测器排列在同一方向,以感知对象的存在,从对象使用反射红外线光束。TCRT5000作为智能电动小车的控制系统的红外光电传感器,实时监测小车的运动的路况信息,它的工作波长为950毫米。工作时由蓝色发射管发射红外线,红外线由遮挡物反射回来被接收管接收。接收反射光线后的接收管呈导通状态,与电阻串联即可组成一个由发射管控制的分压电路,由此可实现对遮挡物反射光线强度的检测。我们经常利用这一特性去实现颜色识别。引脚图如图3.9所示。

图3.8TCRT5000实物图 图3.9 TCRT5000引脚图

传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,光敏三极管一直处于关断状态,此时模块的输出端为低电平,指示二极管一直处于熄灭状态;被检测物体出现在检测范围内时,红外线被反射回来且强度足够大,光敏三极管饱和,此时模块的输出端为高电平,指示二极管被点亮。

3.4 TB6612FNG电机驱动电路

电机驱动电路(原理图如图3.10)是智能电动小车控制系统的主要动力来源,采用内部集成了H桥的TB6612FNG的电机驱动芯片组成直流电机驱动电路,通过单片机给予TB6612FNG芯片PWM信号来控制直流电机从而控制小车的速度和起停。TB6612FNG直流驱动模块效率高,工作状态稳定,由一个TB6612FNG驱动芯片驱动两个电机控制小车的运动状态。

16

河南城建学院本科毕业设计(论文) 第三章 硬件设计

INPUT1INPUT2PWMAVBOOSTVCCU1212223171615191834910AIN1AIN2PWMABIN1BIN2PWMBSTBYGNDPGND1PGND1PGND2PGND2TB6615FNGBO1BO1BO2BO2VM1VM2VM3VccAO1AO2AO2AO2241314201256OUT4C10805/104MMotorB1OUT1OUT2INPUT3INPUT4PWMBOUT311OUT21278OUT1C40805/104MMotorB2OUT3OUT4图3.10 电机驱动模块原理图

3.4.1 TB6612FNG的介绍

TB6612FNG是一种高电压、大电流电机驱动芯片。在集成化、小型化的电动机控制系统中,它可以作为理想的驱动器件。TB6612FNG在智能电动小车的控制系统中作为直流电机的驱动芯片,它的每通道输出最高1.2A的连续驱动电流,启动峰值电流达2A/3.2A(连续脉冲/单脉冲);4种电机控制模式:正转/反转/制动/停止,PWM支持频率高达100KHZ;待机状态;片内低压检测电路与热停机保护电路;它是一种直流电机驱动器件,具有点电流MOSFET-H桥(如图3.11)结构,双通道电路输出,可同时驱动2个电机。

图3.11 H桥式电路

17

河南城建学院本科毕业设计(论文) 第三章 硬件设计

TB6612FNG芯片的引脚图如下图,其逻辑功能表见表3.1。

U1212223171615191834910AIN1AIN2PWMABIN1BIN2PWMBSTBYGNDPGND1PGND1PGND2PGND2TB6615FNGBO1BO1BO2BO2VM1VM2VM3VccAO1AO2AO2AO2241314201256111278

图3.12 TB6612FNG芯片的引脚图

TB6612FNG芯片的引脚图如图3.12所示,TB6612FNG的主要引脚功能:AIN1/AIN2、BIN1/BIN2、PWMA/PWMB为控制信号输入端;AO1/AO2、BO1/BO2为2路电机控制输出端;STBY为正常工作/待机状态控制引脚;VM(4.5—15V)和VCC(2.7—5.5V)分别为电机驱动电压输入和逻辑电平输入端[7]。

表3.1 逻辑功能表 Input IH L H L H/L /L IH H L L H/L /L PHH L H L H HSH H H H H H L Output OUTL L L H L OFF (High OFF (High OUTL H L L L Mode Short brake CCW Short brake CW Short brake Stop Standby 脉宽调制方式产生的占空比变化的PWM信号,通过对驱动器输出状态的快速切换,实现电机的速度控制。PWM占空比的大小决定输出电压平均值,进而决定电机的转速。TB6612FNG芯片的逻辑真值表如表3.1所示,该器件工作时STBY引脚为高电平,IN1和IN2不变,调整PWM引脚的输入信号可进行电机单向速度

18

河南城建学院本科毕业设计(论文) 第三章 硬件设计

控制,置PWM引脚为高电平,并调整IN1和IN2的输入信号可进行电机双向速度控制。表中A、B两通道的控制逻辑相同。

3.5 升降压模块

基于单片机的智能电动小车DE控制系统和驱动模块需要的电压不同,这要求整个设计要有电压转换电路[9]。本系统采用LM2577S升压芯片将四节电池电压先升压到9V给直流电机,直流电机通过单片机的控制来驱动前轮从而控制小车的运动状态,然后AMS1117-5V降压芯片将电压降到5V给智能小车的控制系统[10]。电压转换电路如图3.13所示。

图3.13 电压转换电路

AMS1117降压电路R81KB4VBOOST3U3VINGNDVOUT=1.25(1+R1/R2)BOOST升压电路SW2KEYD2SS36C20805/104VBATL1Inductor100UHD1ZENER3U2H1POINTP1Header 2VBOOSTR3VR54INCOMPSWITCH+C3470UFR51KGNDFEED231B3LM2577LM25770.33UFR71KC5R61K12POINTD3LED0BULEH2VCCVOUT2L2InductorC7+C8100UH0805/104470UF/7343D4LED0BULE3.5.1 LM2577的介绍

本设计用到的LM2577芯片主要是升压的作用[11],用LM2577组成的升压电路来把电压升到9V供给电机用。该LM2577是单片集成电路的升压提供所有的电源和控制功能(升压),反激式和正激转换器的开关稳压器[12]。该器件有三种不同的输出电压版本:12V、15V和可调式。它需要的外部元件数量最少,这些监管机构的成本效益和简单易用。本设计包括在芯片上是一个3.0ANPN开关及其相

19

1河南城建学院本科毕业设计(论文) 第三章 硬件设计

关保护电路,它有电流、热和欠压闭锁等功能。其他功能还包括一个52千赫固定频率振荡器,无需外部元件,软启动模式,以降低浪涌电流启动时,以及电流模式控制的改进的排斥反应输入电压和输出负载瞬变。LM2577的典型应用有:简单的升压稳压器、反激和正向调节器和多输出稳压器等。它的典型应用原理图如下图所示:

图3.14典型升压电路

LM2577的特性:

1)需要很少的外部元件;

2)NPN输出开关3.0A,可以站开65V; 3)宽输入电压范围:3.5V至40V;

4)对于改善瞬态电流模式操作响应,线路调节和限流; 5)52 kHz内部振荡器;

6)软启动功能降低了启动期间的浪涌电流; 7)输出通过开关电流保护,欠压锁定和热关断; LM2577的引脚图如下所示:

图3.15 LM2577引脚图

20

河南城建学院本科毕业设计(论文) 设计安装与调试

第四章 软件设计

基于单片机的智能电动小车控制系统具备自动循迹的功能,能满足按预设轨道行走并完成给定任务的要求,其中单片机是实现电动智能小车控制系统的核心,其软件设计是实现循迹功能的基本要求和关键环节。下面主要对主程序和循迹部分程序作简要的介绍。

4.1主程序流程

主程序运行时先初始化(A/D采样初始化和电机初始化)再根据单片机I/O口的输出情况分析判断并调用循迹函数和电机控制函数来调整小车的运动[13]。主程序流程图如图4.1所示。 右转

开始 A/D采样初始化 电机初始化 根据A/D转换结果分析黑线位置 直走 左转 结束 图4.1 主程序流程图

21

河南城建学院本科毕业设计(论文) 设计安装与调试

主函数: void main() {

Uart_init(); //LCD_Init(); //LCD_Clear(); InitADC();

TMOD|=0x02; /* timer 0 mode 2: 8-Bit reload */ TH0=0xff; TR0=1; STBY=1; OPT_EN=1;

//LCD_Write_String(0,0,temp);//显示第一行

//Uart_Printf(temp);

//LCD_Write_String(0,1,\"Car Is Running..\"); BUZZER=1;

PWM_clock(1); // PCA/PWM时钟源为 定时器0的溢出(用方式2)做为PCA计数累加的标志

PWM_start(0,0); // 模块0,设置为PWM输出,无中断,初始占空因素为模块0为25%模块1为50%

PWM_start(1,0); /// 模块1,设置为PWM输出,无中断,初始占空因素为模块0为25%模块1为50% setSpeeds(50, 50); while(1) {

if(UART_flag==1) {

Uart_Printf(str); check(str); i=0; ES=1;

UART_flag=0; }

adc_hc[0]=GetADCResult(0); DelayMs(1);

adc_hc[1]=GetADCResult(1); DelayMs(1);

adc_hc[2]=GetADCResult(2); DelayMs(1);

adc_hc[3]=GetADCResult(3); DelayMs(1);

22

河南城建学院本科毕业设计(论文) 设计安装与调试

adc_hc[3]=GetADCResult(4); /////急停

if(RESET_KEY==0) STBY=~STBY;

check_sensor(&adc_hc[5]); if(START_KEY==0) ;

///////////////串口测试 Vin=GetADCResult(6); Vin=Vin*19*2;

sprintf(temp,\"Vin=%dmV\\n\ Uart_Printf(temp); } }

4.2循迹子程序流程图

小车进入寻迹模式后,即开始不停地扫描与探测器连接的单片I/O口,一旦检测到某个I/O口有信号变化,就执行相应的判断程序,把相应的信号发送给电动机从而纠正小车的状态[14]。循迹子程序流程图如图4.2所示,表4.1显示出了小车运动状态和传感器检测结果的情况。

23

开始 前进 是 扫描I/O口,判断是否检测黑线 否 转向 图4.2 循迹子程序流程图

河南城建学院本科毕业设计(论文) 设计安装与调试

表4.1 传感器检测结果和小车运动状态表

光电传感器输出引脚检测状态(1/0) PC0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 PC1 0 1 0 0 0 1 1 0 0 1 0 1 1 0 PC2 1 0 0 0 0 1 0 1 0 1 1 1 1 0 PC3 0 0 0 1 0 0 0 1 1 0 1 1 1 0 PC4 0 0 0 0 1 0 0 0 1 0 1 0 1 0 小车执行状态 高速直行 低速左转 高速左转 低速右转 高速右转 低速左转 高速左转 低速右转 高速右转 高速左转 高速右转 高速直行 高速直行 高速停车

循迹函数

void check_sensor(unsigned char adc_da[]) //将得到的AD转换值导入 {

unsigned char lukou=0; //lukou变量用于路口判断 //单个传感器检测到信号的情况

//2号传感器检测到信号,其余没有检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]>=high)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(6); //调用高速前行函数 }

// 1号传感器检测到信号,其余没有检测到信号

if((adc_da[0]<=low)&&(adc_da[1]>=high)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(3);//调用低速左转函数 }

// 0号传感器检测到信号,其余没有检测到

if((adc_da[0]>=high)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(1); //调用高速左转函数 }

//3号传感器检测到信号,其余没有检测到信号

24

河南城建学院本科毕业设计(论文) 设计安装与调试

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]>=high)&&(adc_da[4]<=low)) {

zhuanx(4); //调用低速右转 }

//4 号传感器检测到信号,其余没有检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]>=high)) {

zhuanx(2); //调用高速右转 }

// 1,2号检测到信号 其余没有 白线在两个传感器中间 //

if((adc_da[0]<=low)&&(adc_da[1]>=high)&&(adc_da[2]>=high)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) // {

// zhuanx(3); // 调用低速左转函数 // }

//0,1号检测到信号

if((adc_da[0]>=high)&&(adc_da[1]>=high)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(1); //调用高速左转函数 }

//2,3号检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]>=high)&&(adc_da[3]>=high)&&(adc_da[4]<=low)) {

zhuanx(4); //调用低速右转函数 }

//3,4检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]>=high)&&(adc_da[4]>=high)) {

zhuanx(2);//调用高速右转函数 }

//0,1,2有信号 ( 折线检测 )

if((adc_da[0]>=high)&&(adc_da[1]>=high)&&(adc_da[2]>=high)&&(adc_da[3]<=low)&&(adc_da[4]<=low))

25

河南城建学院本科毕业设计(论文) 设计安装与调试

{

zhuanx(1);//左转折线 调用高速左转函数 }

//2,3,4有信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]>=high)&&(adc_da[3]>=high)&&(adc_da[4]>=high)) {

zhuanx(2); //右转折线 调用高速右转函数 }

//1,2,3 有信号

if((adc_da[0]<=low)&&(adc_da[1]>=high)&&(adc_da[2]>=high)&&(adc_da[3]>=high)&&(adc_da[4]<=low)) {

zhuanx(6); //备用函数 调用高速直行函数 }

//0,1,2,3,4 都有信号 (路口判断)

if((adc_da[0]>=high)&&(adc_da[1]>=high)&&(adc_da[2]>=high)&&(adc_da[3]>=high)&&(adc_da[4]>=high)) {

switch (lukou) //走折线分支 选择函数 {

case 0:

zhuanx(6); //调用高速直行函数 break; case 1:

zhuanx(6); //调用高速右转函数 break; case 2:

zhuanx(2); //调用高速左转函数 break; case 3:

zhuanx(1);//调用低速直行函数 break; }

lukou++; }

//出轨处理,以及停车

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]<=low))

26

河南城建学院本科毕业设计(论文) 设计安装与调试

{

if(lukou>=3) //选择折线分支 时是4 曲线分支是5 {

zhuanx(7); //高速停车 }

else //非正常情况出轨 (1)反向出跑到 {

//AD转换的到的状态设置缓冲,如果有缓冲数组,可以设置找回路径函数

// panduan(adc_hc); ; } } }

27

河南城建学院本科毕业设计(论文) 设计安装与调试

第五章 设计安装与调试

在进行微机控制系统设计时,除了系统硬件设计外,大量的工作就是如何根据每个生产对象的实际需要设计应用程序。因此,软件设计在微机控制系统设计中占重要地位。对于本系统,软件更为重要。

在进行软件设计时,通常把整个过程分成若干个部分,每一部分叫做一个模块。所谓“模块”,实质上就是所完成一定功能,相对的程序段,这种程序设计方法叫模块程序设计法。 模块程序设计法的主要优点是:

1) 单个模块比起一个完整的程序易编写及调试;

2) 模块可以共存,一个模块可以被多个任务在不同条件下调用; 3) 模块程序允许设计者分割任务和利用已有程序,为设计者提供方

5.1 PCB的设计制作与安装

基于单片机的智能电动小车PCB走线图(图5.1)和电路原理图(图5.2)绘制采用DXP2004,布线的过程中必须注意焊盘的大小与铜线的宽度[115]。从做板的情况来看基本达到制作的要求。总原理图见附录。 00000000000000000000

28 河南城建学院本科毕业设计(论文) 设计安装与调试

00000000000000000000

图5.1 PCB线路图 图5.2 电路原理图

29

河南城建学院本科毕业设计(论文) 设计安装与调试

设计采用主板作为车的底座,电机芯片和主控芯片安装在车的底部,电池安装在车的上方,红外光电传感器安装在小车的前端以便感应路况,电机安装在车的左右。小车的安装的实物图如下:

图5.2 小车实物图

30

河南城建学院本科毕业设计(论文) 设计安装与调试

5.2 小车调试

首先调试的是小车的电源模块,电源模块包括小车的升压电路和降压电路,我在电源的两个电路中加入跳帽来连接电路,先测试升压电路,升压电路主要的理论依据是Vout=1.23*(1+R1/R2) 我设计的是9.3V左右的电压,所以根据计算在R2选用1K的情况下,R1选用6.56K左右,我选择10K的电阻器来调节输出电压值,测试过程中发现买的贴片电阻器是2K的电阻,所以,选用的了更大的10K电位器,用万用表测试输出电压为9.3V时,表示输出电压正常,同时小车的电路板背面有两个蓝色的LED指示灯,一个是指示9.3V电压是否输出,一个是指示5V的电压是否正常输出,当9.3V电压正常后,连接降压模块跳帽,在测试5V稳压模块是否正常,指示灯直接输出正常,用万用表测量值为4.95V,表示5V输出正常,5V稳压模块采用ASM1117-5.0,该电路简单易用,输出电流1A可以满足单片机及外设需要[16]。

当电源模块正常输出的时候,下一步,把单片机焊到电路板上,晶振,复位电路,并且把TX、RX、GND引出来,用来下载程序,焊接完单片机,试一试下载电路,OK,选择HEX文件,单机下载,上电,下载完成。到此单片机部分可以正常工作了。

下一部分该焊接电机驱动芯片和电机,焊接完成,用单片机下载简单测试程序进行测试,正转反转都可以用,到此电机部分OK。

最后就是红外发射接收模块和电池座,红外发射接收用单片机进行测试,发现电压值变化很小,用万用表测量只有0.1V的变化,这部分设计存在问题。仔细检测并跟老师同学讨论后发现是单片机的I/O口部分的问题,A/D转换部分应该上拉电阻。重新修改过后就可以正常工作了。

下表为小车程序的编译运行情况:

31

河南城建学院本科毕业设计(论文) 设计安装与调试

结论

基于单片机的智能电动小车控制系统的设计的核心是进行软硬件设计,在智能电动小车的循迹方面做了深入的研究。本系统能实现如下功能:

1)完成了硬件设计,智能电动小车能自动沿预设轨道行驶,在行驶过程中,能够自动检测预先设计好的轨道,实现直道和弧形轨道的前进。若有偏离,能够自动纠正,返回到预设轨道上来,能够自动检测停车线并自动停车。

2)完成了软件设计,采用C语言进行相关功能的编程,控制硬件电路工作,完成智能电动小车的自动循迹功能。

3)完成了样品的设计与组装测试,从运行情况来看循迹效果比较好。 总体而言,该论文所描述的智能车在不断的实验中完善了其性能,但仍然存在不足的地方,若选取更高位数的单片机提高性能,可以选用CCD摄像头,提高小车的提取精度和图像处理速度;在图像除噪方面,可以研究一种新型的运算方法,更优于中值滤波法,使计算量更加小,提高分析噪声点的正确率,这样采集到的图片更清晰,使智能电动小车的避障响应速度提高;还可运用无线网络技术,使智能车与计算机成为一体,这样智能小车可以共享计算机的CPU资源等,使智能小车真正地智能化。

32

河南城建学院本科毕业设计(论文) 致谢

参考文献

[1] 第五届全国大学生电子设计竞赛获奖[M] .北京理工大学出版社,2001 [2] 中国知网 Vol.30 No.1 Feb.2009 [3] 百度百科 [4] STC单片机手册

[5] 张洪润主编,张亚凡,邓洪敏编写 传感器原理及应用 清华大学出版社,2008 [6] 赵负图,传感器集成电路手册,第一版,化学工业出版社,2004

[7] 刘守义主编,杨宏丽,王静霞副主编.单片机应用技术[N] .西安电子科技大学出版社,2002

[8] 张毅刚,彭喜元,新编MCS-51单片机应用设计,第一版,哈尔滨工业大学出版社,2003

[9] 何希才,新型实用电子电路400例,电子工业出版社,2000

[10] 陈伯时,电力拖动自动控制系统,第二版,北京:机械工业出版社,2000 [11] 孙江宏,李良玉编著.Protel 99电路设计与应用[N] .机械工业出版社,2001

[12] 童诗白,华成英主编,清华大学电子学教研组编.数字电路技术基础[M] 北京.高等教育出版社.2006

[13] 谭浩强主编 C程序设计,第三版,清华大学出版社,2008

[14] 张毅刚主编.单片机原理与应用设计[M]. 北京:电子工业出版社,2008 [15] 林志琦主编.基于Protues的单片机可视化软硬件仿真[M] .北京:北京航空航天大学出版社,2006

[16] 胡宴如主编,胡宴如、耿苏燕编写.模拟电子技术基础[M] .北京:高等教育出版社,1993

33

河南城建学院本科毕业设计(论文) 致谢

致谢

通过这三个月来的忙碌和学习,本次毕业设计论文已接近尾声,在这里衷心感谢学校给了我学习的平台;感谢卢老师的督促指导,感谢一起学习的同学们的帮助;感谢父母对我的理解和支持。

感谢本次毕业设计,它不仅帮助我们总结大学四年的收获、认清自我,同时还帮助我们改变一些处理事情时的坏习惯。

从最开始时的搜集资料,整理资料,到方案选比,确定方案,再到着手开始进行画原理图、各种芯片、各个模块的设计,每一步都是环环相扣,衔接紧密的,其中任何一个步骤产生遗漏或者疏忽,就会对以后的设计带来很多的不便。

毕业设计结束了,通过设计,我们深刻领会到基础的重要性,毕业设计不仅仅能帮助学生检验大学四年的学习成果,更多的是毕业设计可以帮助我们更加清楚的认识自我,磨练学生的意志与耐性,这会为学生日后的工作和生活带来很大的帮助。在未来的日子里,我会更加努力的学习和工作,谨记老师的谆谆教诲,不辜负父母对我的殷殷期望!

美丽的城建校园,承载着我们没好的青春与回忆,最后祝愿我的母校越来越好。

34

河南城建学院本科毕业设计(论文) 附录

附录1:主程序

#include \"STC12C5A60S2.h\" #include #include \"UART.H\" //#include \"1602.h\" #include \"delay.h\" #include \"AD_Driver.h\" #include \"command.h\" #include

#define U8 unsigned char #define U16 unsigned int

sbit LED1=P3^6; sbit LED2=P3^7; sbit OPT_EN=P1^5; sbit BUZZER=P2^3; ///////按键定义

sbit START_KEY=P4^0; sbit RESET_KEY=P4^1; sbit CAL_KEY=P4^4; ///////MOTOR引脚定义 sbit STBY=P1^7; sbit INPUT1=P2^4; sbit INPUT2=P2^5; sbit INPUT3=P2^6; sbit INPUT4=P2^7; ///////ADC转换结果

unsigned char adc_da[5]; unsigned char adc_hc[5];

const unsigned char high=20; //ADconst unsigned char low=10; //ADchar temp[16];

extern unsigned char Ain;

extern unsigned int Vin,Voltage; extern U8 i;

extern U8 xdata str[]; extern bit UART_flag;

extern void SET_PWM1(U8 speed); extern void SET_PWM2(U8 speed); extern void PWM_clock(U8 clock);

extern void PWM_start(U8 module,U8 mode); extern void ShowResult(BYTE ch); extern void PWM_TO_Ctrol_HZ_Init();

35

转换有信号的比较值 转换无信号比较值 河南城建学院本科毕业设计(论文) 附录

////////////////////// M1电机函数 void setM1Speed(int speed) {

//init();

unsigned char reverse = 0;

if (speed < 0) {

speed = -speed; // make speed a positive quantity reverse = 1; // preserve the direction }

if (speed > 100) // 0xFF = 255 speed = 100;

if (!reverse) // backward {

INPUT1=1;INPUT2=0 ; // hold one driver input high

SET_PWM2((char)speed);// pwm the other input }

else // forward {

INPUT1=0;INPUT2=1 ; // hold the other driver input high

SET_PWM2((char)speed);// pwm one driver input } }

////////////////////// M2电机函数 void setM2Speed(int speed) {

// init();

unsigned char reverse = 0;

if (speed < 0) {

speed = -speed; // make speed a positive quantity reverse = 1; // preserve the direction }

if (speed > 100) // 0xFF = 255 speed = 100;

if (!reverse) // backward {

36

河南城建学院本科毕业设计(论文) 附录

INPUT3=0;INPUT4=1 ; // hold one driver input high SET_PWM1((char)speed); // pwm the other input }

else // forward {

INPUT3=1;INPUT4=0 ;

SET_PWM1((char)speed);// pwm one driver input // hold the other driver input high } }

//////////电机函数

void setSpeeds(int m1Speed, int m2Speed) {

setM1Speed(m1Speed); setM2Speed(m2Speed); }

/////////////////电机转向函数

void zhuanx(unsigned char zx) //高速左转向(1)右转向(2)低速左转(3)

{ //右转(4)低速前行(5)高速前行(6)急停(7)倒退(8)

switch (zx) //外加转弯灯 { case 1:

//高速左转

setSpeeds(-100, 100); break; case 2:

//高速右转

setSpeeds(100,-100); break;

case 3: //低速左转(3) setSpeeds(0, 100); break;

case 4: //低速右转(4) setSpeeds(100, 0); break;

case 5: //低速前行(5) setSpeeds(50, 50); break;

case 6: //高速前行(6) setSpeeds(100,100); break;

case 7: //急停

37

河南城建学院本科毕业设计(论文) 附录

setSpeeds(0, 0); break; case 8:

setSpeeds(-25, -25); break; } }

////////////////// 路况判别函数

void check_sensor(unsigned char adc_da[]) //将得到的AD转换值导入 {

unsigned char lukou=0; //lukou变量用于路口判断 //单个传感器检测到信号的情况

//2号传感器检测到信号,其余没有检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]>=high)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(6); //调用高速前行函数 }

// 1号传感器检测到信号,其余没有检测到信号

if((adc_da[0]<=low)&&(adc_da[1]>=high)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(3);//调用低速左转函数 }

// 0号传感器检测到信号,其余没有检测到

if((adc_da[0]>=high)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(1); //调用高速左转函数 }

//3号传感器检测到信号,其余没有检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]>=high)&&(adc_da[4]<=low)) {

zhuanx(4); //调用低速右转 }

//4 号传感器检测到信号,其余没有检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]>=high))

38

河南城建学院本科毕业设计(论文) 附录

{

zhuanx(2); //调用高速右转 }

// 1,2号检测到信号 其余没有 白线在两个传感器中间 //

if((adc_da[0]<=low)&&(adc_da[1]>=high)&&(adc_da[2]>=high)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) // {

// zhuanx(3); // 调用低速左转函数 // }

//0,1号检测到信号

if((adc_da[0]>=high)&&(adc_da[1]>=high)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(1); //调用高速左转函数 }

//2,3号检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]>=high)&&(adc_da[3]>=high)&&(adc_da[4]<=low)) {

zhuanx(4); //调用低速右转函数 }

//3,4检测到信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]>=high)&&(adc_da[4]>=high)) {

zhuanx(2);//调用高速右转函数 }

//0,1,2有信号 ( 折线检测 )

if((adc_da[0]>=high)&&(adc_da[1]>=high)&&(adc_da[2]>=high)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

zhuanx(1);//左转折线 调用高速左转函数 }

//2,3,4有信号

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]>=high)&&(adc_da[3]>=high)&&(adc_da[4]>=high)) {

zhuanx(2); //右转折线 调用高速右转函数

39

河南城建学院本科毕业设计(论文) 附录

}

//1,2,3 有信号

if((adc_da[0]<=low)&&(adc_da[1]>=high)&&(adc_da[2]>=high)&&(adc_da[3]>=high)&&(adc_da[4]<=low)) {

zhuanx(6); //备用函数 调用高速直行函数 }

//0,1,2,3,4 都有信号 (路口判断)

if((adc_da[0]>=high)&&(adc_da[1]>=high)&&(adc_da[2]>=high)&&(adc_da[3]>=high)&&(adc_da[4]>=high)) {

switch (lukou) //走折线分支 选择函数 {

case 0:

zhuanx(6); //调用高速直行函数 break; case 1:

zhuanx(6); //调用高速右转函数 break; case 2:

zhuanx(2); //调用高速左转函数 break; case 3:

zhuanx(1);//调用低速直行函数 break; }

lukou++; }

//出轨处理,以及停车

if((adc_da[0]<=low)&&(adc_da[1]<=low)&&(adc_da[2]<=low)&&(adc_da[3]<=low)&&(adc_da[4]<=low)) {

if(lukou>=3) //选择折线分支 时是4 曲线分支是5 {

zhuanx(7); //高速停车 }

else //非正常情况出轨 (1)反向出跑到 {

//AD转换的到的状态设置缓冲,如果有缓冲数组,可以设置找回路径函数

40

河南城建学院本科毕业设计(论文) 附录

// panduan(adc_hc); ; } }

}

////////////////////////主函数 void main() {

Uart_init(); //LCD_Init(); //LCD_Clear(); InitADC();

TMOD|=0x02; /* timer 0 mode 2: 8-Bit reload */ TH0=0xff; TR0=1; STBY=1; OPT_EN=1;

//LCD_Write_String(0,0,temp);//显示第一行

//Uart_Printf(temp);

//LCD_Write_String(0,1,\"Car Is Running..\"); BUZZER=1;

PWM_clock(1); // PCA/PWM时钟源为 定时器0的溢出(用方式2)做为PCA计数累加的标志

PWM_start(0,0); // 模块0,设置为PWM输出,无中断,初始占空因素为模块0为25%模块1为50%

PWM_start(1,0); /// 模块1,设置为PWM输出,无中断,初始占空因素为模块0为25%模块1为50% setSpeeds(50, 50); while(1) {

if(UART_flag==1) {

Uart_Printf(str); check(str); i=0; ES=1;

UART_flag=0; }

adc_hc[0]=GetADCResult(0);

41

河南城建学院本科毕业设计(论文) 附录

DelayMs(1);

adc_hc[1]=GetADCResult(1); DelayMs(1);

adc_hc[2]=GetADCResult(2); DelayMs(1);

adc_hc[3]=GetADCResult(3); DelayMs(1);

adc_hc[3]=GetADCResult(4); /////急停

if(RESET_KEY==0) STBY=~STBY;

check_sensor(&adc_hc[5]); if(START_KEY==0) ;

///////////////串口测试 Vin=GetADCResult(6); Vin=Vin*19*2;

sprintf(temp,\"Vin=%dmV\\n\ Uart_Printf(temp); } }

AD转换主程序

#ifndef __AD_DRIVER_H__ #define __AD_DRIVER_H__ #include \"STC12C5A60S2.h\" #include \"intrins.h\"

typedef unsigned char BYTE; typedef unsigned int WORD;

/*Define ADC operation const for ADC_CONTR*/

#define ADC_POWER 0x80 //ADC power control bit #define ADC_FLAG 0x10 //ADC complete flag

#define ADC_START 0x08 //ADC start control bit #define ADC_SPEEDLL 0x00 //420 clocks #define ADC_SPEEDL 0x20 //280 clocks #define ADC_SPEEDH 0x40 //140 clocks #define ADC_SPEEDHH 0x60 //70 clocks

unsigned char Ain;

42

河南城建学院本科毕业设计(论文) 附录

unsigned int Vin;

void InitADC();

BYTE GetADCResult(BYTE ch); void Delay(WORD n);

void ShowResult(BYTE ch);

/*---------------------------- Send ADC result to UART

----------------------------*/ //void ShowResult(BYTE ch) //{

// putch(ch); //Show Channel NO.

// putch(GetADCResult(ch)); //Show ADC high 8-bit result //

////if you want show 10-bit result, uncomment next line

//// SendData(ADC_LOW2); //Show ADC low 2-bit result //}

/*---------------------------- Get ADC result

----------------------------*/ BYTE GetADCResult(BYTE ch) {

ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;

_nop_(); //Must wait before inquiry _nop_(); _nop_(); _nop_();

while (!(ADC_CONTR & ADC_FLAG));//Wait complete flag ADC_CONTR &= ~ADC_FLAG; //Close ADC

return ADC_RES; //Return ADC result }

/*---------------------------- Initial ADC sfr

----------------------------*/ void InitADC() {

P1ASF = 0x5f; //Open 8 channels ADC function 0101 1111

ADC_RES = 0; //Clear previous result

43

河南城建学院本科毕业设计(论文) 附录

ADC_CONTR = ADC_POWER | ADC_SPEEDH;

Delay(2); //ADC power-on and delay }

/*---------------------------- Software delay function

----------------------------*/ void Delay(WORD n) {

WORD x;

while (n--) {

x = 5000; while (x--); } }

#endif

PWM电机调速程序

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

// File : PwmDrive_12C5A.c // Date : 2009-08-22 // Version : 1.0

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

#include

#include \"STC12C5A60S2.h\"

#define SYSCLK 24000 //24MHZ #define U8 unsigned char #define U32 unsigned long

//sfr CCON = 0xD8; //PCA控制寄存器 //sfr CMOD = 0xD9; //PCA模式寄存器

//sfr CCAPM0 = 0xDA; //PCA模块0模式寄存器 //模块0对应P1.3/CEX0/PCA0/PWM0(STC12C5A60S2系列)

//sfr CCAPM1 = 0xDB; //PCA模块1模式寄存器 //模块1对应P1.4/CEX1/PCA1/PWM1(STC12C5A60S2系列)

//sfr CL = 0xE9; //PCA 定时寄存器 低位 //sfr CH = 0xF9; //PCA 定时寄存器 高位

44

河南城建学院本科毕业设计(论文) 附录

//sfr CCAP0L = 0xEA; //PCA模块0的 捕获寄存器 低位 //sfr CCAP0H = 0xFA; //PCA模块0的 捕获寄存器 高位 //sfr CCAP1L = 0xEB; //PCA模块1的 捕获寄存器 低位 //sfr CCAP1H = 0xFB; //PCA模块1的 捕获寄存器 高位 //sfr PCA_PWM0 = 0xF2; //PCA PWM 模式辅助寄存器0 //sfr PCA_PWM1 = 0xF3; //PCA PWM 模式辅助寄存器1

//sfr AUXR = 0x8E; //辅助寄存器,我用于控制定时器0的速度与8051一样 0x8E不能被8整除,不能用位定义 字符位地址与寄存器地址不重复即使都写0x8E //

////sbit T0x12 = AUXR^7; //定时器0是否12分频于时钟 0,12分频 1,不分频0x8E不能被8整除,不能用位定义

//sbit CF = 0xDF; //PCA计数溢出标志位 //sbit CR = 0xDE; //PCA计数器 运行控制位 //sbit CCF1 = 0xD9; //PCA模块1中断标志 //sbit CCF0 = 0xD8; //PCA模块0中断标志

//* CMOD |= 0X00; // PCA/PWM时钟源为 Fosc/12 //* CMOD |= 0X02; // PCA/PWM时钟源为 Fosc/2

//* CMOD |= 0X04; // PCA/PWM时钟源为 定时器0的溢出,一般设为模式2,可实现可调频率PWM输出

//* CMOD |= 0X06; // PCA/PWM时钟源为 ECI/P3.4脚的外部时钟输入(最大速率=Fosc/2)

//* CMOD |= 0X08; // PCA/PWM时钟源为 Fosc //* CMOD |= 0X0A; // PCA/PWM时钟源为 Fosc/4 //* CMOD |= 0X0C; // PCA/PWM时钟源为 Fosc/6 //* CMOD |= 0X0E; // PCA/PWM时钟源为 Fosc/8

//*** 由于PWM是8位,PWM频率 = PCA时钟频率 / 256

//* CCAPOH = CCAPOL = 0XC0; //模块0输出 占空因数为25% //* CCAPOH = CCAPOL = 0X80; //模块0输出 占空因数为50% //* CCAPOH = CCAPOL = 0X40; //模块0输出 占空因数为75%

void PWM_clock();

void PWM_start(U8 module,U8 mode);

/*=========================================== *函数名:PWM_clock(U8 clock) *功 能:PWM端口初始化 子函数,

* clock取值为0-7,依次对应8种时钟模式 *返回值:无 *调用函数:无

*============================================*/ void PWM_clock(U8 clock)

45

河南城建学院本科毕业设计(论文) 附录

{

CMOD |= (clock<<1); CL = 0x00; CH = 0x00; }

/*===========================================

*函数名:SET_PWM(U8 pwm0,U8 pwm1) 形参分别为模块0,1的PWM占空比*100 *功 能:传入形参用于设置占空比 *返回值:无 *调用函数:无

*============================================*/ void SET_PWM1(U8 speed) {

CR = 0; //关闭PCA计数器 CCAP0L = 255 - (255*(0.01*speed)) ;

CCAP0H = 255 - (255*(0.01*speed)) ; //模块0初始输出 占空因数为25%

CR=1; //重新打开PCA计数器 }

void SET_PWM2(U8 speed) {

CR = 0; //关闭PCA计数器 CCAP1L = 255 - (255*(0.01*speed)) ;

CCAP1H = 255 - (255*(0.01*speed)) ; //模块1初始输出 占空因数为50%

CR=1; //重新打开PCA计数器 }

/*=========================================== *函数名:PWM_start(module,mode) *功 能:选择PWM模块和PWM模式,

* module=0/1/2,打开模块0/1/两者

* module=0/1/2/3,无中断/下降沿中断/上升沿中断/跳变中断 *返回值:无 *调用函数:无

*============================================*/ void PWM_start(U8 module,U8 mode) {

SET_PWM1(50); //模块0,1 占空比分别为 25%,50% SET_PWM2(50);

46

河南城建学院本科毕业设计(论文) 附录

//AUXR = AUXR & ~(1 << 7); //定时器0速度是8051单片机定时器的速度,即12分频

//AUXR = AUXR & ~(1 << 7); //定时器0速度是8051单片机定时器速度的12倍,即不分频 if(module==0) {

switch(mode) {

case 0: CCAPM0 = 0X42;break; //模块0设置为8位PWM输出,无中断 case 1: CCAPM0 = 0X53;break; //模块0设置为8位PWM输出,下降沿产生中断

case 2: CCAPM0 = 0X63;break; //模块0设置为8位PWM输出,上升沿产生中断

case 3: CCAPM0 = 0X73;break; //模块0设置为8位PWM输出,跳变沿产生中断

default: break; } } else

if(module==1) {

switch(mode) {

case 0: CCAPM1 = 0X42;break; //模块1设置为8位PWM输出,无中断 case 1: CCAPM1 = 0X53;break; //模块1设置为8位PWM输出,下降沿产生中断

case 2: CCAPM1 = 0X63;break; //模块1设置为8位PWM输出,上升沿产生中断

case 3: CCAPM1 = 0X73;break; //模块1设置为8位PWM输出,跳变沿产生中断

default: break; } } else

if(module==2) {

switch(mode) {

case 0: CCAPM0 = CCAPM1 = 0X42;break; //模块0和1设置为8位PWM输出,无中断

case 1: CCAPM0 = CCAPM1 = 0X53;break; //模块0和1设置为8位PWM输出,下降沿产生中断

case 2: CCAPM0 = CCAPM1 = 0X63;break; //模块0和1设置为8

47

河南城建学院本科毕业设计(论文) 附录

位PWM输出,上升沿产生中断

case 3: CCAPM0 = CCAPM1 = 0X73;break; //模块0和1设置为8位PWM输出,跳变沿产生中断 default: break; } }

CR=1; //PCA计数器开始计数 }

/*=========================================== *函数名:PCA_PWM(void) interrupt 7 *功 能:PCA中断子函数, *返回值:无 *调用函数:无

*============================================*/ void PCA_Intrrpt(void) interrupt 7 {

if(CCF0) CCF0=0;

if(CCF1) CCF1=0; //软件清零 if(CF) CF=0; //软件清零 }

附录2:PCB走线图

48

河南城建学院本科毕业设计(论文) 附录 0000000000000000000000000000000000000000 49

河南城建学院本科毕业设计(论文) 附录

附录3:小车实物图

50

河南城建学院本科毕业设计(论文) 附录

总原理图

51

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务