版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
蓝牙智能小车系统的硬件和软件设计案例目录TOC\o"1-3"\h\u22397蓝牙智能小车系统的硬件和软件设计案例 113136第1章系统硬件设计 1258731.1单片机最小系统 1299731.1.1STC89C52简介 2139241.1.2基于STC89C52的最小系统搭建 3150591.2电机驱动模块选择 3161651.3USB通信接口电路设计 4320651.1.1USB转接芯片的选择 457541.1.2硬件电路设计 5212171.4单片机和蓝牙通信模块的接口电路设计 6189991.2.1UART接口介绍 6117181.2.2UART通信协议 7309301.2.3蓝牙模块串口 8325591.2.4BT052.0蓝牙模块的UART口实现 970471.2.5单片机STC89C52和CC2541的接口电路图 10180211.5电机的选择 1023431第2章系统软件设计 12231972.1智能小车控制程序 12253062.2MLT-BT052.0蓝牙模块串口设计 18140412.2.1MLT-BT052.0蓝牙模块初始化 18156562.2.2MLT-BT052.0蓝牙模块配置 1825732.3串行通信模块 2740542.1.1串行口的初始化 27218222.1.2串行口数据的收发 29第1章系统硬件设计1.1单片机最小系统本系统是以89C52内核单片机为核心主控芯片,考虑到程序代码占用的空间可能较大,于是采用了芯片内部空间较大的STC89C52单片机。基于STC89C52的单片机最小系统一般由主控芯片、时钟振荡电路(晶振电路)、复位电路,本系统是基于STC89C52主控芯片的蓝牙遥控系统,所以建立一个稳定、可靠和具有一定抗干扰能力的最小的系统很重要。1.1.1STC89C52简介1.STC89C52的主要特点STC89C52单片机使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STC89C52主要特点如下:增强型8051单片机,6时钟/机器周期和12时钟/机器周期可以任意选择,指令代码完全兼容传统8051。工作电压:5.5V~1.3V工作频率范围:0~40MHz,相当于普通8051的0~80MHz,实际工作频率可达48MHz用户应用程序空间为8K字节片上集成512字节RAM通用I/O口(32个),复位后为:P1/P2/P3是准双向口/弱上拉,P0口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(RxD/P1.0,TxD/P1.1)直接下载用户程序,数秒即可完成一片具有EEPROM功能共3个16位定时器/计数器。即定时器T0、T1、T2外部中断4路,下降沿中断或低电平触发电路,PowerDown模式可由外部中断低电平触发中断方式唤醒通用异步串行口(UART),还可用定时器软件实现多个UART工作温度范围:-40~+85℃(工业级)/0~75℃(商业级)PDIP封装2.STC89C52引脚定义说明STC89C52单片机有40个引脚,其引脚示意及功能分类如图3-1所示。图3-1STC89C52引脚图其中:VCC和GND分别为电源引脚和接地引脚,RST为单片机的复位引脚;PSEN是片选信号引脚,当单片机与外部芯片连接时,作为单片机访问外部芯片的通知信号使能;XTAL1和XTAL2分别为外接晶振的输入和输出引脚,单片机P0口可作为通用I/O口,也可以作为单片机系统的地址/数据线使用。它是真正的双向口。P1口是通用I/O口,P2口除了通用I/O口外,也以可作为地址线接口。P3口:可实现通用I/O口和第二功能口。1.1.2基于STC89C52的最小系统搭建本系统是基于STC89C52单片机的最小系统,最小系统一般由主控芯片、时钟振荡电路(晶振电路)、复位电路等外围电路组成。1.2电机驱动模块选择 由于单片机的驱动的能力有限,直接驱动电机的能力是不够的,为了实现电机的驱动,就需要在单片机与电机之间增加高驱动力的电路。本设计电路就是为了解决这一问题而选择合适的电机驱动模块。市面上有许多类型的驱动模块,例如以L293D芯片为主体的驱动模块[23]和以L298N芯片为主体的驱动模块,考虑到模块之间的协调性,我最终选择了以L298N芯片为主体的驱动模块。L298N驱动模块:使用L298N作为电机驱动芯片[24]。L298N具有高压、高电流和高响应频率的全桥驱动芯片,一片L298N可以分别控制两个直流电机,并且自带控制使能端。该电机驱动芯片有很强的驱动能力、操作简便、良好的稳定性和出色的性能。L298N的使能端可以通过外接电平控制,也可以利用单片机进行软件控制,以满足不同复杂电路的需求。此外,L298N具有很大的驱动功率,可以根据输入电压的大小来输出不同的电压和功率,从而解决了负载能力不足的问题。图3-2驱动原理图1.3USB通信接口电路设计由于下位机需要与PC端进行数据交流,所以需要进行下位机与PC端的接口设计。本次设计采用的是USB接口实现单片机和PC端的数据交流。1.1.1USB转接芯片的选择常用的USB转换芯片有CH340,PL230,FT232等等。本次设计采用的是CH340转换芯片。其特点有:1.高速USB通信;2.串口程序与Windows操作系统兼容1.带有全双工串口,内部带有收发缓存器2.电源电压为5V或1.3VCH340在单片机通信中起着重要的作用,此芯片有很多优点并且提供中文使用手册,所以本设计采用了CH340芯片作为USB转换芯片,其引脚图如图所示:图3-3CH340G引脚图它与单片机的连接框图如图3-4:图3-4CH340G连接框图1.1.2硬件电路设计CH340转换芯片和单片机的连接电路如图所示,其中CH340的TXD和RXD脚分别连接单片机的RXD和TXD引脚。CH340和单片机共用VCC和GND引脚CH340在正常工作的情况下,需要外接12Mhz的晶振电路。图3-5USB通信模块和供电连接电路图1.4单片机和蓝牙通信模块的接口电路设计STC89C52单片机有UART和SPI两种接口,MLT-BT052.0蓝牙使用RXD和TXD两线传输,考虑到传输速度的因素,STC89C52和MLT-BT052.0的连接准备用UART接口实现。1.2.1UART接口介绍UART接口作为异步串行接口,在嵌入式设计中通过UART接口可以进行主机和辅助设备的信号传输。其特点包括:使用RXD和TXD引脚实现异步数据传输;数据传输快;对电平信号没有规定;8位数据位;点对点发送数据;UART:一般由四个引脚构成:VCC:供电引脚,一般是1.3VGND:接地引脚RXD:接收数据引脚TXD:发送数据引脚1.2.2UART通信协议UART用一条传输线将数据一位位地顺序传送,以字符为传输单位,通信中两个字符间的时间间隔多少是不固定的,然而在同一个字符中的两个相邻位间的时间间隔是固定的,数据传送速率用波特率来表示。传输时序如下图3-6:图3-6UART传输时序图在UART中,信号线上共有两种状态,分别用逻辑1(高电平)和逻辑0(低电平)来区分在空闲时,数据线应该保持在逻辑高电平状态。其中各位的意义如下:起始位(StartBit):先发出一个逻辑0信号,表示传输字符的开始;数据位(DataBits):可以是5~8位逻辑0或1.如ASCII码(7位),扩展BCD码(8位)小端传输;校验位(ParityBit):数据位加上这一位后,使得1的位数应为偶数(偶校验)或奇数(奇校验);停止位(StopBit):它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平;空闲位:处于逻辑1状态,表示当前线路上没有资料传送;1.2.3蓝牙模块串口MLT-BT052.0蓝牙模块提供完整的蓝牙解决方案[25],内置2.4GHz天线,外置8MbitFlash,采用自适应跳频技术,Class2功率级别,采用蓝牙2.1+EDR(增强速率技术)版本,它向下对1.2版本兼容,较于2.0EDR简化了配对流程,增强了安全性,降低了功耗等,该芯片最高传输速率能达到3Mbps,是应用较为广泛的标准。MLT-BT052.0蓝牙模块是一个主从机一体模块,标准主控制接口(HCI)传输层可通过UART/USB实现,HCI以下的功能由MLT-BT052.0蓝牙模块实现,HCI以上的软件协议运行在主机上,二者之间的交互通过传输层实现。工作比特率可选择1200,2400,4800,9600,19200等,默认使用9600频率进行串口通信。与电脑或任何微处理器采用无线UART(通用异步收发器)串口通信,既能做主机也能做从机。HCI传输数据、事件和命令,以分组的方式进行传输,只有数据传输是双向的,事件分组由主机控制器发向主机,命令分组只能从主机发向主机控制器。Arduino板的数字引脚0,1和蓝牙模块通过UART串口通信[26],ATmega328提供UARTTTL(5V)串行通信,数据格式和传输速率是可配置的。而要使用软件模拟UART串口通信,需要改变其它引脚的中断程序来处理外部设备发送的RX信号。Arduino是该蓝牙模块的主机[],其数字引脚0和1用于串行信号传输,0为接收,1为发送数据。Arduino的ATmega16U2提供串行USB接口,在连接计算机时显示为一个虚拟COM接口,ArduinoIDE的串口监视器可以监视该串口上传输的数据,但传输数据的时候会默认使用1、0号引脚与计算机传输数据。因此蓝牙模块和PC机同时占用串口引发冲突,为了避免这种干扰带来的麻烦,可以通过软件模拟串口定义另外两个数字引脚作为蓝牙的接口。UART支持全双工串行通信,通过两条信号线(TXD,RXD)完成数据传输,线上有两种状态,高电平和低电平,空闲时为高。数据传输的过程是首先发送起始位,将数据线拉低,提示接收器已经发起数据传输。接着传输一个字节即8-bit数据(也可以是6-bit或7-bit),低位在前,高位在后,第九位是奇偶校验位(一般没有这位),最后一位是停止位,将数据线拉高,表示一笔传输结束。数据传输位格式见表3-2。表3-2UART串行数据位Start01234567(P)Stop起始位数据位奇偶校验位停止位UART硬件的时钟速度通常8倍于传输速率,通常使用“双缓冲机制”来读取数据,接收寄存器和主机之间的FIFO保证当控制器在处理一个缓冲数据时,可以继续读取线上数据从而不会丢失数据[27]。因此软件采用模拟串口方式实现通信,根据串行协议注册某个引脚的中断处理函数用于将数据读入缓存中,发送数据或从引脚输出,根据协议的位率,来控制每个信号的保持时间。软件用Serial函数控制Arduino与其他设备的串行通信[28],接口分别是Arduino板的数字端口0(RX)和1(TX),串行接口指的是USB接口或蓝牙模块的UART接口。MLT-BT052.0蓝牙模块与Arduino板接口:VCC接1.3V端口,发送和接收(TX、RX)端连接两个数字引脚(为避免与USB接口冲突,D1和D2除外),在软件SoftwareSerial库里定义发送或是接收。1.2.4BT052.0蓝牙模块的UART口实现本设计使用的是MLT-BT052.0蓝牙模块,该模块使用的是CC2541芯片,串行通信的接口RXD和TXD和单片机进行数据传输,因此采用下图的连接方式:图3-8BT05和STC89C52连接原理图STC98C52有专门进行UART串行通信的引脚分别是P1.0/RXD和P1.1/TXD组成的通信接口叫做串口,通过发送和接收二进制数据位进行数据的传输,当传输开始时拉低电平(逻辑0)开始发送数据中间八个数据位和奇偶校验传输完毕时拉高电平(逻辑1)结束传输。1.2.5单片机STC89C52和CC2541的接口电路图图3-8MLT-BT052.0模块应用电路图1.5电机的选择由于直流电机的控制方法比异步电机简单,所以本设计采用双直流电机。只要给电机的两条控制线加适当的电压,就可以使电机转动。在正常工作电压范围内,电压越高,直流电机的转速越高。直流电机调速有两种方法:一种是直接调节电压,另一种是通过PWM调节速度[29]。PWM调速就是将直流电动机两端的电压波形变成矩形波。改变矩形波的占空比可以实现电压的变化,从而实现电机转速的变化。为了更适合智能小车的设计要求这里选用了塑料齿轮减速电机。根据小车的整体设计要求需要选择两个塑料齿轮减速电机负责小车的动力。与驱动模块连接如图3-12。图3-10塑料齿轮减速电机FGD表3-3减速电机参数表产品名:塑料齿轮减速电机减速比:1:48电压范围:DC3V-12V额定电压3V6V7.2V电流≤170mA≤230mA≤250mA转速115±10%转/分255±10%转/分320±10%转/分扭矩~1kgf.cm~1.5kgf.cm~1.8kgf.cmG图3-11电机安装图图3-12电机连接驱动图第2章系统软件设计软件部分的设计采用模块化的方法,将复杂的程序分成不同的模块,然后分别对不同的模块进行设计。这样的好处是设计的思路更清晰,程序的结够更清楚,程序易于读写和验证,程序的可靠性也得到了提高。目前52系列单片机主要采用汇编语言和C语言两种编程语言。与机器最接近的语言是汇编语言,它经常被用来编写与系统硬件相关的程序,如访问IO它是最快、最有效的语言之一。当程序的空间和时间要求很高时,使用汇编语言是最好的选择。然而,汇编语言也有其自身的缺点,如开发周期长、浮点操作处理复杂、程序可移植性差等。在编程过程中,C语言编程的思想被称为模块化编程[30]。有时,为了有效地完成任务,任务被划分为数千个独立但仍然相关的模块。这些模块使得任务相对简单,外部数据交换相对简单,易于编写,易于检测,易于读取和维护。本设计使用C语言编写程序。模块化结构程序的设计可以使系统软件易于调试和优化,也可以使他人更好地理解和阅读系统程序设计。因此,在软件设计中,采用模块化的程序结构来设计软件,使程序更加直观,易于理解。程序的主要模块有:主程序、定时溢出中断服务程序、外部中断服务程序。随着单片机开发技术的不断发展,从一般使用汇编语言到逐步使用高级语言开发,单片机的开发软件也在不断开发。Keil软件是MCS-51系列单片机开发中最流行的软件,近年来各仿真器厂商纷纷宣布全力支持Keil软件[31]。Keil提供了一个完整的开发方案,包括C编译器、宏汇编、连接器、库管理和强大的仿真调试器。这些部分通过集成开发环境(uVision)进行组合。掌握这个软件的使用是非常重要的这对于使用51系列单片机的学者来说是非常必要的。如果他们使用C语言编程,Keil几乎是唯一的选择。即使只使用汇编语言而不是C语言进行编程,其方便易用的集成环境和功能强大的软件仿真和调试工具也能做到事半功倍。2.1智能小车控制程序开始BT052.0开始BT052.0初始化启动接收正确地址和PIN读取接收到的数据将数据装入小车判断数据是否传送完成BT052.0配置模式小车以I/O口电平识别对应的动作NYYN图4-1控制系统原理图小车需要定义的中间变量以及常量比较多通常使用主文件和库文件分开定义(main.c和QX_A11.h,见附录A)小车控制程序实现如下:实现小车左转:voidleft_run(unsignedcharLeftSpeed,unsignedcharRightSpeed){ pwm_left=LeftSpeed,pwm_right=RightSpeed;//设置速度 left_motor_back;//左电机后退 right_motor_go;//右电机前进 }实现小车右转:voidright_run(unsignedcharLeftSpeed,unsignedcharRightSpeed){ pwm_left=LeftSpeed,pwm_right=RightSpeed;//设置速度 right_motor_back;//右电机后退 left_motor_go;//左电机前进}实现小车后退:voidback_run(unsignedcharLeftSpeed,unsignedcharRightSpeed){ pwm_left=LeftSpeed,pwm_right=RightSpeed;//设置速度 right_motor_back;//右电机后退 left_motor_back;//左电机后退}实现小车前进:voidforward(unsignedcharLeftSpeed,unsignedcharRightSpeed){ pwm_left=LeftSpeed,pwm_right=RightSpeed;//设置速度 left_motor_go;//左电机前进 right_motor_go;//右电机前进}实现无线遥控函数:voidRemote(){ switch(UartData) { case0X01: stop(); break; //停车 case0X02: forward(RemoteLeftSpeed,RemoteRightSpeed); break; //前进 case0X03: back_run(RemoteLeftSpeed,RemoteRightSpeed); break; //后退 case0X04: left_run(RemoteLeftSpeed,RemoteRightSpeed); break; //左转 case0X05: right_run(RemoteLeftSpeed,RemoteRightSpeed); break; //右转 case0X08: beep=0; break;//鸣笛 case0X09: beep=1; break;//停止鸣笛 default:stop(); break; } }实现小车的PWM输出:voidLoadPWM(void){ if(pwm_left>PWM_HIGH_MAX) pwm_left=PWM_HIGH_MAX; //如果左输出写入大于最大占空比数据,则强制为最大占空比。 if(pwm_left<PWM_HIGH_MIN) pwm_left=PWM_HIGH_MIN; //如果左输出写入小于最小占空比数据,则强制为最小占空比。 if(pwm_right>PWM_HIGH_MAX) pwm_right=PWM_HIGH_MAX; //如果右输出写入大于最大占空比数据,则强制为最大占空比。 if(pwm_right<PWM_HIGH_MIN) pwm_right=PWM_HIGH_MIN; //如果右输出写入小于最小占空比数据,则强制为最小占空比。 if(pwm_val_left<=pwm_left) Left_moto_pwm=1;//装载左PWM输出高电平时间 elseLeft_moto_pwm=0; //装载左PWM输出低电平时间 if(pwm_val_left>=PWM_DUTY) pwm_val_left=0; //如果左对比值大于等于最大占空比数据,则为零 if(pwm_val_right<=pwm_right) Right_moto_pwm=1;//装载右PWM输出高电平时间 elseRight_moto_pwm=0; //装载右PWM输出低电平时间 if(pwm_val_right>=PWM_DUTY) pwm_val_right=0; //如果右对比值大于等于最大占空比数据,则为零}实现定时器的初始化:voidTimer0_Init(void){ TMOD|=0x02;//定时器0,8位自动重装模块 TH0=164; TL0=164;//11.0592M晶振,12T溢出时间约等于100微秒 TR0=1;//启动定时器0 ET0=1;//允许定时器0中断 EA =1;//总中断允许 }串口的初始化:voidUartInit(void) //9600bps@11.0592MHz{ SCON|=0x50; //SCON:模式1,8-bitUART,使能接收 T2CON|=0x34;//设置定时器2为串口波特率发生器并启动定时器2 TL2=RCAP2L=(65536-(MAIN_Fosc/32/BAUD));//设置波特率 TH2=RCAP2H=(65536-(MAIN_Fosc/32/BAUD))>>8; ES=1; //打开串口中断}定时器的中断函数:voidtimer0_int(void)interrupt1{ pwm_val_left++; pwm_val_right++; LoadPWM();//装载PWM输出}实现串口的中断函数:voidUART_ISR()interrupt4{ if(RI) //判断是接收中断产生 { RI=0; //标志位清零 UartData=SBUF;//读入缓冲区的值 if((UartData>=51)&&(UartData<=150))//左电机调速0~100个档位手机端软件进行调节 RemoteLeftSpeed=(UartData-50)*2; //把51~150映射到2~200 if((UartData>=151)&&(UartData<=250))//右电机调速0~100个档位手机端软件进行调节 RemoteRightSpeed=(UartData-150)*2; //把151~250映射到2~200 }} 具体函数实现见附录A,以上完成了蓝牙小车的软件系统的设计。2.2MLT-BT052.0蓝牙模块串口设计2.2.1MLT-BT052.0蓝牙模块初始化MLT-BT052.0蓝牙模块与PC端连接需要连接USB转TTL接口同理选择《第三章1.1.1》所选CH340G芯片。模块通过USB转接口连接PC端,模块指示灯闪烁红灯表示连接成功。按住MLT-BT052.0蓝牙模块上的复位键,再接通电源,发现指示灯缓慢闪灭,表示进入AT指令模式(此时初始化完成默认波特率为9600)。2.2.2MLT-BT052.0蓝牙模块配置MLT-BT052.0蓝牙模块拥有特有的AT指令集来配置,打开串口助手选择串口3打开发送AT测试蓝牙模块,响应OK则蓝牙模块正常运行如下图4-2;图4-2蓝牙测试通过发送AT+VERSION获得软件版本号如图4-3;图4-3获取软件版本号从表4-1得知发送AT+BAUD4设置串口波特率为9600如图4-4;表4-1设置/查询波特率图4-4设置波特率为9600从表4-2得知发送AT+ADVI0设置广播间隔为100ms如图4-5。表4-2设置/查询-广播间隔图4-5设置广播频率从表4-3得知发送AT+POWE2设置模
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六一节汇演活动
- 鲁迅教育思想探析
- 健康教育体系构建与实施策略
- 广东省广州市白云区2024-2025学年八年级上学期期末学业质量诊断调研地理试卷(含答案)
- 2026颅内占位护理查房
- 2026血液透析并发症护理解读
- 官兵心理健康教育体系构建
- 家庭教育实施路径与方法体系
- 大一学期活动总结
- 教师教育课件设计与实施
- 备战2026年高考地理考试易错题(新高考)人文地理选择题50题专练(原卷版)
- 2025年赣州市红色文化知识竞赛考试题库150题(含答案)
- 慢病防治课题申报书模板
- DBJT15-201-2020 广东省绿色建筑设计规范
- 【《鼓式制动器的结构设计及三维建模分析》14000字(论文)】
- 海淀区2025年初三二模化学试卷及答案
- 建筑材料交货期保障措施
- DB41∕T 2787-2024 露天矿山生态修复遥感监测技术规范
- JG/T 270-2010工业构筑物水泥基耐磨材料
- T/CBMCA 039-2023陶瓷大板岩板装修镶贴应用规范
- 2025四川爱众集团第一批次招聘10人笔试参考题库附带答案详解
评论
0/150
提交评论