基于51单片机蓝牙小车设计说明书Word文档下载推荐.docx
《基于51单片机蓝牙小车设计说明书Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于51单片机蓝牙小车设计说明书Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
红外技术
WIFI技术
通信距离
<
100m
10m
300m
通信速率
10Mb/s
16Mb/s
11Mb/s
通信频率或波长
2.4GHz
0.75um-24um
开发难易
中等
易
难
模块成本
一般
便宜
价格较高
表1:
无线技术的对比
通过表格可以看出,他们在近距离通讯领域都可以提供可靠的通信服务,但是同时他们的应用有着各自的技术架构的限制。
在以上的三种技术中,红外技术的通信距离过短,不太适合使用;
而WIFI技术通信距离足够,但开发难度以及成本较高;
所以我最终选择了蓝牙无线传输技术。
2.3电机驱动模块选择
由于单片机的驱动能力有限,并不足以直接驱动电机转动,为了实现对电机的驱动,就需要在单片机与电机之间增加高驱动力的电路。
本设计电路就是为了解决这一问题而选择合适的电机驱动模块。
市面上的驱动模块有很多种类,如以L293D芯片为主体的驱动模块和以L298N芯片为主体的驱动模块,考虑到各模块之间的协调性,我最终选择了以L298N芯片为主体的驱动模块。
第三章智能小车底盘结构分析
在本次设计中,小车使用二轮驱动。
二轮驱动式的结构中因为后轮的驱动力大,而前轮以固定式的万向轮代替,,因此本次设计的车子底盘与四轮驱动的小车相比更易发生方向偏移。
而且二轮驱动的车子由于前端重量较轻,小车启动时前端容易出现腾空现象。
但相对四轮驱动式的小车而言,二轮驱动式的小车耗电更小,持续工作时间更长。
从整体的性能来看四轮驱动式结构的优势是比较明显的。
但是为了控制制作成本,本次设计还是决定使用二轮驱动的小车底盘。
3.1底板设计
图2:
二轮驱动小车底板图
底板是用来支撑车体的主要部件。
同时也是用来固定车子零部件的,底板上主要有红外传感器安装槽、超声波传感器安装孔、电机定位槽和走线孔,其余的槽孔是用来留在日后扩展用的。
每个器件的安装位置如图2所示。
由于本次设计并没有使用到上述两种传感器,所以对底板的结构无需太注重。
3.2电机与底板的连接支架设计
图3:
电机支架图
电机支架主要是用来将电机固定在底板上的,本次选择的固定支柱是由铝金属制作成的;
辅助零件有:
M3*20螺钉、M3*5螺钉以及M3螺母。
连接时每个电机只需固定在支柱的侧面孔上,接着把支柱的顶端用螺钉与小车底板固定即可把电机卡住在小车底板上。
3.3整体装配图
图4:
整体装配图
整体车体由车盘,电机轮子,电机,电机支架,测速码盘,万向轮等组成。
在本次的智能小车设计中,采用了三轮式结构,前轮采用万向轮牵引,左右分别为驱动轮。
虽然三轮式的结构简单易于操作,但是在小车行驶过程中的稳定性不足,且由于万向轮的径向阻力非常小,所以很容易偏向。
但是因为成本问题,我还是选择了使用这一结构。
第四章控制系统电路设计
一个单片机应用系统的硬件电路设计包含有两部分内容:
一是系统扩展,即单片机内部的功能单元,如ROM﹑RAM﹑I/O口﹑定时/记数器﹑中断系统等能不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路。
二是系统配置,既按照系统功能要求配置外围设备,在本设计中电机驱动模块﹑蓝牙模块都需要设计合适的接口电路。
4.1单片机最小系统设计
单片机最小系统是本设计的控制核心模块,单片机最小系统由三部分组成:
STC89C52芯片部分、复位部分〔由按键开关、极性电容、10K电阻组成、晶振部分〔由12M石英晶振、两个30PF的瓷片电容组成。
主要起程序的输入与控制、程序的复位、时间频率控制的作用。
其中STC89C52芯片是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。
STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
STC89C52芯片具有以下标准功能:
8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,3个16位定时器/计数器,4个外部中断,一个7向量4级中断结构〔兼容传统51的5向量2级中断结构,全双工串行口。
另外STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
最高运作频率35MHz,6T/12T可选。
下图是STC89C52单片机最小系统电路图:
图5:
STC89C52单片机最小系统电路图
4.2电机驱动电路设计
本设计是采用了L298N电机驱动模块来驱动减速电机工作;
L298N是ST公司生产的一种高电压、大电流电机驱动芯片。
该芯片采用15脚封装。
主要特点是:
工作电压高,最高工作电压可达46V;
输出电流大,瞬间峰值电流可达3A,持续工作电流为2A;
额定功率25W。
内含两个H桥的高电压大电流全桥式驱动器,可以用来驱动直流电动机和步进电动机、继电器线圈等感性负载;
采用标准逻辑电平信号控制;
具有两个使能控制端,在不受输入信号影响的情况下允许或禁止器件工作有一个逻辑电源输入端,使内部逻辑电路部分在低电压下工作;
可以外接检测电阻,将变化量反馈给控制电路。
图6:
L298N电机驱动模块电路原理图
图7:
L298N电机驱动模块实物图
从〔图6、〔图7可以看出L298N电机驱动模块具有12V电源输入、5V电源输出、四单片机IO控制输入接口和两电机信号输出接口;
12V电源输入提高了本次设计的电源模块电压设计,但同时带来的好处是相对5V电源输入的电源使用持续时间增长,5V电源输出口可以给单片机、蓝牙模块供电,该模块的芯片加装了散热片,增加了芯片的持续工作时间。
4.3蓝牙模块设计
蓝牙模块主要是为了实现上位机与下位机的数据传输,本设计是通过蓝牙转串口模块,实现上位机与下位机的无线通讯功能,所以本质上使用的是单片机串口通信。
串行通讯的特点是:
数据按位顺序传送,最少仅需一根传输线即可完成,成本低但传送速度慢。
串行通讯的距离可以从几米到几千米。
根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。
信息只能单向传送为单工;
信息能双向传送但不能同时双向传送称为半双工;
信息能够同时双向传送则称为全双工。
串行通讯又分为异步通讯和同步通讯两种方式。
在单片机中,主要使用异步通讯方式。
本次设计选择的蓝牙模块是HC-06模块,HC-06是一款高性能的从机蓝牙串口模块,可以同各种带蓝牙功能的电脑、蓝牙主机、手机、PDA、PSP等智能终端配对,HC-06蓝牙模块支持很大的波特率范围:
4800~1382400,并且模块兼容5V或3.3V单片机系统,使用非常灵活、方便。
图8:
HC-06模块实物图
图9:
HC-06模块与单片机连接示意图
从〔图8、〔图9可以看出模块与单片机连接最少只需要4根线即可:
VCC、GND、TXD、RXD,VCC和GND用于给模块供电,模块TXD和RXD则连接单片机的RXD和TXD即可。
设计制作完成后需要串口通讯软件与HC-06蓝牙模块连接控制信号的输出,控制软件请自己网上找。
。
图10:
蓝牙控制软件
4.4电源电路设计
本次作品的电源电路设计模块相对简单,由于前面介绍L298N电机驱动模块时提及过该模块是12V电源输入供电的,加上从〔图6的电路图中可以看出,L298N电机驱动模块是具有稳压模块的,所以本次的电源电路不需要再设计稳压电路,只要符合12V供电即可。
通过对比,我最终选择以三节18650电池〔注:
一节18650电池电压值为3.7V串联组成11.1V的近似12V电压值供电电源。
18650电池是锂离子电池的鼻祖--日本SONY公司当年为了节省成本而定下的一种标准性的锂离子电池型号,其中18表示直径为18mm,65表示长度为65mm,0表示为圆柱形电池。
常见的18650电池分为锂离子电池、磷酸铁锂电池。
选择18650电池的优势是该电池可以循环充放电,18650电池寿命理论为循环充电1000次。
由于单位密度的容量很大,所以大部份用于笔记本电脑电池,除此之外,因18650在工作中的稳定性能非常好,广泛应用于各大电子领域:
常用于高档强光手电、随身电源,无线数据传输器,电热保暖衣、鞋,便携式仪器仪表,便携式照明设备,便携式打印机,工业仪器,医疗仪器等。
所以本设计使用18650电池是非常合理的。
图11:
18650电池实体图
4.5电路板设计
一个产品的电路板设计步骤流程应该为:
电路原理图设计→生成初始PCB图→PCB布局→布线→布线优化和丝印→网络和DRC检查和结构检查→制做成板。
本次设计为了节约成本并没有制作PCB板,而是直接使用面包板对应电路原理图进行元器件的焊接和接线。
第五章设计的元器件清单
参数
数量
STC89C52芯片
1
HC-06蓝牙模块
排针
若干
40P底座
电源开关
杜邦线
20
30PF瓷片电容
2
按键开关
18650电池盒
10U/25V电解电容
11.0592HZ晶振
18650电池
3
10K电阻
5
LED灯
5mm铜柱
6
1K电阻
小车底盘
30mm铜柱
L298N电机驱动模块
6*7cm面包板
螺母、螺钉
表2:
元器件清单
注:
由于HC-06蓝牙模块、L298N电机驱动模块电路复杂,并且市面上有焊接好的成品模块,故而直接使用成品模块。
第六章调试结果分析
6.1各模块功能调试
蓝牙模块的功能调试:
蓝牙模块要实现与控制软件之间的数据传输,首先需要确定蓝牙模块与控制软件之间的波特率、传输指令是否切合,不切合的通过发送命令修改,然后是检测蓝牙模块是否有将对应的指令传输送往单片机。
电机驱动模块的功能调试:
L298N电机模块需要测试5V电压输出口电压值,A、B使能通道有无电平输出,四个IN口的电平检测,电机信号输出接口信号输出情况。
测试出现问题时检测模块元器件焊接情况、电源输入情况以及与各模块的接线情况。
单片机最小系统功能调试:
单片机最小系统需要检测晶振输出时钟信号值,复位电路的测试,IO口的电平输出值,单片机与蓝牙模块的信号传输,单片机与电机驱动模块的信号传输;
当单片机无法接收到蓝牙模块传输的信号时,检测晶振模块的时钟频率;
当单片机接收到蓝牙模块传输信号而电机驱动模块无收到信号时,检测单片机IO口电压值。
6.2设计的总结
参考文献
附录A
P1.0/T2
P1.1/T2EX
P1.2
P1.3
4
P1.4
P1.5
P1.6
7
P1.7
8
RST
9
P3.0/RxD
10
P3.1/TxD
11
P3.2/INT0
12
P3.3/INT1
13
P3.4/T0
14
P3.5/T1
15
P3.6/WR
16
P3.7/RD
17
XTAL2
18
XTAL1
19
VSS
P2.0/A8
21
P2.1/A9
22
P2.2/A10
23
P2.3/A11
24
P2.4/A12
25
P2.5/A13
26
P2.6/A14
27
P2.7/A15
28
PSEN
29
ALE
30
EA/VPP
31
P0.7/AD7
32
P0.6/AD6
33
P0.5/AD5
34
P0.4/AD4
35
P0.3/AD3
36
P0.2/AD2
37
P0.1/AD1
38
P0.0/AD0
39
VCC
40
U1
STC89C52
Y?
XTAL
30pf
C?
Cap
S?
SW-PB
0.1uF
CapPol1
10K
R?
Res2
HC-06
À
¶
Ñ
Ä
£
¿
é
+5V
GND
TXD
RXD
IN1
IN2
IN3
IN4
M-A2
M-A1
M-B1
M-B2
L298N
µ
ç
»
ú
Ø
Ö
Æ
+12V
+11.1V
18650
M
M-A
Motor
M-B
图12:
蓝牙小车电路原理图附录B
图13:
整车实物图附录C
设计程序:
程序仅为参考,具体设计请自行编写
/********************************************************/
#include"
reg51.h"
sbitmotor_control_1=P0^0;
//左轮前进
sbitmotor_control_2=P0^1;
//左轮后退
sbitmotor_control_3=P0^2;
//右轮前进
sbitmotor_control_4=P0^3;
//右轮后退
unsignedcharucBluetoothData=230;
voidinitial_myself<
>
;
voidinitial_peripheral<
voidT0_time<
voidusart_service<
void>
voiddelay_long<
unsignedintuiDelayLong>
voidgo_forward<
//前进
voidfall_back<
//后退
voidturn_left<
//左转
voidturn_right<
//右转
voidstop<
voidmain<
{
initial_myself<
delay_long<
100>
initial_peripheral<
while<
1>
{
usart_service<
}
}
//串口服务函数
{
switch<
ucBluetoothData>
case0x41:
//case0x04:
ucBluetoothData=0x02;
go_forward<
break;
case0x42:
//case0x05:
turn_left<
break;
case0x44:
//case0x06:
turn_right<
case0x45:
//case0x07:
fall_back<
case0x43:
//case0x01:
stop<
/*case0x00:
*/
default:
TMOD=0x01;
//设置定时器0为工作方式1
TH0=0xff;
TL0=0x28;
//配置串口
SCON=0x50;
TMOD=0x21;
TH1=TL1=0xfd;
IP=0x10;
PWM1=1;
PWM2=1;
EA=1;
//开总中断
ES=1;
//允许串口中断
ET0=1;
//允许定时器中断
TR0=1;
//启动定时器
TR1=1;
//
voidreceive<
interrupt4
if<
RI==1>
RI=0;
ucBluetoothData=SBUF;
unsignedinti;
unsignedintj;
for<
i=0;
i<
uiDelayLong;
i++>
j=0;
j<
500;
j++>
//停止
motor_control_1=0;
motor_control_2=0;
motor_control_3=0;
motor_control_4=0;
motor_control_2=1;
motor_control_4=1;
motor_control_1=1;
motor_control_3=1;