我也想要小车的,就想要特别是那个蓝牙控制或者wifi智能小车之类的,有可以多给我些吗,。

分类号 UDC密级 编号本科毕业论文(设计)题目 基于 STC89C52RC 单片机的 Wi-Fi 视频监控小车系别 物理与电子信息学院专 业 名 称 电子信息科学与技术 学生姓名 学 号指导教师 论文原创性说明本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究 成果。尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体 已经发表或撰写过的研究成果。对本论文的研究做出贡献的个人和集体,均已在文中 以明确方式标明。本人完全意识到本声明的法律结果由本人承担。学位论文作者签名: 日期: 年 月 日 文献综述一、 概述随着互联网的迅速发展普及和移动多媒体终端如笔记本,智能手机的普及,人们 对网络的依赖性越来越强。Wi-Fi 技术出现以来,凭借其组网的方面,易于扩展,传输 速度高等特点,给人们的生活工作带来了极大的方便。笔记本,智能手机的大范围的 普及也促使 Wi-Fi 技术得以飞速发展,其应用的领域也来广阔。本文利用 Wi-Fi 技术, 视频监控技术结合 STC89C52 微控制器的高性价比,低功耗,运行速度快等特点,设 计了一款移动的视频监控平台。可运用在娱乐,家庭安防或者矿井,野外监测等领 域。可以将人们无法到达或者特殊复杂环境的信息快速稳定的传递到安全区域。 由于小车特殊的结构和较轻的自重,并且车上的摄像头可以水平和垂直方向 180°独 立旋转,能实时监控小车车身和周围环境,因此其适应地形变化能力强,运动灵活, 可以胜任一些复杂环境里的工作。在控制系统预留接口,可使小车的扩展功能更加丰 富。这些接口可用于连接超声波模块,红外发射接收模块,循迹模块,人体红外感应 模块,温湿度传感器机械手等等,从而实现自动巡航避障,远程操作机械手,远程环 境数据采集等功能。二、综述正文1954 年,美国人乔治·德沃尔设计了第一台电子程序可编的工业机器人,并于 1961 年发表了该机器人的专利。1962 年,美国万能自动化公司的第一太机器人 Unimate 在 美国通用汽车公司(General Motors)投入使用,这标志着第一代机器人的诞生。经过 半个世纪的高速发展,当今机器人应用范围已经涉及到各个领域。 在现在众多的领域中,远端监控已经成为一种重要而且有效的控制技术。利用这 种技术,可以遥控远程设备完成以前不能完成的任务或者降低完成任务的成本,机器 人远程控制最早出现在地质勘探,水下作业,航空航天等领域相对成本很高。随着网 络技术的发展,尤其是 Wi-Fi 技术的飞速发展和 Wi-Fi 设备普及,使得通过 Wi-Fi 网络 控制机器人成为可能,从而大大降低了整个系统的成本。 目前,服务机器人在处于萌芽阶段。 市场调研与预测 根据国际机器人联 盟 (IFR)统计部门于 2008 年 10 月公布的资料,全球服务型机器人市场概况分述如下: ①个人和家用服务型机器人: 至 2007 年底,个人和家用服务型机器人累计装置量已 超过 340 万台,娱乐休闲用机器人已达到 200 万台。至 2011 年底,全球家务用机器人 将会达到 460 万台,娱乐休闲用机器人将会达到 735 万台,合计约 1200 多万台,未来 四年服务机器人市场总值合计约 57 亿美元,到 2015 年,全球个人和家庭机器人市场 的规模预计将达到 150 亿美元,同时,将出现多种类型的个人机器人。②专业服务型 机器人:至 2007 年底,全球已有 4.9 万台的使用数量,预计到 2011 年底,将增加 5.4 万台专业服务型机器人,总价值约 91.2 亿美元,其中农林矿牧用机器人最多,共将有 1.9 万台,防御救灾与保全机器人预计将有 1.56 万台销售量,专业清洁机器人亦约有 4000 台销售量,医疗用机器人约达 3420 台,多用途机器人移动平台约 2375 台,水底 作业系统预估将有超过 925 台销售量。 Wi-Fi 无线视频监控小车作为服务机器人中监控机器人的一种可用于室内,外环境 监测,安保,巡逻,侦查以及后勤服务等,适用于家庭,矿井,机场,森林等环境。 发达国家对监控机器人的研究起步早,相对国内技术成熟,有较多的产品问世。比如 在伊拉克和阿富汗战场上,美军就总共投入了 5000 多台机器人。这些机器人都带有监 控设备,“剑”式机器人就配备摄像头,夜视镜,变焦设备等光学侦查仪器。 本设计旨在实现一个成本低、稳定性高的监控机器人。在本次设计中,采用了模 块化设计思想,核心控制模块利用 STC89C52 微处理器做为主处理器,其主要完成对 各个模块的协调和控制。通信模块采用 TP-LINK WR703N 路由器,其主要完成实现与 电脑或手机等移动终端设备连接,接受终端发送的指令,并将接受的指令通过串口转 发给单片机最小系统同时将摄像头采集到的视频信号实时传送到电脑或手机等移动终 端设备。三、 总结Wi-Fi 无线视频监控小车是一个小型的监控机器人,与一般的监控机器人相比具有 体积小,成本低,功耗低,制作相对简单等特点。同时本次设计采用了最新的 Wi-Fi 无线技术作为通信方式,这样可以利用现有的笔记本,手机等作为终端控制设备,降 低了再次开发终端的成本。在通讯设备方面则采用市面上可买到的路由器,进一步降 低成本和难度。 本设计也有一些待改进的地方,如 Wi-Fi 信号传输距离短,如果要超远距离传输 就要构建网络或者借助互联网,车体采用的电机是直流有刷电机,这种电机在转动的 时候有较大的噪音,而且控制精度没有无刷电机的精度高。参考文献[1]. 刘彪.室外监控机器人的微小型组合导航系统设计.哈尔滨工业大学硕士论文, 2010. [2]. 张琳琳.机器人遥操作系统中视频传输研究.华北电力大学(北京)硕士论文, 2007[3]. 嵇鹏程,沈惠平.服务机器人的现状及其发展趋势.西江苏工业学院机械与能源工程学院硕士论文,2009. [4]. 许彦峰 ,胡皓瑜 ,孙汉旭. 基于 Web 的远程控制机器人研究.航天制造技术, 2003 ,06 期:35~38 [5]. 张毅,罗元,郑太雄等.移动机器人技术及其应用[M].北京:电子工业出版 社,2007. [6]. 高国富,谢少荣,罗军等.机器人传感器及其应用[M].北京:化学工业出版 社,2005. [7]. 张永枫.单片机应用实训教程.北京:清华大学出版社,2008 [8]. 王静霞.单片机应用技术(C 语言版) .北京:电子工业出版社,2009 摘 要:本设计是一种基于 51 单片机控制的 Wi-Fi 视频监控小车,旨在实现一个成本 低、稳定性高的监控机器人。设计中的理论方案、分析方法及特色与创新点等可以为 采矿勘探机器人、家用监控系统,监控机器人等的设计与普及有一定的参考意义。从 设计的功能要求出发,设计包括小车硬件设计和调试,控制系统软件设计和调试。为 了适应复杂的地形,车体采用稳定性比较高和驱动能力比较强的履带式结构。在车体 上安装了 STC89C52 核心控制板,Wi-Fi 收发模块(无线路由器) 、电机驱动模块、电 压装换模块,舵机、电源、摄像头,灯光等部件。整个系统运行是由笔记本或手机等 多媒体终端控制的,多媒体终端与小车的通信通过车体上安装的无线路由器完成。笔 记本或手机上安装有上位机软件能实时显示路由器挂载的 USB 摄像头采集到的视频信 号,并且利用上位机软件发送指令代码给小车,小车上的无线路由器接受到命令后, 通过串口将指令代码转发给 STC89C52 核心控制板。在核心控制板接受到指令代码后 会进行解码,然后根据代码内容,控制车体上的各个模块的运作。 关键词:路由器 视频监控 Wi-Fi 小车 STC89C52 Abstract: The design is based on 51 single-chip control car Wi-Fi video surveillance, aimed at achieving a low cost, high stability monitoring robot. Theoretical scheme for the design, analysis and special features, and innovation can be consulted for the mining exploration robots, home surveillance system to monitor the robot design and the popularity of a certain reference value. Starting from the functional requirement of the design, design includes the car hardware design and debugging, control system software design and debugging. In order to adapt to the complex topography, car body is equipped with higher stability and driving ability stronger crawler structure.STC89C52 core Control panel, Wi-Fi transceiver module (wireless router), motor drive module, the electrical installation in module, steering gear, power supply, camera, lighting, etc. Parts are installed on the car. The running of the whole system is controlled by the multimedia terminal such as a laptop or mobile phone, the communication between the Multimedia terminals and the car is through a wireless router installed on vehicle. PC software installed on laptops or phones can real-time display the router mount USB cameras, video signals were collected and using the PC software to send command to the car, car wireless router after receive the command, through the serial port will forward instruction code to STC89C52 core panel. In the core control panel will receive the instruction code to decode, and then according to the content of the code, control the operation of the various modules on the vehicle. Keywords: router video surveillance Wi-Fi car STC89C52 目录1、论 述..................................................................................................................................... 1 2、方案论证及选择.................................................................................................................. 3 2.1 总体设计方案................................................................................................................... 3 2.1.1 整机系统.....................................................................................................................3 2.1.2 整机工作原理.............................................................................................................4 2.2 系统方案的选择与比较................................................................................................... 4 2.2.1 路由器的选择.............................................................................................................4 2.2.2 核心控制模块的选择.................................................................................................5 2.2.3 车体的选择.................................................................................................................5 3、硬件电路设计...................................................................................................................... 6 3.1 TP-LINK WR703N 无线路由器...................................................................................... 6 3.1.1 刷机固件介绍.............................................................................................................7 3.1.2 刷机步骤.....................................................................................................................8 3.1.3 Openwrt 系统路由器介绍..........................................................................................8 3.2 单片机最小系统设计....................................................................................................... 9 3.2.1 主控制芯片 STC89C52..............................................................................................9 3.2.2 STC89C52RC 单片机最小系统...............................................................................11 3.2.3 89C52 单片机的使用............................................................................................... 13 3.3 电机驱动电路................................................................................................................. 14 3.3.1 电机驱动模块使用...................................................................................................14 3.3.2 驱动原理及电路图...................................................................................................15 3.3.3 驱动模块原理及电路原理图...................................................................................16 3.4 摄像头介绍..................................................................................................................... 17 3.4.1 摄像头简介...............................................................................................................17 3.4.2 摄像头的分类...........................................................................................................18 3.4.3 摄像头的工作原理...................................................................................................18 3.4.4 摄像头的主要结构和组件.......................................................................................18 3.5 舵机................................................................................................................................. 19 3.5.1 舵机的控制...............................................................................................................19 3.5.2 舵机的作用...............................................................................................................20 3.6 电压转换模块................................................................................................................. 20 3.6.1 LM7805 集成稳压芯片介绍....................................................................................21 3.6.2 稳压电路...................................................................................................................21 3.7 灯光控制电路设计......................................................................................................... 21 4、系统程序设计.................................................................................................................... 23 4.1 系统程序简介................................................................................................................. 23 4.2 程序流程图..................................................................................................................... 23 4.2.1 主程序流程图...........................................................................................................23 4.2.2 串口中断子函数.......................................................................................................25 4.2.3 定时器 0 中断子函数............................................................................................... 26 5、制作与调试........................................................................................................................ 28 5.1 系统仿真......................................................................................................................... 28 5.1.1 软件介绍...................................................................................................................28 5.1.2 仿真测试...................................................................................................................32 5.2 实物调试......................................................................................................................... 33 总 结...................................................................................................................................... 35参考文献.................................................................................................................................. 36 附录 1 附录 2 系统设计原理图....................................................................................................... 38 源程序....................................................................................................................... 39 1、 论 述现在是一个智能化的时代,各种智能化设备正在逐步替代人为的操作。随着 人们生活水平的提高,人们对服务机器人的需求越来越大。这也促使服务机器人 的研究也就越来越受人关注。目前市面上的监控机器人相对其他服务性机器人很 少,而且大部分都很贵。杭州瓦瑞科技有限公司的移动监控机器人 WR-MSR-Ⅰ100 系列市场报价就在 2 万元,在性能上此款机器人越障 5mm ,爬坡能力 5?, 电池续航能力 240min ,而本次设计监控小车成本在 500 元以内,越障能达到 50mm,爬坡能达到 40? 以上,因为电池续航能力低,但是可以跟换大容量的电 池解决这个问题。虽然目前 Wi-Fi 机器人网 ·机器人创意工作室已经开发出了这 样监控机器人,但是他使用的是 STC11F32XE 作为控制处理器,而且并没有公 布下位机源程序,且售价较贵。本次设计利用 Wi-Fi 机器人网 ·机器人创意工作 室发布是上位机使用自己自制作的 STC89C52 最小系统为控制核心板和自己设计 的下位机源程序实现一个成本低、稳定性高的监控机器人。 本次设计的服务机器人 Wi-Fi 无线视频监控小车能够通过电脑或者手机 WiFi 连接控制其行驶及其他的功能。本系设计实现对小车的运动状态进行实时控 制和对小车周围环境的实时监控。系统控制灵活、可靠,精度高,可满足对系统 的 各 项 要 求 。 本 设 计 选 用 的 STC89C52 单 片 机 属 于 MCS-51 系 列 单 片 机 。 STC89C52 是由宏晶科技推出的新一代高速 /低功耗/ 超强抗干扰的单片机,具有 8K 在系统可编程 Flash 存储器。STC89C52 使用经典的 MCS-51 内核,但做了很 多的改进使得芯片具有传统 51 单片机不具备的功能。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程 Flash ,使得 STC89C52 为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。 具有以下标准功能: 8k 字节 Flash ,512 字节 RAM , 32 位 I/O 口线,看门狗定时器,内置 4KB EEPROM , MAX810 复位电 路,3 个 16 位 定时器/计数器,4 个外部中断,一个 7 向量 4 级中断结构(兼容 传统 51 的 5 向量 2 级中断结构) ,全双工串行口。另外 STC89X52 可降至 0Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下, CPU 停止工作, 允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下, RAM 内1 容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为 止。最高运作频率 35MHz, 6T/12T 可选。本系统中采用 11.0592MHz 的晶振频 率。由于 89C52 的系统性能满足系统数据采集及时间精度的要求,而且产品产 量丰富来源广,应用也很成熟,故用来作为控制核心。新一代单片机为外部提供 了相当完善的总线结构,为系统的扩展与配置打下了良好的基础。本设计主要研 究内容就是基于 89C52 设计一部 Wi-Fi 智能小车。Wi-Fi 遥控的智能小车控制系 统,包括了对单片机,驱动电路,以及无线视频通信等的探索和研究。 论文主要从小车的设计方案的选择、硬件设计、软件设计、调试几方面进行 主要论述。在第 2 章中主讲方案的选择,其中包括路由器的选择,核心系统芯片 的选择,车体的选择。在第 3 章主讲硬件设计,包括 703N 路由器 Openwrt 系统 刷入处理和 STC89C52 单片机最小系统的设计;电机驱动模块的介绍,视频信号 的采集;第 4 章程序的设计给出了程序整体的流程图及编写思想;第 5 章调试简 述整机的每个模块调试及方法。2 2、方案论证及选择2.1 总体设计方案Wi-Fi 无线视频监控小车主要由车体,Wi-Fi 模块(路由器) 、摄像头,核心 控制模块、电机驱动模块,舵机,电压转换模块等构成。 2.1.1 整机系统 如图 2-1 所示。摄像头 舵机 89C52 单片机openwrt 系 统 路 由器模块照明电路电机驱动模块 电脑控制终端 手机控制终端 图 2-1 系统结构框电机系统包括路由器(openwrt 系统) 、单片机最小系统、电机驱动电路、电机、 电压转换电路、电源电路、舵机、摄像头、灯光电路等。 系统中路由器作用是实现与电脑或手机等移动终端设备连接,接受终端发送 的指令,并将接受的指令通过串口转发给单片机最小系统同时将摄像头采集到的 视频信号实时传送到电脑或手机等移动终端设备;单片机最小系统是整个小车的 控制核心,在接受到路由器转发的指令后,根据指令控制着各个模块统一协调工 作;电机驱动电路用于驱动电机转动,可以使电机产生正转、反转,从而使车体 产生前进、后退、转弯等动作;电机的作用就是使整个车体运动;电源电路作用 是为整个小车系统共电;电压转换电路,将电源的电压降至 5v 给单片机最小系 统,路由器,摄像头,舵机供电。舵机用于制作摄像头云台,使摄像头可实现上 下、左右方向 90?旋转调节;摄像头用于采集视频信号;照明电路为小车在夜间3 行驶提供照明。 2.1.2 整机工作原理 由电脑(手机)终端,通过 Wi-Fi 无线网络连接到路由器,再通过电脑(手 机)安装的上位机软件,向路由器发送控制命令及数据。路由器接收到数据后通 过内部的串口发送软件,将接收到的命令和数据,通过路由器串口发送到 89C52 单片机的串口端,单片机接收到这些命令后执行相应的指令,如:驱动小车运 动、舵机运动、照明电路的开关等。 视频信号,通过摄像头采集之后通过路由器发送到电脑等终端,并在其上位 机软件中显示摄像头采集到的视频信号。整机工作的流程图如图 2-2 所示。图 2-2 整机工作的流程图2.2 系统方案的选择与比较本次设计中,使用的路由器,摄像头无法自制因此直接在网上购买,车体由 于选用的履带结构,虽然可以自制但是自制成本高于市场出售价格,因此基于成 本考虑选用购买方式。电机驱动模块很早之前购买过这里不再自制。 STC89C52RC 控制模块,电压转换,灯光控制电路都是自己设计制作。下面是 小车几个组成部分的方案的比较和选择。 2.2.1 路由器的选择 方案一:选择网上已经经过改装过的 Wi-Fi 小车专用的 TP-LINK WR703N 无线路由器做为我们 Wi-Fi 小车的 Wi-Fi 连接模块。4 优点:体积小,电压要求低(5v)功耗小 缺点:价格高 方案二:利用网上最常用做 Wi-Fi 小车较好的大亚 db120-wg 无线路由器, 作为我们的 Wi-Fi 智能小车的 Wi-Fi 连接模块 优点:价格便宜,信号强度高 缺点:体积大,电压要求高(12v)功耗大 方案选择:基于对制作性和功能性的考虑选取的是方案一。2.2.2 核心控制模块的选择方 案 一 : 选 择 网 上 已 开 发 好 的 Wi-Fi 智 能 小 车 驱 动 板 , MCU 处 理 器 STC11F32XE,32K Flash,1280 字节 SRAM,板载晶振 22.1184MHz。 优点;集成电机驱动模块,接口丰富。 缺点:价格高 方案二:用 51 系列单片机 STC89C5RC2 做为我们 Wi-Fi 智能小车的控制芯 片。利用手里面现有的一些电源、驱动等模块等制作核心控制模块。 优点:成本低,可有效利用资源,可根据需要自行定制接口和功能 缺点:集成度不高,相对方案一体积大 方案选择:由于已经开发好的驱动板里面已经写好程序,而且源程序不公 布。基于本次设计主旨是自己设计开发,因此选用方案二,自己利用 STC89C52RC 单片机制作控制板和自己设计控制程序。2.2.3 车体的选择方案一:ZL-4 4WD 小车 优点:四轮驱动,预留个模块接口 缺点:驱动力弱,负载能力差,越野能力弱 方案二:选择履带式结构车体 优点:驱动力强,负载能力强,越野能力强 缺点:功耗大 方案选择:基于对功能性的考虑选取的是方案二。5 3、硬件电路设计3.1 TP-LINK WR703N 无线路由器TP-LINK WR703N 如图(3-1)是一个 150M 无线迷你型 3G 路由器,也是目前 最小能够运行 Linux 的无线路由器。由于路由器原厂的固件,不支持摄像 头的挂载和串口通信,因此要刷写第三方的固件。第三方固件采用 OpenWrt 系统,OpenWrt 是适合于嵌入式设备的一个 Linux 发行版。相对原厂固 件而言,OpenWrt 不是一个单一、静态的固件,而是提供了一个可添加软件包的 可写的文件系统。这使用户可以自由的选择应用程序和配置,而不必受设备提供 商的限制,并且可以使用一些适合某方面应用的软件包来定制你的设备。图 3-1 WR703N原厂的路由器上没有直接给出串口,而且路由器的供电口是使用 Mini USB 接口 5V 供电的,因此为了方便与单片机通信和对路由器供电在使用前要先对路 由器进行改造。在串口改造时,我先通过网上查阅相关资料确定了路由器上的串 口的位置,然后通过三个排针和导线将串口 Rxd,Txd 和 Gnd 引出。在电源接口 改造中,通过万用表测试,直接将电源的正负极,用红黑两根线引出,方便对路 由器进行供电。 改造后路由器内部如图 3-2 所示。6 图 3-2 改造后路由器内部内部结构图3.1.1 刷机固件介绍 固件 Wi-Fi-robots-openwrt-wr703n-v1-sysupgrade 固件说明: 1、集成 UVC 摄像头驱动(免驱摄像头) 。 2、Ser2net 已设置开机启动。Ser2net 是一个串口通信程序。 3、mjpg_streamer 开机启动。 &MJPG-streamer& ,是用于从 webcam 摄像头采 集 图 像 , 把 他 们 以 流 的 形 式 通 过 基 于 ip 的 网 络 传 输 到 浏 览 器 如 Firehox , Cambozola,VLC 播放器,Windows 的移动设备或者其他拥有浏览器的移动设备 视频服务性软件。摄像头只有 2 种驱动,uvc 和 301,目前开机 mjpg_streamer 缺 省启动了 UVC 摄像头,默认是支持 mjpeg 输出摄像头的, UVC 使用 yuv 输 出,所以在启动的时候需要加上参数 –y。即 ssh 登陆后,vi etc/init.d/Wi-Ficar , 找到 uvc 摄像头参数 : mjpg_streamer -b -i &input_uvc.so -r 352x288 -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 -p7 8080 -w /web& 然后重启路由器。 3、支持 Luci/web 管理 ,错误设置后不能进入的,可以长按复位键 回初始模 式。 4、网络设置,目前是 AP 模式(处于 AP 模式的无线路由器可以看成是一台 无线交换机) ,IP:192.168.1.1。 3.1.2 刷机步骤 1、开启路由器,电脑无线连接路由器。 2、在浏览器输入 192.168.1.1 登入路由器,用户名为 admin,密码 admin。 3、选择系统工具,再选择软件升级,点击浏览,选择已经下载的 penwrtar71xx-generic-tl-wr703n-v1-squashfs-factory.bin,然后点升级,确定。 4、开始刷机,等待路由器重启(此过程不能断电,否则会造成路由器固件 损坏) 。 5、等待路由启动后,重新无线连接路由器,在浏览器输入 192.168.1.1 再次 登入路由器,用户名为 root,密码 admin。 6、 ,选择系统,再选择备份升级,去掉保留配置文件的选择,点击浏览,选 择已经下载的 Wi-Fi-robots-openwrt-wr703n-v1-sysupgrade.bin,然后点确定,点 执行。 7、开始刷机,等待路由器重启(此过程不能断电,否则会造成路由器固件 损坏) 。 8、等待路由启动后,重新无线连接路由器,在浏览器输入 192.168.1.1 再次 登入路由器,用户名为 root,密码 admin。 9、根据提示,重新设置密码。 10、刷机完成。 3.1.3 Openwrt 系统路由器介绍 刷入了 Openwrt 系统的 WR703N 无线路由器就相当于运行小型 Linux 系统 pc 机,可以用根据自己的需要安装想要的软件包,实现各种各样的功能。本次 设计中刷入的固件除了基本的软件包外还安装了 UVC 免驱摄像头的驱动包,8 Ser2net 软件包, mjpg-streamer 软件包。三个软件包的功能如下: 1、UVC 免驱摄像头驱动包的功能是使路由器能驱动挂载在路由器上的免驱 摄像头,是摄像头正常工作。 2、 Ser2net 软件能把来自 WIFI 信道的指令转到串口输出,而串口在这里的 作用就是与单片机通信,让单片机能接收到上位机发送的指令代码。 3、 mjpg-streamer 这个软件可以把 USB 摄像头的视频进行编码,然后通过 Wi-Fi 上传给上位机,这样,我们就可以通过上位机看到来自机器人的视频了。 因此利用上述的软件包刷入 Openwrt 系统后的路由器就能实现串口转发,摄 像头挂载和视频信号传输的功能。3.2 单片机最小系统设计最小系统主控芯片是宏晶公司 MCS-51 系列单片机中的 STC89C52。 3.2.1 主控制芯片 STC89C52 STC89C52 是宏晶公司 MCS-51 系列单片机中基本的产品,它采用 ETC 公司 可靠的 CHMOS 工艺技术制造的高性能 8 位单片机,属于标准的 MCS-51 的 HCMOS 产品。89C52 有 PDIP(40pin)和 PLCC(44pin)两种封装形式。 主要功能特性: 1. 增强型 8051 单片机,6 时钟/机器周期和 12 时钟/机器周期可以任意 选 择,指令代码完全兼容传统 8051。 2. 工作电压:5.5V~3.3V(5V 单片机)/3.8V~2.0V(3V 单片机) 3. 工作频率范围:0~40MHz,相当于普通 8051 的 0~80MHz,实际工作 频率可达 48MHz 4. 用户应用程序空间为 8K 字节 5. 片上集成 512 字节 RAM 6. 通用 I/O 口(32 个) ,复位后为:P1/P2/P3/P4 是准双向口/弱上拉, P0 口 是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加 上拉电阻9 7. ISP(在系统可编程)/IAP(在应用可编程) ,无需专用编程器,无 需专 用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完 成一片 8. 具有 EEPROM 功能 9. 具有看门狗功能 10. 共 3 个 16 位定时器/计数器。即定时器 T0、T1、T2 11. 外部中断 4 路,下降沿中断或低电平触发电路,Power Down 模式可 由 外部中断低电平触发中断方式唤醒 12. 通用异步串行口(UART) ,还可用定时器软件实现多个 UART 13. 工作温度范围:-40~+85℃(工业级)/0~75℃(商业级) 14. PDIP 封装 管脚如图 3-3 所示,各管脚说明如下:图 3-3 STC89C52 管脚图VCC:供电电压。 GND:接地。 P0 口:P0 口为一个 8 位漏级开路双向 I/O 口,每脚可吸收 8TTL 门电流。 当 P1 口的管脚第一次写 1 时,被定义为高阻输入。在 FIASH 编程时,P0 口作 为原码输入口,当 FIASH 进行校验时,P0 输出原码,此时 P0 外部必须被拉 高。 P1 口:P1 口是一个内部提供上拉电阻的 8 位双向 I/O 口,P1 口缓冲器能接10 收输出 4TTL 门电流。 P2 口:P2 口为一个内部上拉电阻的 8 位双向 I/O 口,P2 口缓冲器可接收, 输出 4 个 TTL 门电流。 P3 口:P3 口管脚是 8 个带内部上拉电阻的双向 I/O 口,可接收输出 4 个 TTL 门电流。P3 口作为 STC89C52 的一些特殊功能口,管脚备选功能: 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(外部数据存储器读选通) RST:复位输入。当振荡器复位器件时,要保持 RST 脚两个机器周期的高 电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址 的地位字节。 /PSEN:外部程序存储器的选通信号。 /EA / VPP:当/EA 保持低电平时,则在此期间外部程序存储器(0000HFFFFH) ,不管是否有内部程序存储器。使用内部内部程序存储器,该引脚要保 持高电平 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 3.2.2 STC89C52RC 单片机最小系统 STC89C52RC 单片机最小系统的基本工作电路包括电源电路、时钟电路和 复位电路。其组成方框图如图 3-4 所示。11 电源电路 时钟电路 复位电路 图 3-4 单片机最小系统组成方框图 单 片 机1.电源电路 电源电路模块为单片机最小系统和其他功能模块提供标准的+5V 电源电压。 2.时钟电路 单片机的时钟信号为单片机芯片内部的各种操作提供时间基准,时钟电路为 单片机产生时钟脉冲序列。作为单片机工作的时间基准,典型的晶体振荡频率为 12MHz。 MCS-51 系列单片的时钟信号可以由两种方式产生:一种为内部时钟方式, 利用芯片内部的振荡电路;另一种为外部时钟方式。其两种电路如图 3-5 所示。(a)内部时钟方式(b)外部时钟方式图 3-5 单片机时钟信号示意图在此图中,C1、C2 电容的作用的是稳定频率和快速起振,其值为 5~30pF, 在此选择 30pF;晶振 X1 的振荡频率范围在 3.5~33MHz 之间选择,因为需要使 用串通讯涉及波特率,所以在此选择 11.0592MHz。 3.复位电路 单片机复位是使 CPU 和系统中的其他功能部件都恢复到一个确定的初始状 态,并从这个状态开始工作。当在 MCS-51 系列单片的 RST 引脚处引入高电平 并保持 2 个机器周期,单片机内部就执行复位操作。单片机常见的复位电路有两 种基本形式:一种是上自动电复位,另一种是手动复位。其两种电路方式如图12 3-6(a) 、 (b)所示。 由于 STC89C52RC 单片机芯片内有时钟振荡电路,所以此系统单片机均采 用内部时钟方式。只需在单片机的 XTAL1 和 XTAL2 引脚外接石英晶体和微调 电容,就构成了自激振荡器并在单片机内部产生时钟信号脉冲信号。同时,也采 用手动复位电路。其具体电路设计如图 3-6 所示。(a)上电自动复位(b)手动复位图 3-6 单片机复位电路示意图3.2.3 89C52 单片机的使用 本次设计,使用到了 89C52 单片机的 I/O 口的输入输出功能、内部定时器 T0、T1 的使用及串口中断,定时器中断。 89C52 单片机的 I/O 口信号输出,主要是给驱动模块送控制信号用于控制电 机的转动、给舵机送 PWM 控制信号控制舵机的偏转以及控制开关灯光等。单片 机的内部定时器的使用是用于产生 PWM 信号,以及其他需要精确时间的地方。 单片机的串口中断,用于与路由器进行的串口通讯,接收电脑终端发送的串口指 令。单片机的外部中断用于红外信号的接收,然后通过解码程序得到命令,从而 控制小车的运动。13 STC89C52图 3-7 单片机最小系统电路图3.3 电机驱动电路电动小车的驱动不但要求电机驱动系统具有高转矩重量比、宽调速范围、高 可靠性,而且电机的转矩-转速特性受电源功率的影响,这就要求驱动具有尽可 能宽的高效率区。 我们所使用的电机一般为直流电机,主要用到永磁直流电机、伺服电机及步 进电机三种。直流电机的控制很简单,性能出众,直流电源也容易实现。 我们使用的这种直流电机的驱动及控制需要电机驱动芯片进行驱动。常用的 电机驱动芯片有马达专用控制芯片 LG9110,恒压恒流桥式 1A 驱动芯片 L293, 恒压恒流桥式 2A 驱动芯片 L298N, MC33886,ML4428 等。 3.3.1 电机驱动模块使用 本设计使用的 L298N 是 ST 公司生产的一种高电压、大电流电机驱动芯片。 该芯片采用 15 脚封装。主要特点是:工作电压高,最高工作电压可达 46V;输 出电流大,瞬间峰值电流可达 3A,持续工作电流为 2A;额定功率 25W。内含 两个 H 桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动14 机、继电器线圈等感性负载;采用标准逻辑电平信号控制;具有两个使能控制 端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端, 使内部逻辑电路部分在低电压下工作;可以外接检测电阻,将变化量反馈给控制 电路。使用 L298N 芯片驱动电机,该芯片可以驱动一台两相步进电机或四相步 进电机,也可以驱动两台直流电机。项目使用的是两个直流电机,因此项目中使 用了一块 L298N 电机驱动来驱动这两个直流电机的转动。 其实物及引脚图如下图 3-8 所示。 其中 6 和 11 引脚是它的使能端,一个使能端控制一个电机,只有当它们都 是高电平的时候两个电机才有可能工作,5 、 7、10、 12 是 298 的信号输入端和 单片机的 IO 口相连,2、3、13、14 脚是输出端,输入 5 和 7 脚控制输出 2 和 3 脚,输入的 10、12 脚控制输出的 13、14 脚。图 3-8 L298 驱动芯片实物及引脚图3.3.2 驱动原理及电路图 驱动部分我们使用的是 L298N 驱动芯片构成的一个驱动电路模块如图 3-9 所示。15 图 3-9 驱动实物图3.3.3 驱动模块原理及电路原理图 电路原理图如下图 3-10 所示。11223344INOUT图 3-10 L298 驱动模块电路原理图中 TLP521-4 光耦合芯片的作用是隔离控制部分和电机驱动部分。这样可 以有效的消除电机驱动部分对控制部分的信号干扰。 IN1-IN4 :逻辑输入端,其中 IN1 、 IN2 控制电机 M1 ; IN3 、 IN4 控制电机 M2。例如 IN1 输入高电平 1,IN2 输入低电平 0,对应电机 M1 正转;IN1 输入低16 电平 0,IN2 输入高电平 1,对应电机 M1 反转,调速就是改变高电平的占空比。 ENA、B:L298N 使能端(高电平有效,常态下用跳线帽接于 VCC) ,可通 过这两个端口实现 PWM 调速(使用 PWM 调速时取下跳线帽) ,具体参考 L298N 芯片手册。 VCC/GND:L298N 自身芯片供电,需要从外部接进 5V 电源(最好取逻辑 部分的电压供电). VIN/GND :电机供电电源接口,如果电机采用 9V 供电,那么电源正极接 VIN,负极接 GND 即可。 M1:电机 1 接口,没有正负之分,如果发现电机转向不对将电机两线调换 即可。 M2:电机 2 接口,没有正负之分,如果发现电机转向不对将电机两线调换 即可。 模块的控制方式可参考下图表 3-1。表 3-1 电机驱动状态表 控制端 IN1 高 低 低 / / 低 控制端 IN2 低 高 低 / / 低 控制端 IN3 / / / 高 低 / 控制端 IN4 / / / 低 高 / 输入 PWM 信号 改变脉宽可调速 调速 端A 高 高 高 / / / 调速端 B / / / 高 高 高电机旋转方式M1M2正转 反转 停止 正转 反转 停止3.4 摄像头介绍本设计中摄像头实现实时监测小车周边情况,让小车成为一个无线可控移动 的视频监控器。 3.4.1 摄像头简介 摄像头(CAMERA)又称为电脑相机、电脑眼等,它作为一种视频输入设备, 在过去被广泛的运用于视频会议、远程医疗及实时监控等方面。近年以来,随着17 互联网技术的发展,网络速度的不断提高,再加上感光成像器件技术的成熟并大 量用于摄像头的制造上,这使得它的价格降到普通人可以承受的区间。普通的人 也可以彼此通过摄像头在网络进行有影像、有声音的交谈和沟通,另外,人们还 可以将其用于当前各种流行的数码影像、影音处理。 3.4.2 摄像头的分类 摄像头分为数字摄像头和模拟摄像头两大类。模拟摄像头可以将视频采集设 备产生的模拟视频信号转换成数字信号,进而将其储存在计算机里。模拟摄像头 捕捉到的视频信号必须经过特定的视频捕捉卡将模拟信号转换成数字模式,并加 以压缩后才可以转换到计算机上运用。数字摄像头可以直接捕捉影像,然后通过 串、并口或者 USB 接口传到计算机里。现在电脑市场上的摄像头基本以数字摄 像头为主,而数字摄像头中又以使用新型数据传输接口的 USB 数字摄像头为 主,目前市场上可见的大部分都是这种产品。除此之外还有一种与视频采集卡配 合使用的产品,但目前还不是主流。由于个人电脑的迅速普及,模拟摄像头的整 体成本较高等原因,USB 接口的传输速度远远高于串口、并口的速度,因此现 在市场热点主要是 USB 接口的数字摄像头。以下主要是指 USB 接口的数字摄像 头。 3.4.3 摄像头的工作原理 摄像头的工作原理大致为:景物通过镜头 (LENS) 生成的光学图像投射到图 像传感器表面上,然后转为电信号,经过 A/D(模数转换)转换后变为数字图像信 号,再送到数字信号处理芯片(DSP)中加工处理,再通过 USB 接口传输到电脑中 处理,通过显示器就可以看到图像了。在本设计中摄像头和无线路由器都安装在 小车上,摄像头连接在无线路由器的 USB 接口上,通过路由器上的摄像头驱动 软件使摄像头工作,并由路由器通过 Wi-Fi 将视频信号发送出去。电脑等终端接 收设备,接收到视频信号后通过上位机软件的界面显示图像。 3.4.4 摄像头的主要结构和组件 从摄像头的工作原理就可以列出摄像头的主要结构和组件: 1 、主控芯片 2、感光芯片 3、镜头 4、电源。摄像头内部需要两种工作电压:3.3V 和 2.5V, 因此好的摄像头内部电源也是保证摄像头稳定工作的一个因素。18 在本次设计制作中我们使用奥尼旗下的百脑通-剑影 HD1080P 摄像头,如图 3-11 所示。图 3-11 百脑通-剑影 HD1080P3.5 舵机本设计中采用辉胜 9 克舵机,如图 3-12 所示。参数如下: 1.重量:9g 2.尺寸:23x12.2x29mm 3. 无 负 载 操 作 速 度 : 0.12 秒 /60 度 (4.8V);0.10 秒/60 度(6.0V) 4.扭矩:1.6kg?cm(4.8V) 5.使用温度:-30~+60 摄氏度 6.死区设定:5 微秒 7.工作电压:3.5V~6V图 3-12 辉胜 9 克舵辉胜 9 克舵机舵机的输入线共有三条,红色中间,是电源线,一边咖啡色的 是地线,这辆根线给舵机提供最基本的能源保证,主要是电机的转动消耗。电源 有两种规格,一是 4.8V,一是 6.0V,分别对应不同的转矩标准,即输出力矩不 同,6.0V 对应的要大一些,具体看应用条件;另外一根线是控制信号线,辉胜 9 克舵机为桔黄色。另外要注意一点,某些型号的舵机引线电源线在边上而不是中 间,需要辨认。 3.5.1 舵机的控制19 舵机的控制信号为周期是 20ms 的脉宽调制( PWM )信号,其中脉冲宽度 从 0.5ms-2.5ms,相对应舵盘的位置为 0-180 度,呈线性变化。也就是说,给它 提供一定的脉宽,它的输出轴就会保持在一个相对应的角度上,无论外界转矩怎 样改变,直到给它提供一个另外宽度的脉冲信号,它才会改变输出角度到新的对 应的位置上。舵机内部有一个基准电路,产生周期 20ms ,宽度 1.5ms 的基准信 号,有一个比较器,将外加的 PWM 信号与基准信号相比较,判断出方向和大 小,从而产生电机的转动信号。由此可见,舵机是一种位置伺服的驱动器,转动 范围不能超过 180 度,适用于那些需要角度不断变化并可以保持的驱动当中。比 方说机器人的关节、飞机的舵面等。 3.5.2 舵机的作用 在设计中我们利用两个舵机做成一个云台,一个舵机负责水平方向旋转,另 一个负责垂直方向旋转。将摄像头固定在云台上,通过 89C52 单片机的 P0 口输 出 PWM 信号控制舵机旋转,从而实现摄像头在转动。这样我们就可以想要角度 的画面通过小车上安装的路由器挂载的摄像头进行采集,然后由路由器通过 WiFi 网络讲摄像头采集到画面发送到笔记本或手机上并显示在上位机的界面上。3.6 电压转换模块单片机,舵机,灯。路由器需要 5V 的稳定电源。小车的驱动电机需要 7.2V 的电源。电压转换模块通过集成稳压芯片 LM7805 构成一个 5v 的稳压模块供 电。 LM7805 引脚及实物图如图 3-13 所示。图 3-13 LM78 系列稳压引脚及实物20 3.6.1 LM7805 集成稳压芯片介绍 电子产品中,常见的三端稳压集成电路有正电压输出的 78××系列和负电压 输出的 79××系列。顾名思义,三端 IC 是指这种稳压用的 EIC 来组成稳压电源所 需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可 靠、方便,而且价格便宜。该系列集成稳压 IC 型号中的 78 或 79 后面的数字代 表该三端集成稳压电路的输出电压,如 7806 表示输出电压为正 6V ,7909 表示 输出电压为负 9V。因为三端固定集成稳压电路的使用方便,电子制作中经常采 用。 在实际应用中,应在三端集成稳压电路上安装足够大的散热器(当然小功率 的条件下不用) 。当稳压管温度过高时,稳压性能将变差,甚至损坏。 当制作中需要一个能输出 1.5A 以上电流的稳压电源,通常采用几块三端稳 压电路并联起来,使其最大输出电流为 N 个 1.5A,但应用时需注意:并联使用 的集成稳压电路应采用同一厂家、同一批号的产品,以保证参数的一致。另外在 输出电流上留有一定的余量,以避免个别集成稳压电路失效时导致其他电路的连 锁烧毁。 3.6.2 稳压电路 7805 稳压电路原理图如图 3-14 所示。图 3-14 7805 集成芯片稳压电路原理图这是一个输出正 5V 直流电压的稳压电源电路。 IC 采用集成稳压器 7805 其 中电容分别为输入端和输出端滤波,当输出电较大时,7805 应配上散热板。3.7 灯光控制电路设计灯光电路是通过三极管的开关作用控制继电器实现的,由于一个 LED 灯的21 亮度有限,因此采用 14 个 LED 灯,每 7 个串联成一组共两组,然后两组再并 联,具体电路如图 3-15 所示。 灯光电路是通过单片机引脚输出高低电平到三极管的基极,使三极管导通或 截止,从而控制继电器的开合,通过继电器控制 LED 的点亮和熄灭,其中灯光 电路中的电阻用于限流保护 LED。图 3-15 灯光控制电路22 4、系统程序设计4.1 系统程序简介硬件平台结构一旦确定,大的功能框架即形成,软件在硬件平台上构筑,完 成各部分硬件的控制和协调工作。系统功能是由软硬件共同实现的,由于软件的 可伸缩性,最终实现的系统功能可强可弱,差别可能很大。因此,软件是系统的 灵魂。软件采用模块化设计方法,不仅易于编程和调试,也可减小软件故障率和 提高软件的可靠性。 小车控制是通过 89C52 单片机控制驱动电路和舵机,而控制信号的命令又 是电脑等终端设备通过无线路由器串口发送给单片机的,所以涉及到单片机串口 的使用、定时器使用、I/O 口的使用。 因为整个系统的运作是由上位机来控制,因此下位机的程序的设计要参考上 位机的指令代码。由于上位机是使用的 Wi-Fi 机器人网 · 机器人创意工作发布 的,而下位机的硬件平台是自己用 STC89C5RC 做的,与工作室的下位机硬件平 台不一样,而且工作室没有公布下位机的源程序。因此下位机的程序设计前要先 测试出上位机的每个操作的指令代码,只有知道指令代码后才能设计能配合上位 机的下位机程序。我使用的测试方法是将路由器的串口通过 USB 转串口线链接 到笔记本上,然后笔记本通过 Wi-Fi 链接路由器,打开上位机和串口助手,通过 串口助手就能显示,上位机每次操作的指令代码。在得到后指令代码后,再根据 指令代码设计程序。4.2 程序流程图智能 Wi-Fi 小车的软件编写主要分为命令接收部分、命令处理部分,命令执 行部分。 命令接 收部分 4.2.1 主程序流程图 系统主程序模块主要完成对系统中各模块电路的初始化等工作,主要包括对23命令处理 部分命令执行 部分 定时器、串口中断、外部中断的初始化,同时执行电脑等终端设备所发送的命 令,等待外部中断以及根据所需要的功能进行相应操作。软件总体设计及程序流 程如下图 4-1 所示。图 4-1 主函数流程图24 4.2.2 串口中断子函数 单片机通过串口中断和路由器进行通讯。在串口接受到数据后,将接受到底 数据储存在相应的数组构成数据包,当中方便在主函数中调用这些数据。在设计 下位机数据包时,先利用 PC 机上的串口助手对路由器串口数转发的上位机的指 令代码的测试。测试中在舵机数据中是由五组数据构成,由于上位机中除舵机指 令外其他的指令可以随意更改,因此下位机设计数据包全部都设置成五组数据构 成一个数据包,方便下位机程序设计。具体的数据构成如下: /****************************************************************/ 协议规定: 包头 类型位 数据位 数据位 结束位 0XFF 0X** OX** 0X** 0XFF 各命令说明: 类型位 数据位 数据位 功能 0X00 0X00 0X00 0X00 0X00 0X01 0X01 0X01 0X01 0X01 0X01 0X01 0X01 0X02 0X02 0X02 0X01 0X03 0X04 0X00 0X01 0X02 0X03 0X04 0X05 0X06 0X07 0X08 0X01 0X02 0X00 0X00 0X00 0X00 0X00 角度 . . . . . . 数据 0X00 0X00 前进 后退 左转 右转 停止 舵机 1 舵机 2 舵机 3 舵机 4 舵机 5 舵机 6 舵机 7 舵机 8 车灯亮 车灯灭 角度数据 0X00 到 0XB4 分别对应 0°到 180°0X03 雷达数据 发送雷达数据 雷达数据本次设计中未使用,后续升级准备 *****************************************************************/ 串口中断函数在进入中断后应该关掉中断,避免数据信号重复引起中断。在 完成一次数据包的完整接受并存储后,再将中断开启,等待下一次的接受。串口 中断函数具体如下: void Com_Int(void) interrupt 425 { ES=0; //关串口中断 RI=0; //软件清除接收中断 temp=SBUF; if(temp==0XFF && URTAReceivedCount&3) { Tempdatatable[0]==0XFF; //包头 URTAReceivedCount++; } else { Tempdatatable[n]= n++; if(URTAReceivedCount==0&&n==2) n=1; } if(URTAReceivedCount==2)//包尾 { Tempdatatable[0]=0XFF; Tempdatatable[4]=0XFF; n=1; URTAReceivedCount=0; //组包完毕 temp=&&; // Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]); // 发 送 组成的数据包回去 } CommandDatatable[0]=Tempdatatable[0]; CommandDatatable[1]=Tempdatatable[1]; CommandDatatable[2]=Tempdatatable[2]; CommandDatatable[3]=Tempdatatable[3]; CommandDatatable[4]=Tempdatatable[4]; ES=1;//开串口中断 }4.2.3 定时器 0 中断子函数 定时器 0 中断实现的功能是产生周期为 20ms 的 pwm 信号来控制舵机。舵 机需要一个约 20ms 的脉冲,其中高电平 0.5-2.5ms,其余为低电平。将 20ms 分 成 8 个 2.5ms ,定时器 0 设置为 2.5ms 触发一次中断,轮流对 8 个舵机输出 PWM,这样效率很高,具体算法如下:26 /******************************************************************** * 功能 : 舵机 PWM 中断, //舵机控制函数 周期为 20ms 一个循环 20MS = 8*2.5ms *********************************************************************/ void SteeringGear() interrupt 1 { switch(pwm_flag) { case 1: servo0=1; TH0=-pwm[0]&&8; TL0=-pwm[0]; case 2: servo0=0; TH0=-(ms2_5Con-pwm[0])&&8; TL0=-(ms2_5Con-pwm[0]); case 3: servo1=1; TH0=-pwm[1]&&8; TL0=-pwm[1]; case 4: servo1=0; TH0=-(ms2_5Con-pwm[1])&&8; TL0=-(ms2_5Con-pwm[1]); case 5: servo2=1; TH0=-pwm[2]&&8; TL0=-pwm[2]; case 6: servo2=0; TH0=-(ms2_5Con-pwm[2])&&8; TL0=-(ms2_5Con-pwm[2]); case 7: servo3=1; TH0=-pwm[3]&&8; TL0=-pwm[3]; case 8: servo3=0; TH0=-(ms2_5Con-pwm[3])&&8; TL0=-(ms2_5Con-pwm[3]); case 9: servo4=1; TH0=-pwm[4]&&8; TL0=-pwm[4]; case 10: servo4=0; TH0=-(ms2_5Con-pwm[4])&&8; TL0=-(ms2_5Con-pwm[4]); case 11: servo5=1; TH0=-pwm[5]&&8; TL0=-pwm[5]; case 12: servo5=0; TH0=-(ms2_5Con-pwm[5])&&8; TL0=-(ms2_5Con-pwm[5]); case 13: servo6=1;TH0=-pwm[6]&&8; TL0=-pwm[6]; case 14: servo6=0;TH0=-(ms2_5Con-pwm[6])&&8; TL0=-(ms2_5Con-pwm[6]); case 15: servo7=1;TH0=-pwm[7]&&8; TL0=-pwm[7]; case 16: servo7=0;TH0=-(ms2_5Con-pwm[7])&&8; TL0=-(ms2_5Con-pwm[7]); default: TH0=0 TL0=0x80; pwm_flag=0; } pwm_flag++; }27 5、制作与调试5.1 系统仿真随着科技的发展,“计算机仿真技术”已成为许多设计部门重要的前期设计手 段。它具有设计灵活,结果、过程统一的特点。可使设计时间大为缩短、耗资大 为减少,也可降低工程制造的风险。 5.1.1 软件介绍 1.Keil 软件 Keil C51 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开 发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的 优势,因而易学易用。Keil 提供了包括 C 编译器、宏汇编、连接器、库管理和 一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境 (uVision)将这些部分组合在一起。运行 Keil 软件需要 WIN98、NT、 WIN2000、WINXP 等操作系统。如果你使用 C 语言编程,那么 Keil 几乎就是你 的不二之选,即使不使用 C 语言而仅用汇编语言编程,其方便易用的集成环 境、强大的软件仿真调试工具也会令你事半功倍。软件界面如图 5-1 所示。图 5-1 Keil U4 软件界面图28 2.Proteus 软件 Proteus 软件是英国 Labcenter electronics 公司出版的 EDA 工具软件。它不仅 具有其它 EDA 工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最 好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机 爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。 Proteus 是世界上著名的 EDA 工具(仿真软件),从原理图布图、代码调试到单片 机与外围电路协同仿真,一键切换到 PCB 设计,真正实现了从概念到产品的完 整设计。是目前世界上唯一将电路仿真软件、PCB 设计软件和虚拟模型仿真 件三合一的设计平台,其处理器模型支持 8051、HC11、 PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086 和 MSP430 等,2010 年即将 增加 Cortex 和 DSP 系列处理器,并持续增加其他系列处理器模型。在编译方 面,它也支持 IAR、Keil 和 MPLAB 等多种编译。软件界面如图 5-2 所示。图 5-2 Proteus 软件界面3.上位机软件 上位机软件有 PC 端和 Android 端两种。 PC 端使用的是 Wi-Fi 机器人网 ·机器人创意工作室发布的 WIFI/ 蓝牙智能小 车机器人操控平台正式版 V1.28,界面如图 5-3 所示29 图 5-3 上位机界面此版本的上位机具有蓝牙、WIFI 双模式控制,除基本的方向控制、车灯控 制和喇叭控制外,还有 16 路舵机控制,2 路差速控制,舵机校准,舵机归位, 雷达显示,摄像头追踪,视觉巡线和 12 组自定义指令发送。本次设计只利用到 上位机基本的方向控制、车灯控制、8 路舵机控制、舵机校准、舵机归位、摄像 头追踪、视觉巡线。上位机的其他功能会在在后续的小车升级中逐渐利用到。图 5-4 系统设置30 上位机在第一次使用时要在中设置参数,参数设置完成,保存退出系统设置 后就可以开始控制小车了。根据之前下位机设计软件包设置参数,具体的参数设 置如图 5-4 所示。 Android 端上位机同样使用的是 Wi-Fi 机器人网·机器人创意工作室发布的 WIFIRobot 智能小车机器人控制端 V1.05 界面如图 5-5 所示,虽然没有 PC 端功 能齐全,但是基本的小车行走控制,舵机控制等功能完善,能满足本次设计需 求。图 5-5 Android 端上位机界面图Android 端上位机第一次使用时同样要在设置中设置参数。参数的设置参考 PC 端的设置,具体见图 5-6 所示.图 5-6 Android 端上位机参数设置图31 5.1.2 仿真测试系统仿真测试:主要是完成软件与硬件的配套测试,模拟是在实际硬件平台 时各个模块的运行状况。根据仿真的结果,然后不断修正软件,使之也硬件平台 完美结合。 在仿真用因为要使用到串口通信,电脑需要先安装 Virtual.Serial.Port.Driver (虚拟串口程序)如图 5-6 配合 Proteus 实现串口通信的仿真。图 5-7 Virtual.Serial.Port.Driver 界面在仿真开始时要先将单片机 89C52 的晶振设置为实物中使用的参数 11.0592MHz,然后开始仿真。仿真图见图 5-8 和 5-9图 5-8 Proteus 仿真电路图32 图 5-9 Proteus P0 口 PWM 信号输出波形5.2 实物调试1.硬件调试 根据电路图焊接、装配实物。电路制作完成后,首先应对系统进行整体检 查,确认电路无虚焊、短路、断路等错误,然后应该对电路各功能模块进行分级 调试,逐步实现系统的整体功能。在硬件的制作过程中,每完成一个模块,就对 模块中每条线路用万用表进行测试其通断和短路情况。因为细心的制作,硬件调 试很顺利。 2.软件调试 根据硬件平台编写程序,均使用 C 语言编写。用 Keil u4 编译成功后,生成 十六进制文件,然后利用 Protues 仿真调试,在仿真实现各个模块的协同工作。 在软件调试刚开始,发送数据都始终没有反应。根据我对程序整个机构了 解,出现这种情况有三个可能,一是串口中断没打开,单片机没能接收到数据。 二是接收到数据,但是数据组包错误,导致主程序无法调用正确数据。三是数据 组包正确,在主程序中调用数据包后,对数据包的处理错误。经过对三个部分的 仔细分析,最终发现是第二种情况,数据组包的程序问题,修改后整个程序终于33 到达了应用的效果。 3.整体联调 在硬件调试和软件调试都成功后,将程序下载到硬件平台中试运行。根据运 行结果再次调整软件和硬件,最终实现设计中的各项功能。 在第一次整体调试时,发现电机不转,路由器经常重启,反复排查硬件和软 件都没发现问题。最后发现自己还是忽略了重要问题,那就是供电的问题。系统 供电是使用的 7.2V 的动力电池,充满后在 8.4 左右。经过测量发现电池只有 6.2V,电池已经没电了,但是却可以维持单片机,路由器,摄像头等小功率的模 块运作。但是电机在启动是需要较大电流,在电池供电不足时电机启动瞬间就会 造成整个系统供电不稳,因此路由器就会重启。发现这个问题后,在以后调试时 就车上加装了个小心的电压表,实时显示电源情况,避免第一次的情况出现。 在后续调试中发现小车左右的速度不一致,左侧较快,这样导致小车无法走 直线总是向左偏。经分析,出现这种情况一是因为两个电机因为制作工艺转速很 难一模一样,二是两边的减速齿轮组摩擦力可能不一致,三是左右履带的摩擦阻 力不同。为了尽量的修正这些因素造成的偏差,经过网上不断的查找和与各论坛 人事交流,最终确定一个简单的解决办法。这个办法就是在速度较快左侧的电机 上串联一个零点五欧左右的大功率电阻,通过这个办法能降低电机的转速。这样 就可以使两侧的速度基本一致。虽然还是有点偏差但是相对之前得到了很大的提 高。34 总结通过本次毕业设计的资料收集,理论学习、论文编写和实物的制作调试,进一步的加深了专业知识的认识,同时也到了自身存在的不足,特别是在知识面方 面。未来学科融合是大趋势,一个设计的完成不可能只依靠一个学科知识,就像 本次设计就涉及到硬件上面的单片机最小系统电路,模拟电子技术,软件上单片 机 C 语言和路由器刷入的 Openwrt 系统是是一个高度模块化、高度自动化的嵌 入式 Linux 系统,通信上则涉及到 Wi-Fi 无线网络技术,显然这些并不是一个学 科知识。这使得在设计的起步阶段花费了大量的时间,在网上查阅相关的资料和 请教各个专业方向的高手。虽然完成了设计,但是对非本专业的知识具体的一些 细节仍然不是很透彻,如 Openwrt 系统固件的编译,摄像头参数的设置。 同时,通过这次的毕业设计,各方面能力也得到了大幅度的提高。虽然对一 些其他专业的知识的具体细节不透彻,但是有了一定了解,对接下去的深入的研 究学习有很好的方向性的指引。通过不断查阅资料、与师生交流学习新知识、在 网上请教相关的人士,然后又将自己沉淀后的知识和经验运用到实际电路设计理 念中,真正做到学有所用。 当然,由于知识,能力和经验的限制,整个设计还有很多不足之处有待完善 和改进,恳请老师指教。35 【参考文献】[1] 刘彪.室外监控机器人的微小型组合导航系统设计.哈尔滨工业大学硕士论 文,2010. [2] 许彦峰 ,胡皓瑜 ,孙汉旭. 基于 Web 的远程控制机器人研究.航天制造技术, 2003 ,06 期:35~38 [3] 张毅,罗元,郑太雄等.移动机器人技术及其应用[M].北京:电子工业出 版社,2007. [4] 陈海宴.51 单片机原理及应用--基于 Keil C 与 Proteus.北京:北京航空航天 大学出版社,2010[5] 刘建清.从零开始学单片机技术.北京:国防工业出版社,2006 [6] 刘建清.从零开始学单片机 C 语言.北京:国防工业出版社,2006 [7] 李文仲 段朝玉 等 .C8051F 系列单片机与短距离无线数据通信 .北京:北 京航空航天大学出版社,2007 [8] 李伯成.嵌入式系统可靠性设计.北京:电子工业出版社,2006 [9] 张琳琳.机器人遥操作系统中视频传输研究.华北电力大学(北京)硕士论 文,2007 [10]嵇鹏程,沈惠平.服务机器人的现状及其发展趋势.西江苏工业学院机械与能 源工程学院硕士论文,2009. [11]刘林森.服务型机器人将于 2015 年大普及[N].中国计算机报,2006:A34. [12]林慧琛.Red hat Linux 服务器配置与应用. 北京:人民邮电出版社,2006 [13]刘富强。 《数字视频监控系统及应用》. 北京:机械工业出版社,2009 [14] Rémy Card,?ric Dumas,Franck Mével.The Linux Kernel Book [Paperback]. John Wiley & Sons,1998 [15] GainSpan Corporation. GS1010 Ultra Low-Power Wireless System-On-Chip Data Sheet. 2007. [16]孙戈,徐瑞华.基于 wifi 的井下多功能便携终端的设计与实现[J].工矿自动 化. [17] 刘乃安. 无线局域网(WLAN)原理、技术与应用[M]. 西安: 西安电子科技大学36 出版社.6. [18] GainSpan Corporation. GainSpan embedded platform software application programming guide. 2008 [19] Cameron Dean. Understanding the Prediction Gap in Multi-hop Location. Graduate Division of the University of California, Berkeley.2006. [20] RoferT, LankenauA, MoratzR. Sevice Robotics applications and safety issues in an emerging market[J]. Workshop W20 in proceeding ECAI 2000Berlin, 2001.37 附录 1系统设计原理图11223344INOUT38+5V+9V+9VJ832+5VC1C2C3R4R3R2R1C41100uF104D1D2D3D4100uF1K1K1K1K104 附录 2源程序/********************************************************************* *单片机 STC89C52 *该试验使用的晶振是 11.0592m *串口通信波特率:9600 * 创建人 : 胡强 * 感谢各大工作室大力支持 *********************************************************************/ #include&reg52.h& #include&math.h& #include&intrins.h& #define uchar unsigned char #define uint unsigned int uchar Buffer =0; //从串口接收的数据 uint URTAReceivedCount=0,n=1; uchar data Tempdatatable[5],CommandDatatable[5]; //数据包 uchar serVal[2]; uint pwm[]={82,82,}; // 初 始 90 度 , ( 实 际 是 1382.4,取整得 1382) uchar pwm_flag=0; uint code ms0_5Con=461; //0.5ms 计数 (实际是 460.8 ,取整得 461) uint code ms2_5Con=2304; //2.5ms 计数 bit key_stime_ 7 sbit StatusLight=P2^0; //状态灯 sbit MainLight=P2^1; //主大灯 sbit servo0=P0^0; //舵机控制 sbit servo1=P0^1; sbit servo2=P0^2; sbit servo3=P0^3; sbit servo4=P0^4; sbit servo5=P0^5; sbit servo6=P0^6; sbit servo7=P0^7; /******************************************************************** * 名称 : Delay_1ms() * 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x (延时一毫秒的个数) * 返回值 : 无 *********************************************************************/ void Delay_1ms(uint i)//1ms 延时 {39 uchar x,j; for(j=0;j&i;j++) for(x=0;x&=148;x++); } void TurnOnStatusLight() { StatusLight=0; } /******************************************************************** * 名称 : Send_Data() * 功能 : 向上位机传送字符 * 输入 : 无 * 返回值 : 无 *********************************************************************/ void Send_Data(uchar type,uchar cmd,uchar dat) { uchar data Buffer[5];//构建数据包 uchar *p; uint Send_Count=0; p = B Buffer[0]=0XFF; Buffer[1]= Buffer[2]= Buffer[3]= Buffer[4]=0XFF; while(1) { if(*p==0XFF) { Send_Count++; //0XFF 标志统计位 } SBUF = *p; //发送 while(!TI) //如果发送完毕,硬件会置位 TI,等待发送完毕 { _nop_(); } p++; TI = 0; if(Send_Count == 2) // 当统计到两次出现 0XFF ,则认为一个数据包发送完 毕,跳出循环 { TI = 0;40 } } } /******************************************************************** 协议规定: 包头 类型位 数据位 数据位 结束位 0XFF 0X** OX** 0X** 0XFF 各命令说明: 类型位 数据位 数据位 功能 0X00 0X00 0X00 0X00 0X00 0X01 0X01 0X01 0X01 0X01 0X01 0X01 0X01 0X02 0X02 0X02 0X01 0X03 0X04 0X00 0X01 0X02 0X03 0X04 0X05 0X06 0X07 0X08 0X01 0X02 0X00 0X00 0X00 0X00 0X00 角度 . . . . . . 数据 0X00 0X00 前进 后退 左转 右转 停止 舵机 1 舵机 2 舵机 3 舵机 4 舵机 5 舵机 6 舵机 7 舵机 8 车灯亮 车灯灭 角度数据 0X00 到 0XB4 分别对应 0°到 180°0X03 雷达数据 发送雷达数据 暂时未使用,后续升级使用 *********************************************************************/ /******************************************************************** * 名称 : Com_Int() * 功能 : 串口中断子函数 *********************************************************************/ void Com_Int(void) interrupt 4 { ES=0; //关串口中断 RI=0; //软件清除接收中断 temp=SBUF; if(temp==0XFF && URTAReceivedCount&3) {41 Tempdatatable[0]==0XFF; //包头 URTAReceivedCount++; } else { Tempdatatable[n]= n++; if(URTAReceivedCount==0&&n==2) n=1; } if(URTAReceivedCount==2)//包尾 { Tempdatatable[0]=0XFF; Tempdatatable[4]=0XFF; n=1; URTAReceivedCount=0; //组包完毕 temp=&&; // Send_Data(Tempdatatable[1],Tempdatatable[2],Tempdatatable[3]); // 发 送 组 成 的数据包回去 } CommandDatatable[0]=Tempdatatable[0]; CommandDatatable[1]=Tempdatatable[1]; CommandDatatable[2]=Tempdatatable[2]; CommandDatatable[3]=Tempdatatable[3]; CommandDatatable[4]=Tempdatatable[4]; ES=1;//开串口中断 } /******************************************************************** * 名称 : Com_Init() * 功能 : 串口初始化,晶振 11.0592,波特率 9600,开串口中断,开 CPU 总中断 *********************************************************************/ void Com_Init(void) { TMOD = 0x21; PCON = 0x00; SCON = 0x50; TH1 = 0xFd; //设置波特率 9600 TL1 = 0xFd; TR1 = 1; //启动定时器 1 ES = 1; //开串口中断42 EA = 1; //开总中断 IT0=0; EX0=1; } /******************************************************************** * 名称 :Moto_Forward() * 功能 : 电机 1、2 启动,都是前进,整车表现为前进。 *********************************************************************/ void Moto_Forward() { P1= 0x0a; Delay_1ms(100); } /******************************************************************** * 名称 :Moto_Backward() * 功能 : 电机 1、2 启动,都是后退,整车表现为后退。 *********************************************************************/ void Moto_Backward() { P1= 0x05; Delay_1ms(100); } /******************************************************************** * 名称 :Moto_TurnLeft() * 功能 : 电机 1 后退,电机 2 前进,整车表现为左转。 *********************************************************************/ void Moto_TurnLeft() { P1= 0x09; Delay_1ms(100); } /******************************************************************** * 名称 :Moto_TurnRight() * 功能 : 电机 1 前进,电机 2 后退,整车表现为右转。 *********************************************************************/ void Moto_TurnRight()文档由暴风影音 2014 官方免费下载 /分享 { P1= 0x06; Delay_1ms(100); } /********************************************************************43 * 名称 :Moto_Stop() * 功能 : 电机 1 停止,电机 2 停止,整车表现为停止。 *********************************************************************/ void Moto_Stop() { P1= 0x00; Delay_1ms(100); } /******************************************************************** * 功能 : 舵机 PWM 中断初始化 *********************************************************************/ void Timer0Init() { /*0 度=0.5ms, 45 度=1ms, 90 度=1.5ms, 135 度=2ms, 180 度=2.5ms /.5 ms 初始值 F700, (12n/.5/1000, n=2304, X==63232 & F700)*/ TMOD |= 0x01; //使用模式 1,16 位定时器,使用&|& 符号 可以在使用多个定时器时不受影响 TH0=-ms2_5Con&&8; //给定初值,17ms 中断 TL0=-ms2_5C EA=1; //总中断打开 ET0=1; //定时器 0 中断打开 TR0=1; //定时器 0 开关打开 } /******************************************************************** * 功能 : 舵机 PWM 中断, //舵机控制函数 周期为 20ms 一个循环 20MS = 8*2.5ms *********************************************************************/ void SteeringGear() interrupt 1 { switch(pwm_flag) { case 1: servo0=1; TH0=-pwm[0]&&8; TL0=-pwm[0]; case 2: servo0=0; TH0=-(ms2_5Con-pwm[0])&&8; TL0=-(ms2_5Con-pwm[0]); case 3: servo1=1; TH0=-pwm[1]&&8; TL0=-pwm[1]; case 4: servo1=0; TH0=-(ms2_5Con-pwm[1])&&8; TL0=-(ms2_5Con-pwm[1]); case 5: servo2=1; TH0=-pwm[2]&&8; TL0=-pwm[2]; case 6: servo2=0; TH0=-(ms2_5Con-pwm[2])&&8; TL0=-(ms2_5Con-pwm[2]); case 7: servo3=1; TH0=-pwm[3]&&8; TL0=-pwm[3]; case 8: servo3=0; TH0=-(ms2_5Con-pwm[3])&&8; TL0=-(ms2_5Con-pwm[3]);44 case 9: servo4=1; TH0=-pwm[4]&&8; TL0=-pwm[4]; case 10: servo4=0; TH0=-(ms2_5Con-pwm[4])&&8; TL0=-(ms2_5Con-pwm[4]); case 11: servo5=1; TH0=-pwm[5]&&8; TL0=-pwm[5]; case 12: servo5=0; TH0=-(ms2_5Con-pwm[5])&&8; TL0=-(ms2_5Con-pwm[5]); case 13: servo6=1;TH0=-pwm[6]&&8; TL0=-pwm[6]; case 14: servo6=0;TH0=-(ms2_5Con-pwm[6])&&8; TL0=-(ms2_5Con-pwm[6]); case 15: servo7=1;TH0=-pwm[7]&&8; TL0=-pwm[7]; case 16: servo7=0;TH0=-(ms2_5Con-pwm[7])&&8; TL0=-(ms2_5Con-pwm[7]); default: TH0=0 TL0=0x80; pwm_flag=0; } pwm_flag++; } void SetSteeringGear(uchar i, uchar val) { uint a = (val+46)*10; if(a&ms0_5Con) a=ms0_5C if(a&ms2_5Con) a=ms2_5C pwm[i]=a; CommandDatatable[2]=0 //清除缓存 } /******************************************************************** 函数功能 :主函数 *********************************************************************/ void main() { MainLight=0; Delay_1ms(200); Com_Init();//串口初始化 Timer0Init();//舵机 PWM 中断初始化 while(1) { if(CommandDatatable[0]==0XFF && CommandDatatable[4]==0XFF) {45 switch (CommandDatatable[1]) //根据键值不同,执行不同的内容 { case 0X00: //类型位 0X00,表明是控制数据包,进入控制数据 case switch(CommandDatatable[2]) //根据数据位的值来进行选择执行不同的 动作 { case 0X00:Moto_Stop(); case 0X01:Moto_Forward(); case 0X02:Moto_Backward(); case 0X03:Moto_TurnLeft(); case 0X04:Moto_TurnRight(); default : } case 0X01: //类型位 0X01,表明是舵机数据包,进入舵机 case switch(CommandDatatable[2]) { case 0x01:SetSteeringGear(0,CommandDatatable[3]); case 0x02:SetSteeringGear(1,CommandDatatable[3]); case 0x03:SetSteeringGear(2,CommandDatatable[3]); case 0x04:SetSteeringGear(3,CommandDatatable[3]); case 0x05:SetSteeringGear(4,CommandDatatable[3]); case 0x06:SetSteeringGear(5,CommandDatatable[3]); case 0x07:SetSteeringGear(6,CommandDatatable[3]); case 0x08:SetSteeringGear(7,CommandDatatable[3]); default : } case 0X02: //类型位 0X02,表明是大灯数据包,进入大灯 case switch(CommandDatatable[2]) { case 0X01:MainLight=0; case 0X02:MainLight=1; default : } efault : } } } }46}

我要回帖

更多关于 wifi智能小车 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信