版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能小车无线控制系统摘要本文设计一个无线智能小车控制系统,系统分为上位机与下位机两部分,分别以单片机STC89C52作为主控芯片。上位机集成了USB和nRF905两个模块,通过USB接口与上位机(通用计算机)相连,接收由上位机传来的控制信息(例如:前进、后退、左转、右转),利用nRF905无线发射模块、无线接收模块,将该控制信息经过nRF905无线传输技术433MHz发射出去;并通过nRF905接收器接收遥控器的控制信号,再将信号传给小车电机并作出相应动作。本设计主要由电机USB传输模块、单片机处理模块、无线发射模块和无线接收模块四部分组成。该无线遥控小车的功能如下:能够在有障碍物的情况下实现150米内的无线遥控;实现前进、后退、左转、右转,温度信息的采集并对采集信息处理等功能。然后将处理后的数据传送至PC端,并通过VB程序显示在屏幕上。关键词:微控制器;无线传输技术;上位机;USB;控制器AbstractThedesignadoptsawirelesssystemwithcarcontrollerSTC89C52microcontrollerasthemaincontrolchip.ThiscontrollerconcludednRF905andUSBmodules.ThecontrollerconnectsPCmachine(generalpurposecomputer)throughgeneralUSBinterface,andreceivescontrollinginformation(forward,backward,left,right)fromthecomputer.Thethesisadoptswirelessremote-controllingmoduleconsistingofwirelesssendingmoduleandwirelessreceivingmodule.ItsendsthecontrollinginformationoutbythenRF905wirelesstechnology.Afterreceivingthecontrollingsignal,thenRF905receiversendsittomotorcarandtakesactionaccordingly.ThissystemmainlyconsistofmotorUSBtransmissionmodule,singlechipmicroprocessingmodule,wirelesstransmittingmoduleandwirelessreceivingmodules.Thewirelessremotecontrollingofthecarfunctionsareasfollows:undertheconditionoftheobstacles,itcancomplete150metersofwirelessremotecontrol.Thecarcangoforward,backward,left,andright.Inaddition,thelittlecarcollectsomeinformationelse,suchasthetemperature.ThentherelateddatasandinformationhavebeensendbacktothePC.ThecollectedinformationisdisplayedbytheVBprogram.Keywords:MCU;wirelesstransmissiontechnology;PC;USB;Controller引言自动化是人类文明进步和现代化的标志,特别是在当今信息时代,在我国由制造大国向制造强国转变的过程中,智能控制与自动化技术正广泛应用于工业、农业、军事、交通运输、医疗、服务和家庭方面,改变着社会各人们的生活。今天,利用无线电波传送声音和图像节目的广播和电视,已经深入到社会生活的各个角落,成为亿万人民的伴侣。利用无线电波可以传播信号的这一特性,无线电遥控技术应运而生。无线电遥控就是利用电磁波在远距离上,按照人们的一致实现对物体对象的无线操纵和控制,这种无线控制的方式就叫做无线电遥控[1]。无线电遥控技术发展虽然只有几十年的历史,但是在军事,国防,工农业生产以及科学技术等方面已得到了广泛的应用,并且随着电子技术的飞速发展,新型大规模遥控集成电路的不断出现,使得遥控技术有了日新月异的发展[2]。遥控装置的中心控制部件已从早期的分立元件、集成电路逐步发展到现在的单片微型计算机,智能化程度大大提高。近年来,遥控技术在工业生产、家用电器,安全保卫以及人们的日常生活中使用越来越广泛,并成为发达国家研究的热点。无线遥控小车是上世纪提出的一种新型小车,由于在军事侦察、反恐、防爆、防核化及污染等危险与恶劣环境作业中有着广阔的应用前景,使其成为一个重要的研究热点[3]。无线遥控小车具有体积小、成本低、生存能力强、运动灵活等特点。由于其应用场合特殊,所以特别要求这类小车重量轻、体积小、能耗低、实时性好、操作使用可靠。依据无线遥控小车系统的总体结构,整个小车系统由移动平台、车载控制系统、遥控系统和传感检测四大部分组成。从系统总体来看,无线遥控小车有近端操作人员,远端移动小车和运行环境场所构成,由此构成了人—小车—环境三者相互紧密联系的一个整体。操作人员在遥控作业端根据作业任务的要求,通过遥控操作平台的人机交互接口,借助反馈信息控制小车完成特定的作业任务。操作人员依据终端反馈的信息,根据特定作业任务的要求发送操作与控制指令信息,控制无线遥控小车的前进、后退、转向、加速和减速。1系统方案设计1.1总体方案设计1.1.1设计任务设计一个无线小车的控制系统,此控制系统可以通过USB接口与无线模块相连,并通过无线模块来控制无线小车进行前进、后退、左转、右转、采集信息等操作。本设计预期要研究的主要问题有:(1)如何实现USB口与串口间的转换。(2)如何实现无线传输模块的接收与发送。(3)如何通过编程实现控制系统的各项功能。(4)如何实现下位机小车的行进。(5)如何实现温度、湿度信息的采集。(6)如何设定通信协议。1.1.2设计原理系统以C51单片机作为主控芯片,移动控制平台上的单片机通过USB转串口模块连接上位机的USB口,接收控制信息(例如:前进、后退、左转、右转等),并将该控制信息经过编码和调制之后,通过无线传输模块实现无线发送、接收操作指令,将控制信号发送出去供小车接收,并作出相应动作。1.2方案选择与论证1.2.1单片机处理模块方案1:8051是在8031的基础上,片内又集成有4KBROM,作为程序存储器,是1个程序不超过4KB的小系统。ROM内的程序是公司制作芯片时,代为烧制的,出厂的8051都是含有特殊用途的单片机[4]。所以8051应用在程序已定,且大批量生产的单片机产品中,8051是具有MCS-51内核的各种型号单片机的基础,也是各种增强型,扩展型等衍生品种的核心,使用简单,可以根据自己的需要扩展外部接口。方案2:AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。将多功能8位CPU组合在单个芯片中,三级程序存储器锁定,0Hz-24MHz,128×8位内部RAM,32条可编程I/O线,两个16位定时器/计数器,5个中断源,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路,ATMEL的AT89C51是一种高效微控制器。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。方案3:Cypress公司的EZ-USBFX2单片机CY7C68013是一款性能较高的USB2.0控制器[5]。在芯片上集成了USB和C51内核两个模块,由USB收发模块进行数据字节传输,功能强大的USB内核自动完成USB协议的转换,大大简化了8051代码。芯片集成了USB外设接口的硬件,包括非易失存储器(EPROM、EEPROM、FLASH、ROM)、微处理器、RAM、SIE(串口接口引擎)、DMA等全部功能模块。集成工业标准的8051内核,具有以下增强特性:高达48MHz的时钟;每条指令四个时钟周期;两个UART;三个计数器/定时器;扩展的中断系统;两个数据指针;3.3V电源;矢量USB中断;8051可工作在48MHz、24MHz、12MHz三种时钟频率;四个集成FIFO,可以同16位总线进行自动转换;可工作在主/从模式;FIFO可使用外部提供的时钟或异步选通信号;为ASIC和DSP提供方便的接口;为FIFO和GPIF设计的专门自动中断矢量;最多可有40个通用目的I/O。改进增强的8051内核,性能可达到标准8051的5-10倍,指令系统与8051完全兼容。USB内核为USB设备开发者完成协议中大部分的通信工作,使开发者不需要深入了解USB的低级协议即可顺利开发出所需要的USB设备。综上所述:方案1可以大大简化设计难度,所以采用方案1。1.2.2USB传输模块方案1:CP2101及其升级产品CP2102是美国Silicon公司生产的高集成度USB-UART桥接电路[6]。它们能够用最简单的外部电路、最少的外部器件及最小的电路板面积简便实现USB2.0到UART的转换。该电路的集成度高,内置USB2.0全速功能控制器、USB收发器、晶体振荡器、EEPROM及异步串行数据总线(UART),支持调制解调器全功能信号,无需任何外部的USB器件。功能强大,采用MLP-28封装,尺寸仅为5mm×5mm,占用空间非常小。与其他USB-UART转接电路的工作原理类似,CP2101通过驱动程序将PC的USB口虚拟成COM口以达到扩展的目的。虚拟COM口(VCP)的器件驱动程序允许一个基于CP2101的器件以PC应用软件的形式作为一个增加的COM口独立于任何现有的硬件。COM口使用运行在PC上的应用软件以访问一个标准硬件COM口的方式访问基于CP2101的器件,PC与CP2101间的数据传输是通过USB完成的,因此,无需修改现有的软件和硬件就可以通过USB向基于CP2101的器件传输数据。CP2101的体积虽小但功能非常强大,其主要特性如下:=1\*GB3①内含USB收发器,无需外接电路器;=2\*GB3②内含时钟电路,无需外接振荡器;=3\*GB3③内含上电复位电路;=4\*GB3④片内电压调节可输出3.3V电压;=5\*GB3⑤符合USB2.0规范的要求(12Mb/s);=6\*GB3⑥SUSPEND引脚支持USB状态挂起;=7\*GB3⑦内含512字节接收缓冲器和512字节发送缓冲器;=8\*GB3⑧支持硬件或X-On/X-Off握手;=9\*GB3⑨支持事件状态。方案2:FT2232C是一款USB到UART/FIFO的转换电路,是FTDI公司继第二代FT232BM、FT245BM之后的第三代产品,集成了两片BM芯片的功能[7]。电路要用48-LDLQFP封装。FT2232C具有两个多用途的UART/FIFO控制器,可分别配置成不同的工作模式。一个USB下游端口转换成两个I/O通道,每个I/O通道相当一个FT232BM或FT245BM,可以单独配置成UART接口或者FIFO接口。通过对外挂EEPROM的配置,FT2232C还提供一系列新的操作模式,如多协议同步串行机接口,这是专为同步串行协议如JTAG和SPI总线设计的。还有同步位宽模式、CPU风格的FIFO模式、多协议同步串行机接口模式、MCU主机总线竞争模式及快速光隔离串行机接口模式等。此外,该电路的驱动能力有很大提高,能够输出较之通常电路3倍的功率,这使得多个电路可能共享总线。使用FTDI公司提供的虚拟串口(VCP)驱动,对外围接口的使用就像使用PC的标准串口一样。FT2232C的特点:=1\*GB3①只需添加简单配置电路,便可实现串/并口的转换;=2\*GB3②芯片上集成了全部USB协议,不需要另外编写USB固件程序;=3\*GB3③2个I/O通道相互独立,可配置成2个5V逻辑I/O接口;=4\*GB3④UART接口支持7或8位数据位,1/2位停止位,奇校验/偶校验/标志位/空位/无奇偶校验;=5\*GB3⑤发送数据速率300~1Mb/s(RS-232)3Mbs;=6\*GB3⑥接口模式和USB描述字符可在外部EEPROM中进行配置,还可以在板子上通过USB对EEPROM进行配置;=7\*GB3⑦4.35V~5.25V的单电压工作范围。方案3:PL2303是Prolific公司生产的高集成的RS232-USB接口转换器,可提供一个RS232全双工异步串行通信装置与USB功能接口便利联接的解决方案。该器件内置USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的UART,只需外接几只电容就可实现USB信号与RS232信号的转换,能够方便嵌入到各种设备,该器件作为USB/RS232双向转换器,一方面从主机接收数据并将其转换为RS232信息流格式发送给外设;另一方面从RS232接收数据转换为USB数据格式传送回主机。这些工作全部由器件自动完成,PL2303的高兼容驱动可在大多操作系统上模拟成传统COM端口,并允许基于COM端口应用可方便地转换成USB接口应用,通讯波特率高达6Mb/s。在工作模式和休眠模式时都具有功耗低,是嵌入式系统手持设备的理想选择。该器件具有以下特征:完全兼容USB1.1协议;可调节的3~5V输出电压,满足3V、3.3V和5V不同应用需求。PL2303的特点:=1\*GB3①完全符合USB规范2.0(全速兼容);=2\*GB3②片内拥有USB1.1收发器,5V转3.3V的稳压器;=3\*GB3③支持RS232这样的串行接口;=4\*GB3④全双工发送器和接收器(TxD和RxD);=5\*GB3⑤六个引脚(RTS,CTS,DTR,DSR,DCD和RI);=6\*GB3⑥宽广的流量控制机制;=7\*GB3⑦支持从远程输入相关调制信号进行唤醒功能;=8\*GB3⑧两个通用的I/O(GPIO)引脚;综上所述:PL2303最便宜只要3人民币,外围电路也不复杂,所以选择PL2303来作此次设计。1.2.3无线传输模块方案1:红外接口是新一代的配置标准,它支持数字设备进行数据交流。红外通讯有着成本低廉、连接方便、简单易用和结构紧凑的特点,因此在小型的移动设备中获得了广泛的应用。通过红外接口,各类移动设备可以自由进行数据交换。红外线是波长在750nm至1mm之间的电磁波,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。(1)红外传输的优点=1\*GB3①可以再同样具备红外接口的设备间进行信息交流;=2\*GB3②红外接口可省去下载或其他信息交流所发生的费用;=3\*GB3③由于需要对接才能传输信息,安全性较强。(2)红外传输的缺点=1\*GB3①通讯距离短,通讯过程不能移动,遇障碍物通讯中断;=2\*GB3②红外通讯技术的主要目的是取代线缆连接进行无线数据传输,功能单一,扩展性差。方案2:蓝牙(Bluetooth)技术是爱立信、IBM等5家公司在1998年联合推出的一种短距(10~100米)无线网络技术。它将各种通信设备、计算机及其终端设备、各种数字数据系统、甚至家用电器采用无线方式联接起来。(1)蓝牙传输的优点=1\*GB3①支持语音和数据传输;采用无线电技术,传输范围大,可穿透不同物质以及在物质间扩散。=2\*GB3②采用跳频展频技术,抗干扰性强,不易窃听。=3\*GB3③在各国都不受频谱的限制,理论上说,不存在干扰。(2)蓝牙传输的缺点=1\*GB3①传输距离短,目前我们所用的蓝牙一般为10米功率级别。也就是说只能在方圆十米之内进行数据之间传输。=2\*GB3②传输速度慢。目前蓝牙的峰值带宽只能达到3Mb/s。方案3:nRF905三频段收发合一,抗干扰能力强,特别适合工业控制场合采用DSS+PLL频率合成技术,频率稳定性极好灵敏度高,-100dBm低工作电压(2.7V),功耗小,待机状态仅为1uA,可满足低功耗设备的要求最大发射功率达+10dBm具有多个频道(最多170个以上),特别满足需要多信道工作的特殊场合工作速率最高可达76.8Kbps
外围元件最少(仅10个),基本无需调试。由于采用了低发射功率、高接收灵敏度的设计,使用无需申请许可证,开阔地的使用距离最远可达1000米,具体使用环境及元件参数有关[8]。nRF905的优点[9]:=1\*GB3①433Mhz开放ISM频段免许可证使用;=2\*GB3②接收发送功能合一,收发完成中断标志;=3\*GB3③170个频道,满足多点通讯和跳频通讯,实现组网通讯;=4\*GB3④内置硬件8/16位CRC校验,开发简单,数据传输可靠;
=5\*GB3⑤工作电压1.9-3.6V,低功耗,待机模式仅2.5uA;
=6\*GB3⑥收发模式切换时间<650us;=7\*GB3⑦每次最多可发送接收32字节,并可软件设置发送/接收缓冲区大小2/4/8/16/32字节;=8\*GB3⑧模块可软件设地址,只有收到本机地址时才会输出数据(提供中断指示),可直接接各种单片机使用,软件编程非常方便;
=9\*GB3⑨发射速率50Kbps,外置433MHz天线,空旷通讯距离可达300米左右,室内通信3-6层可实现可靠通信,抗干扰性能强,很强的障碍穿透性能。综上所述:nRF905兼有红外传输和蓝牙传输的优点,并且传输距离大大增加,所以采用方案3nRF905。2智能小车无线控制系统硬件部分设计 2.1单片机串口通信(1)串口通信原理[10]串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到计算机端,而且也能实现计算机对单片机的控制。由于其所需电缆线少,接线简单,所以在较远距离传输中,得到了广泛的运用。
(2)波特率选择波特率(BoudRate)就是在串口通信中每秒能够发送的位数(bits/second)。MSC-51串行端口在四种工作模式下有不同的波特率计算方法。模式1和模式3的波特率选择相同,故在此仅以工作模式1为例来说明串口通信波特率的选择。在串行端口工作于模式1,其波特率将由计时/计数器1来产生,通常设置定时器工作于模式2(自动再加模式)。在选择波特率的时候需要考虑两点:首先,系统需要的通信速率。这要根据系统的运作特点,确定通信的频率范围。然后考虑通信时钟误差。使用同一晶振频率在选择不同的通信速率时通信时钟误差会有很大差别。为了通信的稳定,应该尽量选择时钟误差最小的频率进行通信。(3)通信协议的使用通信协议是通信设备在通信前的约定。单片机、计算机有了协议这种约定,通信双方才能明白对方的意图,进行下一步动作。在系统工作过程中,单片机接收到PC机数据信息后,便查找协议,完成相应的操作。当单片机接收到0xA1时,读取P0端口数据,并将读取数据返回PC机;当单片机接收到0xA2时,单片机等待从PC机接收一段控制数据;当PC机接收到0xA3时,就表明单片机操作已经成功。(4)硬件连接51单片机有一个全双工的串行通讯口,所以单片机和计算机之间可以方便地进行串口通讯。进行串行通讯时要满足一定的条件,比如计算机的串口是RS232电平的,而单片机的串口是TTL电平的,两者之间必须有一个电平转换电路,采用了专用芯片MAX232进行转换,虽然也可以用几个三极管进行模拟转换,但是还是用专用芯片更简单可靠。采用了三线制连接串口,也就是说和计算机的9针串口只连接其中的3根线:第5脚的GND、第2脚的RXD、第3脚的TXD。这是最简单的连接方法,但是对本次设计来说已经足够使用了,MAX232的第10脚和单片机的11脚连接,第9脚和单片机的10脚连接,第15脚和单片机的20脚连接。(5)SBUF数据缓冲寄存器这是一个可以直接寻址的串行口专用寄存器。“为何在串行口收发中,都只是使用到同一个寄存器SBUF。而不是收发各用一个寄存器。”实际上SBUF包含了两个独立的寄存器,一个是发送寄存,另一个是接收寄存器,但它们都共同使用同一个寻址地址-99H。CPU在读SBUF时会指到接收寄存器,在写时会指到发送寄存器,接收寄存器是双缓冲寄存器,这样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据已到来,而造成的数据重叠问题。发送器则不需要用到双缓冲,一般情况下在写发送程序时也不必用到发送中断去外理发送数据。操作SBUF寄存器的方法则很简单,只要把这个99H地址用关键字sfr定义为一个变量就可以对其进行读写操作了,如sfrSBUF=0x99;当然也可以用其它的名称。通常在标准的reg51.h或at89x51.h等头文件中已对其做了定义,只要用#include引用就可以了。(6)SCON串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。SCON就是51芯片的串行口控制寄存器。它的寻址地址是98H,是一个可以位寻址的寄存器,作用就是监视和控制51芯片串行口的工作状态。51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。其它各个位的具体定义如表1:表1串口控制寄存器SCON(MSB)(LSB)SM0SM1SM2RENTB8RB8TIRISM0、SM1为串行口工作模式设置位,两位可以进行四种模式的设置:表2串口工作模式设置SM0SM1模式功能波特率000同步移位寄存器fosc/120118位UART可变1029位UARTfosc/32或fosc/641139位UART可变表中的fosc代表振荡器的频率,也就是晶振的频率。UART为(UniversalAsynchronousReceiver)的英文缩写。SM2在模式2、模式3中为多处理机通信使能位。在模式0中要求该位为0。REM为允许接收位,REM置1时串口允许接收,置0时禁止接收。果在一个电路中接收和发送引脚P3.0,P3.1都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入REM=0来禁止接收,在子程序结束处加入REM=1再次打开串口接收。TB8发送数据位8,在模式2和3是要发送的第9位。该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。RB8接收数据位8,在模式2和3是已接收数据的第9位。该位可能是奇偶位,地址/数据标识位。在模式0中,RB8为保留位没有被使用。在模式1中,当SM2=0,RB8是已接收数据的停止位。TI发送中断标识位。在模式0,发送完第8位数据时,由硬件置位。其它模式中则是在发送停止位之初,由硬件置位。TI置位后,申请中断,CPU响应中断后,发送下一帧数据。在任何模式下,TI都必须由软件来清除,也就是说在数据写入到SBUF后,硬件发送数据,中断响应,这时TI=1,表明发送已完成,TI不会由硬件清除,所以这时必须用软件对其清零。RI接收中断标识位。在模式0,接收第8位结束时,由硬件置位。其它模式中则是在接收停止位的半中间,由硬件置位。RI=1,申请中断,要求CPU取走数据。但在模式1中,SM2=1时,当未收到有效的停止位,则不会对RI置位。同样RI也必须要靠软件清除。常用的串口模式1是传输10个位的,1位起始位为0,8位数据位,低位在先,1位停止位为1。它的波特率是可变的,其速率是取决于定时器1或定时器2的定时值(溢出速率)。AT89C51和AT89C2051等51系列芯片只有两个定时器,定时器0和定时器1,而定时器2是89C52系列芯片才有的。(7)波特率在使用串口做通讯时一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。波特率是指串行端口每秒内可以传输的波特位数。它是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10个二进位,9600波特率用模式1传输时,每秒传输的字节数是960字节。51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M。模式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMOD位,如SMOD为0,波特率为focs/64,SMOD为1,波特率为focs/32。模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率。如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。2.2USB转串口PL2303芯片USB转串口模块全称为USBtoSerialportModule,它可以将USB接口虚拟成一个串口,解决无串口的苦恼[11]。现在市面上的USB转串品的设备可谓是琳琅满目,质量也是参差不齐。造成这种现象的根本原因就在于控制芯片的不同。现在USB转串口桥接芯片有很多,比如CP2102、FT232、PL2303等等。但并非每一种芯片都可以用作ISP下载。经过测试CP2102是不能下载的,而FT232可以下载,但其价格实在不菲。最为适中的就是台湾生产的PL2303,可以稳定下载,并可以支持多种操作系统。
PL2303HX采用28脚贴片SOIC封装,工作频率为12MHZ,符合USB1.1通信协议,可以直接将USB信号转换成串口信号,波特率从75~1228800,有22种波特率可以选择,并支持5、6、7、8、16共5种数据比特位。图1采用PL2303芯片开发的USB转串口模块这是用PL2303芯片开发的USB转串口模块,采用机器自动焊接,都经人工检测,电路板只有30*16*7毫米,模块一共引出4根脚,TTL串口的引脚定义:+5V、P3.0TXD、P3.1RXD、GND地线,其中+5V电源输出线一般情况下都不用的,不需要连接。PL2303原理图如图2:图3PL2303芯片的原理图软件安装:点击下载PL2303.RAR解压缩运行SETUP.EXE进行安装,驱动安装完成后,将模块的USB插头插入电脑USB接口即可。鼠标右键点击桌面的“我的电脑”=》属性=》硬件=》设备管理器=》端口,看是否出现PL2303虚拟的COM4,如果出现说明模块是好的驱动软件也安装成功了。图4安装PL2303驱动后设备管理器串口图2.3DS18B20温度传感器2.3.1DS18B20概述DS18B20是DALLAS公司生产的一线制数字温度传感器;它具有3引脚TO-92小体积封装形式;温度测量范围为-55~+125℃,电源供电范围为3~5.5V;可编程为9~12位数字表示;测温分辨率可达0.0625℃,被测温度用符号扩展的16位数字测量方式串行输出;其工作电源即可在远端引入,可以采用寄生电源方式产生;多个DS18B20可以并联到3根(VDD、DQ和GND)或2根(利用DQ线供电、GND)线上,CPU只需一根端口线就能与总线上的多个串联的DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。DS18B20的管脚排列及不用的封装形式如图所示,DQ为数字信号输入/输出端;GND为电源接地;VDD为外接供电电源输入端(在寄生电源接线方式时节点),NC表示无连接。图5DS18B20系列温度传感器(1)应用中不需要外部任何元器件即可实现测温电路。(2)测温范围-55~+125℃,最大精度0.0625℃。(3)只通过一条数据线即可实现通信。(4)每个DS1820器件上都有独一无二的序列号,所以一条数据线上可以挂接很多该传感器。(5)内部有温度上、下限告警功能。DS18B20内部结构如图所示,主要由4部分组成:64位ROM、温度传感器、非易失性存储的温度报警触发器TH和TL、配置寄存器。图6DS18B20内部原理图DS18B20工作时需要接收特定的指令来完成相应功能(指令,可以简单的理解为可以被识别并有相应意义的一系列高低电平信号),它的指令可分为ROM指令和RAM指令;ROM指令主要对其内部的ROM进行操作,如查所使用DS18B20的序列号等,如果只使用一个DS18B20,ROM操作一般就可以直接跳过了;RAM指令主要是完成对其内RAM中的数据进行操作,如让其开始进行数据采集、读数据等。DS18B20数字温度传感器是单总线器件,数据的读写只通过一条数据线进行并且这一条线上允许挂很多该传感器;这样对器件进行读写指令时就会麻烦一些,必须应用特定时序来识别高低电平信号(如写高电平1,并不是把数据线直接拉高,而是用有一定时序关系的高低电平来代表写1),所以指令表中的0、1在写给DS18B20时就得变成代表0、1电平的时序段序列。同样,从DS18B20读数据时,也是由特定的时序来完成数据读取。对DS18B20进行读写的时序图如下:图7DS18B20进行读写的时序硬件连接方式有两种,一种是由单独电源供电(3~5V);第二种是由数据线为DS18B20供电(工作速度相对较慢)。图8DS18B20单独电源供电方式图9数据线为DS1820供电方式(1)复位操作(2)执行ROM操作的5条指令之一:读ROM,匹配ROM,搜索ROM,跳过ROM,报警搜索。(3)存储器操作命令:温度转换、读取温度、设定上下限温度值等指令(4)读取温度数据:主机读取温度数据后进行数据处理。可以初始化数据精度,按芯片手册写入固定指令。数据位数可设置成9、10、11、12位,其中7位为温度整数部分,1位表示温度正负,其余位数为小数。如9位数据时,有1位为小数,精度为0.5。2.3.2DS18B20指令功能介绍(1)ROM操作指令:①读ROM指令:ReadROM[33h]这个命令允许总线控制器读到DS1820的8位系列编码、唯一的序列号和8位CRC码。只有在总线上存在单只DS1820的时候才能使用这个命令。如果总上有不止一个从机,当所有从机试图同时传送信号时就会发生数据冲突(漏极开路连在一起开成相与的效果)。②匹配ROM指令:MatchROM[55h]匹配ROM命令,后跟64位ROM序列,让总线控制器在多点总线上定位一只特定的DS1820只有和64位ROM序列完全匹配的DS1820才能响应随后的存储器操作命令。所有和64位ROM序列不匹配的从机都将等待复位脉冲。这条命令在总线上有单个或多个器件时都可以使用。③跳过ROM指令:SkipROM[CCh]这条命令允许总线控制器不用提供64位ROM编码就使用存储器操作命令,在单点总线情况下右以节省时间。如果总线上不止一个从机,SkipROM命令之后跟着发一条读命令,由于多个从机同时传送信号,总线上就会发生数据冲突(漏极开路下拉效果相当于相与)。④搜索ROM指令:SearchROM[F0h]当一个系统初次启动时,总线控制器可能并不知道单线总线上有多少器件或它们的64位ROM编码。搜索ROM命令允许总线控制器用排除法识别总线上的所有从机的64位编码。⑤报警搜索指令:AlarmSearch[ECh]这条命令的流程图SearchROM相同。然而只有在最近一次测温后遇到符合报警条件的情况,DS18B20才会响应这条命令。报警条件定义为温度高于TH或低于TL。只要DS18B20不掉电,报警状态将一直保持,直到再一次测得的温度值达不到报警条件。DS18B20需要严格的协议以确保数据的完整性。协议包括几种单线信号类型:复位脉冲、存在脉冲、写0、写1、读0和读1。所有这些信号,除存在脉冲外,都是由总线控制器发出的。和DS18B20间的任何通讯都需要以初始化序列开始,初始化序列见上图。一个复位脉冲跟着一个存在脉冲表明DS18B20已经准备好发送和接收数据(适当的ROM命令和存储器操作命令)。DS18B20内部对此计算的结果可提供0.5℃的分辨力。温度以16位带符号位扩展的二进制补码形式读出,表3给出了温度值和输出数据的关系。数据通过单线接口以串行方式传输。DS1820测温范围-55℃~+125℃,以0.5℃递增。如用于华氏温度,必须要用一个转换因子查找表。读取数据时需要读取前16位数据,低字节在前,高字节为符号为。表3温度值和输出数据的关系温度℃数据输出(二进制)数据输出(十六进制)+125000000001111101000FA+2500000000001100100032+1/200000000000000010001000000000000000000000-1/21111111111111111FFFF-251111111111001110FFCE-551111111110010010FF922.3.3利用ProtelDXP设计DS18B20温度传感器图10DS18B20温度传感器设计图GND接地,VCC接5V电源,DQ接单片机的P37引脚,具体程序见程序设计部分。2.4恒压恒流桥式2A驱动芯片L298N2.4.1L298N介绍L298N是SGS公司的产品,比较常见的是15脚Multiwatt封装的L298N,内部同样包含4通道逻辑驱动电路。可以方便的驱动两个直流电机,或一个两相步进电机。L298N芯片可以驱动两个二相电机,也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。L298N可接受标准TTL逻辑电平信号VSS,VSS可接4.5~7V电压。4脚VS接电源电压,VS电压范围VIH为+2.5~46V。输出电流可达2.5A,可驱动电感性负载。1脚和15脚下管的发射极分别单独引出以便接入电流采样电阻,形成电流传感信号。L298可驱动2个电动机,OUT1,OUT2和OUT3,OUT4之间可分别接电动机,本实验装置我们选用驱动一台电动机。5,7,10,12脚接输入控制电平,控制电机的正反转。EnA,EnB接控制使能端,控制电机的停转。EnA为低电平时,输入电平对电机控制起作用,当EnA为高电平,输入电平为一高一低,控制电机正或反转。同为低电平电机停止,同为高电平电机刹停。图11引脚图图12电路设计图1、15脚是输出电流反馈引脚,其它与L293相同。在通常使用中这两个引脚也可以直接接地。图12是其与51单片机连接的电路图。2.4.2利用ProtelDXP设计L298N部分图13电机驱动的原理图①电路图有两个电源,一路是为L298N工作需要的5V电源VCC,一路为驱动电机用的电池电源VSS。②1脚和15教有的电路在中间串接大功率电阻,可以不加。③图14中连接了两路电机,P2和P3是一一对应的关系,如果只驱动一路电机可以连接对应的2、3脚或者13、14脚。④为了防止电机停止运转的产生的瞬间反向电流对电路板的影响,因此在电机与电路板加入八个二极管(diode),防止反向电流。⑤6脚和11脚为两路电机通道的使能开关,高电平使能,所以直接连接高电平,也可以交有单片机控制。⑥由于工作时L298N的功率消耗大,可以适当加装散热片。2.5LM1117低压差电压调节器2.5.1LM1117器件介绍LM1117是一个低压差电压调节器系列。其压差在1.2V输出,负载电流为800mA时为1.2V。它与国家半导体的工业标准器件LM317有相同的管脚排列。LM1117有可调电压的版本,通过2个外部电阻可实现1.25~13.8V输出电压范围。另外还有5个固定电压输出(1.8V、2.5V、2.85V、3.3V和5V)的型号。LM1117提供电流限制和热保护,电路包含1个带隙参考电压以确保输出电压的精度在±1%以内。LM1117系列具有LLP、TO-263、SOT-223、TO-220和TO-252D-PAK封装。输出端口需要一个至少10uF的钽电容来改善瞬态响应和稳定性。提供1.8V、2.5V、2.85V、3.3V、5V和可调电压的型号节省空间的SOT-223和LLP封装,电流限制和热保护功能,输出电流可达800mA,线性调整率:0.2%(Max),负载调整率:0.4%(Max),温度范围:LM1117:0℃~125℃,LM1117I:-40℃~125℃。2.85V模块可用于SCSI-2有源终端;开关DC/DC转换器的主调压器;高效线性调整器;电池充电器;电池供电装置。典型原理电路图图15典型固定输出电压2.5.2利用ProtelDXP设计LM1117电压转换芯片在设计之初理论上使用的是LM1117,但是在购买器件的时候没有配得LM1117,最终使用的是AMS1117-3.3型号,其原理和LM1117引脚方式相同。AMS1117-3.3左边的引脚GND接地,中间的引脚OUT为无线模块提供3.3V正电压,右边的引脚VIN接5V正电源,在GND和VIN、GND和OUT中间接两个电容。图16电压转换芯片的设计图2.5.3设计要点电源是整个系统稳定工作的前提,因此必须有一个合理的电源设计,对于小车来说电源设计应注意两点:第一点,与一般的稳压电源不同,小车的电池电源在9V,也就是6节5号电池,还需要考虑在电池损耗的情况下电压的降低,因此常用的78系列稳压芯片不能够满足要求,因此必须采用低压差的稳压芯片。第二点,单片机必须与大电流器件分开供电,避免大电流器件对单片机造成干扰,影响单片机的稳定运行。2.6nRF905无线传输模块设计2.6.1nRF905管脚描述图17nRF905管脚图表4串口工作模式设置管脚名称管脚功能说明1VCC电源电源+3.3~3.6VDC2TX_EN数字输入TX_EN=1TX模式TX_EN=0RX模式3TRX_CE数字输入使能芯片发射或接收4PWR_UP数字输入芯片上电5uCLK时钟输出本模块该脚废弃不用,向后兼容6CD数字输出载波检测7AM数字输出地址匹配8DR数字输出接收或发射数据完成9MISOSPI接口SPI输出10MOSISPI接口SPI输入11SCKSPI时钟SPI时钟12CSNSPI使能SPI使能13GND地接地14GND地接地VCC脚接电压范围为3V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。推荐电压3.3V左右。除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO口直接相连,无需电平转换。当然对3V左右的单片机更加适用了。硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机SPI模块介入,只需添加代码模拟SPI时序即可。13脚、14脚为接地脚,需要和母板的逻辑地连接起来。排针间距为100mil,标准DIP插针。与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需要。2.6.2nRF905配置方式所有配置字都是通过SPI接口送给nRF905。SPI接口的工作方式可通过SPI指令进行设置。当nRF905处于空闲模式或关机模式时,SPI接口可以保持在工作状态[12]。SPI接口寄存器配置SPI接口由状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收数据寄存器5个寄存器组成。状态寄存器包含数据准备好引脚状态信息和地址匹配引脚状态信息;射频配置寄存器包含收发器配置信息,如频率和输出功能等;SPI接口寄存器配置SPI接口由状态寄存器、射频配置寄存器、发送地址寄存器、发送数据寄存器和接收数据寄存器5个寄存器组成。状态寄存器包含数据准备好引脚状态信息和地址匹配引脚状态信息;射频配置寄存器包含收发器配置信息,如频率和输出功能等;发送地址寄存器包含接收机的地址和数据的字节数;发送数据寄存器包含待发送的数据包的信息,如字节数等;接收数据寄存器包含要接收的数据的字节数等信息。指令配置当CSN为低,SPI接口开始等待一条指令。任何一条新指令均由CSN的由高到低的转换开始[13]。表5SPI串行接口指令指令名称指令格式操作W_CONFIG(WC)0000AAAA写配置寄存器AAAAR_CONFIG(RC)0001AAAA读配置寄存器AAAAW_TX_PAYLOAD(WTP)00100000写TX有效数据1-32字节写操作从0开始R_TX_PAYLOAD(RTP)00100001读TX有效数据1-32字节读操作从0开始W_TX_ADDRESS(WTA)00100010写TX地址1-4字节写操作从0开始R_TX_ADDRESS(RTA)00100011读TX地址1-4字节读操作从0开始R_RX_PAYLOAD(RRP)00100100读RX有效数据1-32字节读操作从0开始(4)SPI时序图18SPI读操作图19SPI写操作2.7上位机硬件电路设计图20上位机硬件电路原理图图21上位机硬件实物图本手工板的具体器件包括:=1\*GB3①1个STC89C52单片机;=2\*GB3②1个STC89C52单片机底座;=3\*GB3③2条引脚底座;=4\*GB3④1个复位按键;=5\*GB3⑤3个10微法的铝电解电容;=6\*GB3⑥2个10千欧的电阻;=7\*GB3⑦1个11.0592MHZ的晶振;=8\*GB3⑧2个33皮法的瓷片电容;=9\*GB3⑨1个ams1117贴片式三端稳压器(5V电压转换为3.3V);=10\*GB3⑩1个nRF905无线模块;2.8下位机硬件电路设计(需改)本手工板的具体器件包括:=1\*GB3①1个STC89C52单片机;=2\*GB3②1个STC89C52单片机底座;=3\*GB3③2条引脚底座;=4\*GB3④1个复位按键;=5\*GB3⑤3个10微法的铝电解电容;=6\*GB3⑥2个10千欧的电阻;=7\*GB3⑦1个12.0592MHZ的晶振;=8\*GB3⑧2个33皮法的瓷片电容;=9\*GB3⑨1个ams1117贴片式三端稳压器(5V电压转换为3.3V);=10\*GB3⑩1个nRF905无线模块;2.9手工焊接的基本操作步骤(1)元器件装焊顺序依次为:单片机座、复位电路、无线模块、LM1117、二极管、控制信号引脚、L298等其它元器件,每个模块的元器件的焊接顺序为先小后大。(2)芯片与底座都是有方向的,焊接时,要严格按照手工板上的缺口所指的方向,使芯片底座与手工板三者的缺口都对应。(3)焊接时,要使焊点周围都有锡,将其牢牢焊住,防止虚焊。(4)在焊接圆形的极性电容器时(一般电容值都是比较大的),其电容器的引脚是分长短的,以长脚对应“+”号所在的孔。(5)芯片在安装前最好先两边的针脚稍稍弯曲,使其有利于插入底座对应的插口中。(6)电位器也是有方向的,其旋钮要与手工板上凸出方向相对应。(7)取电阻时,找到所需电阻后,拿剪刀剪下所需数目电阻,并写上电阻,以便查找。(8)装完同一种规格后再装另一种规格,尽量使电阻器的高低一致。焊完后将露在印制电路板表面多余引脚齐根剪去。(9)焊接集成电路时,先检查所用型号,引脚位置是否符合要求。焊接时先焊边沿对脚的二只引脚,以使其定位,然后再从左到右自上而下逐个焊接。(10)对引脚过长的电器元件(如电容器,电阻等),焊接完后要将其剪短。(11)当电路连接完前,最好用清洗剂对电路的表面进行清洗,以防电路板表面附着的铁屑使电路断路。(12)焊接上锡时,锡不宜过多,当焊点焊锡锥形时即为最好。(13)器件底座焊接完成后在手工板上画出正负极或器件安装的方向示意标准,方便以后器件的安装,尤其是正负极的标注和温度传感器的方向标注。(14)检查所有电路线路焊接是否全部连接,是否连接正确;特别注意正极和地线的分开,切不可短路。2.10小车的组装和调试(1)检查手工板的焊接,按原理给小板供电+5V,用LED小灯显示输出控制的A1、A2、B1、B2、ENA、ENB的输出情况,在PC端用VB编好的程序控制小板的通信。(2)组装小车,检查小车的机械部分,测试小车机械是否通畅,防止出现因机械产生的故障。(3)组装手工板、L298N、电源和小车,因为几部分之间没有兼容性,所以有些连接需要自己动手制作。(4)连接排线,检查各部件,各模块,和上位机端进行通信,检查通信协议是否正确。3智能小车无线控制系统软件部分设计3.1PC端编程环境综述VisualBasic(VB)是一种由微软公司开发的包含协助开发环境的事件驱动编程语言。从任何标准来说,VB都是世界上使用人数最多的语言——不仅是盛赞VB的开发者还是抱怨VB的开发者的数量。它源自于BASIC编程语言。VB拥有图形用户界面(GUI)和快速应用程序开发(RAD)系统,可以轻易的使用DAO、RDO、ADO连接数据库,或者轻松的创建ActiveX控件。程序员可以轻松的使用VB提供的组件快速建立一个应用程序。从开发个人或小组使用的小工具,到大型企业应用系统,甚至通过Internet遍及全球的分布式应用软件,都可以使用VisualBasic语言进行开发[14]。VisualBasic有着广泛的应用,具有以下几个主要特点[15]:=1\*GB3①真正的面向对象编程,使开发人员在维护系统运行时只需要修改很少的代码,同时也加快了系统开发的速度。=2\*GB3②可视化的编程方法,以及向导的功能,使开发人员几乎不用输入太多的代码就可以开发Windows程序。=3\*GB3③数据访问特性允许对包括MicrosoftSQLServer和其他企业数据库在内大部分数据库格式建立数据库和前端应用程序。=4\*GB3④通过ActiveX技术可以使用其他应用程序程序提供的功能,例如,MicrosoftWord字处理软件,MicrosoftExcel电子表格及其他Windows应用程序,甚至可以直接使用VisualBasic创建应用程序和对象。=5\*GB3⑤支持Internet,能通过Internet访问文档和应用程序。=6\*GB3⑥提供运行时的可自由发布的动态链接库(DLL)。3.2上位机软流程图程序入口串口开关程序入口串口开关串口已开启串口未开启温度信息采集其它信息采集无线小车控制采集信息保存系统时间函数图22上位机软件系统流程图3.3上位机软件程序设计图23上位机软件系统界面设计(1)串口参数的设定MSComm.Settings="4800,N,8,1"MSComm.InputLen=0MSComm.InBufferSize=1024MSComm.OutBufferSize=512MSComm.PortOpen=TrueMSComm.InputMode=comInputModeBinaryMSComm.SThreshold=0MSComm.InBufferCount=0MSComm.OutBufferCount=0添加串口控件后,可通过对MSComm各属性的设置,来实现对串口的相关设定,本次设计所用的串口为“1”口,串口参数为“波特率4800bps,无校验,8位数据,1位停止位”,“接收缓冲区为1024字节”,“发送缓冲区为512字节”,“并且以二进制方式进行发送接收与发送”。(2)方向控制功能的实现PrivateSubCommand_tingzhi_Click()MSComm.OutBufferCount=0Forj=1To5MSComm.Output=send0Fori=1To2000NextNextEndSub以上为控制小车停止的代码,MSComm.Output=send0,段代码的意思为向串口输出send0,因此若想实现其他的方向的控制功能主要就是把send0改为send1、send2、send3、send4,依次实现的是小车的前进、后退、左拐、右拐;加上两个循环的作用就是用来延时,以防止发送速度过快影响数据的处理以及系统的稳定性能。(3)灯光控制功能的实现PrivateSubCommand_dengguang_Click()deng1=dengMod2Ifdeng1=0ThenForj=1To5MSComm.Output=send5Fori=1To2000NextNextElseForj=1To5MSComm.Output=send6Fori=1To2000NextNextEndIfdeng=deng+1EndSub灯光函数的本质也与方向控制函数是相同的,但是由于用来实现灯光控制的是一个按键,因此增加了一定的难度,为此加入了一个判断函数,来实现每次按键触发的不同响应方式。定义了deng这个变量是用来对按键出发次数的记录,以此来判断现在小车上光源是开启状态还是关闭状态;因为小车初始的状态光源是关闭着的,因此设定deng这个变量初始为0,当进行deng1=dengMod2运算后deng1得到的为0,设定此条件下控制小车的光源开启,其他条件控制小车的光源关闭。(4)键盘与鼠标间控制功能的切换PrivateSubjianpan_gotfocus()'设置键盘控制按钮--得到焦点jianpan.Caption="键盘控制已开启"EndSubPrivateSubjianpan_lostfocus()'设置键盘控制按钮--失去焦点jianpan.Caption="键盘控制已关闭"EndSubPrivateSubjianpan_KeyDown(KeyCodeAsInteger,ShiftAsInteger)SelectCaseKeyCode'选择相应操作CasevbKeyW CallCommand_shang_ClickCasevbKeyS CallCommand_xia_ClickCasevbKeyA CallCommand_zuo_ClickEndSelectEndSubPrivateSubjianpan_Keyup(KeyCodeAsInteger,ShiftAsInteger)SelectCaseKeyCodeCasevbKeyW CallqingkongCasevbKeyS CallqingkongCasevbKeyA CallqingkongEndSelecEndSub以上为键盘与鼠标间控制切换的实现,jianpan_gotfocus()为设置键盘控制按钮属性--得到焦点,此函数的作用有两个,一个是为了得到焦点,来实现jianpan.Caption="键盘控制已开启";另一个作用是为了得到焦点,来触发jianpan_KeyDown函数。当jianpan_KeyDown函数被触发后,即可实现按键的控制,按键控制的实现就是用选择语句来判断按键的键值,并调用相应的控制函数。对应按键的功能分别为:W--上;S--下;A--左;D--右;Q--光源开关;E--停止;1--采集温度;2--采集湿度;3--采集高度;4--保存采集信息;R--清空采集信息。图24键盘控制开启视图(5)温度的接收与处理PrivateSubCommand_caiji1_Click()cai=cai+1cai1=caiMod2Ifcai1=0ThenCommand_caiji1.Caption="采集已终止"ElseCommand_caiji1.Caption="温度采集中"MSComm.OutBufferCount=0Whilecai1MSComm.OutBufferCount=0DoUntilMSComm.InBufferCount>=1DoEventsLooprecive=MSComm.InputLabel6.Caption=Hex(recive(0))Label4.Caption="℃"WendEndIfEndIfEndSub图25温度采集视图(6)采集信息的保存与处理PrivateSubsave_Click()'采集信息保存函数Open"c:\采集.txt"ForAppendAs1str1="当前温度"str2="湿度采集"str3="高度采集"str4="年"str5="月"str6="日"str7="时"str8="分"str9="秒"str10=""str11=""Y=Year(Date)'保存时间获取mm=Month(Date)d=Day(Date)h=Hour(Time)m=Minute(Time)s=Second(Time)Print#1,Print#1,Y;str4;mm;str5;d;str6;str10;h;str7;m;str8;s;str9Print#1,str2,Text2Close#1Endsub图26采集信息保存视图(7)串口开关判断IfMSComm.PortOpen=FalseThenOnErrorGoToerr1err1:IfErr.Number=8002Thenx=MsgBox("端口不存在,请选择正确串口号!")kai=kai-1串口除了被打开的情况还有一个情况就是串口不存在,此错误号为8002,因此可以用Error判断函数来实现串口报错的信息。图27串口不存在系统报错图3.4nRF905程序设计nRF905的无线通信流程框图如图28:保护现场地址符合否命令分类保护现场地址符合否命令分类发向地址接收未超时接收下一字符是命令字吗从机发送就绪发送就绪代码与所发包数相比接收未超时将待发数据包分成每个包32个字节发送完成否发送数据包接收数据包数从机接收就绪接收数据包接收完否与接收包数相比接收数据包数发送未就绪代码数据就绪标识无效恢复现场数据就绪标识仍有效发接收错代码中断返回中断图28nRF905的无线通信流程框图单片机主函数流程图如图29:图29单片机主函数流程图(1)nRF905寄存器配置参数ucharRFConf[11]={0x00,0x4c,0x0c,0x44,0x04,0x04,0xCC,0xCC,0xCC,0xCC,0x58};对于频段设置参数CH_NO,CH_NO[7:0]的值为0x4c。通过SPI接口向nRF905配置寄存器读写配置信息。(2)SPI写操作voidSpiWrite(ucharsend){uchari;BUF=send;for(i=0;i<8;i++){if(DATA7) {MOSI=1;}else{MOSI=0;}SCK=1;BUF=BUF<<1;SCK=0;}}步骤一:MOSI线准备好需要发送的数据位。步骤二:SCK置高,器件读取MOSI线上的数据。步骤三:SCK置低,准备发送数据的下一位以上步骤循环执行8次,通过SPI向器件发送数据完成。数据的传输时,高位在前,低位在后。(3)SPI读操作SpiRead(void){ucharj;for(j=0;j<8;j++){BUF=BUF<<1;SCK=1;if(MISO) {BUF=BUF|BIT0;}else{BUF=BUF&(~BIT0);}SCK=0;}returnBUF;}步骤一:MISO线准备好需要发送的数据位。步骤二:SCK置高,主机读取MISO线上的数据。步骤三:SCK置低,准备接收数据的下一位。以上步骤循环执行8次,通过SPI从器件上读数据完成。数据的传输时,高位在前,低位在后。(4)主机通过SPI接口向905配置寄存器写入信息voidConfig905(void){uchari;CSN=0; for(i=0;i<11;i++) {SpiWrite(RFConf[i]);}CSN=1;}步骤一:CSN置低电平,SPI接口开始等待第一条指令。步骤二:调用SpiWrite函数,向器件配置寄存器写配置信息。步骤三:CSN置高电平,结束SPI通讯。(5)使用nRF905发送数据voidTxPacket(uchar*TxRxBuf){uchari;CSN=0;SpiWrite(WTP); for(i=0;i<4;i++){SpiWrite(TxRxBuf[i]);}CSN=1;Delay(1); CSN=0; SpiWrite(WTA); for(i=0;i<4;i++) {SpiWrite(TxAddress[i]);}CSN=1; TRX_CE=1; Delay(1); TRX_CE=0;}步骤一:SpiWrite函数发送WTP命令,写入TX数据。步骤二:调用SpiWrite向TX-Payload寄存器写入TX数据。步骤三:延时。步骤四:通过SpiWrite函数发送WTA命令,写入TX地址。步骤五:调用SpiWrite向TX-Address寄存器写入TX地址。步骤六:TRX_CE=1;使发送数据延时,nRF905数据发送完成,当nRF905接收到一条完成的信息时,会将DR引脚置高。(6)使用nRF905接收数据voidRxPacket(void) {uchari;Delay(100);TRX_CE=0;CSN=0; Delay(1);SpiWrite(RRP);for(i=0;i<4;i++){RxBuf[i]=SpiRead();}CSN=1;Delay(10);TRX_CE=1;}步骤一:TRX_CE=0;将此引脚置低,使905进入standby。步骤二:发送RRP指令。步骤三:循环调用SpiRead函数,读取接收到的数据。步骤四:TRX_CE=1;数据包接收完成。(7)设置器件为发送模式。voidSetTxMode(void){TX_EN=1;TRX_CE=0;Delay(1);}步骤一:TX_EN=1;步骤二:TRX_CE=0;进入发送模式。(8)设置器件为接收模式voidSetRxMode(void){TX_EN=0;TRX_CE=1;Delay(1);}步骤一:TX_EN=0;步骤二:TRX_CE=1;进入接收模式。3.5DS18B20温度传感器的程序设计产生复位脉冲初始化温度芯片txreset等待应答脉冲voidrxwait产生复位脉冲初始化温度芯片txreset等待应答脉冲voidrxwait读取数据第一位,满足读时隙要求读取数据的一个字节信号的转换convert写一个数据字节wrbyte读取图30DS18B20温度传感器的程序的设计思路其中温度转换主要代码:voidconvert() { txreset(); rxwait(); delay(1); wrbyte(0xcc); wrbyte(0x44);}Read_Temperature() {xreset(); rxwait(); delay(1); wrbyte(0xcc); wrbyte(0xbe); txbuf[11]=rdbyte();//低八位 txbuf[10]=rdbyte();//高八位}3.6串口的定义3.6.1上位机串口定义3.6.2下位机串口定义NRF905工作模式控制端口中定义引脚TXEN为P01,TRX_CE为P00,PWR为P05;NRF905数据交换端口中定义MOIS为P03,MOSI用P16口,SCK为P04,CSN为P17口;nrf905状态端口AM为P02,DR为P07,CD为P06口;LED小灯用P36端口;温度DQ利用P37脚,其它的引脚见程序://-----NRF905工作模式控制端口-----sbit TXEN=P0^1;sbit TRX_CE=P0^0;sbit PWR=P0^5;//-----LED显示端口-----sbitLED=P3^6;//-----NRF905数据交换端口-----sbit MISO=P0^3;sbit MOSI=P1^6;sbit SCK=P0^4;sbit CSN=P1^7;//-----nrf905状态端口-----sbit AM=P0^2;sbit DR=P0^7;sbit CD=P0^6;//-----温度-----sbitDQ=P3^7;//-----电机控制端口-----sbit In1=P2^7;sbit In2=P2^6;sbit In3=P2^5;sbit In4=P2^4;sbit EN_A=P2^1;sbit EN_B=P2^0;4通信协议通信协议(communicationsprotocol)是指双方实体完成通信或服务所必须遵循的规则和约定。协议定义了数据单元使用的格式,信息单元应该包含的信息与含义,连接方式,信息发送和接收的时序,从而确保网络中数据顺利地传送到确定的地方。协议主要由以下三个要素组成:语法:“如
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《理想的翅膀》课件:2024年我们的健康之旅
- 2023年暑期初高中语文衔接第7课:文言语法篇实词、虚词、特殊句式
- 成大事者不拘小节的例子
- 人教版2021-2022学年七年级上学期历史期中检测试卷A卷
- 人教版小学四年级下册数学期末综合复习试卷及答案大全
- 2课件学习:2024年泵与风机在温泉行业中的应用
- 大气污染会议纪要
- 掌握Visio2024:高效办公图表绘制教程
- 四年级数学下册二乘除法的关系和乘法运算律乘除的分配律说课稿西师大版
- 2025届高考化学一轮复习规范练14原子结构化学键含解析新人教版
- 酒店预订确认函
- 2023年历史竞赛题
- 走开大黑兔“十校联赛”一等奖
- 肿瘤科运用PDCA降低癌痛患者爆发性疼痛发生率品管圈成果汇报
- 动脉血气分析采集课件
- 10KV供配电工程施工组织设计
- 《小学教育政策与法规》总资料
- 张爱玲及《金锁记》
- 云南花灯教案
- 信任五环:超级销售拜访技巧
- 2023年国家电网公司电力安全工作规程版
评论
0/150
提交评论