基于单片机的WIFI智能小车设计

时间:2022-10-06 15:15:44 阅读: 最新文章 文档下载
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。
.

基于单片机的WIFI智能小车设计



WIFI智能小车由电机、小车车体、89C52控制芯片、WIFI收发模块、电机驱动、舵机、电源、摄像头等主要部件以及灯光、蜂鸣器、电平转换等辅助模块构成。WIFI智能小车利用笔记本或手机等能连接无线路由器的终端智能设备连接到路由器,通过应用软件显示路由器上摄像头上采集到的视频信号,再通过这些智能的终端设备发送控制指令到无线路由器,通过无线路由器将指令传送给单片机进行处理。然后通过单片机控制电机驱动驱动电机转动、舵机转动,从而实现控制小车的运动及视频采集。

关键词:路由器;wifi;智能小车;89C52

精品word文档


.

Abstract

The intelligent WIFI car involved a motor, a body, the 89C52 control chip, a WIFI transfer module, motor drivers, a power supply, lights, a buzzer and a voltage converter. The intelligent WIFI car can use an intelligent terminal (such as a laptop or a mobile phone) to connect with the router and use application software to display the video signal collected by the camera, then the intelligent terminal will send control commands which can be processed by the MCU though the routers. The MCU will control the turning of motors and realize the moving of the car and the video collection.

KeywordsRouterWIFIintelligent car89C52



精品word文档


.



..................................................................................................................................................... I Abstract .................................................................................................................................................. II 1 概述 .......................................................................................................................................... 1 2 方案论证及选择....................................................................................................................... 3

2.1 总体设计方案.......................................................................................................................... 3

2.1.1 整机系统....................................................................................................................... 3 2.1.2 整机工作原理 ............................................................................................................... 4 2.2 系统方案的选择与比较 .......................................................................................................... 4 3 硬件电路设计........................................................................................................................... 5

3.1 DB120-WG无线路由器 .......................................................................................................... 5

3.1.1 刷机固件介绍 ............................................................................................................... 5 3.1.2 刷机步骤....................................................................................................................... 6 3.2 单片机最小系统设计 .............................................................................................................. 8

3.2.1 主控制芯片89C52 ....................................................................................................... 8 3.2.2 STC89C52RC单片机最小系统 ................................................................................. 10 3.2.3 89C52单片机的使用 .................................................................................................. 12 3.3 电机驱动电路........................................................................................................................ 13

3.3.1 电机驱动模块使用 ..................................................................................................... 13 3.3.2 驱动原理及电路图 ..................................................................................................... 14 3.3.3 驱动模块原理及电路原理图 ..................................................................................... 15 3.4 摄像头介绍 ........................................................................................................................... 16

3.4.1 摄像头简介 ................................................................................................................. 16 3.4.2 摄像头的分类 ............................................................................................................. 16 3.4.3 摄像头的工作原理 ..................................................................................................... 16 3.4.4 摄像头的主要结构和组件 ......................................................................................... 17 3.5 舵机 ....................................................................................................................................... 17

3.5.1 舵机的控制 ................................................................................................................. 18 3.5.2 舵机的作用 ................................................................................................................. 18 3.6 电源模块 ............................................................................................................................... 18

精品word文档


.

3.6.1 LM78系列集成稳压芯片介绍 ................................................................................... 19 3.6.2 稳压电路..................................................................................................................... 19 3.7 路由器及驱动模块供电模块LM2596 ................................................................................. 20

3.7.1 LM2596系列开关稳压集成电路的主要特性 ........................................................... 20 3.7.2 LM2596构成的可调压电源模块 ............................................................................... 21 3.8 灯光、蜂鸣器及电平转换电路设计 .................................................................................... 22 4 系统程序设计......................................................................................................................... 24

4.1 系统程序简介........................................................................................................................ 24 4.2 程序流程图 ........................................................................................................................... 24

4.2.1 主程序流程图 ............................................................................................................. 24 4.2.2 串口中断子函数流程图 ............................................................................................. 25 4.2.3 定时器2中断子函数流程图 ..................................................................................... 26 4.2.4 避障子函数流程图 ..................................................................................................... 27 4.2.5 寻迹函数流程图 ......................................................................................................... 27

5 制作与调试 ............................................................................................................................ 29

5.1 系统仿真 ............................................................................................................................... 29

5.1.1 常用软件介绍 ............................................................................................................. 29 5.1.2 仿真测试..................................................................................................................... 31 5.2 实物调试 ............................................................................................................................... 31 第6章 结论 ........................................................................................................................................ 32 参考文献 .............................................................................................................................................. 33 .................................................................................................................................................. 34 附录1 系统设计原理图...................................................................................................................... 35 附录2 元器件明细表.......................................................................................................................... 36 附录3 源程序 ..................................................................................................................................... 37



精品word文档


.



1 概述

现在是一个智能化的时代,各种智能化设备正在逐步替代人为的操作。随着汽车工业的迅速发展,关于智能汽车的研究也就越来越受人关注。全国电子大赛和省内电子大赛几乎每次都有智能小车这方面的题目,全国各高校也都很重视该题目的研究。设计的WIFI智能小车能够实自动寻迹、避障功能,可程控行驶速度、电脑手机WIFI连接控制行驶及其他的控制方式。本系统能实现对小车的运动状态进行实时控制。系统控制灵活、可靠,精度高,可满足对系统的各项要求。本设计以89C52为控制核心,利用超声波传感器检测道路上的障碍并测量小车与障碍之间的距离,小车通过红外传感器能够的自动避障,通过改变PWM信号的占空比可以控制快慢速行驶,以及自动停车,自动寻迹等功能。通过对本小车研究,我们可以初步构建智能汽车的模型与理论基础。对于智能汽车的研究,国内外都有很大的成就,谷歌的无人驾驶汽车,已经能够在高速公路上安全行驶数千公里,在高速行驶下都能有这么好的操控能力,无非是智能汽车领域的一座里程碑。对于智能泊车系统,现在也已经进入了民用领域,很多车型也装配了该系统,有了他,汽车用超声波传感器扫描路面两侧,通过比较停车的空间和车辆的长度,自动寻找合适的停车位。找到合适位置后,驾驶者只需控制刹车,车辆自动控制转向操作,即可将车停进停车位,并且液晶屏会有相应的显示。本设计选用的89C52单片机属于MCS-51系列单片机,Intel公司开发,其结构是8048的延伸,改进了8048的缺点,具有指针、布尔代数运算等指令,以及串行通信能力和5个中断源。采用40引脚双列直插式DIP其内部有128RAM单元及4KROM89C52有两个16位定时计数器,两个外中断,三个定时计数中断,及一个串行中断,并有48位并行输入口。89C52内部有时钟电路,但需要石英晶体和微调电容外接,本系统中采用22.1184MHz的晶振频率。由于89C52的系统性能满足系统数据采集及时间精度的要求,而且产品产量丰富来源广,应用也很成熟,故用来作为控制核心。新一代单片机为外部提供了相当完善的总线结构,为系统的扩展与配置打下了良好的基础。本设计主要研究内容就是基于89C52设计一部WIFI智能小车,小车能够实现自动循迹,自动避障,超声波测量距离。WIFI遥控的智能小车控制系统,包括了对驱动电路,红外通讯以及无线视频通信等的探索和研究。本项目文主要从小车设计方案的选取、硬件设计、

精品word文档


.

软件设计、测试结果方面进行主要论述。我们在第3章主讲单片机与路由器的设计,包括了单片机最小系统的电路设计对路由器进行刷机处理;整个小车的一个供电电源的设计,需要通过电源给整个系统供12V8V5V等几个电压;电机的驱动模块,详细的说明了电机驱动的原理,视频信号的采集;第4章程序的设计给出了程序整体的流程图及编写思想;第5章调试简述整机的每个模块调试及方法。

精品word文档


.



精品word文档


.

2 方案论证及选择

2.1 总体设计方案

WIFI智能小车需要由WIFI模块、电机驱动模块、核心控制模块、摄像头模块等构成。 2.1.1 整机系统

如图2-1所示。

摄像头

蜂鸣器电路

89C52

路由器模块



照明电路



电机驱动模块

电脑控制终端

电机





2-1 系统结构框图

项目系统包括路由器、单片机最小系统、电机驱动电路、电机、电平转换电路、电源电路、舵机、摄像头、蜂鸣器电路、灯光电路等。

路由器用于接收电脑等终端设备发送的指令和将摄像头采集到的视频信号传送到电脑等终端设备;单片机最小系统是整个小车的控制核心,控制着各个模块统一协调工作;电机驱动电路用于驱动电机转动,可以使电机产生正转、反转,从而使车体产生前进、后退、转弯等动作;电机的作用就是使整个车体运动;电平转换电路是将路由器输出的3.3V串口电平转换为单片机能判断的高低电平;电源电路作用是为整个小车系统共电;舵机制作成云台,然后装上摄像头,使摄像头可实现上下、水平方向180度旋转调节;摄像头用于采集视频信号;蜂鸣器电路用于报警

精品word文档


.

提示;照明电路为小车在夜间行驶提供照明。

精品word文档


.

2.1.2 整机工作原理

由电脑终端,通过WIFI无线网络连接到路由器,再通过电脑应用软件,向路由器发送控制命令及数据。路由器接收到数据后通过内部的串口发送软件,将接收到的命令和数据,通过路由器串口发送到89C52单片机的串口端,单片机接收到这些命令后执行相应的指令,如:驱动小车运动、舵机运动、蜂鸣器鸣叫、照明电路的开关等。

视频信号,通过摄像头采集之后通过路由器发送到电脑终端,并在其应用软件中显示摄像头采集到的视频信号。

2.2 系统方案的选择与比较

方案一:选择网上已经经过改装过的wifi小车专用的TPLINK WR703N无线路由器做为我们wifi小车的wifi连接模块,使用MSP430g2553单片机作为wifi小车的控制芯片。自己再够买元器件,自己搭接电源、驱动电路及单片机最小系统。

方案二:利用网上大家公认做wifi小车较好的大亚db120-wg无线路由器,作为我们的wifi智能小车的wifi连接模块,使用我们教学用的51系列单片机89C52做为我们wifi智能小车的控制芯片。利用手里面现有的一些电源、驱动等模块等制作我们的wifi智能小车。

方案选择:基于我们对成本和制作性的考虑我们选取的是方案二。

精品word文档


.

3 硬件电路设计

3.1 DB120-WG无线路由器

路由器如图3-1



3-1 db120-wg路由器



路由器内部如图3-2所示。



3-2 路由器内部结构图

3.1.1 刷机固件介绍

固件wifi-robots-openwrt-RG100A_DB120-cfe固件说明:

精品word文档


.

1Ser2net 已设置开机启动

2mjpg_streamer开机启动。摄像头只有2种驱动,uvc301,目前开机mjpg_streamer缺省启动了301摄像头,301摄像头无需设置直接跳到第3步,uvc需要修改下即可ssh登陆后,vi etc/init.d/wificar,找到摄301像头参数mjpg_streamer -b -i "input_uvc.so -r 640x480 -f 30" -o "output_http.so -p 8080 -w /web"修改为uvc参数mjpg_streamer -b -i "input_uvc.so -r 352x288 -f 15 -y" -o "output_http.so -p 8080 -w /web"然后在putty命令行下输入chmod 777 /etc/init.d/wifirobot更改属性输入/etc/init.d/wificar enable 启动该配置文 重启路由器,301摄像头设置完成。

3支持Luci/web 管理,错误设置后不能进入的,可以长按复位键 回初始模式 4.网络设置,目前是AP模式,IP:192.168.1.1 3.1.2 刷机步骤

1.网线连接电脑和路由器的LAN1(靠近电源那个网口,升级只能使用此口,有的版本丝印不是LAN1,反正记住靠近电源的那个口即可),电脑IP设置为

192.168.1.169/255.255.255.0192.168.1.1;设置完成点击网络邻居,选择属性,选择升级用的有线网口,右键点修复。

2.用USB TTL线接好路由的GNDRXDTXD三条线(VCC电源千万别接,会烧路由),打开putty,选好端口号,端口号请查看电脑设备管理器,设置波特率为115200,点击下面的Open

3.路由器通电,接线且设置正确的话,putty窗口应该出现路由器的信息,在通电3秒内,按下键盘的回车键,阻止路由器CFE启动,这时候应出现CFE>

4.输入小写e ae a之间有个回车键,然后再按下y,点击回车,路由器开始擦除清除原系统固件。清除之后,路由会持续输出很多命令行,且不会停止,我们不用管,关掉路由电源。

5.重新打开路由电源,和第四步一样,通电3秒内按下回车键阻止CFE继续启动打开浏览器,输入192.168.1.1,应看到上传固件的的选择文件,putty窗口也会出现路由器升级进度信息,此时千万不要断电,理论上此时断电会刷坏路由器,升级完成后,耐心等待5分钟,路由器会自动重启。

精品word文档


.

6.等待路由启动后,等待几分钟再次重启一次路由,打开网页192.168.1.1输入密码登陆进入路由器的设置,将路由器的无线网络开启,只有这样电脑等终端设备才能通过wifi信号和路由器连接。

7.用putty登陆路由,转到/etc/init.d/目录,可以看到一个ser2net.conf文件,打开它可以看到路由串口的配置信息,默认配置的波特率是9600,8位数据位,1位停止位,无校验位。完成之后需要设定mjpg-streamerser2net随机启动,不然没法正常工作。

8.由于我使用的摄像头是301芯片的,在电脑上显示会花屏,所以还需要对脚本进行修改,其操作步骤如下:

具体步骤:

A登陆路由器:telnet 192.168.1.1 (IP地址根据你的路由器实际地址而定) B.编辑脚本/etc/init.d/wificar# vi /etc/init.d/wificar (在START=80后面增加一行killall mjpg_streamer,修改后的脚本看下面内容。

#!/bin/sh /etc/rc.common START=80

killall mjpg_streamer start() {

mjpg_streamer -b -i "input_uvc.so -r 640x480 -f 15" -o "output_http.so

p 8080 -w /web"

# mjpg_streamer -b -i "input_uvc.so -r 352x288 -f 15 -y" -o "output_http. so -p 8080 -w /web" ser2net } stop(){

killall mjpg_streamer killall ser2net

精品word文档


.

}

C.保险起见,修改wificar脚本权限。 # chmod -777 D.重启路由器。 # syncsyncreboot

9.插上301芯片的摄像头,在电脑上打开我们的一个wifi小车的控制界面软件,选择wifi控制模式,然后打开视频,这时我们可以看到一个稳定视频信号通过路由器无线传送到了我们的电脑终端,至此说明我们路由器刷机及其配置完成。

3.2 单片机最小系统设计

最小系统主控芯片是宏晶公司MCS-51系列单片机中的89C52 3.2.1 主控制芯片89C52

89C52是宏晶公司MCS-51系列单片机中基本的产品,它采用ETC公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。89C52内置8位中央处理单元、256字节内部数据存储器RAM8k片内程序存储器(ROM32个双向输/输出(I/O)口、316位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPURAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52PDIP(40pin)PLCC(44pin)两种封装形式。

主要功能特性:

1.标准MCS-51内核和指令系统。232个双向I/O口。3316位可编程定时/计数器。4.向上或向下定时计数器。56个中断源。6.全双工串行通信口。7.—帧错误侦测。8.—自动地址识别。9.空闲和掉电节省模式。10.片内8kROM(可扩充64kB外部存储器)。11256x8bit内部RAM(可扩充64kB外部存储器)。12.时钟频率3.5-

精品word文档


.

12/24/33MHz13.改进型快速编程脉冲算法。145.0V工作电压。15.布尔处理器。164层优先级中断结构。17.兼容TTLCMOS逻辑电平。18PDIP(40)PLCC(44)封装形式。

管脚说明:

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

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

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

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输4TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。

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

P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0 P3.3 /INT1(外部中断1 P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入)

精品word文档


.

P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通)

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

ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。

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

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA / VPP/EA保持低电平时,则在此期间外部程序存储器0000H-FFFFH不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

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

外接石英晶体或者陶瓷谐振器以及电容C1C2接在放大器的反馈回路中构成并联振荡电路。为了使装置能够被外部时钟信号激活,XATL1应该有效,而XTAL2应该被悬空。由于输入到内部的时钟信号电路通过了一个二分频的信号,外部信号的工作周期比没有别的要求,但是最大值和最小值的大小可以在数据表上观察出来。

当正常工作时,外部振荡器可以计算出XTAL1上的电容,最大可达到100pF这是由于振荡器电容和反馈电容之间的相互作用。当外部信号是标准高电平或者低电平时,电容不会超过20pF

精品word文档


.

空置模式:

用户的软件都可以调用空置模式。当单片机出于这种模式,耗能就会自然降低。特殊功能端和板子上的随机存储器在空置状态保持各自的电平。但是处理器阻止装置执行指令。空置模式会被激活如果端口处于复位状态或者中断系统有效。 3.2.2 STC89C52RC单片机最小系统

STC89C52RC单片机最小系统的基本工作电路包括电源电路、时钟电路和复位电路。其组成方框图如图3-3所示。

电源电路 时钟电路 复位电路

3-3 单片机最小系统组成方框图







1.电源电路

电源电路模块为单片机最小系统和其他功能模块提供标准的+5V电源电压。 2.时钟电路

单片机的时钟信号为单片机芯片内部的各种操作提供时间基准,时钟电路为单片机产生时钟脉冲序列。作为单片机工作的时间基准,典型的晶体振荡频率为12MHz

MCS-51系列单片的时钟信号可以由两种方式产生:一种为内部时钟方式,利用芯片内部的振荡电路;另一种为外部时钟方式。其两种电路如图3-4所示。



a)内部时钟方式 b)外部时钟方式

3-4 单片机时钟信号示意图

3.复位电路

精品word文档


.

单片机复位是使CPU和系统中的其他功能部件都恢复到一个确定的初始状态,并从这个状态开始工作。当在MCS-51系列单片的RST引脚处引入高电平并保持2个机器周期,单片机内部就执行复位操作。单片机常见的复位电路有两种基本形式:一种是上自动电复位,另一种是手动复位。其两种电路方式如图3-5a)、(b所示。

由于STC89C52RC单片机芯片内有时钟振荡电路,所以此系统单片机均采用内部时钟方式。只需在单片机的XTAL1XTAL2引脚外接石英晶体和微调电容,就构成了自激振荡器并在单片机内部产生时钟信号脉冲信号。同时,也采用手动复位电路。其具体电路设计如图3-6所示。



a)上电自动复位 b)手动复位

3-5 单片机复位电路示意图

在此图中,C1C2电容的作用的是稳定频率和快速起振,其值为5~30pF,在此选择30pF;晶振X1的振荡频率范围在3.5~33MHz之间选择,因为需要使用串通讯涉及波特率,所以在此选择22.1184MHz 3.2.3 89C52单片机的使用

本次设计,使用到了89C52单片机的I/O口的输入输出功能、内部定时器T0T1T2的使用及串口中断、外部中断。

精品word文档


态。

车的运动。

的高效率区。

3.3 电机驱动电路

.

3-6 单片机最小系统电路图

外部传感器的信号采集处理,从而对外部条件进行判断以确定小车下一步的运行状

单片机的外部中断用于红外信号的接收,然后通过解码程序得到命令,从而控制小

靠性,而且电机的转矩-转速特性受电源功率的影响,这就要求驱动具有尽可能宽

89C52单片机的I/O口信号输出,主要是给驱动模块送控制信号用于控制电机

89C52单片机的I/O口的输入功能用于传感器信号的输入处理。通过单片机对

片机的内部定时器的使用是用于产生PWM信号,以及其他需要精确时间的地方。单

的转动、给舵机送PWM控制信号控制舵机的偏转以及控制开关蜂鸣器、灯光等。单

片机的串口中断,用于与路由器进行的串口通讯,接收电脑终端发送的串口指令。

电动小车的驱动不但要求电机驱动系统具有高转矩重量比、宽调速范围、高可

精品word文档




.

我们所使用的电机一般为直流电机,主要用到永磁直流电机、伺服电机及步进电机三种。直流电机的控制很简单,性能出众,直流电源也容易实现。

我们使用的这种直流电机的驱动及控制需要电机驱动芯片进行驱动。常用的电机驱动芯片有L297/298MC33886ML4428等。 3.3.1 电机驱动模块使用

我们使用的L298NST公司生产的一种高电压、大电流电机驱动芯片。该芯片采用15脚封装。主要特点是:工作电压高,最高工作电压可达46V输出电流大,瞬间峰值电流可达3A持续工作电流为2A;额定功率25W。内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制电路。使用L298N芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步进电机,也可以驱动两台直流电机。项目使用的是4个直流电机,项目中使用了两块L298N电机驱动来驱动这四个直流电机的转动。

其实物及引脚图如下图3-7所示。

其中611引脚是它的使能端,一个使能端控制一个电机,只有当它们都是高电平的时候两个电机才有可能工作,571012298的信号输入端和单片机IO口相连,231314脚是输出端,输入57脚控制输出23脚,输入1012脚控制输出的1314脚。





3-7 L298驱动芯片实物及引脚图

精品word文档


示。

3.3.2 驱动原理及电路图

3.3.3 驱动模块原理及电路原理图

电路原理图如下图3-9所示。

.

3-8 驱动实物图

3-9 L298驱动模块电路原理图

B可用于输入PWM脉宽调制信号对电机进行调速控制。(如果无须调速可将两引脚

驱动部分我们使用的是L298N驱动芯片构成的一个驱动电路模块如图3-8

使用直流/步进两用驱动器可以驱动两台直流电机。分别为M1M2。引脚A

5V,使电机工作在最高速状态,既将短接帽短接)实现电机正反转就更容易了,

精品word文档






.

输入信号端IN1接高电平输入端IN2接低电平,电机M1正转。(如果信号端IN1接低电平,IN2接高电平,电机M1反转。)控制另一台电机是同样的方式,输入信号端IN3接高电平,输入端IN4接低电平,电机M2正转。(反之则反转),PWM号端A控制M1调速,PWM信号端B控制M2调速。

精品word文档


.

可参考下图表3-1

3-1电机驱动状态表

输入PWM信号改变脉宽可调速 调速A / / /

调速端B / / /

电机 旋转方式

控制端IN1 / /

控制端IN2 / /

控制端IN3 / / / /

控制端IN4 / / / /

正转

M1

反转 停止 正转

M2

反转 停止

3.4 摄像头介绍

本项目中摄像头实现实时监测小车周边情况,使之成为一个无线可控移动的视频监控器,也用于判断小车当前路况。 3.4.1 摄像头简介

摄像头(CAMERA)又称为电脑相机、电脑眼等,它作为一种视频输入设备,在过去被广泛的运用于视频会议、远程医疗及实时监控等方面。近年以来,随着互联网技术的发展,网络速度的不断提高,再加上感光成像器件技术的成熟并大量用于摄像头的制造上,这使得它的价格降到普通人可以承受的区间。普通的人也可以彼此通过摄像头在网络进行有影像、有声音的交谈和沟通,另外,人们还可以将其用于当前各种流行的数码影像、影音处理。 3.4.2 摄像头的分类

摄像头分为数字摄像头和模拟摄像头两大类。模拟摄像头可以将视频采集设备产生的模拟视频信号转换成数字信号,进而将其储存在计算机里。模拟摄像头捕捉到的视频信号必须经过特定的视频捕捉卡将模拟信号转换成数字模式,并加以压缩后才可以转换到计算机上运用。数字摄像头可以直接捕捉影像,然后通过串、并口或者USB接口传到计算机里。现在电脑市场上的摄像头基本以数字摄像头为主,而数字摄像头中又以使用新型数据传输接口的USB数字摄像头为主,目前市场上可见的大部分都是这种产品。除此之外还有一种与视频采集卡配合使用的产品,但目前

精品word文档


.

还不是主流。由于个人电脑的迅速普及,模拟摄像头的整体成本较高等原因,USB接口的传输速度远远高于串口、并口的速度,因此现在市场热点主要是USB接口的数字摄像头。以下主要是指USB接口的数字摄像头。

精品word文档


.

3.4.3 摄像头的工作原理

摄像头的工作原理大致为:景物通过镜头(LENS)生成的光学图像投射到图像传感器表面上,然后转为电信号,经过A/D(模数转换)转换后变为数字图像信号,再送到数字信号处理芯片(DSP)中加工处理,再通过USB接口传输到电脑中处理,通过显示器就可以看到图像了。我们这里是将摄像头连接在路由器的USB接口上,通过路由器上的摄像头驱动软件使摄像头工作,并由路由器通过WIFI将视频信号发送出去。电脑等终端接收设备,接收到视频信号后通过控制软件的界面显示图像。 3.4.4 摄像头的主要结构和组件

从摄像头的工作原理就可以列出摄像头的主要结构和组件:1.主控芯片(详情请参阅下面介绍)2.感光芯片(详情请参阅下面介绍)3.镜头(详情请参阅下面介绍)4.电源。摄像头内部需要两种工作电压:3.3V2.5V,因此好的摄像头内部电源也是保证摄像头稳定工作的一个因素。

在本次wifi小车的制作中我们使用的天敏S606的摄像头,如图3-10所示。



3-10 天敏S606摄像头

精品word文档


.

3.5 舵机

舵机如图3-11所示。



3-11 舵机

舵机的输入线共有三条,红色中间,是电源线,一边黑色的是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源有两种规格,一是4.8V,一是6.0V,分别对应不同的转矩标准,即输出力矩不同,6.0V对应的要大一些,具体看应用条件;另外一根线是控制信号线,Futaba的一般为白色,JR一般为桔黄色。另外要注意一点,SANWA的某些型号的舵机引线电源线在边上而不是中间,需要辨认。但记住红色为电源,黑色为地线,一般不会有错。 3.5.1 舵机的控制

舵机的控制信号为周期是20ms的脉宽调制(PWM)信号,其中脉冲宽度从0.5ms-2.5ms,相对应舵盘的位置为0180度,呈线性变化。也就是说,给它提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对应的位置上。舵机内部有一个基准电路,产生周期20ms,宽度1.5ms的基准信号,有一个比较器,将外加的PWM信号与基准信号相比较,判断出方向和大小,从而产生电机的转动信号。由此可见,舵机是一种位置伺服的驱动器,转动范围不能超过180度,适用于那些需要角度不断变化并可以保持的驱动当中。比方说机器人的关节、飞机的舵面等。 3.5.2 舵机的作用

在本次wifi小车中我们利用两个舵机做成一个云台(如图3-12),将摄像头固定在云台上,通过89C52单片机控制舵机旋转一定的角度,把我们想要角度的图像通过摄像头传送到电脑等终端设备。

精品word文档


.



3-12 舵机云台

3.6 电源模块

单片机和舵机需要分别单独供5V6V的电源。本项目采用的是通过集成稳压芯片LM78XX系列构成一个5v6v的稳压模块供电。

LM78系列引脚及实物图如图3-13所示。 3.6.1 LM78系列集成稳压芯片介绍

电子产品中,常见的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。顾名思义,三端IC是指这种稳压用的EIC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。该系列集成稳压IC型号中的7879后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V7909表示输出电压为9V。因为三端固定集成稳压电路的使用方便,电子制作中经常采用。



3-13 LM78系列稳压引脚及实物

在实际应用中,应在EQWEWQW 三端集成稳压电路上安装足够大的散热器(当然

精品word文档


.

小功率的条件下不用)。当

精品word文档


.

稳压管温度过高时,稳压性能将变差,甚至损坏。当制作中需要一个能输出1.5A以上电流的稳压电源,通常采用几块三端稳压电路并联起来,使其最大输出电流为N1.5A,但应用时需注意:并联使用的集成稳压电路应采用同一厂家、同一批号的产品,以保证参数的一致。另外在输出电流上留有一定的余量,以避免个别集成稳压电路失效时导致其他电路的连锁烧毁。 3.6.2 稳压电路

78稳压电路原理图如图3-14所示。



3-14 780506集成芯片稳压电路原理图

这是一个输出正5V6V直流电压的稳压电源电路。IC采用集成稳压器78057806其中电容分别为输入端和输出端滤波,LED和电阻R1构成一个电源指示电路,具体参数如图3-14所示。当输出电较大时,7805应配上散热板。

3.7 路由器及驱动模块供电模块LM2596

路由器需要一个12V/1A的电源;电机驱动需要一个8V左右的电源。我们这里分别使用了两个可调压的LM2596电源模块分别调节到想要的电压为路由器和电机驱动供电。

LM2596系列是美国国家半导体公司生产的3A电流输出降压开关型集成稳压芯片,它内含固定频率振荡器(150KHZ),和基准稳压器(1.23V),并具有完善的保护电路:电流限制、热关断电路等。利用该器件只需极少的外围器件便可构成高效稳压电路。提供有:3.3V5V12V及可调(-ADJ)等多个电压档次产品。

此外,该芯片还提供了工作状态的外部控制引脚。

3-15LM2596芯片实物以及引脚示意图。1+VIN2out put3gnd4feed back5on/off

精品word文档


.

3.7.1 LM2596系列开关稳压集成电路的主要特性

1.最大输出电流:3A 2.最高输入电压:37V

3.输出电压:3.3V5V12V及(ADJ)等,最大输出电压37V 4.震荡频率:150KHZ

5.转换效率:75%~88%(不同电压输出时的转换效率不同) 6.工作温度范围:-40~+125

7.工作模式:低功耗/正常两种模式。可外部控制 8.工作模式控制:TTL电平相容

9.所需外部组件:仅四个(不可调);六个(可调) 10.器件保护:热关断及电流限制

11.封装形式:5脚(TO-220(T)TO-263(S)) 3.7.2 LM2596构成的可调压电源模块

开关电源调节器是降压型电源管理单片集成电路,能够输出3A的驱动电流,同时具有很好的线性和负载调节特性。可调节输出小于37V的各种电压。

该器件内部集成频率补偿和固定频率发生器,开关频率为150KHZ,与低频开关调节器相比较,可以使用更小规格的滤波元件。由于该器件只需4个外接器件,可以使用通用的标准电感,这更优化了LM2596的使用,极大地简化了开关电源电路的设计。

精品word文档


.



3-15 LM2596实物及引脚图



VOUTVREF(1

R2R1

),VREF1.23V其中, R3

VOUT

R2R1R3(1)

VREF

1

CFF

31103R2

由于路由器耗电较大需要供12V/1A的电,我们通过调节LM2596的开关电源模块电路为路由器供12V/1A的电源以及给耗电较大的电机供电。其电路图3-16所示。

可调压LM2596电路原理图如图3-16所示。

精品word文档


.





3-16 LM2596构成的可调压电源模块电路图

3.8 灯光、蜂鸣器及电平转换电路设计

灯光、蜂鸣器及电平转换电路都是通过三极管的开关作用实现的,如图3-173-183-19所示。

灯光电路和蜂鸣器电路都是通过单片机引脚输出高低电平到三极管的基极,使三极管导通或截止,从而控制LED的点亮熄灭,控制蜂鸣器的鸣叫。其中灯光电路中的电阻用于限流保护发光二极管。

电平转换电路中将5V转化为3V是通过滑动电阻器降压实现的,将3V转换为5V是通过3V的信号控制三极管的截止,导通进行控制从而使三级管的发射极对应输出高低电平用于输入单片机进行处理。





3-17 灯光控制电路

3-18 蜂鸣器控制电

精品word文档


.

3-19 电平转换电路



精品word文档




.

4 系统程序设计

4.1 系统程序简介

硬件平台结构一旦确定,大的功能框架即形成,软件在硬件平台上构筑,完成各部分硬件的控制和协调工作。系统功能是由软硬件共同实现的,由于软件的可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是系统的灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和提高软件的可靠性。

我们的小车控制是通过89C52单片机控制驱动电路和给舵机送控制信号,然而这些控制信号的命令又是电脑等终端设备通过无线路由器串口传送给单片机的,所以在程序中我们需要设计到串口的使用、定时器使用、I/O口的使用。

4.2 程序流程图

智能WIFI小车的软件编写主要分为命令接收部分、命令执行部分、以及具体的信号的采集和处理。 4.2.1 主程序流程图

系统主程序模块主要完成对系统中各模块电路的初始化等工作,主要包括对定时器、串口中断、外部中断的初始化,同时执行电脑等终端设备所发送的命令,等待外部中断以及根据所需要的功能进行相应操作。软件总体设计及程序流程如下图4-1所示。

精品word文档


.

开始

I/O

初始化定时器T1T2及串口中断

的指令

退

1 2



4-1 主函数流程图



4.2.2 串口中断子函数流程图

通过串口中断,实现单片机和路由器进行通讯。进入中断后关掉中断,避免数据信号重复引起中断。根据命令数据发送的规律,将命令解码储存在相应的二维数组当中,方便在主函数中调用。具体流程图如下图4-2所示。

精品word文档


.

4.2.3 定时器2中断子函数流程图

通过定时器的初始值和循环次数,确定出舵机PWM信号的20Ms的周期,通过控制高电平持续的中断次数,来确定具体的PWM信号。其流程图如下图4-3所示。

串口中断

IR归零

将接收到的数据命令赋给数组

接收到结束命令

N 指令类型或数据

Y

计数cont=0



计数cont++

结束



4-2 串口中断流程图



精品word文档


.

4.2.4 避障子函数流程图

根据传感器探测到小车四周障碍物状态,从而确定驱动几个电机的旋转方向,也就确定了小车的运动状态。其流程图如下图4-4所示。 4.2.5 寻迹函数流程图

根据传感器扫黑线上的状态,从而确定驱动几个电机的旋转方向,也就确定了小车的运动状态。其流程图如下图4-5所示。

定时中断

初始化T2

中断标志位清零

t1t2自加

t1=io1t2=io2

t1=200

舵机1控制端归零 舵机2控制端归零

t1=200

舵机1控制舵机2控制

结束



4-3 定时中断函数流程图



精品word文档


.

避障函数

判断P2口状态

退



4-4 避障子函数流程图



寻迹函数

判断P0口状态

退



4-5 寻迹子函数流程图





精品word文档


.

5 制作与调试

5.1 系统仿真

随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手段。它具有设计灵活,结果、过程统一的特点。可使设计时间大为缩短、耗资大为减少,也可降低工程制造的风险。 5.1.1 常用软件介绍

1Keil软件

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision将这些部分组合在一起。运行Keil软件需要WIN98NTWIN2000WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。其软件界面如图5-1所示。



5-1 Keil软件界面图

精品word文档


.

2Proteus软件

Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051HC11PIC10/12/16/18/24/30/DsPIC33AVRARM8086MSP430等,2010年即将增加CortexDSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IARKeilMPLAB等多种编译。其软件界面如5-2所示。





5-2 Proteus软件界面

精品word文档


.

5.1.2 仿真测试

1.系统初始化测试:主要完成对系统中各模块电路的初始化等工作,如在Proteus里面对软件的一些参数进行调试。将Proteus里的单片机89C52的晶振设置为我们实物中使用的参数22.1184MHzT0T1T2定时器开启并使之从单片机的I/O口输出,我们通过Proteus软件里的示波器,就可看出我们设置的定时器初始值是否合适,如果不合适我们就能根据I/O口的波形,修改我们的参数直到合适为止。

2.分模块对软件进行测试,在Proteus软件中我们把我们的寻迹、避障模块程序分别进行调试,我将传感器的状态在软件中用开关替代,在输出I/O引脚上加上发光二极管,用观察输出状态。这样我们就可将外部的输入状态和输出进行对比,判断出个模块软件的编写是否正常。

5.2 实物调试

根据系统设计方案,此系统调试可分为硬件调试、软件调试和软硬件联调三个部分。

1.硬件调试

由于此设计实物的焊接、装配工作量非常大,所以在电路安装完成后,首先应对系统进行整体检查,确认电路无虚焊、短路、断路等错误,然后应该对电路各功能模块进行分级调试,逐步实现系统的整体功能。

2.软件调试

此系统的软件程序,均使用C语言编写。首先选用单片机开发板作为程序调试的载体,逐步对各模块子程序进行调试,然后再将各子程序模块进行有机组合、联调,最终完成整个系统的软件调试。

3.软硬联调

系统软硬件联调的主要任务是检测系统中各模块的功能和效果,同时需要校正系统的相关数据,按实际测量数据进行调试,直至数据结果准确为止。



精品word文档


.

第6章 结论

通过本次WIFI智能小车的理论学习、论文编写和实物的制作,进一步的认识到了自身存在的不足。特别是自己在路由器方面知识的欠缺,这使得我在小车在起步制作时路由器部分的处理花费了大量的时间。但通过我在网上不断的查询相关的资料,在网上请教这方面的高手,最终我还是完成了路由器部分的处理。但是我还是不知道其中具体的一些细节的原理,如我的摄像头为什么会在后期不能使用,使用不同摄像头时路由器要进行怎样的一个处理。还有在整机装配的时候我没有注意到一些细节的地方,这使得我把小车拆装了多次。要想把事情做好提高效率,这就需要注意学习生活工作中做事的细节,以及对自己知识的扩充。

同时,通过这次的毕业设计,我的各方面能力也得到了大幅度的提高。在知识上:一方面,我系统的总结了自己的专业知识,明确了自己今后事业的发展方向。另一方面,我如饥似渴的自学了单片机及其外围电路知识,并通过自己独立对软件的编写和实物制作,最终完成了整个WIFI智能小车的设计。在能力上:我通过不断查阅资料、与师生交流学习新知识、在网上请教相关的人士,然后又将自己沉淀后的知识和经验运用到实际电路设计理念中,丰富其功能与质量。在综合素质上,我虽然遇到很多的挑战和困难,但从未想过放弃,最终凭借自己百折不饶、勇于钻研的精神解决了这些技术难点。

当然,由于我的知识和能力有限,整个设计还有很多不足之处有待完善和改进,恳请老师指教,这必将是我在踏上工作岗位之前的最大一笔收获。



精品word文档


.

参考文献

[1] 张永枫.单片机应用实训教程.北京:清华大学出版社,2008 [2] 刘守义.单片机应用技术.西安:西安电子科技大学出版社,2007 [3] 赵克林.C语言实例教程.北京:人民邮电出版社,2009 [4] 玮.C51单片机高效入门.北京:机械工业出版社,2006 [5] 刘建清.从零开始学单片机技术.北京:国防工业出版社,2006 [6] 刘建清.从零开始学单片机C语言.北京:国防工业出版社,2006 [7] 王静霞.单片机应用技术(C语言版).北京:电子工业出版社,2009 [8] 李伯成.嵌入式系统可靠性设计.北京:电子工业出版社,2006 [9] 先锋工作室.单片机程序设计实例.西安:清华大学出版社,2003

[10] 马忠梅.单片机的C语言应用程序设计.北京:北京航空航天大学出版社,1988 [11] 李群芳.单片微型计算机与接口技术.北京:电子工业出版社,2007



精品word文档


.



通过这次设计,加强了我的动手、思考和解决问题的能力。使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。最后在老师的辛勤指导下,终于游逆而解。同时,在老师的身上我们学也到很多实用的知识,在次我们表示感谢!同时,我也学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变,都受益非浅,今后的制作应该更轻松,自己也都能扛的起并高质量的完成项目。

最后,感谢指导老师的指导,无论在哪方面,我都学到了许多东西。



精品word文档


.

附录1 系统设计原理图

精品word文档








.

附录2 元器件明细表



项目 代号 型号、规格 数量 备注 更改 U1 单片机模块 STC89C52RC最小系统

1 U2 驱动模块 L298N模块 2 U3 路由器 DB120-WG

1 M1 电机 直流电机(带减速器)

4 R1 电阻 1k 1 Q1 三极管 9014 2 L 杜邦线 20cm 若干 K 开关 船型开关 3 U4 电源模块 LM2596 2 U5

电源模块 LM7805 2

D1 发光二极管

白色光 3 R2 电阻 2K 1 Q2 红外接收头 VS1838 1 手机电池 若干 车体 1

轮子

4 螺丝、螺柱

若干











旧底图总号











标记

数量

更改 单号

签名

日期

底图总号

邹君

基于单片机

日期 签名 WIFI智能等级标记

1 1 2012-12-4



标准化 小车设计











精品word文档


.

附录3 源程序

/******************************************************************** * 文件名 串口接收试验.c

* 描述 : 该文件实现通过单片机 无线从电脑接收数据。通过处理电脑发送的数据对小车进行操控

该试验使用的晶振是22.1184 * 创建人 邹君,20121111 * 版本号 2.0

* 感谢各大工作室和同学对本人的大力支持。

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

#include #include

#define uchar unsigned char #define uint unsigned int

sbit P3_2=P3^2; //保留

sbit IRIN = P3^3; //红外接收器数据线 sbit P3_4=P3^4; //led控制 sbit P3_5=P3^5; //蜂鸣器控制 sbit P3_6=P3^6; //舵机控制 sbit P3_7=P3^7;

sbit P2_0=P2^0; //电机速度控制 (没用) sbit P2_1=P2^1;

sbit TX=P2^6; //超声波触发端 sbit RX=P2^7; //超声波接收端 uint time=0; //超声波往返时间 long S=0; //s表示超声波距离

uchar disbuff[4]={0}; //超声波数据显示缓存

uchar io1=20,io2=20,sdd1=1,sdd2=1; //舵机及电机初始状态变量

uchar temp[1],cmd1[4],cmd2[4],cmd3[4],cmd4[4],cmd5[4]; //存放WIFI串口发下来的数据 uchar IRCOM[7];

void StartModule(); //超声波启动模块 void chaoshengbo_conv(void);

void delay(uchar x); //x*0.14MS(红外专用)

/******************************************************************** * 名称 : Delay_1ms()

* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数)

精品word文档


.

* 输出 :

精品word文档


.

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

void Delay_1ms(uint i)//1ms延时 {

uint x,j;

for(j=0;j

for(x=0;x<=300;x++); }

void delay_ms(uint z)//延时函数 {

uint x,y;

for(x=2000;x>0;x--) for(y=z;y>0;y--); }

void delay1_us(uint z)//延时函数 {

uint x,y;

for(x=200;x>0;x--) for(y=z;y>0;y--); }

void forward(void) {

P1=0xaa; }

void right(void)//右转 {

P1=0xa5; }

void left(void)//左右 {

P1=0x5a; }

void back(void)//后退 {

P1=0x55; }

精品word文档


.

void stop(void)//停止 {

P1=0xff; }

void StartModule() //超声波启动模块 {

TX=1; // 启动一次模块 _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_(); _nop_();_nop_();_nop_(); TX=0; }

/////////////////////////////////////////////////////////////////////////// void chaoshengbo_conv(void) {

time=TH0*256+TL0; //计算时间 TH0=0;

TL0=0; //每计算一次,将计数器重装初值 S=(time*1.742)/100; //算出来是mm ,温度取15° if(S<=20) //如果超出测量范围 {

right();

delay_ms(30); } }

void Evade_function() //避障函数 {

uint valA;

RX=1; //先拉高,等待下次高电平到来进行计数 StartModule(); //启动超声波模块 forward();

for(valA=7510;valA>0;valA--) //循环,在有效范围内计数 {

if(RX==1) //如果接收头接收到超声波, {

TR0=1; //开启计数

while(RX); //RX1计数并等待

精品word文档


.

TR0=0; //关闭计数 chaoshengbo_conv(); //计算 } } }

void Track_function() //循迹函数 {

switch(P0) {

case 0xFB:forward();delay1_us(100);//11011 break;

case 0xF9:right();delay1_us(100);//11001 break;

case 0xF3:left();delay1_us(100);//10011 break;

case 0xFD:right();delay1_us(100);//11101 break;

case 0xF7:left();delay1_us(100);//10111 break;

case 0xFE:right();delay1_us(150);//11110 break;

case 0xEF:left();delay1_us(150);//01111 break;

case 0xFC:right();delay1_us(150);//11100 break;

case 0xE7:left();delay1_us(150);//00111 break;

case 0xF8:right();delay1_us(150);//11000 break;

case 0xE3:left();delay1_us(150);//00011 break;

default :stop(); } }

void Evade_function1() //壁障函数 {

switch(P2) {

case 0xFB:left();delay1_us(300);//11011 break;

case 0xFD:left();delay1_us(200);//11101

精品word文档


.

break;

case 0xF7:right();delay1_us(200);//10111 break;

case 0xF9:left();delay1_us(200);//11001 break;

case 0xF3:right();delay1_us(200);//10011 break;

case 0xF8:left();delay1_us(200);//11000 break;

case 0xE3:right();delay1_us(200);//00011 break;

case 0xF0:left();delay1_us(350);//10000 break;

case 0xE1:right();delay1_us(350);//00001 break;

case 0xF1:back();delay1_us(550);left();delay1_us(350);//10001 break;

case 0xE0:back();delay1_us(550);left();delay1_us(350);//00000 break;

default :forward(); } }

/******************************************************************** * 名称 : Com_Int()

* 功能 : 串口中断子函数 * 输入 : * 输出 :

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

uchar cont=0;

void UART() interrupt 4//串口 {

RI=0;

temp[cont]=SBUF; if(SBUF!=0xff) {

if(temp[0]==0x01) {

cmd1[cont]= temp[cont]; }

else if(temp[0]==0x02)

精品word文档


.

{

cmd2[cont]= temp[cont]; }

else if(temp[0]==0x03) {

cmd3[cont]= temp[cont]; }

else if(temp[0]==0x04) {

cmd4[cont]= temp[cont]; }

else if(temp[0]==0x05) {

cmd5[cont]= temp[cont]; }

cont++; } else {

cont=0; } }

/******************************************************************** * 名称 : Com_Init()

* 功能 : 串口初始化,晶振11.0592,波特率9600,使能了串口中断 * 输入 : * 输出 :

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

void Com_Init(void) {

TMOD = 0x21; PCON = 0x00; SCON = 0x50;

TH1 = 0xFa; //22.0592晶振设置波特率 9600 TL1 = 0xFa;

TR1 = 1; //启动定时器1

精品word文档


.

RCAP2H=0xff; RCAP2L=0x54; TR2=1; ET2=1;

EA=1; //开总中断

// EX1=1; //外部中断1 允许 // IT1=1; //中断由下降沿 触发 PCON=0; IP=0X10; //中断优先顺序为PX1PS ES = 1; //开串口中断 EA = 1; //开总中断

cmd5[2]=15; //舵机初始位置 }

uchar t1=0,t2=0;

void timer2() interrupt 5 //舵机频率50hz 100us一次 {

RCAP2H=0xff; RCAP2L=0x54; TF2=0; t1++; t2++;

if(t1==io1) //io 为串口接收到的速度数据十进制 1030 {

P3_6=0; //舵机控制端1 }

else if(t1==200) {

P3_6=1; t1=0; }

if(t2==io2) //io 为串口接收到的速度数据十进制 1030 {

P3_7=0; //舵机控制端(2 }

else if(t2==200) {

P3_7=1; t2=0; }

精品word文档


.

}

uchar sd1=0,sd2=0;

void timer0() interrupt 1 //电机频率100HZ {

TH0=0xfe; TL0=0x0b; sd1++; sd2++;

if(sd1==sdd1) //sdd 为串口接收到的速度数据十进制 030 {

P2_0=0; }

else if(sd1==31) {

P2_0=1; sd1=0; }

if(sd2==sdd2) //sdd 为串口接收到的速度数据十进制 030 {

P2_1=0; }

else if(sd2==31) {

P2_1=1; sd2=0; } }



/******************************************************************** * 名称 : Main() * 功能 : 主函数 * 输入 : * 输出 :

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

void main() {

Delay_1ms(100); P1=0xff; P2=0xff; P3=0xff;

精品word文档


.



Com_Init();

while(1) // WIFI操控 {

if(cmd1[1]==0x01) {

forward(); }

else if(cmd1[1]==0x02) {

left(); }

else if(cmd1[1]==0x03) {

right(); }

else if(cmd1[1]==0x04) {

back(); }

else if(cmd1[1]==0x00) {

stop(); }

if(cmd2[1]==0x02) //cmd[0]==0x0A 为循迹 功能 {

Track_function(); }

else if(cmd2[1]==0x01)//cmd[0]==0x0B 为壁障 {

Evade_function(); }

else if(cmd2[1]==0x03)//cmd[0]==0x0B 为壁障 {

Evade_function1(); }

else if(cmd2[1]==0xfe) {

stop();

cmd2[1]=0xff; }

精品word文档


.

if(cmd3[1]==0x01)//cmd3[1]==0x01 WIFI操控灯 {

P3_4=1;// 灯亮 }

else if(cmd3[1]==0xfe) {

P3_4=0;// 灯灭 }

else if(cmd3[1]==0x02)//cmd3[1]==0x02 WIFI操控蜂鸣器 {

P3_5=0; // 蜂鸣器鸣叫 }

else if(cmd3[1]==0x03)//cmd3[1]==0x02 WIFI操控蜂鸣器 {

P3_5=1; // 蜂鸣器停止 }

if(temp[0]==0x04) //cmd3[1]==0x01 WIFI操控电机速度 {

if(cmd4[1]==0x01)//控制小车行驶速度 {

sdd1=cmd4[2]; //cmd4[1] 为串口接收到的速度数据十进制 30

}

else if(cmd4[1]==0x02) {

sdd2=cmd4[2]; //cmd4[1] 为串口接收到的速度数据十进制 30

} }

if(temp[0]==0x05) {

if(cmd5[1]==0x01)//cmd5[0]==0x05 WIFI操控摄像头舵机 {

io1=cmd5[2]; //cmd5[2] 为串口接收到的速度数据十进制 30

}

else if(cmd5[1]==0x02) {

io2=cmd5[2]; //cmd5[2] 为串口接收到的速度数据十进制 30

10

10

10

10

精品word文档


.

} }

Delay_1ms(1); } }

/***************红外中断解码函数*********************** void IR_IN() interrupt 2 using 0 {

unsigned char j,k,N=0; EX1 = 0;EA=0; delay(15); if (IRIN==1) { EX1 =1; EA=1; return; }

//确认IR信号出现

while (!IRIN) //IR变为高电平,跳过9ms的前导低电平信号。 {delay(1);}

for (j=0;j<4;j++) //收集四组数据 {

for (k=0;k<8;k++) //每组数据有8 {

while (IRIN) // IR 变为低电平,跳过4.5ms的前导高电平信号。

{delay(1);}

while (!IRIN) // IR 变为高电平 {delay(1);}

while (IRIN) //计算IR高电平时长 {

delay(1);

N++; if (N>=30) { EX1=1; EA=1;

return;} //0.14ms计数过长自动离开。

} //高电平计数完毕 IRCOM[j]=IRCOM[j] >> 1; //数据最高位补“0 if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //数据最高位补“1 N=0;

精品word文档


.

}//end for k }//end for j

if (IRCOM[2]!=~IRCOM[3]) { EX1=1; EA=1; return; }

switch(IRCOM[2]) {

case 0x1c:

case 0x45:cmd1[1]=0x00;P0=0x01;break; // 小车停止 (P0测试现象参数)

case 0x18:cmd1[1]=0x01;P0=0x02;break; // 小车前进 case 0x08:cmd1[1]=0x02;P0=0x03;break; // 小车左转 case 0x5a:cmd1[1]=0x03;P0=0x04;break; // 小车右转 case 0x52:cmd1[1]=0x04;P0=0x05;break; // 小车后退 case 0x0d:cmd2[1]=0x02;P0=0x06;break; // 小车寻迹 case 0x09:cmd2[1]=0x01;P0=0x07;break; // 小车避障 case 0xa0:cmd2[1]=0x03;P0=0x07;break; // 小车避障 case 0x43:cmd2[1]=0xfe;P0=0x08;break; // 寻迹避障停止 case 0x44:cmd3[1]=0x01;P0=0x09;break; // 灯开 case 0x40:cmd3[1]=0xfe;P0=0x0a;break; // 灯关

case 0x07:cmd3[1]=0x02;P0=0x0b;break; // 蜂鸣器开 case 0x15:cmd3[1]=0x03;P0=0x0c;break; // 蜂鸣器关 case 0x16:

if(++cmd5[2]==24) {

cmd3[1]=0x02; cmd5[2]--; }

P0=0x0d;break; case 0x19:

if(++cmd5[2]==6) {

cmd3[1]=0x02; cmd5[2]++; }

P0=0x0e;break;

case 0x0c:temp[0]=0x05;cmd5[1]=0x01;P0=0x0f;break; case 0x5e:temp[0]=0x05;cmd5[1]=0x02;P0=0x00;break; }

EX1 = 1; EA=1; }



精品word文档


.

******************红外专用延时函数*********************** void delay(unsigned char x) //x*0.14MS {

unsigned char i; while(x--) {

for (i = 0; i<13; i++) {} // 参数29(原参数13)经电脑仿真测试 误差在1% } }

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

【本文档内容可以自由复制内容或自由编辑修改内容期待你的好评和关注,我们将会做得更好】



感谢您的支持与配合,我们会努力把内容做得更好!



精品word文档


本文来源:https://www.wddqw.com/doc/7ce82d6e30687e21af45b307e87101f69e31fb80.html