视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于51单片机的蓝牙小车设计
2025-09-29 08:49:27 责编:小OO
文档
内容仅为学习使用,多处摘录源于网络,请勿用于毕业论文

基于蓝牙遥控的智能小车设计与制作

 

摘要:

关键词:单片机 ;蓝牙遥控 ;PWM调速

第一章  前言----------------------------------------------------------------------4

第二章 方案比较与论证 ------------------------------------------------------5

2.1总体方案设计---------------------------------------------------------------------5

2.2蓝牙模块选择---------------------------------------------------------------------6

2.3 电机驱动模块选择--------------------------------------------------------------6

第三章 智能小车底盘结构分析 --------------------------------------------7

3.1底板设计----------------------------------------------------------------------------7

3.2 电机与底板的连接支架设计--------------------------------------------------8

3.3整体装配图-------------------------------------------------------------------------9第四章 控制系统电路设计 -------------------------------------------------10

4.1 单片机最小系统设计----------------------------------------------------------10

4.2 电机驱动电路设计-------------------------------------------------------------11

4.3  蓝牙模块设计-------------------------------------------------------------------13

4.4 电源电路设计--------------------------------------------------------------------15

4.5  电路板设计----------------------------------------------------------------------16

第五章 设计的元器件清单--------------------------------------------------16

第六章 调试结果分析 --------------------------------------------------------17

6.1 各模块功能调试----------------------------------------------------------------17

 6.2设计的总结----------------------------------------------------------------------18

参考文献-------------------------------------------------------------------------19

附 录A----------------------------------------------------------------------------20

附 录B----------------------------------------------------------------------------21

附录 C----------------------------------------------------------------------------22

第一章前言

NC

第二章 方案比较与论证

本次毕业设计主要是针对蓝牙智能小车进行分析、设计和制作。本次设计以STC C52单片机为主控芯片,实现智能小车的蓝牙遥控功能。

2.1总体方案设计

图1:系统原理框图

本小车是以STC C52芯片为主控制器。开始由手机发送蓝牙无线信号来启动小车,通过单片机与蓝牙模块输出的信号来控制小车行驶。由于成本问题,小车使用2WD驱动,造成的影响是降低了小车的平稳性;小车采用PWM脉宽调制技术实现对电机的运转驱动;这就是本设计的总体设计思路。

2.2蓝牙模块选择

    无线控制是为了能够实现对智能小车的远程遥控,使小车可以在遥控状态下代替人类完成一些危险项目。本次设计的无线控制选用蓝牙传输技术的原因可以从以下(表1)了解:

蓝牙技术红外技术WIFI技术

通信距离<100m<10m<300m
通信速率<10Mb/s<16Mb/s<11Mb/s
通信频率或波长2.4GHz0.75um-24um2.4GHz
开发难易中等
模块成本一般便宜价格较高
表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 单片机最小系统设计

单片机最小系统是本设计的控制核心模块,单片机最小系统由三部分组成:STCC52芯片部分、复位部分(由按键开关、极性电容、10K电阻组成)、晶振部分(由12M石英晶振、两个30PF的瓷片电容组成)。主要起程序的输入与控制、程序的复位、时间频率控制的作用。

其中STCC52芯片是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K字节系统可编程Flash存储器。STCC52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STCC52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。STCC52芯片具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STCC52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率35MHz,6T/12T可选。下图是STCC52单片机最小系统电路图:

图5:STCC52单片机最小系统电路图

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板,而是直接使用面包板对应电路原理图进行元器件的焊接和接线。

第五章 设计的元器件清单

参数数量参数数量参数数量
STCC52芯片1HC-06蓝牙模块

1排针若干
40P底座1电源开关1杜邦线20
30PF瓷片电容2按键开关118650电池盒1
10U/25V电解电容111.0592HZ晶振118650电池3
10K电阻5LED灯15mm铜柱6
1K电阻1小车底盘130mm铜柱2
L298N电机驱动模块16*7cm面包板1螺母、螺钉若干
表2:元器件清单

注:由于HC-06蓝牙模块、L298N电机驱动模块电路复杂,并且市面上有焊接好的成品模块,故而直接使用成品模块。 

第六章 调试结果分析

6.1 各模块功能调试

蓝牙模块的功能调试:

蓝牙模块要实现与控制软件之间的数据传输,首先需要确定蓝牙模块与控制软件之间的波特率、传输指令是否切合,不切合的通过发送命令修改,然后是检测蓝牙模块是否有将对应的指令传输送往单片机。

电机驱动模块的功能调试:

L298N电机模块需要测试5V电压输出口电压值,A、B使能通道有无电平输出,四个IN口的电平检测,电机信号输出接口信号输出情况。测试出现问题时检测模块元器件焊接情况、电源输入情况以及与各模块的接线情况。

单片机最小系统功能调试:

单片机最小系统需要检测晶振输出时钟信号值,复位电路的测试,IO口的电平输出值,单片机与蓝牙模块的信号传输,单片机与电机驱动模块的信号传输;当单片机无法接收到蓝牙模块传输的信号时,检测晶振模块的时钟频率;当单片机接收到蓝牙模块传输信号而电机驱动模块无收到信号时,检测单片机IO口电压值。

 6.2设计的总结

参考文献

附 录A

图12:蓝牙小车电路原理图

附录B

图13:整车实物图

附录C

设计程序:程序仅为参考,具体设计请自行编写

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

#include "reg51.h"

sbit motor_control_1 = P0^0;//左轮前进

sbit motor_control_2 = P0^1;//左轮后退

sbit motor_control_3 = P0^2;//右轮前进

sbit motor_control_4 = P0^3;//右轮后退

unsigned char ucBluetoothData = 230;

void initial_myself();

void initial_peripheral();

void T0_time();

void usart_service(void);

void delay_long(unsigned int uiDelayLong);

void go_forward(void);//前进

void fall_back(void);//后退

void turn_left(void);//左转

void turn_right(void);//右转

void stop();

void main()

{

        initial_myself();

        delay_long(100);

        initial_peripheral();

        while(1)

        {

                usart_service();

        }

}

//串口服务函数

void usart_service()

{      

                switch(ucBluetoothData)

                {

                      case 0x41:  //case 0x04://前进

                                ucBluetoothData = 0x02;

                                go_forward();

                                break;

                    case 0x42  : //  case 0x05://左转

                            ucBluetoothData = 0x02;

                                turn_left();

                                break;

                    case 0x44: //  case 0x06://右转

                                ucBluetoothData = 0x02;

                                turn_right();

                                break;

                     case 0x45 : //  case 0x07://后退

                                ucBluetoothData = 0x02;

                                fall_back();

                                break;

                     case 0x43 : //  case 0x01:

                                ucBluetoothData = 0x02;

                                stop();        

                                break;

                       /* case 0x00:

                                ucBluetoothData = 0x02;

                                stop();

                                break;    */

                        default : 

                                break;

        

                }

                delay_long(100);

}

void initial_myself()

{

        TMOD = 0x01;//设置定时器0为工作方式1

        TH0 = 0xff;

        TL0 = 0x28;

        //配置串口

        SCON = 0x50;

        TMOD = 0x21;

        TH1 = TL1 = 0xfd;

        IP = 0x10;

        stop();                 

        PWM1 = 1;

        PWM2 = 1;

}

void initial_peripheral()

{

        EA = 1;//开总中断

        ES = 1;//允许串口中断

        ET0 = 1;//允许定时器中断

        TR0 = 1;//启动定时器

        TR1 = 1;//

}

void receive(void) interrupt 4

{

        if(RI == 1)

        {

                RI = 0;

                ucBluetoothData = SBUF;

        }

}

void delay_long(unsigned int uiDelayLong)

{

        unsigned int i;

        unsigned int j;

for(i = 0 ; i < uiDelayLong ; i++)

        {

for(j = 0; j < 500; j++);

        

        }

}

void stop()//停止

{

        

        motor_control_1 = 0;

        motor_control_2 = 0;

        motor_control_3 = 0;

        motor_control_4 = 0;

}

void fall_back()

{

       

        motor_control_1 = 0;

        motor_control_2 = 1;

        motor_control_3 = 0;

        motor_control_4 = 1;

}

void go_forward()

{

        

        motor_control_1 = 1;

        motor_control_2 = 0;

        motor_control_3 = 1;

        motor_control_4 = 0;

}

void turn_left()//左转

{

       

        motor_control_1 = 0;

        motor_control_2 = 0;

        motor_control_3 = 1;

        motor_control_4 = 0;

        

}

void turn_right()//右转

{

       

        motor_control_1 = 1;

        motor_control_2 = 0;

        motor_control_3 = 0;

        motor_control_4 = 0;

}下载本文

显示全文
专题